章节注意点(1~6)

  1. 和其他很多语言一样,在C语言中两个整数做除法运算,结果还是整数. (10/4=2 而不是 2.5)
  1. 同上 (10.0/4) 的运算过程中会先提示4的数据类型(10.0/4.0),然后结果 2.5 ,数据类型的隐式提升.
  1. 格式化输出函数 printf()
    和 scanf() 一样,C语言本身是不具有 输入输出函数的,这两个函数都是调用的系统函数库。
  • 基本语法: printf(' 格式化输出参数 ' , 输出参数1 , ... , 输出参数n )
  • int - %d
  • float - %f
  • double - %lf
  • printf(“精确到小数点后9位的圆周率是:%11.9f\n”, d);
  1. 常用数学函数 使用时加上 #include <math.h>
  • 平方根函数 sqrt(x)
  • 绝对值函数 fabs(x)
  • 幂函数 pow(x,n)
  • 指数函数 exp(x) e^x
  • 底数函数 log(x )
  1. 时刻注意数据类型的变化,如参考下列程序的运行结果. **他正确的运算结果必定是一个浮点数,如果使用 1 / (2*2-1) = 1 / 3 , 两个整数相除 结果必定会被被程序处理成整数,然后被float存储,最终结果就是0.000000
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. float res1, res2;
  5. res1 = 1.0 / (2 * 2 - 1);
  6. res2 = 1 / (2 * 2 - 1);
  7. printf("%.6f \n", res1);
  8. printf("%.6f \n", res2);
  9. return 0;
  10. }
  11. // 0.333333
  12. // 0.000000
  1. 字符型 数据的输入和输出
  • 对应的占位符 -> %c
  • 字符输入函数 getchar() ; ch = getchar() 从键盘接收一个输入的字符赋值给变量ch
  • 字符输出函数 putchar();
  • getchar() 和 putchar() 只能对单个字符进行处理
  1. abs、fabs、fabsf三个函数都是用来求一个数的绝对值,区别如下:
    1)int abs(int a); //处理int类型的取绝对值
    2)double fabs(double a); //处理double类型的取绝对值
    3)float fabsf(float a); //处理float类型的取绝对值
  1. %le 表示将输入的数字,村委科学计数法。
  1. C语言中的全局变量和就局部变量
  • 局部变量 : 定义在某个函数的内部,只会在这个函数的内部起作用。
  • 全局变量 : 定义在函数外部,生命周期随此文件执行结束而结束
  • main中的局部变量 : main() 函数中的局部变量在一开始就从内存数据区分配了存储单元,而其它定义的函数只有在函数调用的时候才会分配内存,函数调用结束系统自动回收分配出去的存储单元,这也可以称之为非main函数内整个局部变量的生命周期。

10.变量存储的内存分布
章节注意点(1~6) - 图1

  1. 静态变量
  • 静态表量的生命周期 : 始于第一次调用,贯串于整个文件的程序,随程序结束而结束。
  • 应为存放在静态变量区,它不会像普通的局部变量一旦调用结束就被系统回收分配的存储单元,所以在第一次调用时得到的值,在后续调用后会沿用上一次的值。
  1. C语言中的数据类型

章节注意点(1~6) - 图2
13 输入和输出
整型数据数据的输入和输出

数据类型 十进制 八进制 十六进制
int %d %o %x
long %ld %lo %lx
unsigned %u %o %x
unsigned long %lu %lo %lx

浮点型的输入和输出

函数 数据类型 格式 含义
printf float %d 以小数形式输出浮点数(保留6位小数)
printf double %e 以指数形式输出浮点数(小数点前有且仅有1位非0的数字)
scanf float %f …
scanf float %e …
scanf double %lf …
scanf double %le …

字符型的输入和输出
getchar() putchar() scanf() printf()
14 C语言中的类型转换

  • 自动类型转换
  • 非赋值运算的类型转换 (关系如下图)
    章节注意点(1~6) - 图3
    简单讲就是为了保证精度不降
  1. char a = 'A';
  2. int b = 1;
  3. double c = 1.0;
  4. a+b-c 的类型是
  5. 过程如下:
  6. 1️⃣ 计算a+b a的类型有 char 自动转换成 int ,a+b 的结果是 int 。
  7. 2️⃣ int 和 double 计算,int被自动转换成 double ,所以最后的结果是 double
  • 赋值运算的类型转换
    将 = 右侧值的类型自动转换成左侧值的类型,也就是说最终决定类型的是 定义左侧变量时候 的类型· 这可能会导致一个问题,如果右侧的精度比左侧的精度高,那么最终精度降低了。
    简单一句话,我们在赋值运算中起码要保证 左侧的精度>=右侧
short a;
char b;
long c;
c = a+b 的计算过程如下
1️⃣ a 和 b 运算都被转换成 int,然后计算结果为 int类型
2️⃣ 然后int 被转成 long 这种情况就不用担心精度 溢出的问题了。
//-------------//
如: 
int a;
a = 3.14;
最后 a 的值是 3,精度降低了........
  • 强制类型转换
    (int) a …..
  • 其实涡轮是自动类型转换还是强制类型转换,都是为了运算做准备,对数据的类型进行了·临时 的转换,并没有改变它的数据类型。了如 int i ; double(i) 的类型是 double 而i的类型还是 int.