2021-2022年山西省运城市全国计算机等级考试C语言程序设计真题(含答案)_第1页
2021-2022年山西省运城市全国计算机等级考试C语言程序设计真题(含答案)_第2页
2021-2022年山西省运城市全国计算机等级考试C语言程序设计真题(含答案)_第3页
2021-2022年山西省运城市全国计算机等级考试C语言程序设计真题(含答案)_第4页
2021-2022年山西省运城市全国计算机等级考试C语言程序设计真题(含答案)_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2021-2022年山西省运城市全国计算机等级考试C语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________

一、单选题(20题)1.下面程序运行后的输出结果是______。structabc{inta,b,c;}main(){structabcs[2]={{1,2,3},{4,5,6}};intt=s[0].a+s[1].b;printf("%d\n",t);}

A.5B.6C.7D.8

2.设线性链表中结点的结构为(data,next)。若想删除结点p的直接后继,则应执行下列()操作。

A.p->next=p->next->next;

B.p=p->nextp->next=p->next->next;

C.p->next=p->next;

D.p=p->next->next;

3.有以下程序:程序运行后的输出结果是()。A.13442B.13431C.01234D.02431

4.在软件开发中,需求分析阶段产生的主要文档是()。A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书

5.有以下程序:#include<stdio.h>main(){chara[5][10]={“China”,“beijing”,“very”,“welcome”,“you”};char*p[5];inti;for(i=3;i<5;i++){p[i]=*(a+i);printf(“%s”,p[i]);printf(“%c”,*p[i]);}}程序运行后的输出结果是()。

A.wwyyB.ChinaCbeijingbC.veryvwelcomewD.welcomewyouy

6.快速排序在_____情况下最易发挥其长处。

A.被排序数据中含有多个相同排序码

B.被排序数据已基本有序

C.被排序数据完全无序

D.被排序数据中最大值和最小值相差悬殊

7.下列语句组中正确的是()。

A.char*s;s={“BOOK!”};

B.char*s;s=“BOOK!”;

C.chars[10];s=“BOOK!”;

D.chars[];s=“BOOK!”;

8.

9.

10.选出任何情况下都不引起二义性的宏定义()。

A.#definePOWER(x)x*x

B.#definePOWER(x)((x)*(x))

C.#definePOWER(x)(x*x)

D.#definePOWER(x)(x)*(x)

11.下面不属于需求分析阶段任务的是()。

A.确定软件系统的功能需求B.确定软件系统的性能需求C.制定软件集成测试计划D.需求规格说明书评审

12.一个顺序表的第一个元素的存储地址是100,每个元素的长度为5,则第7个元素的地址是()。

A.130B.125C.120D.135

13.设"char**s;",以下正确的表达式是()。

A.s="computer";B.*s="computer";C.**s="computer";D.*s='c';

14.下列代码的复杂度是多少?如果多于1个答案正确,选择最小的那个。()A.O(n*m*m)B.O(n*log(m)*m)C.O(n+m+m)D.O(n*m)

15.下面关于数据库系统中叙述正确的是()。

A.数据库系统减少了数据冗余

B.数据库系统避免了一切冗余

C.数据库系统中数据的一致性是指数据类型的一致

D.数据库系统比文件系统能管理更多的数据

16.假设下图中每个正方形的边长为1,则从A到Z的最短路径条数为()A.11B.12C.13D.14

17.下列选项中,当X为大于1的奇数时,值为0的表达式是()。

A.x%2==0B.x/2C.x%2!=0D.x%2==1

18.设有定义:intx=2.以下表达式中,值不为6的是()。A.2*x,x+=2B.x++.2*xC.x*=(1+x)D.x*=x+1

19.

20.有以下程序:

程序运行后的输出结果是()。A.AaB.AbC.abD.Ba

二、2.填空题(20题)21.下面程序的运行结果是【】。

intf(inta[],intn)

