一.2023-10-08_编译和链接等
错题:
1.
swich语句如下:
#include<stdio.h>
int main()
{
switch (a)
{
case 1:
break;
default:
}
return 0 ;
}
正确答案;A(错选D)
客观分析:
- 当变量表达式的内容与某个case后的常量相等后,就执行该case下的语句
- break表示该case以后的内容不会执行,如果没有跟break,会继续执行当前case之后的case分支。
- 当变量表达式的内容没有与那个case匹配,就会执行default下的内容。
- switch中常用的关键字:case 、break、 default,当然case中语句比较复杂时,可能会用if进行判断。
- continue是用来结束本次循环的,而switch不是循环,因此其中不能使用continue关键字。
主观分析:swich语句不熟悉
swich语句详细介绍请看下面文章:
https://blog.youkuaiyun.com/qianyujinghui/article/details/133949045
(5.swich语句)
2.
正确答案:C(错选B)
客观分析:
- C语言关键字:C语言定义的,具有特定含义、专门用于特殊用途的C语言标识符,也称为保留字
- define不是关键字,是编译器实现的,用来定义宏的预处理指令,不是C语言中的内容。
- int、struct和continue都是C语言中包含的关键字。
主观分析:
- 不熟悉C语言中的关键字
C语言关键字详细介绍请看下列文章:
https://blog.youkuaiyun.com/qianyujinghui/article/details/133756656
(8.关键字介绍)
3.

正确答案:B、C(错选A)
客观分析:
- 一个C语言程序中的main函数,有且仅有一个
- main函数的名字是固定的,编译器以main函数作为程序的入口,程序是从main函数的第一行开始执行的。
主观分析:
- 没看清题目,是多选,而且是选错误的
- main函数概念不清楚
main函数详细介绍请看下列文章:
https://blog.youkuaiyun.com/qianyujinghui/article/details/133756656
(6.main函数)
4.

正确答案:A(错选D)
客观分析:
- 字符A~Z的ASCII码值从65~90 ,字符a~z的ASCII码值从97~122 ,对应的⼤小写字符(a和A)的ASCII码值的差值是32
- D答案:ASCII编码从0~127,所以D正确
主观分析:
- 没看清题目,是选错误的
- ASCII码值概念不清楚
ASCII表格:
5.

正确答案:C(错选A)
客观分析:
- strlen是用来获取字符串的有效长度的,结尾标记'\0'不包含在内,strlen获取的规则非常简单:从前往后依次检测,直到遇到'\0'是就终止检测,题中代码没有"\0",所以输出是随机值。
主观分析:
- strlen函数不了解
- 字符串和\0
字符串和\0详细介绍请看下列文章:
(10.字符串和\0)
二.2023-10-10_转义字符等
易错题:
1.
正确答案:B
客观分析:
1. 全局作用域中的num和main中的num可以同时存在,不会冲突,因为不是同一个作用域
2. 在main函数中访问num时,采用就近原则,因此访问的是main中的num,相当于将全局作用域中的num屏蔽了
A:错误:因为两个num不在同一个作用域中,可以通过编译
B:正确,main中访问的是main中的num,而main函数中的num是1,因此打印1
C:错误,应该访问main函数中的num,而不是全局作用域中的num
D:错误,凑选择的
主观分析:
- 考察全局变量和局部变量
关于变量详细介绍请看下列文章:
(4.2变量)
2.
正确答案:D
客观分析:
- 布尔类型是C99标准中引入的;
- 在早期的C语言标准(如ANSI C和C89)中,没有明确定义布尔类型。通常,程序员使用整数类型(如int)来表示布尔值,其中0表示假(false),非零值表示真(true)。
- 然而,在C99标准中引入了新的布尔类型(stdbool.h头文件),定义了bool类型和true/false常量。布尔类型只有两个取值:true和false,用于表示真和假。
主观分析:
- 考察C语言布尔类型
关于C语言布尔类型详细介绍请看下列文章:
(1.4布尔类型)
三.2023-10-12_算术操作符等
错题:
1.

