C语言复习

来源:互联网 发布:js 设置按钮失效 编辑:程序博客网 时间:2024/06/05 20:08
一.基本概念
1.float型变量所存储的往往只是实际数值的一个近似值
2.用int计算时,对数向上取余:对a/b向上取余,则:(a+b-1)/b
3.对程序进行编译时,预处理器会把每一个宏替换为其所表示的值,宏的名字只用大写字母
4.可以把整个main函数写在一行,但是不能把整个程序写在一行,因为每条预处理指令需要单独成行
5.把字符串分成两行是非法的
6.程序编译时,编译器会把每条注释语句用一个空格来代替
7.注释不允许嵌套
8.标识符的名字可以任意长,但是编译器只会记住前31个字符,如果超过31个字符,编译器可能就无法区别他们

二.格式化输入与输出
 1.转换说明:   %m.pX
m和p都是整形常量
m表示最小字段宽度,如果显示的数值小于m,就会在字段内向右对齐,如果大于m就会自动扩展字段长度,如果加上负号就表示向左对齐
精度p的使用依赖于格式转换符X
对于%d来说,p表示了待显示的数字的最少个数,如果少了,就在那个数的前面加0
对于%e,%f来说,p表示了小数点后数字个数(默认为6)   注意对于e来说,是e前面的那个数字,例如:123.123e2   就是3位小数
对于%g来说,p表示指数或者定点十进制形式的浮点数,p说明可以显示的有效数字的最大数量,对于小数位数很多的数来说,就会采用第一种方式
2.scanf函数
如果不匹配,scanf会异常退出,不匹配的数据会留在那里等待下一次scanf匹配

第四章
  1.%要求两个操作数均为正数
          除法的结果总是向0截取的:-9%7=-2      -9/2=-4
  2.由于+=操作符的优先级和赋值运算符相等,所以a=2,b=c=1时,a*=b+c  的值为4
       所有赋值运算符的结合顺序均为从右至左所以:i+=k+=c和i+=(k+=c)相等   
   3.a=1
   printf("%d",a++);             结果为1

4.i++的结果仍为i,但是在随后会引发i的自增,何时执行自增或自减操作?P46

5.后缀自增,自减优先级高于前缀自增和自减
 前缀自增和自减的优先级和一元正负号相同
  后缀的结合性为左结合,前缀的结合性为右结合
所以:  -i++相当于-(i++)
i=2;    
j=i*i++;

6.在表达式中,既在某处访问变量的值,同时又改变变量的值是不可取的,会报错,例如:a=(b=c+2)-(c=1);

7.由实现定义的行为和未定义的行为

8.算术运算符>关系运算符>逻辑运算符>赋值运算符
所以:k+2>a+1   等价于  (k+2)>(a+1)

9.&&和||均为短路运算

10.使用#include<stdbool.h>可以这样:bool flag=true;

11.switch的常量表达式不能包含变量和函数调用 (case后面)

整数类型
1.对于没有类型的十进制常量,其类型为能表示该值的最小类型

2.转义序列包含字符转义序列和数字转义序列
    第一个有:\a \b \f \n ...
    第二个有:八进制转义序列和十六进制转义序列
           前者不一定要以0开头,后者以\x开头,不限大小写
3.putchar()     getchar()
  puts()     gets()   
strlen()  
strlwr()   
strupr()
strcmp()       将字符串逐个比较,以英文字典位置比较
strcpy()        将第二个字符串复制在第一个字符串中,覆盖第一个字符串的前几个字符
strncpy()      将第二个字符串的前n个字符复制
strcat()        将第二个字符串接在第一个字符串后面



4.C语言把强制转换类型名视为一元运算符,一元运算符的优先级高于二元运算符
     i=j*j     假如i为long  j为int 而j*j会溢出  这样是错误的
  应该写成:   i=(long)j*j
  如果写成: i=(long)(j*j)    也会溢出,因为溢出在类型转换之前就发生了

带参数的宏:
  #define MAX(x,y)            ((x)>(y)?(x):(y)) 
原创粉丝点击