{if(n>1)returna[0]+f(&a[1],n-1);

elsereturna[0];

}

main()

{intaa[3]={1,2,3},s;

s=f(&aa[0],3);

printf("%d\n",s);

}

22.注释一般分为序言性注释和______注释。

23.将以下程序写成三目运算表达式是【】。

if(a>b)max=a;

elsemax=b;

24.下述函数用于统计—行字符中的单词个数,单词之间用空格分隔。

word_num(str)

charstr[];

{int,num=O,word=O;

for(i=0;str[i]!=【】;i++)

if(【】=")wprd=0

elseif(word=O)

{

word=1:

【】;

}

return(num);

}

25.以下程序运行后的输出结果是()。main(){inta,b,c;a=10;b=20;c=(a/b<1)&&(a%b<1);printf("%d%d%d\n",a,b,C);}

26.若有以下程序

main()

{inta[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-21,32,-33,0}};

inti,j,s=0;

for(i=0;i<4;i++)

{for(j=0;j<4;j++)

{if(a[i][j]<0)continue;

if(a[i][j]==0)break;

s+=a[i][j];

}

}

printf("%d\n",s);

}

执行后输出结果是【】。

27.常用的黑箱测试有等价分类法、【】、因果图法和错误推测法4种。

28.下列程序段的输出结果是【】。

intn='c';

switch(n++)

{default:printf("error");break;

case'a':

case'A':

case'b':

case'B':printf("good");break;

case'c':case'C':printf("pass");

case'd':case'D':printf("warn");

}

29.以下程序的输出结果是______。

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

main()

{inti=3,j=5,*p=&i,*q=&j;

swap(p,q);printf("%d%d\n",*p,*q);

}

30.当循环队列非空且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算。这种情况称为【】。

31.某二叉树中度为2的结点有18个,则该二叉树中有【】个叶子结点。

32.以下说明语句中,【】是结构体类型名。

typedefstruct

{intn;

charch[8];

}PER;

33.数据库系统其内部分为三级模式,即概念模式、内模式和外模式。其中,______是用户的数据视图,也就是用户所见到的数据模式。

34.下面程序的输出结果是【】。

#include<stdio.h>

main()

{staticchara[]="language",b[]="program";

char*ptr1=a,*ptr2=b;

intk;

for(k=0;k<7;k++)

if(*(ptr1+k)==*(ptr2+k))

printf("%c",*(ptr1+k));}

35.函数compare的功能是比较两个字符串是否相等,若相等则函数返回1,否则返回o,请填空。

compare(chars[],chart[])

{

inti=0

while(s[i]==t[i]&&【】)i++;

return(【】?1:0);

}

36.下面程序的功能是输出数组s中最大元素的下标,请填空。

main()

{intk,p,s[]={1,-9,7,2,-10,3};

for(p=0,k=p;p<6;p++)

if(s[p]>s[k])【】

printf("%d\n",k);}

37.若输入字符串:(图片),则以下while循环体将执行【】次。

while((ch=getchar())=='e')printf("*");

38.没有chara,b;,,若要通过a&b运算屏蔽掉a中的其他位,只保留第2位和第8位(右起为第1位),则b的二进制是【】。

39.设有以下定义和语句,则*(*(P+2)+1)的值为【】。

int[3][2]={10,20,30,40,50,60},(*p)[2];

p=a;

40.以下程序的输出结果是【】。

main()

{

intarr[]={30,25,20,15,10,5},*p=arr;

p++;

printf("%d\n",*(p+3));

}

三、1.选择题(20题)41.请选出以下程序的输出结果#include<stdio.h>main(){inta[]={1,2,3,4},i;intx=0;for(i=0;i<4;i++){sub(a,x);printf("%d",x);}printf("\n");}sub(s,y)int*s,y;{staticintt=3;y=s[t];t--;}

A.1234B.4321C.0D.4444

