2021-2022年陕西省咸阳市全国计算机等级考试C语言程序设计测试卷一(含答案)_第1页
2021-2022年陕西省咸阳市全国计算机等级考试C语言程序设计测试卷一(含答案)_第2页
2021-2022年陕西省咸阳市全国计算机等级考试C语言程序设计测试卷一(含答案)_第3页
2021-2022年陕西省咸阳市全国计算机等级考试C语言程序设计测试卷一(含答案)_第4页
2021-2022年陕西省咸阳市全国计算机等级考试C语言程序设计测试卷一(含答案)_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

2021-2022年陕西省咸阳市全国计算机等级考试C语言程序设计测试卷一(含答案)学校:________班级:________姓名:________考号:________

一、单选题(20题)1.已知a,b均被定义为double型,则表达式:a=5/2的值为()。

A.1B.3C.3.0D.2.5

2.

3.下面描述中,符合结构化程序设计风格的是()。

A.使用顺序、选择和重复(循环.三种基本控制结构表示程序的控制逻辑

B.模块只有一个入口,可以有多个出口

C.注重提高程序的执行效率

D.不使用goto语句

4.在待排序文件已基本有序的前提下,下述排序方法中效率最高的是()。

A.直接插入排序B.直接选择排序C.快速排序D.二路归并排序

5.

6.有以下程序:#include<stdio.h>intfun(intX,inty){if(X!=y)return((x+y)/2);elsereturn(x);}main(){inta=4,b=5,c=6;printf("%d/n",fun(2*a,fun(b,c)));}程序运行后的输入结果是()。A.3B.6C.8D.12

7.设x=011050,则x=x&01252的值是()。A.0000001000101000

B.1111110100011001

C.0000001011100010

D.1100000000101000

8.在结构化方法中,软件功能分解属于下列软件开发中的阶段是______。

A.详细设计B.需求分析C.总体设计D.编程调试

9.下列关于c语言用户标识符的叙述中正确的是()。

A.用户标识符中可以出现下划线和中划线(减号)

B.用户标识符中不可以出现中划线,但可以出现下划线

C.用户标识符中可以出现下划线,但不可以放在用户标识符的开头

D.用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头

10.

11.若用一个大小为6的数值来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为()。

A.1和5B.2和4C.4和2D.5和1

12.串的长度是指()。

A.串中所含不同字母的个数B.串中所含字符的个数C.串中所含不同字符的个数D.串中所含非空格字符的个数

13.有以下程序main()inta[10]={1,2,3,4,5,6,7,8,9,10},*p=.&a[3],*q=p+2;printf("%d\n",*p+*q);程序运行后输出结查是

A.16B.10C.8D.6

14.若在线性表中采用折半查找法查找元素,该线性表应该()A.元素按值有序B.构采用顺序存储结C.元素按值有序且采用顺序存储结构D.元素按值有序且采用链式存储结构

15.

16.以下不合法的用尸标识符是()。A.A.804zhangB._hhC.yy614D.If

17.有以下程序:#include<stdio.h>main(){intx=1,y=2,z=3;if(x>y)if(y<z) printf(“%d”,++z);else printf(“%d”,++y);printf(“%d\n”,x++);}程序的运行结果是()。

A.1B.41C.2D.331

18.以下对结构体类型变量的定义中,不正确的是()。

A.typedefstruetaa{intn;floatm;}AA;AAtdl;

B.#defineAAstructaaAA{intn;floatm;}tdl;

C.struct{intn;floatm;}aa;structaatdl;

D.struct{intn;floatm;}tdl;

19.有以下程序:structSTU{charname[10];intnum;floatTotalScore;};voidf(structSTU*p){structSTUs[2]={{"SunDan",20044,550},{"Penghua",20045,537}},*q=s;++p;++q;*p=*q;}main(){structSTUs[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};f(s);printf("%s%d%3.0f\n",s[1].name,s[1].num,s[1].TotalScore);}程序运行后的输出结果是______。

A.SunDan20044580

B.Penghua20045537

C.LiSiGUO20042580

D.SunDan20041703

20.以下程序的输出结果是()。

f(intb[],intm,intn)

{inti,s=0;

for(i=m;i<n;i=i+2)s=s+b[i];

returns;

}

voidmain()

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

x=f(a,3,7);

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

}A.A.10

