C语言期末复习(选择题)
C语言期末复习
说明:习题是我平时从练习册上做错的或者易错的题目,大致包含了c语言所有基本模块。其中绿色字段是我对题目的疑问,若用红色字段解析则说明问题已解决。期末将至,学习电子信息类专业(计算机类)的同学可以参考,这里面也可能会有一些错误,你们能帮我指出那也是最好的。希望能帮助你们!
模块一:有疑问或者易错的习题
1.以下错误的转义字符是______。
A)\\ B)\’ C)\118 D)\0
本题标准答案:[C]
您的实际答案:[B]
本题实际得分:0
折算实际得分:0
解析:1.\’代表单引号字符
2.\ddd其功能是1到3位八进制数所代表的字符,例如题目中的\118则代表字符‘v’
3.还有一些不熟悉的转义字符:\xhh:1到2位十六进制数所代表的字符
\’’双引号字符
2.
若定义:“int z,x,y;”,执行“x=y=3; z=x+++y; ”后x y的值为______。
A)3,3 B)4,3 C)3,4 D)4,4
本题标准答案:[B]
您的实际答案:[C]
本题实际得分:0
折算实际得分:0
问题:根据一元运算符的右结合型,我认为是先给y加1,但为何是给x加1?
解析:右结合型是说明++与a的右侧结合,不是按顺序从右向左。所以a++后值变为4,b还是原来的3。
3. 【试题代码:VC04136】
下面程序的输出结果是________。
A)a=2,b=2 B)a=1,b=1 C)a=0,b=0 D)a=2,b=1
本题标准答案:[D]
您的实际答案:[A]
本题实际得分:0
折算实际得分:0
问题:难道case2后面的b++不执行了吗?
解析:x=0,在其取非后值变为1;直接匹配case1后的a++,又由于case1后面没有break;语句,不能跳出循环,执行两次a自增,一次b自增。因此,本题选择D项。
4. 【试题代码:VC04140】
以下程序的输出结果是________。
A)8 B)22 C)6 D)7
本题标准答案:[A]
您的实际答案:[D]
本题实际得分:0
折算实际得分:0
解析:本题旨在考察break;语句与continue;语句各自的功能。在本题中,若执行break语句,则跳出整个for循环;但若执行continue语句,只是结束了本轮循环,后面的b-=5不执行罢了。
5. 【试题代码:VC05126】
以下程序运行后,输出结果是________。
A) 9,9 B) 8,9 C) 1,8 D) 9,8
本题标准答案:[D]
您的实际答案:[C]
本题实际得分:0
折算实际得分:0
解析:本题有一个易错点,本人在做题时会认为sizeof(a)测的是一个字符的长度,一个字符占用一个字节,当然长度是1。但是本题并非如此,sizeof(a)是测量a数组的长度,其值为9。
6 【试题代码:VC06122】
以下程序的正确运行结果是________。
A)12,2 B)2,25 C)5,25 D)12,25
本题标准答案:[C]
您的实际答案:[A]
本题实际得分:0
折算实际得分:0
解析:本题考察的是变量的作用域问题,在本题中出现了extern这个全局变量,全局变量的作用域是从它的定义处开始到本程序文件末尾。如果位于全局变量定义之前的函数想引用该全局变量,需要在函数内用关键字extern对它做外部变量声明,表示该变量是一个已经定义的全局变量,声明后其作用域便扩展到了声明处。在用extern声明时,变量的数据类型可以写也可以不写。
7.【试题代码:VC09161】
若有说明语句
char a[]="It is mine";
char *p="It is mine";
则以下不正确的叙述是________。
B)p指向另外的字符串时,字符串的长度不受限制
D)a中只能存放10个字符
本题标准答案:[D]
您的实际答案:[C]
本题实际得分:0
折算实际得分:0
问题:在本题中,p所指向的内容是一个字符串,它是常量,我认为是不能改变的。
8.考点:二级指针
9.若有以下的程序段,则对数组元素的错误引用的是________。
问题:a数组明明是一个有15个元素的一维数组,D选项在对其引用时使用了二维数组的引用方式,为什么?
10.考点:二级指针
11.考点:指针变量作为函数参数
下面,我们展示正确的交换:
int k;
k=*a;*a=*b;*b=k;
12.考点:带参数的mian()函数
问题:不知道输入中的tt是什么意思?
13.考点:指针变量作为函数参数
解析:本题的循环结束条件为s或t所指向的字符串到达末尾或者两字符串不相等。问题:*s-*t这个运算没看懂?
比较现在所指的不同字符的ascii码值。其功能相当于strcmp()函数,用于比较两个字符串的大小。
14.考点:带参数的main()函数
问题:不懂参数的正确说明?
15.考点:指针变量作为函数参数
程序运行后的输出结果是________。
A 1,4 B 4,4 C 3,1 D 4,1
16.考点:switch多分支选择结构
解析:switch语句后圆括号内表达式的类型一般为整型、字符型或枚举型,并且每个case后的常量表达式只能有一个。A选项圆括号内为浮点型,不符合;B选项case后面有两个常量表达式,不符合;D选项case后面的表达式与圆括号里面的无关,不符合。因此,答案为C项。
17.考点:函数的递归调用
解析:在本题中,我们发现,函数的声明也可以放在main函数中,也就是说只要放在调用语句之前就是可以的。先进入fun(5),进入fun(4),进入fun(3),进入fun(2),进入fun(1),进入fun(0),不再进入,打印0,返回fun(1),打印1,……打印5。因此,本题选择A项
18.考点:宏展开
解析:宏定义是没有优先级的,在本题中把x替换k+j直接从左向右运算。
S(k+j)=4*k+j*k+j+1=33因此,答案选择C项。
19.考点:结构体类型变量的定义
问题:在本题中,属于在声明结构体类型的同时定义了结构体变量,并且对其进行重新命名为T,那么D项为什么不对?
解析:我们把s称为结构体标签。在正常定义结构体时,会用以下方式:
struct s{
int g;
char h;
};
struct sstu1;
上面的struct s相当于int,而stu1才是变量名。在使用typedef更名后struct s可以写成T,用这个T去定义变量stu1,但千万不要误认为T就是stu1。
20.考点:switch多分支选择结构
解析:在本题中,要注意在switch语句中,default如果放在前面并且后面没有break;那么就在case结构中一直执行下去。当k=1时,执行c=c+k后c=1,执行c++后c=2,从循环中跳出;当k=2时,再执行c++后c=3。最后,输出c=3。
21.考点:字符常量
解析:A项功能是1到3位八进制数所代表的字符,而在八进制数中不能出现‘8’,故不合法;B项代表的是反斜杠字符“\",是合法的;C项不能有两个字母,故不合法;D项字符是用单引号引起来的,故不合法。因此,本题选择B项。
22.考点:数组元素的引用
解析:
1 |
2 |
0 |
3 |
4 |
0 |
5 |
6 |
0 |
一、当i=1时,
当j=0时,s=s+a[1][0]=3;当j=1时,s=3+a[1][1]=7;
二、当i=2时,
当j=0时,s=7+a[2][0]=12;当j=1时,s=12+a[2][1]=18;当j=2时,s=18+a[2][2]=18.
因此,选择A项。
23.考点:指针变量与一维字符数组
下面关于字符串的定义和操作语句正确的是__________。
解析:B选项中定义的数组长度不够,因为单个单个字符去定义时里面还包含了字符串结束标志,应该至少定义6。问题:为什么C选项中的指针变量s不能直接指向一直字符串常量?而D项就可以呢?
在使用字符串连接函数strcat时,括号内的第一个必须是数组(并且要定义地足够大),而不能是一个指针变量,因为一定要在内存中占用一定大小的内存空间。而第二个便可以是指针变量了。
24.考点:数组元素的引用
问题:a数组
本题中又定义了一个有三个指针变量的数组。
25.考点:字符常量
解析:\xab后两位表示16位进制符,16位进制可由0-9和a-f构成,本题正确答案选择D项。