第四、五部分参考答案

第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.name, &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。

S(j+k+2)即j+k+2* j+k+2/ j+k+2=3+6+2*3+6+2/3+6+2=29。

30、【答案】B

【解析】位运算。先转二进制再进行运算。x转二进为00000011,y转二进制是00000101。

按位运算^相同为0不同为1。y^x==00000110,然后再收进行按位收运算,z1=00000110^00000101==00000011,转为十进制为3。按照同样方式运算可得z2=5。

31、【答案】B

【解析】array数组六个元素分别是19,21,3,4,0,0。

for循环第一个if作用是把最大值赋值给res.first。第二个if作用是把最小值赋值给res.second。然后通过ruturn返回给主函数,输出结果分别是最小值,最大值。

32、【答案】A

【解析】所有类型的指针所占内存均为4个字节,所以A选项正确。

33、【答案】C

【解析】带#号的预处理命令只是在编译前进行处理,但其位置可以不在最前面。

34、【答案】A

【解析】通过sturct S定义结构体变量s1,s2。然后分别给变量成员name数组赋值字符串“12345”,“ABC”。然后再将变量s2的值赋值给s1。此时s1结构体的成员name变为“ABC”。

35、【答案】A

【解析】main函数中b是指针,c是结构体变量。那么通过f(c,b)将变量c传递给a,将指针b传递给f函数的形参c。由于传值形参不改变实参,通过a=b并不会改变实参c的值。由于b传的是结构体成员name的地址。通过f函数里面面的for循环作用是将字符串小写转化为大写。所以本题只有name变成大写,其他值不变。

36、【答案】C

【解析】固定概念。

37、【答案】A

【解析】考查“逻辑与”和“按位与”的区别。

z1=x&&y中两边x、y均为真,那么z1的值为1。

z2=x&y,按位运算要先转二进制。x=00000100,y=00000010。按位与至应为均为1结果才为1。z2=00000100&00000010=000000000,转为十进制为0。

38、【答案】D

【解析】A选项fopen反回值为文件指针类型。B选项fopen调用形式为:fopen(文件名,文件使用方式)。C选项返回值为空表示未成功打开指定文件。ABC三选择错,D选项是fopen函数的作用。

39、【答案】A

【解析】考查位运算右移。ch转为二进制为00010000,右移一位结果为00001000,转为十进制的值为8。

40、【答案】A

【解析】引用结构体成员的三种正确方式:

结构体变量名.成员名

结构体指针变量名->成员名

(*结构体指针变量名).成员名。

由于ptr是指针类型,所以A选项引用方式错误,正确形式应该是D选项。

41、【答案】D

【解析】函数固定用法。ABC三选项均可读入多个字符。getc和fgetc均是读入一个字符。

42、【答案】A

【解析】p指向a节点,将p->next赋值给pt,表示将a节点的指针域赋值给pt,即让pt指向b。p->next表示b的地址,p->nxet指向b,那么p->next->next即c的地址。把p->next=p->next->next;赋值给p->nxet表示让a节点指向c节点。然后释放(free)pt指针,表示pt不再指向任何内容。此时a直接指骨向c,即将b节点删除。

43、【答案】B

【解析】位运算要先转二进制。按位异或相同为0,不同为1。a=00000011^00000010==1。按位或对应位同时为0才为0。5|2=00000101|00000010==00000111,然后00000111|11110000==11110111,然后按拉取反(~),得00001000,转为十进制为8。

44、【答案】B

【解析】引用结构体成员的三种正确方式:

结构体变量名.成员名

结构体指针变量名->成员名

(*结构体指针变量名).成员名。

由于rec是结构体变量。所以A选项引用方式错误,正确形式应该是B选项。

45、【答案】C

【解析】按位与,转为二进制,只有对应位同时为1结果为1。00000011&00000011==00000011,转为十进制为3。

46、【答案】D

【解析】“w”为写的方式打开文件,若文件存在,则从文件起始位置开始写入,若文件不存在则会新建指定文件名的文件。