B.18

C.8

D.15

二、2.填空题(20题)21.常用的软件结构设计工具是结构图(SC),也称程序结构图。其中,用矩形表示______,用带空心圆的箭头表示传递的是数据。

22.设有下列的程序段;

charstr[]="Hello";

char*ptr;

ptr=str;

执行上面的程序段后,*(ptr+5)的值为______。

23.下面程序有两个printf语句,如果第一个printf语句输出的是194,则第二个printf语句的输出结果是【】。

main()

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

p=a;

printf("%x\n",p);

printf("%x\n,p+9);

}

24.下列程序执行输出的结果是【】。

#include<stdio.h>

f(inta)

{intb=0;

staticc=3;

a=c++,b++;

return(a);}

main()

{inta=2,i,k;

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

k=f(a++);

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

25.以下程序运行后的输出结果是______。

#include<string.h>

main()

{charch[]="abc",x[3][4];inti;

for(i=0;i<3;i++)strcpy(x[i],ch);

for(i=0;i<3;i++)printf("%s",&x[i][i]);

printf("\n");

}

26.以下函数用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。请填空。

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

{inti;

*k=0;

【】

if(s[*k]<s[i])*k=i;

return【】;}

main()

{inta[10]={876,675,896,101,301,401,980,431,451,777},k;

clrscr();

fun(a,10,&k);

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

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

main()

{inta=0;

a+=(a=8);

printf(“%d\n”,A);

}

28.下面程序的运行结果是【】。

voidswap(int*a,int*b)

{

int*tp;

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

}

main()

{

intx=3,y=5,*p=&x,*q=&y;

swap(p,q);

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

}

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

charb[]="ABCD";

main()

{char*chp;

for(chp=b;*chp;chp+=2)printf("%s",chp);

printf("\n");

}

30.若a是int型变量,且a的初值为4,则计算a+=a-=a*a表达式后a的值为______。

31.下面程序的功能:输出100以内能被3整除且个位数为6的所有整数,请填空。

#include<stdio.h>

main()

{inti,j;

for(i=0;i<10或i<=9;i++)

{j=i*10+6;

if(【】)continue;

printf("%d",j);

}

}

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

main()

{

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

p++;

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

}

33.下列程序的运行结果是______。

main()

{intx=1,y=2,z=3;

printf("%d,",x<y?y:x);

printf("%d,",z<y?x++:y++);

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

}

34.下面程序运行后的输出结果是()。

#include<stdio.h>

main()

{inta[]={1,2,3,4,5,6},*k[3],i=1;

while(i<4)

{k[i-1]=&a[2*i-1];

printf("%d",*k[i-1]);

i++;

}

}

35.执行以下程序后,输出‘#’号的个数是【】。

#include<atdio.h>

main()

{inti,j;

for(i=1;i<5;i++)

for(j=2;j<=i;j++)putchar('#');

}

36.四条语句:x++;、++x;、x=x+1;、x=1+x;,执行后都使变量x中的值增1,请写出一条同一功能的赋值语句(不得与列举的相同)【】。

37.在长度为n的有序线性表中进行二分查找。最坏的情况下,需要的比较次数为【】。

38.以下函数的功能是计算s=1+1/2!+1/3!+…+1/n!,请填空。

doublerun(intn)

{doubles=0.0,fac=1.0;

inti,k=1;

for(i=1;i<=n;i++)

{【】;

fac=fac/k;

s=s+fac;

}

}

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

main()

{intarr[10],i,k=0;

for(i=0;i<10;i++)arr[i]=i;

for(i=0;i<4;i++)k+=arr[i]=i;

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

}

40.若有程序

main()

{inti,j;

scanf("i=%d,j=%d",&i,&j);

pfintf("i=%d,j=%d\n",i,j);

}

要求给i赋10,给j赋20,则应该从键盘输入【】。

三、1.选择题(20题)41.若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是()。

A.for(i=1,p=1;i<=5;i++)p*=i;

B.for(i=1;i<=5;i++){p=1;p*=i;}

C.i=1;p=1;while(i<=5){p*=i;i++;}

D.i=1;p=1;do{p*=i;i++;}while(1<=5)

42.已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、i的值为2、k的值为3,以下选项中正确的输入语句是

A.scanf(“%2d%2d%2d”,&i,&j,&k);

B.scanf(“%d%d%d”,&i,&j,&k);

C.scanf(“%d,%d,%d”,&i,&j,&k);

D.scanf(“i=%d,j=%d,k=%d”,&i,&j,&k);

43.若x为int型变量,则执行以下语句后,x的值为()x=6;x+=x-=x*x;A.36B.-60C.60D.-24

44.设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为______。A.EOFB.非0值C.0D.NULL

45.有下列二叉树,对此二叉树中序遍历的结果为()。

A.ABCDEFB.BDAECFC.ABDCEFD.ABCDFE

46.有以下程序

#include<string.h>

main()

{charp[]={′a′,′b′,′c′},q[10]={′a′,′b′,′c′};

printf("%d%d\n",strlen(p),strlen(q));}

以下叙述中正确的是

A.在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3

B.由于p数组中没有字符串结束符,长度不能确定,但q数组中字符串长度为3

C.由于q数组中没有字符串结束符,长度不能确定,但p数组中字符串长度为3

D.由于p和q数组中都没有字符串结束符,故长度都不能确定

47.下面的程序main(){intx=3;do{printf("%d\n",x-=2);}while(!(--x));}

A.输出的是1B.输出的是1和-2C.输出的是3和0D.是死循环

48.若有语句:char*line[5];,以下叙述中正确的是

A.定义line是一个数组,每个数组元素是一个基类型为char为指针变量

B.定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组

C.定义line是一个指针数组,语句中的*号称为间址运算符

D.定义line是一个指向字符型函数的指针

49.以下对一维实型数组a的正确定义的是______。

A.floata(10);

B.intn=10;floata[n];

C.intn;floata[n];scanf("%d",&n);

D.#defineSIZE10floata[SIZE];

50.以下程序的输出结果是main(){intc=35;printf("%d\n",c&c);}

A.0B.70C.35D.1

51.在以下术语中,与数据的逻辑结构无关的是______。

A.线性结构B.链式结构C.树型结构D.网状结构

52.有以下程序段:structst{intx;int*y;}*pt;inta[]={1,2},b[]={3,4};structstc[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是()。

A.*pt->yB.pt->xC.++pt->xD.(pt++)->x

53.已知intt=0;while(t=1){…}则以下叙述正确的是()。

A.循环控制表达式的值为0B.循环控制表达式的值为1C.循环控制表达式不合法D.以上说法都不对

54.若有说明chars1[30]="Thecity",s2[]="isbeautiful";,则在使用函数strcat(s1,s2)后,结果是()。

A.s1的内容更新为Thecityisbeautiful\0

B.s1的内容更新为isbeaut\0

C.s1的内容更新为Thecity\0isbeautiful\0

D.s1的内容更新为Thecityisbeautiful\0

55.若有定义:floatx=1.5;inta=1,b=3,c=2;则正确的switch语句是()。

A.switch(x){case1.0:printf("*\n");case2.0:printf("**\n");}

B.switch((int)x);{case1:printf("*\n");case2:printf("**\n");}

C.switch(a+b){case1:printf("*\n");case2+1:printf("**\n");}

D.switch(a+b){case1:printf("*\n");casec:printf("**\n");}

56.下列程序的执行结果是()。#include<stdio.h>main(){inta,b,c;a=b=2;c=(a++)-1;printf("%d,%d",a,c);c+=-a+++(++b);printf("%d,%d",a,c);}

A.3,14,1B.3,14,2C.2,04,1D.2,14,1

57.设有定义:inta=2,b=3,c=4;,则以下选项中值为0的表达式是

A.(!a==1)&&(!b==0)

B.(a<b)&&!c‖1

C.a&&b

D.all(b+b)&&(c-a)

58.有以下程序:#include<string.h>main(){charstr[][20]={"Hello","Beijing"},*p=str;printf("%d\n",strlen(p+20));}程序运行后的输出结果是______。

A.0B.5C.7D.20

59.在下列叙述中,正确的一条是()

A.语句“int*pt;中的*pt是指针变量名

B.语句“int*p=a;”等价于“int*p;p=&a[0];”

C.运算符*和&都是取变量地址的运算符

D.已知指针变量p指向变量a,则a和*p值相同,都是变量a的值

60.已有定义和语句:doublea,b,c;scanf("%1f%1f%1f",&a,&b,&c);,要求给a、b、c分别输入10.0、20.0、30.0,不正确的输入形式是

A.10.0<回车>20.0<回车>

B.10.0<回车>2030<回车>

C.1020<回车>30.0<回车>

D.10.0,20.0,30.0<回车>

四、选择题(20题)61.有以下程序:

程序运行后的输出结果是()。

A..3,2,1,B.1,2,3,4,5,6,C.1,1,1,1,1,lD.6,6,6,6,6,6,

62.以下程序的输出结果是()。unionmyun{struct{intx,y,z;)u;intk:}a;main{a.u.x=4;a.u.y=5;a.u.z=6;k=0;printf(%d\n",a.u.x);}A.4B.5C.6D.0

63.(53)已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是()

A.cedba

B.acbed

C.decab

D.deabc

64.计算机能直接执行的程序是()。

A.源程序B.目标程序C.汇编程序D.可执行程序

65.以下不能输出字符A的语句是()(注:字符A的ASCIl码值为65,字符a的ASCIl码值为97)。

66.若i和k都是int类型变量,有以下for语句:for(i=0,k=-1;k=1;k++)printf("*****\n");下面关于语句执行情况的叙述中正确的是()。

A.循环体执行两次B.循环体执行一次C.循环体一次也不执行D.构成无限循环

67.若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是()。

A.-3B.9C.-12D.6

68.以下叙述中错误的是

A.C语言源程序经编译后生成后缀为.obj的目标程序

B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件

C.用C语言编写的程序称为源程序,它以ASCII码形式存放在一个文本文件中

D.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令

69.下列判断正确的是()。A.A.chara="ABCD":等价于char*a;*a="ABCD":

B.charstr[10]={"ABCD"}:等价于charstr[10];str[]={"ABCD"};

C.char*s="ABCD":等价于chars;*s="ABCD";

D.charc[5]="ABCD",d[5]="ABCD":等价于charc[5]-d[5]="ABCD";

70.数据库应用系统中的核心问题是()。

A.数据库设计B.数据库系统设计C.数据库维护D.数据库管理员培训

71.有以下程序执行程序时,给变量X输入l0,程序的输出结果是()。

A.55B.54C.65D.45

72.有三个关系R、S和T如下:

则由关系R和S得到关系T的操作是()。

A.自然连接B.交C.投影D.并

73.设有栈S和队列Q,其状态为空,元素a1,a2,a3,a4,a5,a6依次入栈,出栈的元素则进入队列Q,若6个元素出队列的顺序是a2,a3,a4,a6,a5,a1,则栈的容量至少是

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

74.已定义以下函数:

fun函数的返回值是()。

A.一个整数B.不确定的值C.形参P中存放的值D.形参P的地址值

75.以下选项中可用作C程序合法实数的是()。A..1eOB.3.0e0.2C.E9D.9.12E

76.有如下程序

main()

{

inta=2,b=-1,c=2;

if(a<b)c=1;

if(b<0)c=0;

elsec++;

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

}

该程序的输出结果是

A.0B.1

C.2D.3

77.第

15

以下程序的输出结果是

main()

{inta=21,b=11;

printf("%d\n",--a+b,--b+a);

}

A.30B.31C.32D.33

78.下列选项中,能正确定义数组的语句是()。

79.

80.设pl和p2是指向一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是()。

A.k=*pl+*p2B.p2=k;C.pl=p2;D.k=*pl*(*p2.;

五、程序改错题(1题)81.下列给定程序中,fun()函数的功能是:求3个数的最小公倍数,例如,给变量a、b、c、分别输入15、11、2,则输出结果应当是330。请修改函数中的错误,得出正确的结果。注意:不要改动main()函数,不能增行或减行,也不能更改程序的结构。试题程序:

六、程序设计题(1题)82.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出,请编写函数,其功能是:求出该学生的平均分,并放入记录的ave成员中。例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应为78.875。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun部位中填入你编写的若干语句。试题程序:#include<stdio.h>#defineN8typedefstruct{charnum[10];doubles[N];doubleave;}STREC;voldfun(STREC*a){}voidmainSTRECs={"GA005",85.5,76,69.5,85,91,72,64.5,87.5};inti;fun(&s);printf("The%ssstudentdata:\n",s.num);for(i=0;i<N;i++)printf("%4.1fkn",s.s[i]);printf("\nknave=%7.3fkn",s.aVe);printf("\n");}

参考答案

1.D

2.D

3.A解析:结构化程序设计方法的四条原则是:①自顶向下;②逐步求精;③模块化;④限制使用goto语句。“自顶向下”是指在程序设计时,先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。“逐步求精”是指对复杂问题应设计一些子目标作过渡,逐步细节化。“模块化”是指一个复杂问题由若干稍简单的问题构成;解决这个复杂问题的程序,也应由若干稍简单问题的小程序组成。

4.C

5.B

6.B此题考查的是函数fun,fun(b,c)=5,然后fun(2*a,5)=fun(8,5)=6。

7.A本题考查按位与运算,按位与就是相同为1,不同为0,把x=011050化成二进制为0001001000101000,把01252化成二进制为0000001010101010,两者相与得0000001000101000。

8.C解析:软件系统结构的总体设计包括:基于功能层次结构建立系统、按功能划分成模块的层次结构、确定每个模块的功能、建立与已确定的软件需求的对应关系、确定模块间的调用关系和模块间的接口、评估模块划分的质量等方面。详细设计的任务是:在使用程序设计语言编制程序以前,对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。需求分析是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。需求分析的任务是发现需求、求精、建模和定义需求,通常包括:功能需求、性能需求、环境需求、可靠性需求、安全保密要求、用户界面需求、资源使用需求、成本消耗需求、开发进度需求等。编程调试的任务是诊断和改正程序中潜在的错误。综上所述。软件功能分解只能发生在总体设计阶段。

9.B解析:在C语言中,合法的标识符由字母,数字和下划线组成(故选项A不正确),并且第一个字符必须为字母或者下划线(故选项B和选项D不正确).所以,B选项为所选.

10.D

11.B

12.B解析::串的长度定义为串中字符的数目。所以B)为正确答案。C)答案不正确,因为串中可以含有相同的字符;A)答案不正确,因为串中可能含有相同的字母,而且也可能含有数字等其他非字母字符;D)答案不正确,因为空格也是一种字符,在计算长度时理应将其计算在内。

13.B解析:本题考查的是指针的简单应用。题目中首先定义了一个int型数组a并初始化了,然后定义了两个指针变量p和q,并分别初始化p为指向数组元素a[3]、q指向p后面的第2个元素即指向a[5]。所以最终输出的值为a[3]+a[5]的值10。应该选B。

14.C

15.D

16.AC语言规定,标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或下划线。

17.Aelse总是与离它最近的if配对,所以当第1个if语句的判断条件不成立时,不再执行第2个if语句以及与第2个if语句配对的else语句,而是直接执行“x++”,输出1。故本题答案为A选项。

18.C解析:定义结构体类型的变量有如下几种方法:

①定义结构体类型的同时,定义结构体类型的变量,如:

stractaa

{…}tdl;

选项B)中将宏名AA用宏体structaa替换后,与该定义形式一样,因此是正确的。在这一定义形式中,结构体类型名aa是可以省略的,因此,D)项也是正确的。