42.有以下程序:#include<string.h>voidf(charp[][10],intn)/*字符串从小到大排序*/{chart[10];inti,j;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(strcmp(p[i],p[j])>0){strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);}}main(){charp[5][10]={"abc","aabdog","abbd","dcdbe","cd"};f(p,5);printf("%d\n",strlen(p[0]));}程序运行后的输出结果是()。

A.2B.4C.6D.3

43.有以下程序:main(){charstr[][10]={"China","Beijing"),*p=str;printf("%s\n",p+10);}程序运行后的输出结果是()。

A.ChinaB.BeijngC.ngD.ing

44.设有下列二叉树:

对此二叉树中序遍历的结果为

A.ABCDEFB.DAECFC.BDAECFD.DBEFCA

45.若有说明语句:double*P,a;则能通过scanf语句正确给输入项读入数据的程序段是()。

A.*p=&a;scanf("%lf",p);

B.*p=&a;scanf("%f",p);

C.p=&a;scanf("%lf",*p);

D.p=&a;scanf("%lf",p);

46.下面程序输出的结果是

main()

{inti;

inta[3][3]={1,2,3,4,5,6,7,8,9};

for(i=0;i<3;i++)

printf("%d",a[2-i][i]);}

A.159B.753C.357D.591

47.若主函数中有以下定义和语句:main(){doublea[3][4];……fun(a);}则正确的fun函数的首部是()

A.voidfun(double*s)

B.fun(double*s[4])

C.fun(double(*s)[3])

D.voidfun(double(*s)[4])

48.X、Y、2被定义为int型变量,若从键盘给X、Y、Z输入数据,正确的输入语句是______。

A.INPUTX,Y,Z;

B.scanf("%d%d%d",&X,&Y,&Z);

C.scanf("%d%d%d",X,Y,Z);

D.read("%d%d%d",&X,&Y,&Z);

49.对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为

A.10g2nB.n/2C.nD.n+1

50.字符(char)型数据在微机内存中的存储形式是______。

A.反码B.补码C.EBCDIC码D.ASCII码

51.以下合法的字符型常量是

A.′\x13′B.′\081′C.′65′D.\n

52.运行下面程序时,从键盘输入字母H,则输出结果是main(){charch;ch=getchar();swimh(ch){case'H':printf("Hello!\n");case'G':printf("Goodmorning!\n");default:printf("Bye_Bye!\n");}}

A.Hello!

B.Hello!GoodMoring!

C.Hello!Goodmoming!Bye_ye!

D.Hello!Bye_ye!

53.结构化程序设计方法的3种基本控制结构中不包括

A.循环结构B.递归结构C.顺序结构D.选择结构

54.以下程序段的while循环执行的次数是______。intk=0;while(k=1)k++;

A.无限次B.有语法错,不能执行C.一次也不执行D.执行1次

55.下面叙述不正确的是

A.算法的执行效率与数据的存储结构有关

B.算法的空间复杂度是指执行这个算法所需要的内存空间

C.算法的有穷性是指算法必须能在执行有限个步骤之后终止

D.算法的时间复杂度是指执行这个算法所需要的时间

56.当执行下面的程序时,如果输入ABC,则输出的结果是()。#include<Stdlib.h>main(){charss[]="1,2,3,4,5";gets(ss);strcat(ss,"6789");printf("%s\n",ss);}

A.ABC6789B.ABDC67C.123ABC678D.ABC456789

57.有如下程序

main()

{charch[2][5]={"6937","8254"},*p[2];

inti,j,s=0;

for(i=0;i<2;i++)p[i]=ch[i];

for(i=0;i<2;i++)

for(j=0;p[i][j]>′\0′;j+=2)

s=10*s+p[i][j]-′0′;

printf("%d\n",s);}

该程序的输出结果是

A.69825B.63825C.6385D.693825

58.设x=2.5、a=7、y=4.7,算术表达式x+a%3*(int)(x+y)%2/4的值为______。

A.2.5B.7C.4.7D.2.75

