国二c语言选择题参考答案
- 格式:docx
- 大小:30.42 KB
- 文档页数:23
国二c语言选择题参考答案
第四、五部分参考答案
第4节与第5节涉及到指针比较多,用文字描述比较难。大家以视频解析为准即可。这里提供参考答案
第4节 字符串、函数的递归、标识符的作用域和存储类
1-10:ACCAA DBACC
11-20:DBADD ADCAA
21-30:BBBCA DCAAA
31-40:ACDBB BADAA
41-50:DADAC ABCBC
51-60:ACBAA ADACA
61-70:DCAAC ABDDA
71-80:ACAAD CDDAA
81-90:CCCDA AABCA
91-100:ACCCC AACDA
101-110:ACACA BCAAC
111-120:BBAAD CACDA
121-135:ADABC DBAAA DDCDC
第5节 预编译处理、动态分配、结构体、位运算和文件
1、【答案】A
在本题中,p是指针,正确引用方式为p->name或(*p).name。
2、【答案】D
array五个元素分别是0,9,3,1,4。
for循环第一个if作用是把最大值赋值给res.first。第二个if作用是把最小值赋值给res.second。最后再将求和值赋值给res.third。然后通过ruturn返回给主函数,输出结果分别是最小值,最大值,和求和。
3、【答案】A
二级指针概念,二级指针即指向指针的指针,即存放地址的地址。c是普通变量,p是指向c的指针,q是指向p的指针即q是二级指针。
p=&c,是使p指向c。把q=&p,是使q指向p。
4、【答案】C
引用结构体成员的三种正确方式:
结构体变量名.成员名
结构体指针变量名->成员名
(*结构体指针变量名).成员名。
C选项应该改为D选项形式,即(*a).n。即第三种形式。
5、【答案】C
通过void可知其返回值为空,即指针赋空值。当指针被赋空值时不能通过指针引用存储单元。因为指针指向空,本身就不存在。
6、【答案】D
f函数传递三个实参:, &b.gender, &b.score均为地址,在f函数改变指针指向内容改变,实参即变。上课时总结为:传地址,地址指向内容(*p,a[i])发生改变,实参就变。所以b变量变为qian,f,350。
7、【答案】C
引用结构体成员的三种正确方式:
结构体变量名.成员名
结构体指针变量名->成员名
(*结构体指针变量名).成员名。
由于ps是指针变量,所以C选项错。
8、【答案】C
函数功能,可以查看第12章概念。
9、【答案】A
程序要先编译再运行。但宏替换是在编译之前进行的预处理,所以不会占有运行时间。
10、【答案】A
引用结构体成员的三种正确方式: 结构体变量名.成员名
结构体指针变量名->成员名
(*结构体指针变量名).成员名。
A选项中scanf数据列表应是地址。而ps是指针,d是数组名,那正确引用方式为ps->d。
11、【答案】A
【解析】本题结构体数组中,room是数组名,表示首地址指向第一个元素:{'Wang', 19},那么room+1指向第二个元素{'Li', 20}。题目要求输出room+1指向的name,room指向的age。即第二个元素姓名,第一个元素的年龄。
12、【答案】A
#define Memory(x,num) malloc(num*sizeof(x)
上述语句中,malloc是动态分配内存。num表示数量,sizeof表示每个内存的大小。此题表示分别给对应类型分配100个内存。
13、【答案】B
引用结构体成员的三种正确方式:
结构体变量名.成员名
结构体指针变量名->成员名
(*结构体指针变量名).成员名。
在本题中rec是一个结构体变量,那么B选项错。应该采用上面三种方式中的第1种。
14、【答案】B
【解析】位运算与进制转换。位运算要转为二进制。y=010,是八进制数,转为二进制数形式是1000。执行y>>1表示位运算右移一位,即y>>1的值为二进制100,二进制100转为二进制为4。
15、【答案】B
【解析】同14题考点相同都是位运算。a转为二进制是00000011,b转为二进制是0000110,a^b进行的是异或运算,运算法则是对应位相同为0不同为1。a^b=00000101。然后执行c=00000101<<2,即左移两位,即右边补2个0,得c=00010100,转为十进制是20。
16、【答案】D
【解析】同样考察位运算与进制转换。x转成二进制是00010000,y转为二进制是00000100。x>>=1即x=x>>1,右移一位,x变为00000100。y左移两位,得y值为00010000然后x^y异或运算,对应位相同为0不同为1。得x^y==00010100,由于%o表示不带前导的八进制,所以将00010100转为八进制为30。
17、【答案】C
【解析】宏替换,即文本替换。#define Out(x) n%2==0 ? '%c' : '%d'即当n为奇数时将out(x)替换为“%d”, 即当n为偶数时将out(x)替换为“%c”。
第一次循环x=65,printf(Out(x),x)替换为printf(“%d”,x)输出65。
第二次循环x=66,printf(Out(x),x)替换为printf(“%c”,x)输出B。
第三次循环x=67,printf(Out(x),x)替换为printf(“%d”,x)输出67。
第四次循环x=68,printf(Out(x),x)替换为printf(“%c”,x)输出D。
所以选择C。
18、【答案】B
【解析】考察动态分配。p1=p2=(char*)malloc(sizeof(char)*10);通过mallo分配内存地址同时赋值给p1和p2。此时p1和p2指向同一内存空间。然后第一次通过strcpy(p1,'malloc');将“malloc'字符串放入所分配内存,第二次通过strcpy(p2,p1+1); 将“alloc”放入所分配内存,由于放入的是同一个内存,第一次放的字符串会被第2次覆盖。此时内存中存放的是alloc字符串,那么不p1[0]和p2[0]都是表示内存的第一个元素a。
19、【答案】C
【解析】考察位运算。x转为十进制是00000011。y转为十进制是00000101。按位异或运算对应位相同为0,不同为1。刚x=x^y==00000110。y=x^y==00000011。x=x^y=00000101。最后转化为十进制是x=5,y=3。
20、【答案】B
【解析】考察位运算。a转为十进制是00001001。a右移3位(即a>>3)结果为00000001,转为十进制为1。但a的值并未变还是9。然后b=1%4==1。
21、【答案】A
【解析】考察位运算。即通过循环将数组的每一个元素与3进行按位与运算。5个元素分别是3,5,10,4,0。按位与的运算法则为对应位同时为1结果才为1。第一次循环:00000011&00000011==00000011,转化为十进制为3。其他几组用相同方法得到,1,2,0,0。
22、【答案】A
【解析】A选项fread作用是从文件中读取数据。只是读,并未输出。
B选项fwrite作用是从向文件内写入数据。
C选项fput作用是将字符ch写到文件指针fp所指向的文件的当前写指针的位置
D选项fprintf作用是按照格式装数据输出到文本文件中。
23、【答案】D
【解析】typedef 作用是给已经有的类型另外取名。本题中将int
*这个类型说明为T。那么把T *x[20]中的T换成int*得到结果是int
**x[20]。D选项类型完全一样。
24、【答案】A
【解析】固定概念,位运算只能是整型或字符型数据。
25、【答案】C
【解析】位运算。x转为二进制为00000011,y转为二进制为00000101。按位异或对应位相同为0不同为1可得z1=x^y==00000110,转为十进制是6。z2=3+5=8。 26、【答案】D
【解析】程序的执行过程为:定义整型数组x1,x2并进行初始化,两个数组长度均为2。定义结构体数组x,并为其初始化,则x[0].a=1,x[0].b=x1,x[1].a=2,x[0].b=x2。输出x[0]的成员指针b指向的内存单元值,即数组x1的第一个元素3,输出x[1]的成员指针b指向的内存单元值,即数组x2的第一个元6。程序的运行结果是3,6,D选项正确。
27、【答案】A
【解析】recd数组共3个元素分别是:
srecd[0]=={{2016,3,5},{12,25,30}}
srecd[1]== {{2017,5,8},{8,45,55}}
srecd[2]== {{2015,6,8},{22,15,26}
每个元素的第一部分是年月日year,month,day,第二部分是时分秒hour,minute,second。
在for循环体中的if语句作用是如果年year>=2016则输出月和日。否则输出分和秒。
当i=1时:srecd[1].dt.year==2017>=2016为真,输出月和日即5-8。
当i=2时:srecd[1].dt.year==2015>=2016为假,输出分和秒即15-26。
所以答案选择A。
28、【答案】A
【解析】A选项中sanf()函数的数据列表部分必须是地址值。而p->age不是地址。正确方式是&(p->age)。
其他三个选项均是地址值。B选项name是数组名,为首地址。CD两个选项加了取地址符。
29、【答案】C
【解析】宏运算,运算法则是将所有都进行替换后再按照算术运算方式运算。
S(k+j+2)即k+j+2* k+j+2/k+j+2=6+3+2*6+3+2/6+3+2=29。