1)合法的用户标识符:
合法的要求是由字母,数字,下划线组成。有其它元素就错了。并且第一个必须为字母或则是下划线。第一个为数字就错了。关键字不可以作为用户标识符号。main define scanf printf 都是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。
2)实型数据的合法形式:
2.333e-1 就是合法的,且数据是2.333×10-1。
考试口诀:e前e后必有数,e后为整数。
3)字符数据的合法形式:
'1' 是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。 '0' 的ASCII数值表示为48,'a' 的ASCII数值是97,'A'的ASCII数值是65。 一般考试表示单个字符错误的形式:'65' "1" 字符是可以进行算术运算的。
八进制转义字符
它是由反斜杠'\'和随后的1~3个八进制数字构成的字符序列。例如,'\60'、'\101'、'\141'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的八进制值分别为60、101和141。字符集中的所有字符都可以用八进制转义字符表示。如果你愿意,可以在八进制数字前面加上一个0来表示八进制转移字符。
十六进制转义字符
它是由反斜杠'\'和字母x(或X)及随后的1~2个十六进制数字构成的字符序列。例如,'\x30'、'\x41'、'\X61'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的十六进制值分别为0x30、0x41和0x61。 可见,字符集中的所有字符都可以用十六进制转义字符表示。
由上可知,使用八进制转义字符和十六进制转义字符,不仅可以表示控制字符(如换行符),而且也可以表示可显示字符。
在程序中 int a = 0x6d,是把一个十六进制的数给变量a 注意这里的0x必须存在。
4) 整型一般是两个字节, 字符型是一个字节,双精度一般是4个字节:
5)表达式的考查:
是表达式就一定有数值。
赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。
考试口诀:++在前先加后用,++在后先用后加。
#include<stdio.h>
int main(void)
{
int a=1,b=2;
printf("%d%d",a++,--b);
}
输出1 1;
逗号表达式
(1,2,3,4,a) 从左到右依次求值,表达式的值是逗号最右边的值
#include<stdio.h>
int main(void)
{
int b=2;
printf("%d",(1,2,3,b));
}
6)位运算的考查:
&:都1 为1; |:都0 为0; ^:相同为0,不同为1
~:取反; <<:左移; >>:右移;
负数的补码则是符号位不变,其余按位取反,最后再+ 1得到的
例如对于− 15 -15−15,其补码为11110001 , 11110001,11110001,右移一位( − 15 > > 1 ) (-15>>1)(−15>>1)得到的是11111000 1111100011111000,即− 8
(关于负数的补码变原码,减一取反即可)
-
018的数值是非法的,八进制是没有8的,逢8进1。
-
%符号两边要求是整数。不是整数就错了。
7)do-while()循环的最后一个 while();的分号一定不能够丢。(当心上机改错), do-while 循环是至少执行一次循环。
8)*p++ 和 (*p)++的之间的差别:
#include<stdio.h>
int main(void)
{
int *p=NULL;
int a[10]={1,2,3,4,5,6,7,8,9,0};
p=a;
printf("%d%d",*p,*p++);
}
输出:21
解析:printf的输出的从右至左的,*p++中,先返回p,然后p与*结合输出1,后p自增,*p输出2;
*p++=*(p++); (*p)++,先取值在增。
#include<stdio.h>
int main(void)
{
int *p=NULL;
int a[10]={1,2,3,4,5,6,7,8,9,0};
p=a;
printf("%d%d",(*p)++,*p++);
printf("%d",(*p)++);
}
输出:213;
(*p)++依旧是先用后加。
9)数组名-函数名-字符串常量名 :
数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。(考了很多次)
10)数组: 存放的类型是一致的。多个数组元素的地址是连续的。
int a[2][3]={1,2,3,4,5, };合法,后面一个默认为 0。
int a[2][3]={{1,2,}{3,4,5}};合法,第一行最后一个默认为 0。