C 语言考试的一些恶心考点

  1. 反斜杠 \ 后面跟着数字,表示转义字符。当 \ 后面跟的是 1 到 3 位数字(数字范围为 0~7 )时,这代表一个八进制的 ASCII 码值。十六进制转义即 \x ;

类似地,对于整型, 0 开头表示八进制整型常量, 0x 开头表示十六进制整型常量;

  1. char c = 65 是合法的,允许这种隐式类型转换, char c = "..." 是非法的;
    其次,但凡题目问类似 “ c 的值是?” 这种 sm 的模棱两可的问题,考虑到 char 的本质是整型,也就是存的 ascii 码,所以值应该是 ascii 的值;

  2. 字符串的结束标志是 '\0' ;

  3. 编译方式与解释方式:
    image

  4. %f / %lf 都默认保留 6 位小数( C++ 中的 cout 也是);

  5. 浮点类型是无法精确表示的,这在两种场景下是比较坑的:一是需向整数截断的时候,比如打 7 折,不建议 *0.7 ,而是 * 7 / 10 但需注意范围;二是浮点数结果判断不建议用 x == x0 ,而是 fabs(x - x0) <= eps ;

  6. 常见格式符中,只有 %c 不会跳过前面的空白(包括空格、换行等);

n
c1 x1
c2 x2
...
cn xn

这里每行要这样输入 scanf(" %c %d", &c, &x) !!!注意用 %c 前的空格把上一行末尾的换行符吞掉;

  1. 运算符相关总结:
  • 逗号表达式串的值等于最后一个表达式;
  • 取模运算结果的正负号,与被取模的正负号相同,而与模数无关。
  • 连 && 或 || 的短路特性:比如对于连 && ,从左往右判断,如果碰到返回假的表达式,终止判断,后续表达式不再访问;
  • 赋值表达式本身也是有值的,其返回值就是赋进去的值;
优先级 运算符 结合性 说明
1 () [] -> . 后缀++ 后缀-- 左 函数调用、数组下标、成员访问、后缀自增/自减
2 前缀++ 前缀-- + - ! ~ (type) * & sizeof _Alignof 右 一元运算符、强制类型转换、取地址/解引用、sizeof
3 * / % 左 乘、除、取模
4 + - 左 加、减
5 << >> 左 左移、右移
6 < <= > >= 左 关系比较
7 == != 左 相等/不等
8 & 左 按位与
9 ^ 左 按位异或
10 | 左 按位或
11 && 左 逻辑与
12 || 左 逻辑或
13 ?: 右 条件运算符
14 = += -= *= /= %= <<= >>= &= ^= |= 右 赋值运算符
15 , 左 逗号运算符,优先级最低
  1. 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
posted @ 2026-10-24 17:35  Zhang_Wenjie  阅读(3)  评论(0)    收藏  举报