正确答案:B(错选C)
客观分析:
- ++运算符:分为前置++和后置++,
- 前置++:先加1,后使用,即先使用变量中内容,然后给结果加1
- 后置++:先使用变量中内容,整个表达式结束时,给变量加1
- 逗号表达式,依次从左往右计算。
#include <stdio.h> int main() { int a, b, c; a = 5; c = ++a;// ++a:加给a+1,结果为6,用加完之后的结果给c赋值,因此:a = 6 c = 6 b = ++c, c++, ++a, a++; // 逗号表达式的优先级,最低,这里先算b=++c, b得到的是++c后的结果,b是7 // b=++c 和后边的构成逗号表达式,依次从左向右计算的。 // 表达式结束时,c++和,++a,a++会给a+2,给c加1,此时c:8,a:8,b:7 b += a++ + c; // a先和c加,结果为16,在加上b的值7,比的结果为23,最后给a加1,a的值为9 printf("a = %d b = %d c = %d\n:", a, b, c); // a:9, b:23, c:8 return 0; }
主观分析:
- 不会复杂运算,逻辑错误
关于运算法则详细介绍请看下列文章:
(7. 单⽬操作符:++、--、+、-)
2.

正确答案:A(错选D)
客观分析:
- 2个整数相除,执行的是整数除法,计算的结果也是整数
- 除法的2个操作数只要有一个数是浮点数,执行的就是小数除法,所以a/c是按照小数除法计算的,结果就是3.5
- a/b 是按照整数除法计算的,结果是3。
主观分析:
- 没考虑清第二个打印的是浮点数
关于运算符 / 详细介绍请看下列文章:
(5.3 /)
3.

正确答案:B(错选A)
客观分析:
printf()允许限定占位符的最小宽度。%5d表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。如果超过5位,正常输出就行,5是最少输出5位。
主观分析:
- 限制占位符最小宽度概念理解错误
关于占位符最小宽度详细介绍请看下列文章:
(9.1.4.1 限定宽度)
4.

正确答案:A(错选B)
客观分析:
- B:scanf()处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符,scanf输出字符占位符的时候,不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。
- C:scanf的占位符%s表示读取一个字符串,遇到空白字符就停止读取。
- D:scanf需要包含stdio.h这个头文件的
主观分析:
- 注意审题B选项说的是:处理所有占位符
- scanf函数概念不清晰
关于占位符scanf函数概念详细介绍请看下列文章:
(9.2 scanf)
四.2023-10-14_关系操作符等
错题:
1.

正确答案:D(错选A)
客观分析:
- switch的每个case之后如果没有加break语句,当前case执行结束后,会继续执行紧跟case中的语句。
- func(1)可知,在调用func时形参a的值为1,switch(a)<==>switch(1),case 1被命中,因为该switch语句中所有分支下都没有增加break语句,因此会从上往下顺序执行,最后执行default中语句返回。
主观分析:
- switch语句知识不清晰
关于switch语句概念详细介绍请看下列文章:
(5.2 switch语句中的break)
2.

正确答案:D(错选A)
客观分析:
- switch语句中表达式的类型只能是:整形和枚举类型
- D选项为浮点类型,不是整形和枚举类型
主观分析:
- switch语句知识不清晰
关于switch语句概念详细介绍请看下列文章:
(5 switch语句)
3.

正确答案:D(错选B)
客观分析:
- switch语句时多分支的选择语句,switch中表达式结果命中那个case,就执行该case子项,如果case子项后没有跟break语句,则继续往下执行。
- 关于该题解析,请看以下注解:
#include <stdio.h> int main() { int x = 3; int y = 3; switch (x % 2) { // x%2的结果为1,因此执行case1 case 1: switch (y) // y是3,因此会执行case3,而case3不存在,那只能执行default { case 0: printf("first"); case 1: printf("second"); break; default: printf("hello"); // 打印hello,打印完之后,内部switch结束,此时外部case1结束 } // 因为外部case1之后没有添加break语句,所以继续执行case2 case 2: // 打印third printf("third"); // 外部switch结束 } return 0; }
主观分析:
- switch语句解读不熟练
关于switch语句概念详细介绍请看下列文章:
(5 switch语句)
4.
正确答案:C(错选A)
客观分析:
- 两个字符串是否相等不能使用==,应该使用strcmp函数
主观分析:
- 关系操作符概念不清晰
关于关系操作符概念详细介绍请看下列文章:
(2.关系操作符)
该博客总结了C语言学习中的易错点,涵盖编译和链接、转义字符、算术操作符、关系操作符等方面。涉及switch语句、关键字、main函数、ASCII码值、strlen函数等知识,分析了错题原因并给出相关概念介绍文章。

被折叠的 条评论
为什么被折叠?



