国二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。