59.当执行以下程序段时,______。x=-1;do{x=x*x;}while(!x);

A.循环体将执行1次B.循环体将执行2次C.循环体将执行无限次D.系统将提示有语法错误

60.假定int类型变量占用两个字节,若有定义:intx[10]={0,2,4};,则数组x在内存中所占字节数是______。

A.3B.6C.10D.20

四、选择题(20题)61.

62.要求通过while循环不断读入字符,当读入字母N时结束循环,若变量已正确定义,下列正确的程序段是()。

A.while((ch—getchar)!=N)printf("%c",ch);

B.while(oh=getchar!=N)printf("%c",ch);

C.while(ch=getchar==N)printf("%c",ch);

D.while((ch—getchar)==N)printf("%c",ch);

63.

64.

65.

66.

下列程序的输出结果是()。

voidfun(int*X,inty)

{printf("%d%d",*x,*y);*x=3;*y=1;}

main

{intx=1,y=2;

fun(&y,&x);

printf("%d%d",x,y);

}

A.2143B.1212C.1234D.2112

67.(30)关系数据库管理系统能实现的专门关系运算包括()

A.排序、索引、统计

B.选择、投影、连接

C.关联、更新、排序

D.显示、打印、制表

68.下述程序执行的输出结果是()。

#include<stdio.h>

main()

{chara[2][4];,

strcpy(a。"are");strcpy(a[1],"you");

a[o][3]=&;

printf("%s\n",a);

}

A.are&you

B.you

C.are

D.&

69.下列叙述中正确的是()。

A.循环队列是队列的一种链式存储结构

B.循环队列是队列的一种顺序存储结构

C.循环队列是非线性结构

D.循环队列是一种逻辑结构

70.

71.在下列选项中,哪个不是一个算法一般应该具有的基本特征()。

A.无穷性B.可行性C.确定性D.有穷性

72.

73.有以下程序

74.

下列程序的输出结果是()。

char*point(char*pt):

main

{charb[4]={a,c,s,f),*pt=b;

pt=point(pt);

printf("%c\n",*pt);

}

point(char*p)

{p+=3;

returnp;

}

A.sB.cC.fD.a

75.设有宏定义:

76.

77.在满足实体完整性约束的条件下()。

A.一个关系中廊该有一个或多个候选关键字

B.一个关系中只能有一个候选关键字

C.一个关系中必须有多个候选关键字

D.一个关系中可以没有候选关键字

78.

79.

80.

五、程序改错题(1题)81.下列给定程序中函数proc的功能是:取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为l23456789时,t中的数为2468。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。试题程序:

六、程序设计题(1题)82.使用vc++2010打开文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是在一组得分中,去掉一个最高分和一个最低分,然后求平均值,并通过函数返回该值。函数形参a指向存放得分的数组,形参n中存放得分个数(n>2)。例如,若输入9.98.57.68.59.39.58.97.88.68.4共10个得分,则输出结果为8.687500。注意:部分源程序存放在文件prog1.c中,请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。试题程序:

参考答案

1.B解析:在main函数中定义了一个structabc类型的数组,同时分别利用{1,2,3}及{4,5,6}对数组中两个元素进行初始化。在该结构体,依次对其中的a,b,c三个变量进行初始化。故s[0].a=1,s[1].b=5,所以本题输出为6。

2.A

3.Bmain函数中定义包含5个元素的数组m,每个元素都是NODE类型。指针p指向数组第1个元素,指针q指向数组最后一个元素。while循环使用p、q从首尾向中间遍历,遍历的同时为各个元素赋值。所以第1轮循环,i的值为0,先执行的值为++i,后执行i++的值也为1,m[0].k和m[4].k的值都为1;接着第2轮循环,i的值为2,先执行的值为3,后执行i++的值也为3,m[l].k和m[3].k的值都为3;第3轮循环,p和q指向的都是m[2]元素,指针相同,循环结束,此时i的值为4,即m[2].k赋值为4。综上,程序输出:13431。本题答案为B选项。