47、【答案】D

【解析】宏运算,把所有的文本替换完后再进行运算。

S1(a+b,a+b)替换为a+b*a+b=3+4*3+4=19。

S1((a+b,(a+b))替换为(a+b)*(a+b)=(3+4)*(3+4)=49。

S2(a+b,a+b)替换为(a+b)*(a+b)=(3+4)*(3+4)=49。

48、【答案】A

【解析】结构体数组有5个元素,每个元素分为整数x和指针next两部分。通过for循环每次将下一个元素的地址赋值给前一个元素的指针域,即让第一个指向第二,第二个指向第三个,以此类推构成链表;并且每次将2*i+1赋值一给m[i].x。之前执行p=m,将首地址赋值给p,让p指向第一个元素m[i]。最后输出p++->x,由于p++的值是p,所以p++->x是第一个元素的x,即1。由于执行了P++,所以会指向第二个元素。然后输出p->x++,即2*1+1=3.

49、【答案】A

【解析】结构体数组有3个元素,每个元素有两部分分别为x,y。即data[0]={4,3}、data[1]={2,0}、data[2]={8,1}。每次循环输出第i个元素的x和第i个元素右移一位。

当i为0,输出41,

当i为1,输出20,

当i为2,输出80。

50、【答案】D

【解析】考查位运算。a转为二进制是00010000,右移4位结果是00000000,转为十进制是0,由于没有给a赋值,所以a的值还是16。然后0对1取余结果为0。

51、【答案】D

【解析】考查位运算。a转为二进制是000000001,右移4位结果是00000000,转为十进制是0,由于没有给a赋值,所以a的值还是1。然后0对3取余结果为0。

52、【答案】A

【解析】fread用法:fread(buffer,size,count,fp),第一个参数是内存块的首地址,A选项中第一个参数a[i]是一个数组元素,不是地址,所以是语法错误。

53、【答案】A

【解析】typedef作用是给已经有的类型另外取名。定义T b。可以认为b就是T。由于题目问题谁和b相同,那么只需要用a换掉T即可。

54、【答案】A

【解析】本质是考查函数数据传递。本题通过函数调用,将结构体变量a的地址传递给f函数里面的a.然后在f函数执行将结构体变量c的地址赋值给d,然后再赋值给a,此时形参a指向变量c。下面三个赋值语句其实就是把c变量赋值给a指向的变量即把c赋值给c。然后输出c的值。即sun,f,90。此时f函数执行结束,再输出main函数里面a的值。由于在f函数中,先将c的地址赋值给指针a,后面操作改变的都是变量c的值,并没有改变main里面a的值。所以a还是zhao,m,85.

可以总结为传地址,地址变,实参不变。

55、【答案】D

【解析】结构体变量中的成员可以是变量,可以是地址,可以是数组,同时也可以本结构体类的变量、指针、数组,不同成员之前要用分号隔开,同一个结构体中的成员不可同名,不同结构体中的成员可以同名。所以D选项是错的。

56、【答案】B

【解析】把结构体变量s2赋值给s1,那么s1变量里面的name成员就变成了字符串“ABC”。输出函数中%表示输出字符串,即本题输出ABC。

57、【答案】A

【解析】宏运算,把所有文本替换完再乾计算。

s(k+j)替换为(k+j/k+j)*k+j==(6+3/6+3)*6+3=57。

s(j+k)替换为(j+k/j+k)*j+k==(3+6/3+6)*3+6=39

58、【答案】C

【解析】在main函数定义两个结构体变量分别为a和b。ab两个变量分别有四个成员:name[9]、gender、score、next。在main函数中,先将b的地址赋值给a的指针域,即让a.next指向结构体变量b。调用f(a)即传递变量a给f函数的a,传值形参不改变实参,可知道main里面实参a的值不会变,还是zhao,m,85,所以在输出时,输出a结构体成员分别是zhao,m,85。在f函数中,又将d赋值给*a.next。所以a.next->name,a.next->gender,a.next->score三个即为d.name,d.gender,d.score结构体成员。即输出结果为:Li,m,100。

59、【答案】A

【解析】typedef是用户定义类型关键字,本题通过typedef将结构体struct Data说明为新的结构体类型名DATA,即DATA表示一个结构类型。

60、【答案】D

【解析】以“w”即写的方式打开文件都会从文件的起始位置开始写入内容,并且原来内容全部消失。本题每次循环均会首先执行一次打开文件,前一次写的内容都会消失,所以本题只需要考虑最后一次循环写入的内容。最后一次循环i=4,通过fputc写入的是’A’+4,即’E’。

61、【答案】D

【解析】固定用法。

62、【答案】A

【解析】固定用法。B选项错在有两个#。C选项错在替换文件不能是关键字。D选项define不能是大写。

63、【答案】C

【解析】考查位运算。将八进制的ch=020转为二进制为00010000,输出结果为左移1位,即00100000,转化为十进制为32。

64、【答案】A

【解析】用户定义类型,T *a可以认为T就是*a。那么把*a去替换掉T即得到A选项。

65、【答案】C

【解析】通过f函数将c变量的各成员分别赋值给a,然后通过return返回并赋值给main函数里面的变量b。由于定义变量a时是在函数外部定义的,所以a是全局变量,全部变量均为静态变量,所以在函数里面给a赋值,a的值即保留。所以本题main函数输出ab的各个成员均为f函数里面c变量成员值。

66、【答案】A

【解析】首先通过fopen打开文件,然后通过fprintf将a[0]即1写入文件的起始位置。然后每次进入循环后都先执行一次rewind(fp)那将指针重新移动到文件起始位置,然后再通过fprintf将a[i]写入指针所指向的起始位置。也就是每次循环都是向文件的起始位置写入数据,并覆盖上一次所写入的数据,最终文件写入的数据是a[5]即6。循环结束后rewind(fp)那将指针重新移动到文件起始位置,然后通过fscanf()从文件读取数值6并赋值给变量k。最终k的值为6。

67、【答案】B

【解析】A选项输出字符,C选项输出到文件,D选项向文件写入数据。而B选项是从文件获取数据。

68、【答案】A

【解析】宏名大小写均可,我们见到的多数是大写只是习惯问题,并不是说必须要大写。

69、【答案】A

【解析】位运算,将十六进制的0x0f转为二进制是00001111。将ch右移两位的结果为00000011。将ch左移4位为11110000。分别转化为十进制结果是3和240。

70、【答案】C

【解析】宏替换,所有文本替换完再运算。

D(i+j)宏替换为:4*i+j+1==4*2+4+1==13。

71、【答案】A

【解析】首先通过fopen打开文件,然后通过fwrite将a[0]即1写入文件的起始位置。然后每次进入循环后都先执行一次fseek(fp,0l,0)那将指针重新移动到文件起始位置,然后再通过fwrite将a[i]写入指针所指向的起始位置。也就是每次循环都是向文件的起始位置写入数据,并覆盖上一次所写入的数据,最终文件写入的数据是a[5]即6。循环结束后fseek(fp,0l,0)那将指针重新移动到文件起始位置,然后通过fread()从文件读取数值6并赋值给变量k。最终k的值为6。

72、【答案】A

【解析】B选项错,结构体变量只有在定义时才可以整体进行初始化。如果在定义后初始化只能单个成员进行赋值。C选项错,b是结构体变量,引用成员用b.name形式即可。D选项通过typedef将结构体说明为C。那么C即是一个结构体类型而不是结构体变量,把D错。

73、【答案】C

【解析】位运算与逻辑运算,13转为二进制是00001101,右移1位是00000110,然后与00000001进行按位或运算,对应位有一个为1结果就是1。所以00000110|00000001==00000111,转为十进制是7。||逻辑或,两边若有一个为真结果为1。00000110||00000001=1。

74、【答案】C

【解析】指向A节点,那么*P即是A节点,(*p).next即b节点的地址。(*p).next->next是即是b节点的指针域,b节点的指针域是指向c节点,所以*((*p).next->next)是c节点,那么如果表示c节点的dt部分,应该是:*((*p).next->next).dt。而不是A的形式。

75、【答案】C

【解析】通过f(a,&b)传递,将变量a和变量b的地址分别传递给形参的a,b。然后在f函数中将b指向的值即main里b的值赋值给形参a,再输出形参a的各个成员。即Qian,f,350,由于a传递的是地址,那么形参不改为实参,所以main里的实参a并不会变,还是原值。所以main里面输出Zhao,m,290。

76、【答案】A

【解析】逻辑或,只要有一个是真结果就为真。

77、【答案】D

【解析】c1转为二进制是00010010,c2转为二进制是00110110。按位与&,对应位同时为1结果为1,c1&c1结果为还是c1。按位异或^,对应位相同为0不同为1,所以c2||c2结果为0。

78、【答案】A

【解析】结构体成员引用,srud[0].name[3]是指Adum里面的第四个即m。

79、【答案】C

【解析】位运算,8转为二进制是00001000,然后右移两位是00000010,转为十进制是2,但并未给a赋值,所以a未变。然后执行b=2%2==0。所以输出ab值分别是8和0。

80、【答案】C

【解析】传地址,地址指向内容发生改变,实参就变。b传递的是地址值,然后在f函数中,给*b赋值,即给地址指向内容赋值,所以实参b会变为a的值。

81、【答案】A

【解析】1、传地址,地址指向内容发生改变,实参就变。

2、传地址,地址指向内容发生改变,实参就变。

3、传值形参不改变实参。

本题中b传递的是地址值,然后在f函数中,将a的值给*b赋值和给c赋值,然后输出b和c结构体的各成员。即输出:Zhao,m,290,Zhao,m,290。由于f函数中给b指向内容赋值,所以实参b会变为a的值。而c传递的是变量值,所的c的值不会变。所以在main函数中输出b和c结构体的各成员。Zhao,m,290,Sun,m,370。

82、【答案】D

【解析】本题中定义了两个结构体变量1c1,pc2。分别给成员cpu赋值,然后再将pc2的值赋值给pc1。即pc1.cpu的值变为“????“

83、【答案】A

【解析】通过动态分配分配同一段内存的首地址赋值给p1和p2。此时p1和p2相等并指向是同一段内存的首地址。这段内存有5个int类型的空间。即可认为是一个有5个元素的数组。

在循环过程中,当i分别为0,1,2,3,4时,5个数组元素分别是0*10+1,1*10+1,2*10+1,3*10+1,4*10+1。最后输出p2-p1==0。*(p2+1)+*(p1+2)=10+21=32。

84、【答案】D

【解析】1、传地址,地址指向内容发生改变,实参就变。

2、传地址,地址指向内容发生改变,实参就变。

3、传值形参不改变实参。

&input传递是地址,在change函数中改变的是data->name,即改变指向的内容,实参input会变为“****“。num传递的是值,所以形参不改变实参,即num还是4。

85、【答案】C

【解析】宏运算,所有文本替换完再运算。

S1(a+b)替换为4*a+b+4*(a+b)==4*1+2+4*(1+2)=18

S2(a+b)+S1(3)替换为4*(a)*(b)+b*x+4*3+4*(3)==4*(1)*(2)+2*1+4*3+4*(3)==34

S2(3+a,b+3) 替换为4*(3+a)*(b+3)+3+a*b+3==4*(3+1)*(2+3)+2+3*3+1=92

86、【答案】A

【解析】位运算,a转为二进制为00001000,然后右移三位结果为00000001,再转为十进制为1。但并未给a重新赋值所以a不会变。然后b=1*8=8。

87、【答案】A

【解析】A选项中已经用结构体定义了结构体变量PER,即PER已经是一个结构体变量,并不是类型,所以不能用来定义其他变量。

88、【答案】A

【解析】位运算,按位异或^,对应位相同为0不同为1。按位或,对应位有一位是1即为1。按位与对应位同时为1结果才为1。

根据以上规则,可得A选项。

89、【答案】D

【解析】1、传地址,地址指向内容发生改变,实参就变。

2、传地址,地址指向内容发生改变,实参就变。

3、传值形参不改变实参。

本题中通过f函数调用,f(&b)传递的是地址,在f函数改变的是地址指向的内容,那么应该对应上面第2条。所以实参b会变为Qian,f,350。然后分别输出a和b的各成员。

90、【答案】B

【解析】不论任何类型的指针均是指针类型的变量。

91、【答案】C

【解析】1、传地址,地址指向内容发生改变,实参就变。

2、传地址,地址指向内容发生改变,实参就变。

3、传值形参不改变实参。

本题中通过fun函数调用,fun(s[0])传递的是变量s[0],对应的是上面第3三种情况,所以实参s[0]不会变。

92、【答案】C

【解析】for循环作用是将最大值赋值给mx,并将最大值下标赋值给j,同时将最小值赋值给mn,并将最小值下标赋值给t。也就是说pd[j]是最大我是个,pd[i]是最小值。然后再将最大值赋值给pd[size-2]即pd[8]是最大值,同理pd[9]是最小值。main里面输出的是最大值结构体的data成员,即分别为“数据结构“和”计算机原理“。

93、【答案】A

【解析】概念,略。

94、【答案】D

【解析】a!b语法错误。

95、【答案】A

【解析】宏运算,将所有文本替换完再运算。

S1(a+b,a+b)替换为a+b*a+b=2+3*2+3=11

S1(b+a,b+a)替换为b+a * b+a =3+2*3+2=10

S2(a+b,a+b)替换为(a+b)(*a+b)= (2+3)*(2+3)=25

96、【答案】A

【解析】BC选项都是将第1个数据(个数)读入给datao数组。D选项由于先执行了i++,那么循环里面第一次给数组的a[1]读入数据,并未给a[0]读入数据。

97、【答案】A

【解析】通过fopen打开文件,然后再经过for循环将数组的5从个元素从最后一个开始写入文件,即写入文件的内容为6,5,4,3,2,1。再执行rewind将文件指针指向文件起始位置。然后再通过第二个for循环每次读取文件里面一个元素,并输出对应值。

98、【答案】D

【解析】fwrite()是从第一个参数开始读取,读第二个参数*第三个参数的乘积为个数。。ABC三个选项中第二和第三个参数相乘都是10,只有D选项相乘是1.所以D选项只读取了一个元素。

99、【答案】B

【解析】room数组有4个元素,room是数组名,即是首地址指向第一个元素room[0]。本题输出的是(room+2)->name表示第三个元素的name成员,(room+2)->age表示第一个元素的age成员。所以选择B。

100、【答案】B

【解析】宏运算,所有替换完再运算。HA*(HA+HB(2))可以替换为HA*(HA+(HA+1)*a)= 2*(2+(2+1)*2)=16。

101、【答案】D

【解析】用户定义类型。通过typedef  struct{ int x,y; }  *USER;将USER定义为结构体指针类型。

102、【答案】A

【解析】结构体成员中的name是数组名,所以(*p).name表示t结构体变量中的name数组的数组名,由于数组名是常量,不可给常量赋值,所以选项错。

103、【答案】D

【解析】A选项int是关键字不可用作用户标识符。B选项define不可大写,C选项多了一个#号。

104、【答案】A

【解析】固定概念,其代表内存块的首地址。

105、【答案】D

【解析】以w即写的方式打开文件时,若文件不存在系统将按照指定的文件名新建一个文件。新建文件后文件就已经存在,那么if为真,则输出“不能打开文件“。

106、【答案】A

【解析】BC选项多了一个#号。D选项int是关键字不可用作用户标识符。

107、【答案】C

【解析】typedef作用是给已经有的类型另外取名。定义T b。可以认为b就是T。由于题目问题谁和b相同,那么只需要用a换掉T即可。

108、【答案】C

【解析】1、传地址,地址指向内容发生改变,实参就变。

2、传地址,地址指向内容发生改变,实参就变。

3、传值形参不改变实参。

本题中通过f(d)传递的是地址,由于执行了*a=*p,在f函数中改变是地址指向的内容,所以实参就变,并且执行了a->score[2]= a->score[0] + a->score[1],所以a->score[2]=95+96=191。所以两个输出均为huang,m,95,96,191。

109、【答案】D

【解析】结构体数组有两个元素,每个元素分别又有两个成员。即第一个元素为:{“c++”,36.0},第二个元素为:{“java”,23.59}。prog是数组名,为首地址,指向第一个元素,那么prog+1指向第二个元素。

题目要求输出的是第二个元素的name成员和第一个元素的price成员。即先输出java,然后再输出36.0。

110、【答案】A

【解析】考查位运算和逻辑运算。x转为二进制是00100100,将其右移两位得00001001,转为十进制是9。由于’A’

111、【答案】D

【解析】1、传地址,地址指向内容发生改变,实参就变。

2、传地址,地址指向内容发生改变,实参就变。

3、传值形参不改变实参。

本题通过fun(a,b,q)传递给fun函数的p1,p2,s。三个形参均是指针变量(地址)。在fun函数中首先通过动态分配给指针变量,即改变了地址值,符合上面第二条,所以实参不会变,还是初值。由于q在main函数中被赋空值,即q不指向任何内容。所以不能通过*引用其指向的内存单元。所以运算错误。

112、【答案】A

【解析】fwrite的第二个参数是每个数据的字节数,第三个参数书写次数。所以本题选择A。

113、【答案】A

【解析】B选项不能有两个#号。C选项define不能大写。D选项int是关键字,不用用作用户标志符。

114、【答案】B

【解析】固定概念。

115、【答案】B

【解析】宏运算是所有文本替换完了再进行运算。

S(k+j)替换为:k+j/ k+j* k+j=6+3/6+3*6+3=27。

S(j+k)替换为:j+k / j+k * j+k =3+6/3+6*3+6=29。

116、【答案】A

【解析】概念。略。

117、【答案】A

【解析】宏替换,即文本替换。#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。

所以选择A。

118、【答案】D

【解析】引用结构体成员的三种正确方式:

结构体变量名.成员名

结构体指针变量名->成员名

(*结构体指针变量名).成员名。

由于stu是结构体变量。所以D选项引用方式错误,不应该用箭头表示。

119、【答案】D

【解析】A选项00000101|00001000=00001101,再转为十进制是14为真。

B选项8%5==3为真。C选项逻辑与两边同时为真,即为真。

D选项00000101&00001000=00000000转为十进制为0,即假值。

120、【答案】B

【解析】宏运算是将所有文本替换完再进行运算。本题中将PRINT( F(5)*2 )用PR(F(5)*2);putchar('\n')替换,将PR(F(5)*2)用printf('%d',(int)( F(5)*2))替换,再将F(5)用2.84+5替换,最后替换结果为printf('%d' ,(int)(2.84+5*2));putchar('\n'),运行结果为:12。B选项正确。

121、【答案】B

【解析】题目所说明结构体有两个成员,分别为整数num和结构体data,而结构体data又有三个成员。B选项中1001对应的是结构体的第一个成员。2008,8,1是结构体第二个成员即内存中的结构体,应作为一个整体来处理。所以1001不能单独括起来,2008,8,1可以作为一个整体括起来。

122、【答案】C

【解析】对文件进行写的操作最后一定要对文件进行关闭。否则会引起数据丢失。

123、【答案】A

【解析】本题结构体类型有两个成员,分别为x,y。并定义了结构体数组a,有两个元素分别为a[0],a[1]。a[0].y=3,a[0].x=4,a[1].x=2。输出结果是3/4*2==0。

124、【答案】C

【解析】FNA(FNB(a))先替换为FNA(a+a),再替换为a+a*a+a=2*2+2*2==8。

FNB(FNA(B))先替换为FNB(a*a),再替换为a*a+ a*a=4*4+4*4=32。

125、【答案】B

【解析】在main函数定义两个结构体变量分别为a和b。ab两个变量分别有四个成员:name[9]、gender、score、next。在main函数中,先将b的地址赋值给a的指针域,即让a.next指向结构体变量b。调用f(&a)即传递变量a的地址给f函数的形参a,然后通过赋值改变指针a指向的结构体成员,即改变指针指向的内容。对应main实参会变为Sun,f,90。在f函数中,又将d赋值给*a.next。所以a.next->name,a.next->gender,a.next->score三个即为d.name,d.gender,d.score结构体成员。即输出结果为:Sun,f,90,Li,m,100。

126、【答案】B

【解析】每次以w(写)方式打开res文件,都会将原有的内容覆盖。所以res文件中以最后一次写入为准。最后一次写入的是'K’+2==’M’。

127、【答案】B

【解析】m转为二进制是00100001,n转为二进制是01000010。

m=m^n=00100001^01000010==01100011

n=n^m=01000010^01100011==00100001转为二进制是33,

m=m^n=01100011^00100001==01000010转为二进制是66。

128、【答案】A

【解析】malloc是动态分配内存赋值给p,并不是p去申请内存,所以B错。分配的250个int类型的内存共250*4==1000个字节,正好是125个double类型的内存大小,经强制转换后可以用来存放double数组。

129、【答案】D

【解析】”wb”,“w+”,“w”三种写的方式打开文件时都会将文件原有内容覆盖,即原有内容会消失,所以不能实现信息补充的功能。

130、【答案】A

【解析】B选项define不可大写,C选项不可有两个#号,D选项char是关键字,不可用作用户标识符。

131、【答案】D

【解析】p指向a[0]。A选项(*p).n表示5。(*p).n++先加用后加,其值为5。

B选项P++先用后加。所以p++->n的值即p->n的值,也为5。

C选项->优先级高于++,所以p->n++可以理解为(p->n)++,值也为5。

D选项执行++p会使p指向第二个元素。那么(++p)的值也是第二个元素的地址。所以(++p)->n的值为6。

132、【答案】A

【解析】用户定义类型,给已经有的用户类型换个名。本题可以理解为将int *类型换个名为INTEGER,所以D选项错。所以INTEGER   p可等价于int *p。所以p是基类型为int类型的指针,A选项正确,B选项错。INTEGER *q可以理解为int **q。q是基类型为int类型的二级指针。

133、【答案】A

【解析】位运算要先转为二进制。x转为二进制是00000100。

z1=x>>y,即将x右移两位得z=00000001转为十进制是1。z2=x<

134、【答案】D

【解析】题目已经将变量s2赋值给s1,所以s1中的name成员也变为“=”。

135、【答案】A

【解析】略。

c语言国二sizeof题目,国二c语言选择题参考答案相关推荐

  1. 菱形数阵c语言,二年级奥数数阵习题及参考答案.doc-资源下载在线文库www.lddoc.cn...

    二年级 奥数 数阵习题及参考答案.doc 2016春季数学集训二队每周习题3参考答案星期一1.将自然数1,2,3,按下表的规律排列.问55应该出现在哪个字母所在的一列如果1.2.3.4所在的那行称作第 ...

  2. vb计算机水平考试笔试,2007年4月全国计算机等级考试二级VB笔试试卷及参考答案...

    一. 选择题(第小题2分,共70分) 下列各题A).B).C).D)四个选项中,只有一个选项是正确的.请将正确选项填涂在答题卡相应位置上,答在试卷上不得分. (1) 下列叙述中正确的是 A) 算法的效 ...

  3. 周信东c语言实验二实验报告,实验三 循环结构程序设计参考答案

    C语言实操课循环结构答案 实验三 循环结构程序设计(参考答案) 1.设计程序sy3-1.c ,要求打印小学九九乘法表. 算法分析: 根据九九乘法表可知,该表共有9行,第i行有i个表达式,而且表达式中的 ...

  4. c语言 若未给全局变量赋初值,自我测试练习参考-答案.doc

    . <C语言程序设计案例教程>自我测试练习参考答案 (主编:王明福) 第1章 初识C语言 一.单选题 1. 下面叙述错误的是( A ). A.C程序中可以有若干个main()函数 B.C程 ...

  5. c语言课程设计的题目有哪些,C语言课程设计题目

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 18.学生管理系统(限最多2人完成) 使用下面的数据,用C设计一个简单的学籍管理系统,实现出最基本的功能. 学生基本信息文件(A.TXT)及其内容:A.T ...

  6. 全国计算机等级一级b真题,2011年3月全国计算机等级考试一级B真题及参考答案.doc...

    文档介绍: 2011年3月全国计算机等级考试一级B真题考试试卷(考试时间90分钟,满分100分)一.选择题(每小题1分,共20分)下列选择题A).B).C).D)四个选项中,只有一个选项是正确的.(1 ...

  7. c语言 课程作业答案,《C语言程序设计A》课程形成性考核作业一参考答案

    一 一 选择题选择题 1 在每个 C 语言程序中都必须包含有这样一个函数 该函数的函数名为 A A main B MAIN C name D funtion 2 C 语言原程序文件的缺省扩展名为 A ...

  8. 国开计算机网络 形考4,国开电大计算机网络(本)形考作业四参考答

    国开电大计算机网络(本)形考作业二参考答案_韩语学习_外语学习_教育专区 null 题目1.局域网的分类,按网络的拓扑结构划分,可分为星型.( )和环型局域网. A. 树型 B. 网状型 C. 网格型 ...

  9. 计算机基础表格模拟题,4月全国网络统考资料《计算机应用基础》模拟题及参考答案——电子表格...

    <4月全国网络统考资料<计算机应用基础>模拟题及参考答案--电子表格>由会员分享,可在线阅读,更多相关<4月全国网络统考资料<计算机应用基础>模拟题及参考答案 ...

最新文章

  1. 三层交换机原理:01路由器如何隔离广播域?
  2. FD.io/VPP — QoS — DPDK Hqos
  3. php获取图高度,PHP imagesx()、imagesy() – 获取图像宽度与高度_程序员人生
  4. susan算子的运用
  5. 节前福利 | 三位大佬带你从客户成功、销售、市场端打造 To B 运作体系 !
  6. bzoj 1632: [Usaco2007 Feb]Lilypad Pond【bfs】
  7. ThreadLocal原理及用法详解
  8. luogu4267 TamingtheHerd (dp)
  9. QTP和WinRunner区别
  10. 什么电脑的牌子好用_什么牌子的盘点机好用?
  11. Spring boot 配置文件,输入key值,自动补全--- 通过安装插件实现
  12. hibernate运行很慢?查一张只有几条记录的表都要一俩分钟?[问题记录]
  13. 3dmax如何显示参考图_3dmax怎么在视图中放入参照
  14. 编程零基础,如何学 Python ?
  15. 一个用户在同一时间只能登录一次
  16. 在Ubuntu上使用Netdata设置实时性能监控
  17. linux u盘 修复工具,如何在Linux终端中修复U盘驱动器问题
  18. 机器学习分类算法之支持向量机
  19. Fluentd (td-agent) 日志处理
  20. Shifting Letters

热门文章

  1. 还在为多集群管理烦恼吗?OCM来啦!
  2. 【Element-UI】Vue项目引入element-ui
  3. SuperMap画圆的周边查询
  4. 多重继承关系的初始化顺序
  5. MFC CString显示中文为乱码问题
  6. 知乎|为什么更愿意一个人生活?
  7. font:综合设置字体样式 (重点)
  8. Python中pyautogui安装-用pyautogui写脚本让鼠标自动点击给摩尔庄园毛毛树浇水施肥
  9. 加域时提示找不到网络路径
  10. java datediff_JAVA中的时间操作(附DATEDIFF函数用法)