②先定义结构体类型,然后再定义结构体类型的变量,形式如下:

structaa

{…};

strnctaatdl;

这种定义形式也可演变为:先用类型定义语句typedef将该结构体类型定义成一个类型名AA,然后直接用该类型名AA定义一个结构体变量(这时不再需要使用关键字struct)。因此选项A)正确。

19.B解析:f函数用了显式传地址的方式,因此主函数中的s值发生了变化。

20.A函数的功能是对数组某一区域内的元素隔个求和;a[3]=4,所以从4开始进行隔个求和,a[7]=8,即对4到8的元素隔个求和,4+6=10。

21.模块模块解析:矩形表示的是模块,箭头表示的是模块间的调用关系。用带实心圆的箭头表示传递的是控制信息,用带空心圆的箭头表示传递的是数据。

22.'\0''\\0'解析:本题涉及字符数组和指针的两个知识点:①在C语言中,字符型数组在存放字符串时会自动在末尾加上字符串结束标识符'\\0'所以题中数组str有6个元素。②ptr指向数组str的首地址,ptr+5是指向str[5],*(ptr+5)是引用str[5]的值,即'\\0'。

23.1a61a6解析:对于指针变量的运算,就是对地址的运算。本题中由于指针指向的是整型变量,所以,使指针变量移动9个位置也就是移动18个字节。注意,本题是以十六进制输出的。

24.44解析:本题考查了静态存储类别的局部变量的特点。静态存储类别的局部变量在程序的整个生存周期内都存在,但作用域却只局限于定义它的函数或局部范围。当i=0时执行第一次for循环,k=f(2),a=c++,b++;因为赋值运算符的优先级高于逗号运算符,所以a=3,c=4;当i=1时执行第二次for循环,k=f(3),a=c++,b++;因为c为静态局部变量所以保留着这一次执行的结果值4,所以a=4,c=5,所以函数f()返回a的值为4。

25.abcbcc

26.for(i=0;i<t;i++)0for(i=0;i<t;i++)\r\n0解析:本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应使*k的值为数组中的某一下标值,即*k=0。

27.1616解析:在程序中首先将8赋值给变量a,然后再进行复合赋值运算。即a=a+a=8+8=16,所以该空格处应该填16。

28.3535解析:在主函数中通过定义和赋初值使p和q分别指向了x和y,执行函数调用“swap(p,q)”,把p和q中的地址值传给了形参指针.变量a和b,a和b分别指向了实参x和y。在函数swap()中交换了指针变量a和b的值,并没有交换a和b指向的实参的值,所以函数调用返回后x和y依旧是原来的值。

29.ABCDCD

30.-24-24解析:本题考查赋值运算符a+=b等价于a=a+b;a-=a*a等价于a=a-a*a=4-4*4=-12;a+=a,即a=a+a=-24。

31.j%3!=0或j%3j%3!=0或j%3解析:题目要求输出100以内能被3整除且个位数为6的所有整数,且通过for循环实现,循环体内j=i*10+6;这也就满足了个位数为6的条件,所以第1个空格填入i<10或i<=9;if语句中的continue说明如果条件不成立则不输出j,所以第2空填j%3!=0或j%3。

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

33.22132,2,1,3解析:本题考查++,--运算符和条件运算符的使用。

“表达式1?表达式2:表达式3”的功能是:表达式1的值若非0,则计算表达式2的值,且表达式2的值为最终结果;若表达式1的值为0,则计算表达式3的值,且为最终结果。

本题中,x=1,y=2时,x<y成立,输出y的值2;y=2,z=3时,z<y不成立,执行y++,输出2后y值增1,所以最后一个输出x的值不变为1,y的值为增加后的3。

34.246

35.66解析:本题中,i,j分别为外循环和内循环的循环控制变量,外层循环共执行了4次。当i=1时,由于内层循环判断条件(2<=1)为假不执行内层循环。当i=2时,执行内层循环,输出一个#;当i=3时,内层循环循环两次,输出两个#;当i=4时,内层循环循环三次,输出三个#;当i=5时,循环判断条件不成立,退出外层循环。所以一共输出6个#。

36.x+=1;x+=1;解析:题面中的四条语句的作用是使x的值加1,在C中有多种方法可以对变量进行加1操作,这里可以利用C的复合赋值运算符+=实现,本题答案为x+=1;。

37.log2n

38.k=k*ik=k*i解析:本题小通过for循环求s表达式中每一项的和,表达式“fac=fac/k;”求的是每一项的值,所以k的值应为n!,在求n!的时候,可以用上次循环阶乘的值乘i,就可以直接得此次n!,故木题填k=k*i。

39.66解析:本题第1个for循环是为数组arr元素赋初值。第2个for循环是分别用i=0,1,2,3给数组元素arr[0]、arr[1]、arr[2]、arr[3]赋值,再累加到变量k中,k=0+1+2+3=6。

40.i=0j=20i=0,j=20解析:scanf()函数的使用,该函数的第一个参数是格式字符串,主要由两类字符组成,一类是非格式符要求原样输入,一类是格式符对应要输入的变量,所以说本题中应该原样输入i=,j=,后面分别给变量0和20,所以说空格处应该填入i=0,j=20。

41.B解析:选项B中for循环了5次,而每次循环的时候,都将p的值重新赋值为1后,再乘以当前数字i,最后的结果为5,显然不是5!的值,同样的分析可知选项A、选项C和选项D计算的都是5!。所以,4个选项中选项B符合题意。

42.C解析:本题考查的知识点是输入函数scanf()基本用法。使用该语句时,要求除格式控制符以外的字符都要原样输入,“,”为非格式符,要原样输入。选项A,输入格式描述为“%2d%2d%2d”,输入要用空格隔开,不满足键盘输入1,2,3的条件,故A错误:选项B中,输入格式描述符为“%d%d%d”,输入也要用空格隔开,故错误:选项D中,输入格式描述符为“i=%d,i=%d,k=%d”,应该从键盘输入i=1,j=2,k=3,才能使得i,j,k的值为1,2,3,故选项D错误。4个选项中C正确。

43.D结果为D-24首先,我们拆开来看,按照运算先后顺序来,x*x=36然后x=x-(-36)等于x=6-(-36)结果为-30最后x=x+(-30)等于x=6+(-30)结果为-24

44.B(27)B)解析:函数feof的功能是:测试fp所指的文件的位置是否已达到文件尾,如果达到文件尾,则函数返回非0值,否则返回0,表示文件尚未结束。

45.B解析:对二又树的中序遍历是指:首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左,右子树时,注意依旧按照“左子树—根结点—右于树”的顺序。

46.A解析:在给p和q数组赋初值时,系统会自动添加字符串结束符,从题目中可以看出数组p和q都有3个字符,所以长度均为3。

47.B

48.A解析:C语言中[]比*优先级高,因此line先与[5]结合,形成line[5]形式,这是数组形式,它有5个元素,然后再与line前面的'*'结合,表示此数组是一个指针数组,每个数组元素都是一个基类型为char的指针变量。

49.D解析:C语言不可动态定义数组,必须是整型常量,选项D中的SIZE是符号常量,也是常量,值为10,所以可以用符号常量来定义数组的长度。

50.C解析:本题考查按位与“&”。因为1&1=1,0&0=0,所以任何数与自身按位与,结果仍为此数,不发生变化。

51.B

52.C解析:要计算一个复杂的表达式时,首先要弄明白表达式中所有运算符的优先级与结合性,本题中所涉及的运算符中,->的优先级最高,*和++的优先级相同,但其结合性为从右至左。所以选项A等价于*pt->y)也就是pt所指向的结构体的成员指针变量y所指向的内容。从前面的程序段不难看出,pt指向结构体数组c的首地址,也就是指向它的第1个元素,在它的第1个元素中,指针变量y又被初始化为指向控型数组a的首地址,即指向数组a的第1个元素。故选项A中的表达式的值为a[0],也就是1。选项B中表达式的值就是c[0].x,即10。根据优先级和结合性,选项C中的表达式等价于++(pt->x),由于是前缀++,所以整个表达式的值为pt->x的值加1,故为11。而选项D中,++是后缀形式,所以(pt++)的值还是pt的原值,即等于pt->x的值10。故应该选择C。

53.B解析:t=1是将t赋值为1,所以循环控制表达式的值为1。判断t是否等于1时,应用t==1,注意“=”与“==”的用法。

54.D解析:该函数用来使两个字符串连接成为一个字符串。strcat(str1,str2)将str2中的字符连接到str1的字符后面,并在最后加一个“\\0”。连接后新的字符串存放在strl中。注意:用于字符串处理的函数。

55.C解析:switch后的括号中只能是整型或字符型表达式,选项A中使用的是浮点型变量x,故不正确。选项B在switch的括号后面多了一个分号,故也不正确。switch的case标号后只能是常量或常量表达式,而不能是变量,所以选项D也不正确。故应该选择C。

56.A解析:本题主要考查自加运算符(++、--)的使用。①前缀变量“++i、--i”,在使用i之前,先使i的值加1或者减1,再使用此时的表达式的值参与运算;②后缀变量“i++、i--”,先使用此时的表达式的值参与运算,在使用i之后,再使i的值加1或者减1。本题中计算表达式c=(a++)-1时先使用a的值进行计算,结果为c=2-1=1,然后将a的值加1,即执行完此语句后a的值是3;表达式c+=-a+++(++b)等价于c=c+(-a++)+(++b),c=1+(-3)+3=1,此时a=4,b=3。