4.D需求分析阶段的工作可以概括为:需求获取、需求分析、编写需求规格说明书、需求评审四个方面。所以选择D。

5.Dmain函数定义一个二维字符数组a,它包含5个字符串,每个字符串存放在一个长度为10的一维数组中。指针数组P包含5个字符指针元素。for循环中,每次将*(a+i)赋给P[i],再输出P[i]和*P[i]。由于*(a+i)等价于a[i],因此每次都是将下标为i的字符串首地址赋给p[i],再输出该字符串和该字符串的首字符。i=3时,输出字符串“welcome”和首字符“w”;i=4时,输出字符串“you”和首字符“y”。综上,输出结果为welcomewyouy。故本题答案为D选项。

6.C

7.BA选项去掉花括号后,赋值正确;C选项和D选项应在定义时赋初值,因为数组名相当于常量,不能重新赋值。故本题答案为B选项。

8.C

9.C

10.B解析:引起带参数宏的二义性主要有两个方面:一是,参数之间因运算符优先级不确定而带来的二义性。例如本题的选项A),若程序中使用POWER(a+b),会展开为a+b*a+b,这样就会先计算b*a的值,然后再加一个a和一个b,产生二义性。杜绝这种二义性的方法是在宏定义的每个参数外加上圆括号以保证总是先计算每个参数的值,就好像本题的选项D)那样。另一个是,整个宏所代表的表达式因运算符优先级不确定而带来的二义性。例如本题的选项D),若程序中使用a/POWER(b),会展开为a/(b)*(b),这样就会先计算a/b的值,然后再乘以b,产生二义性。杜绝这种二义性的方法是对整个宏定义加一个圆括号,就好像本题的选项B)那样。故选项B)在任何情况下都不会引起二义性,应该选B。

11.C【答案】:C

【知识点】:需求分析阶段的任务

【解析】:需求分析阶段的任务是深入描述软件的功能和性能,确定软件设计的约束和软件同其他系统元素的接口细节,定义软件的其他有效性需求,借助于当前系统的逻辑模型导出目标系统逻辑模型,解决目标系统“做什么”的问题。可分为需求提出、需求描述及需求评审三个阶段。从此可以看出需求分析的任务不包括制定软件集成测试计划,故选C。

12.A

13.B

14.D

15.A\n数据的共享自身又可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不一致性。所谓数据的一致性是指在系统中同一数据在不同位置出现时应保持相同的值。

\n

16.C

17.A算术运算符的优先级高于关系运算符的优先级。所以当x为大于1的奇数时,A选项的值为假,即0。B选项的值为不定值,但绝对不是0。C选项的值为真,即1。0选项的值为真,即1。故本题答案为A选项。

18.A[解析]A)选项中逗号表达式先计算第一表达式2*x,然后计算表达式x+=2的值,即x=x+2即4.整个逗号表达式为第二个表达式的值4.所以选A)。B)选项中首先计算逗号表达式中第一个表达式x++,此时x为3.再执行第二个表达式2*x=2*3=6.所以逗号表达式为第二个表达式的值6.C)选项的赋值表达式可以表示为x==x*(1+x)=2*(1+2)=6.D)选项中的表达式可以表示为x=x*(x+1)=2*3=6.

19.A

20.B函数fun将形参b赋给形参a,使得a和b都指向原b所指向的地址,然后对该地址的值执行自增1;main函数中p1指向ch1,p2指向ch2。通过fun函数的调用,将ch2的值完成自增1,字符’a’自增1后变成字符’b’,所以程序输出:Ab。本题答案为B选项。

21.66解析:经过分析将递归函数写成其数学表达式如下:

本题中定义了一个长度为3的数组aa并初始化。接着调用递归函数f,由上面的数学表达式以计算其返回值s=1+2+3=6,所以空格处应该填6。

