这是我刷的错题,然后错题知识点归纳,每一套题一个编号段
第一套题
1、%二元运算符,左结合性,左右都为整数,不能是双精度型
2、数组【0】第一个和【4】第五个,
3、字符0为NULL
4、结构体变量定义时注意事项 typedef,struct
5、0开头八进制不能有8、0x开头十六进制、十六进制有abcdef
6、e表示以10为底数的幂数,须为整数,e前面后面都要有数字
7、标识符:字母、下划线、数字组成,,,不能关键字,不能是数字开头
8、pow(底数,次方数),abs()整数型绝对值,fabs()浮点型绝对值,exp(e的n次方)
9、getchar()一个数字一个数字的读入
10、逻辑运算符左右可为任意合法表达式
11、x是大于1的奇数 x%2 == 0 错误
12、while(a–);最后a==-1。草错了但是while还没有接受到
13、void (*pf)()指针型函数,void *pf()返回值为指针变量
14、char *s; s=“BOOK!”
15、字符串’\0’不算字符长度
16、\,\n字符串中的转字字符,分别算一个字符
17、自动变量auto,不自动赋 确定 的初值。
18、静态变量satic,不会每调用一次赋一次初值。
19、数组变量的角标
20、将值传给某个指针变量的地址,原来的值并不改变。
21、宏定义中的计算 #define f(x) xx 引用f(a+1) = a+1a+1a+1 = 3a+1;f((a+1))=44*4=64
第二套题
1、结构体变量的形参和实参,传值和传址不一样。
6、八进制数以0开头且不能包含数字8
7、等号=有右结和性,不能将一个数赋值给一个表达式。
8、a=(b=4)+(c=6),,得a = 10;+优先=
9、输入的数据格式必须与scanf()内的格式控制串完全匹配scanf("%d;%d",&a,&b);则需要输入3;5
10、#define定义的计算式直接计算 #define M N+1 #define N 5 #define f(x) (xM) == xN+1
11、feof(fp)如果读到文件末尾,eof函数值为0值,否则为0
12、素数只能被1或自身整除的数
第三套题
1、符号常量是指在程序中通过宏定义用一个符号名来代表的常量 #define
2、if条件为逻辑与表达式时,&&如果第一个为假则不再判断第二个表达式(短路原理)
3、switch语句没有break则一直运行
4、宏定义制作简单的替换
5、10^5=15异或运算,不同时为1
6、软件设计划分为高内聚低耦合、模块大小规模适当、模块的依赖关系适当
7、常量不属于标识符
第四套题
1、实型常量(浮点数)只有十进制一种
2、&&和||逻辑表达式短路的现象,前面一个表达式计算之后,可能不会计算后一个表达时
3、#include命令行可以出现在程序文件的中间
4、++P->a的效果是是成员a增加1
5、switch语句没有分号
6、#define语句也没有分号
7、指针指向字符串,sizeof(b) = 4,占四个字节
8、指针变量名->成员名,(*指针变量名).成员名,
第五套题
1、二维数组定义时行坐标不能省略
2、字符数组不能直接赋值 mark=“abc”,指针好像可以
3、指针指向一个数组首地址时,可用p[3]使用
4、*p++同一运算优先级,从右向左运算,现地址+1再取内容
5、逗号运算符,取最后一个值(a+b,b+3)
6、输入数组名时不用取地址符&
7、短路原理,a=b=c=d=m=n=2;(m=a>b)&&(n=c>d)
8、数组定义int a[2][]={{1,2},{3,4}}错误 int d[3][2]={{1,2,1},{1,2,3},{1,2,3}}错误超标了
9、数组定义的第二个[]内不能省略,如果省略将不知道有多少列了,无穷列会溢出
10、从本程序的main开始到本程序的main函数结束
第六套题
1、strcmp(s,t)比较s>t则返回大于0的数
2、int a=5,b=4,c=3; d =(a>b>c)结果为0,,,因为先运行a>b结果为1,然后1>c为假
3、for(i=9;i>=0;i–) a[i] = 10 - i;注意a[i]也是从9开始的
4、a[10]= {10,9,8,7,6,5,4,3}; sum(&a[2]); a[0]=a[1]+a[2]; 得到结果为a[2] = a[3]+a[4]
5、int x=1,y=1; (!x||y–)的值为1,他是或运算
第八套题
1、能正确表示a和b同时为正或同时为负的逻辑表达式 a*b>0
2、printf("%s,%8s,%8.3s",“china”,“china”,“china”) china,000china,00000chi
3、函数不可以嵌套定义
4、strcmp()
(1)strcmp是比较两个字符串的大小,两个字符串相同时返回0,第一个字符串大于第二个字符串时返回一个正值,否则返回负值.
(2)比较两个字符串的算法是:逐个比较两个串中对应的字符,字符大小按照ASCII码值确定,从左向右比较,如果遇到不同字符,所遇第一对不同字符的大小关系就确定了两个字符串的大小关系,如果未遇到不同字符而某个字符串首先结束,那么这个字符串是较小的,否则两个字符串相等。
5、 C语言形参表中出现的a[ ]是什么意思,怎么用?
代表一个指针,数组名实际上是一个指向数组首元素的指针,实际调用的时候只要把数组名当作实参传递给函数的形参就可以了
6、是表达式就一定有数值——赋值表达式:表达式数值是最左边的数值,a=b=5,该表达式为5,常量不可以赋值,printf("%d",a=5+9)输出14
7、&&和||的短路现象,优先级! > && > ||
8、018的数值是非法的,八进制是没有8的
9、%符号两边要求是整数,不是整数就错了
10、%ld是long int 的格式输出
附加:
1、do-while后面有个;分号
2、!=号的级别高于= while(c=getchar()!=’/n’)和while((c=getchar())!=’/n’)区别,输入ab的话第一个c=1,第二个为ab
3、*p++和(p)++的区别,第一个是p地址加1之后才取值,第二个是取值之后,值加1,++的优先级高于
4、数组名:表示第一个元素的地址,数组名不可以自加,他是地址常量名,若a[10]只要出现a++,a=a+2即是错误的
5、a+1=&a[1]
6、 int a[]={1,2}合法,int a[][4]={2,4,5}合法 int a[4][]={2,3,4}非法,二维第二个是列
后面是几道易错的稍微难一点的题: