C 语言考试的一些恶心考点
- 反斜杠
\后面跟着数字,表示转义字符。当 \ 后面跟的是 1 到 3 位数字(数字范围为 0~7 )时,这代表一个八进制的 ASCII 码值。十六进制转义即\x;
类似地,对于整型,
0开头表示八进制整型常量,0x开头表示十六进制整型常量;
-
char c = 65是合法的,允许这种隐式类型转换,char c = "..."是非法的;
其次,但凡题目问类似 “ c 的值是?” 这种 sm 的模棱两可的问题,考虑到 char 的本质是整型,也就是存的 ascii 码,所以值应该是 ascii 的值; -
字符串的结束标志是
'\0'; -
编译方式与解释方式:

-
%f/%lf都默认保留 6 位小数( C++ 中的cout也是); -
浮点类型是无法精确表示的,这在两种场景下是比较坑的:一是需向整数截断的时候,比如打 7 折,不建议
*0.7,而是* 7 / 10但需注意范围;二是浮点数结果判断不建议用x == x0,而是fabs(x - x0) <= eps; -
常见格式符中,只有
%c不会跳过前面的空白(包括空格、换行等);
n
c1 x1
c2 x2
...
cn xn
这里每行要这样输入 scanf(" %c %d", &c, &x) !!!注意用 %c 前的空格把上一行末尾的换行符吞掉;
- 运算符相关总结:
- 逗号表达式串的值等于最后一个表达式;
- 取模运算结果的正负号,与被取模的正负号相同,而与模数无关。
- 连
&&或||的短路特性:比如对于连&&,从左往右判断,如果碰到返回假的表达式,终止判断,后续表达式不再访问; - 赋值表达式本身也是有值的,其返回值就是赋进去的值;
| 优先级 | 运算符 | 结合性 | 说明 |
|---|---|---|---|
| 1 | () [] -> . 后缀++ 后缀-- |
左 | 函数调用、数组下标、成员访问、后缀自增/自减 |
| 2 | 前缀++ 前缀-- + - ! ~ (type) * & sizeof _Alignof |
右 | 一元运算符、强制类型转换、取地址/解引用、sizeof |
| 3 | * / % |
左 | 乘、除、取模 |
| 4 | + - |
左 | 加、减 |
| 5 | << >> |
左 | 左移、右移 |
| 6 | < <= > >= |
左 | 关系比较 |
| 7 | == != |
左 | 相等/不等 |
| 8 | & |
左 | 按位与 |
| 9 | ^ |
左 | 按位异或 |
| 10 | | |
左 | 按位或 |
| 11 | && |
左 | 逻辑与 |
| 12 | || |
左 | 逻辑或 |
| 13 | ?: |
右 | 条件运算符 |
| 14 | = += -= *= /= %= <<= >>= &= ^= |= |
右 | 赋值运算符 |
| 15 | , |
左 | 逗号运算符,优先级最低 |
switch的穿透现象:
点击查看代码
switch (score)
{
case 'A':
printf("优秀\n");
break;
case 'B':
printf("良好\n"); // 若成绩是 B ,会返回良好和及格
//break;
case 'C':
printf("及格\n");
break;
}
switch (score)
{
case 'A':
case 'B':
case 'C':
printf("及格\n"); // 不论成绩是 A 、 B 或 C ,都会执行这句
break;
}
switch(x)
{
default:
printf("Default\n");
case 1:
printf("1\n");
case 2:
printf("2\n");
break;
}
// 如果你输入的值有对应的 case ,程序会直接跳到那个 case ,忽略前面的 case 或 default
// 输入 1 ,会输出 1 2
// 输入非 1 或 2 ,会输出 Default 1 2

浙公网安备 33010602011771号