22.功能性功能性解析:注释一般分为序言性注释和功能性注释。序言性注释通常位于每个程序的开头部分,给出程序的整体说明;功能性注释一般嵌在源程序体之中,主要描述其后的语句或程序做什么,

23.max=(a>b)?a:b;max=(a>b)?a:b;解析:本题考查三目运算符的用法,条件运算符要求有三个操作对象,称三目(元)运算符,它是C语言中惟一的一个三目运算符。条件表达式的一般形式为:表达式1?表达式2:表达式3所以,我们可以写成(a,b)?a:b,它是一个“条件表达式”。执行顺序是:如果(a>b)条件为真,则条件表达式取值a,否则取值b。注意:逗号表达式的执行原理。

24.\0'或0或NULLstr[i]num++或num=num+1或mum+=l\\0'或0或NULL\r\nstr[i]\r\nnum++或num=num+1或mum+=l解析:观察题目要求,可以知道以下几点:

①for循环的结束条件应当是:str[i]已是字符串的最后一个字符;

②str[i]代表字符串str中的第i+1个字符;

③整型变量num的值是要记录的单词的个数。

C语言中规定字和会串的最后一个字和会是一个隐含的字符串结束符“\\0”,所以在题中第一个空中应填写“\\0”;题中第二个空应填写“str[i]”,以判断当前位置的字符是否为空格;题中第三个空中应当填写“num++”,通地变量num的加1累加到字符串中的单词个数。

25.1020010200解析:本题考查的是混合运算。“(a/b<1)&&(a%b<1)”的运算顺序为:括号>算术运算符>关系运算符>逻辑运算符。其中a%b=10,a,b=0,所以a%b<1的值为0,a/b<1的值为1,故整个表达式的结果为0,所以输出的a,b,c的值为10200。

26.5858解析:本题中处理二维数组元素用了两重循环,外循环变量i表示数组的行,内层循环变量j表示数组的列。在第二重循环中首先判断数组元素的值是否小于0,若是则处理该行的下一个元素;若不是则判断a[i][j]的值是否等于0,若等于0则退出内层循环开始处理下一行;其他情况下,把a[i][j]的值加到变量s中。所以本程序段的功能是把每行值为0的元素前面的所有大于0的元素值加到变量s中。

27.边值分析法边值分析法解析:本题考查了黑箱测试的方法。黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价分类法、边值分析法、因果图法和错误推测法。

28.passwarnpasswarn解析:n++是在执行完其所在的语句后再加1,因此,在执行case的时候,n的值依然为'c',执行case'c'后面的语句,先打印出“pass”;在执行完case'c'后,未遇到break跳出switch,便接着执行下面的语句,又打印出warn。所以此题输出结果是passwarn。