57.A解析:计算逻辑表达式要注意的问题有三个:一、3个逻辑表达式的优先级从高到低依次是!(逻辑非)、&&(逻辑与)、‖(逻辑或);二、运算符&&或‖的左边运算分量分别为“假”或“真”的时候已经能够得出整个表达式的值,故右边运算分量将被“短路”,即忽略右边的表达式.三、逻辑值能够自动转换为整数值:“真”=1、“假’=0;整数值也能自动转换为逻辑值:0=“假”,非0=“真”。选项A中(!a=1)&&(!b==0)→(12==1)&&(!b==0)→(0==1)&&(!b==0)→0&&(!b==0)→0(&&右边表达式(!b==0)被“短路”);选项B中(a<b)&&!c‖1→(2<3)&&!4‖1→1&&0‖→0‖→1;选项C中a&&b→2&&3→1选项Da‖(b+b)&&(c-a)→2‖(b+b)&&(c,a)→1(‖右边表达式(b+b)&&(c-a)被“短路”)。所以本题选A。

58.C解析:二维数组的初始化及库函数strlen()的应用,主函数中定义了一个二维字符数组并初始化,初始化后的结果为str[0]=“Hello”、str[1]=“Beijing”,然后定义一个字符指针变量p并让它指向数组的首地址,即指向str[0],而在C语言中无论是一维还是多维数组,其元素在内存中都是顺序存放的,故p+20后指针指向str[1],所以strlen(p+20);返回的是str[1]中的字符串的长度,即Beijing的长度为7,所以最后输出的值为7。

59.D

60.D解析:scanf函数要求格式控制串中的非格式控制字符,在输入数据时必须按照格式控制的要求来输入。本题中格式控制串中在各个输入数据格式之间没用任何分隔符号,所以从键盘输入数据时,不应该有“,”等分隔符,所以选项D)错误。注意:选项A)、B)、C)都能正确的输入。

61.Afopen(”data.chit“,”w+”);W+打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件存在则建立该文件。rewind(fp);使文件fp的I位置指针指向文件开始。fprintf(fp,”%d\n”,a[5一i]);将8[i]输出到fp指向的文件中。fseanf(fp,”%d”,&k);将fp读I入到变量k中,第一个for循环将数组中元素倒着输入到fp指l向的文件中,rewind()则指向文件开始,因此打印是数组a的I倒叙。故打印为6,5,4,3,2,1。答案为A选项。

62.D因为a是结构体变量,最后一次输入的值为结构体中的值,即a中的任何一个值都为0。

63.A注:前提要掌握三种遍历的方法

64.D计算机能直接执行的程序是可执行程序,其扩展名为.exe。故本题答案为D选项。

65.A%d输出整数,所以选择A)。

66.D此题考查的是基本的循环,答案为D。

67.C解析:本题中首先定义一个整型变量a并给它赋初值为3,在表达式中,从右开始执行,即先执行“a-=a*a;”等价于a=a-a*a即a=3-3*3=-6,此时a的值为-6,接着执行“a+=a-;”相当于执行a=a+a即a=-6+(-6)=-12,此时a的值为-12。所以,4个选项中选项C符合题意。

68.D由C语言编写而成的程序称为C源程序,C源程序经过C语言编译程序编译之后生成一个后缀为.OBJ的二进制文件(称为目标文件);最后要由“连接程序”把此.OBJ文件与C语言提供的各种库函数连接起来生成一个后缀为.EXE的可执行文件。

由于C语言编写程序采用的是西文字符,而西文字符一般都是以ASCII码编码的。因此,C语言的源程序是以ASCII码形式存放在一个文本文件中的。

C语言程序中主要包含程序部分和注释部分,其中程序部分最终将转化为二进制的机器指令,而注释部分没有。因此,选项D的说法不正确。

69.Da=“ABCD”书写错误,因为“=”左边不能出现常量;数组名S是代表S数组首地址常量,而不是变量;字符串只有在定义时维数可以省略。

70.A数据库应用系统中的核心问题是数据库的设计。故答案为A选项。

71.A本题考查的是递归算法的分析。一个直接或间接地调用自身的算法称为递归算法。在一个递归算法中,至少要包含一个初始值和一个递归关系。本题的fun()函数在n等于l时返回1,而在其余情况下返[fi]n+fun(n一1),所以本题的递归算法可以这样来表示:fun(n)=1(n=1)(初始值)fun(n)=n+f

温馨提示

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

评论

0/150

提交评论