29.3535解析:函数swap(int*a,int*b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,参形指针变量a和b分别指向i和j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为35。

30.上溢上溢解析:入队运算是指在循环队列的队尾加入一个新元素。这个运算有两个基本操作:首先将队尾指针进一(即rear=rear+1),并当rear=m+1时置rear=1;然后将新元素插入队尾指针指向的位置。当循环队列非空(s=1)时且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算,这种情况称为“上溢”。

31.1919解析:根据二叉树的性质:在任意一棵二叉树中,度为。的结点(即叶子结点)总是比度为2的结点多一个。本题中度为2的结点数为18,故叶子结点数为18+1=19个。

32.PERPER解析:本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来定义变量。

33.外模式外模式解析:数据库系统的三级模式分别是内模式、概念模式和外模式。其中,物理模式给出了数据库的物理存储结构和存取方法;概念模式是数据库系统中全局数据逻辑结构的描述;外模式是用户的数据视图,也就是用户所见到的数据模式。

34.gaga解析:考查了用字符指针处理字符串的方法。用字符指针处理字符串,首先要使指针指向这个字符串,即题中的ptr1=a和ptr2=b,然后就是通过指针的移动可以引用到字符串中的每一个字符。题中的*(ptr1+k)是使指针ptr1向后移动k个位置,然后取出指向的字符。

35.s[i]&&t[i]或s[i]!='\0'&&t[i]!='\0'!(s[i]-t[i])s[i]&&t[i]或s[i]!='\\0'&&t[i]!='\\0'\r\n!(s[i]-t[i])解析:while后括号中的判断条件为两个字符串相同位置上的字符相等,且两个字符串都没有结束,则循环。故第一空应该填s[i]&&t[i]或其他等价表达式。如果两个字符串完全相等,则while循环退出时s[i]和t[i]的值同时为0,否则s[i]和t[i]不相等。故表达式s[i]-t[i]在字符串相等时为0,不相等时为非0,所以第二空应该填!(s[i]-t[i])就满足题意了。

36.k=p;k=p;解析:为寻找数组中最大元素的下标,需先预设1个临时最大元素的下标,并顺序逐一考查数组的元素,当发现当前元素比临时最大元素更大时,就用当前元素的下标更新临时最大元素下标。直至考查了数组的全部元素后,这临时最大元素下标就是数组的最大元素下标。通常预设的最大元素下标是数组的首元素下标,考查通常从首元素开始顺序向后继元素考查。程序中,存储临时最大元素下标的变量是k,变量p控制顺序考查的循环控制变量。当发现当前元素s[p]比临时最大元素s[k]更大时,应该用p更新k,所以在空框处应填入代码'k=p;'。

37.00解析:函数getchar()是从键盘得到用户输入的一个字符。用户输入的第1个字符是a,不管后面输入的是什么ch的值都是'a',因此条件(ch=getchar())=='e'为假,这个循环不会被执行。

38.1000001010000010解析:运算“&”的规则是只有当两个相应的二进制位都为1时,该位的结果才为1。要保留第2、8位,只要将其与二进制数10000010相与。

39.6060解析:本题定义了一个3行2列的二维数组a,并定义了一个指向两个元素的一维数组指针p,让p指向二维数组a的首行。*(*(p+2)+1)是引用a[2][1],其值是60。

40.1010解析:整型指针最初被赋的值是数组arr的头指针,即指向数组的第一个元素30,p++后,指针指向数组的下一个元素,即*p=arr[1]=25,在执行*(p+3)时,则相当于a[1+3],即10。因此,输出应为100。

41.C解析:若指针s指向数组a,则s[t]可以引用数组a中下标为t的元素。注意:通过数组的首地址引用数组元素。

42.C解析:题目中已告知函数f()的作用是将字符串从小到大排序,因此主函数中调用完f(p,5);后,二维数组p中的内容为('aabdfg','abbd','abc','cd','dcdbc'}。输出的结果是strlen(p[0]),即p中第1个字符串的长度,所以结果是6。故本题应该选择C。

43.B解析:本题中首先定义了一个字符串数组并初始化,初始化后使得str[0]='China',str[1]='Beijng',然后定义一个指针变量p并让其指向str,而在该二维数组中定义每个字符串的长度为10,所以p+10将指向str[1],因此最后输出*(p+10)的值为Beijng。所以,4个选项中选项B符合题意。

44.C解析:叉树的遍历分为先序、中序、后序三种不同方式。本题要求中序遍历,其遍历顺序应该为:中序遍历左子树->,访问根结点->中序遍历右子树.按照定义,中序遍历序列是BDAECF,故答案为B。

45.D解析:*p间接引用指针指向的变量,因此“(*p)=&a”不对。scanf()的输入变量必须为地址,因此C是错误的。

46.B解析:本题用循环的方法考查对数组概念的掌握。首先,当i=0时,数组中的位置是a[2][0]=7,当然,如果用排除法,就不用考虑后面的循环,因为在4个选项中,第1个数为7的选项只有B)。本题执行第2次循环时,i的值为1,则printf函数中的数组指向为a[1][1]=5,依次循环,可求出答案。

47.D

48.B解析:C语言中没有输入输出语句,它是通过C语言提供的函数来实现的,本题C中,应为变量地址。

49.C解析:对于长度为n的有序线性表,在最坏情况下,二分查找只需要比较logn2次,而顺序查找需要比较n次。

50.D解析:将—个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的ASCII码值放到存储单元中。

51.A解析:C语言的字符常量是用单引号(即撇号)括起来的一个字符。除此之外,在C语言中还允许用一个'\\'开头的字符序列来表示字符常量。其中,形式'\\ddd'表示1到3位8进制数所代表的字符;形式'\\xhh'表示1到2位16进制数所代表的字符。在本题中,\'\\x13\'表示回车符,是一个字符常量;\'\\081\'用8进制数所代表的字符,但形式不正确,因为8进制数所代表的字符中不会出现数字'8';\'65\'不是一个字符,而是一个十进制数字;'\\n'是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。

52.C解析:本题主要对switch语句进行了考查。switch语句的执行过程为:进入switch结构后,对条件表达式进行运算,然后从上至下去找与条件表达式值相匹配的case,以此作为入口,执行switch结构中后面的各语句,直到遇到break语句,则跳出switch语句,如果各case都不匹配时,则执行de-fault后面的语句。本题中ch为字符'H',所以case'H'条件中的语句将被执行,由于没有break语句,所以case'C'后的语句也被执行,由于同样的缺少break语句,所以default后的语句也被执行

53.B解析:本题考查了程序的基本结构。程序由一些基本结构组成。任何一个大型的程序都由3种基本结构组成,由这些基本结构顺序的构成了一个结构化的程序。这3种基本结构为:顺序结构、选择结构和循环结构。

54.A

55.D解析:算法的时间复杂度是指执行算法所需要的计算工作量,故D选项不正确。

56.A解析:本题程序一开始定义了一个字符数组ss,并用一个字符串常量初始化之。然后使用gets()函数从键盘缓冲区读入一个字符串'ABC',此时gets()将改变数组的前4个元素为{\'A\',\'B\',\'C\',\'\\0\'}。接下来的strcat()函数将一个字符串连接到字符串ss之后,因为ss[3]被gets()设置为\'\\0\'(字符串结束标志),故strcat()从ss[3]开始将'6789'依次写入ss[3]、ss[4]、ss[5]、ss[6],并将一个\'\\0\'写入ss[7]。所以输出结果是ABC6789,故应该选择A。

57.C解析:该题稍微难一点。主要要搞清楚以下几点:①定义了一个指针数组char*p[2]后,程序中第一个循环for(i=0;i<2;i++)p[i]=ch[i];的作用,是使指针数组的p[0]元素(它本身是一个指针)指向了二维数组ch的第一行字符串,并使指针数组的p[1]元素指向二维数组ch的第二行字符串,这样,就使指针数组p和二维数组ch建立起了一种对应关系,以后对二维数组ch的某个元素的引用就有两种等价的形式:ch[i][j]或p[i][j]。②对二维数组ch的初始化,使其第一行ch[0]中存入了字符串'6937',第二行ch[1]中的内容为字符串'8254'。③程序中第二个循环中的循环体s=s*10+p[i][j]-\'0\';的功能是这样的,每执行一次,将s中的值乘以10(也即,将s中的数值整体向左移动一位,并在空出来的个位上添一个0),再将当前p[i][j]中的字符量转换为相应的数字,然后把这个数字加到s的个位上。④注意到内层循环的循环条件p[i]\ue009[j]>\'\\0\'是指p[i][j]中的字符只要不是字符串结束标志\'\\0\'就继续循环,语句j+=2;是使下标j每次增加2,也即一个隔一个地从p[i]所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从p[0]所指向的字符串'6937'中一个隔一个地取出字符,分别是\'6\'和\'3\',然后从p[1]所指向的字符串'8254'中一个隔一个地取出字

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论