2021-2022年陕西省西安市全国计算机等级考试C语言程序设计_第1页
2021-2022年陕西省西安市全国计算机等级考试C语言程序设计_第2页
2021-2022年陕西省西安市全国计算机等级考试C语言程序设计_第3页
2021-2022年陕西省西安市全国计算机等级考试C语言程序设计_第4页
2021-2022年陕西省西安市全国计算机等级考试C语言程序设计_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

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

文档简介

2021-2022年陕西省西安市全国计算机等级考试C语言程序设计学校:________班级:________姓名:________考号:________

一、单选题(20题)1.每次从无序表中取出一个元素,把它插入到有序表中的适当位置,此种排序方法叫做()排序。

A.插入B.堆C.快速D.归并排序

2.假设把整数关键码K散列到有N个槽的散列表,以下哪些散列函数是好的散列函数()

A.h(K)=KmodN

B.h(K)=1

C.h(K)=K/N

D.h(K)=(K+rand(N))modN,rand(N)返回一个0到N-1的整数

3.由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为________。

A.24B.48C.72D.53

4.设有宏定义:#defineIsDIV(k,n)((k%n==1)?1:0)且变量m已正确定义并赋值,则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是A.判断m是否能被5或者7整除

B.判断m是否能被5和7整除

C.判断m被5或者7整除是否余1

D.判断m被5和7整除是否都余1

5.下面判断正确的是

A.char*a="china";等价于char*a;*a="china";

B.charstr[5]={"china"};等价于charstr[]={"china"};

C.char*s="china";等价于char*s;s="china";

D.charc[4]="abc",d[4]="abc";等价于charc[4]=d[4]="abc";

6.如果最常用的操作是取第i个结点及其前驱,最节省时间的存储方式是()。

A.单链表B.双向链表C.单循环链表D.顺序表

7.

8.下面程序的运行结果是()。

#inelude<stdio.h>

voiddel(char*s)

{inti,j;

char*a;

a=s:

for(i=0,j=0;a[i]!='\0';i++)

{if(a[i]>='0'&&a[i]<='9')

{s[j]=a[i];

j++;

}

s[j]='\0';

}

}

main

{char*s="aa89gggh";

del(s):

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

}A.A.1B.2C.3D.4

9.连通图G中有n个顶点,G的生成树是()连通子图。

A.包含G的所有顶点B.包含G的所有边C.不包含G的所有顶点D.包含G的所有顶点和所有边

10.数据的不可分割的基本单位是()。

A.元素B.结点C.数据类型D.数据项

11.若以下选项中的变量已正确定义,则正确的赋值语句是()。

A.x1=26.8%3B.1+2=x2C.x3=0x12D.x4=1+2=3

12.

有下列程序:

main

{charp[]={a,h,c},q[]="a";

printf("%d%d\n".sizeof(P),sizeof(q));

}

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

A.44B.33C.34D.43

13.已知大写字母A的ASCII值是65,小写字母a的ASCII值是97。下列不能将变量c中的大写字母转换为对应小写字母的语句是()。

A.c=(‘A’,+c)%26-‘a’B.c=c+32C.c=c-‘A’+‘a’D.c=(c-‘A’)%26+‘a’

14.

15.

16.以下关于C语言的叙述中正确的是()。

A.C语言的数值常量中夹带空格不影响常量值的正确表示

B.C语言中的变量可以在使用之前的任何位置进行定义

C.在C语言算术表达式的书写中,运算符两侧的运算数据类型必须一致

D.C语言中的注释不可以夹在变量名或关键字的中间

17.

18.若i、j已定义成mt型,则下列程序段中内循环体的总执行次数是()。for(i=6;i>0;i--)for(j=0;j<4;j++){…}A.20B.24C.25D.30

19.有下列程序:#include<stdio.h>voidfun(char*a,char*B){while(*a=='*')a++;while(*b=*A){b++;a++;}}main(){char*s="*****a*b****",t[80];fun(s,t);puts(t);程序的运行结果是()。A.*****a*bB.a*bC.a*b****D.ab

20.以下叙述中错误的是()。

A.使用三种基本结构构成的程序只能解决简单问题

B.结构化程序由顺序、分支、循环三种基本结构组成

C.C语言是-种结构化程序设计语言

D.结构化程序设计提倡模块化的设计方法

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

intk=0;

voidfun(intm)

{m+=k;k+=m;

printf("m=%dk=%d",m,k++)

}

main()

{inti=4;

fun(i++);

printf("i=%dk=%d\n",i,k);

}

22.若变量x、y已定义为int类型且X的值为33,y的值为3,请将输出语句printf((),x/y);补充完整,使其输出的计算结果形式为:x/y=11。

23.设有以下定义

struetss

{intinfo;struetss*link;}x,y,z;

且已建立如下图所示链表结构:

请写出删除结点y的赋值语句【】。

24.以卜函数sstrcat()的功能是实现宁符串的连接,即将t所指字符串复制到s所指字符串的尾部。例如:s所指字符串为abcd,t所指字符申为efgh,函数调用后s所指字符串为abcdefgh。请填空。

#include<string.h>

voidsstrcat(char*s,char*t)

{intn;

n=strlen(s);

while(*(s+n)=){s++;t++;}

}

25.数据结构分为线性数据结构和非线性数据结构,带链的队列属于()。

26.以下程序的功能是输出字符串。请填空。

main()

{char*a[]={"Pascal","Clanguage","dbase","Cobol"};

char【】;

intj=0;

p=a;

for(;j<4;j++)

print{("%s\n",*【】);

}

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

main()

{charc='z';

printf("%c",c-25);}

28.下面程序的输出是()。

main()

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

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

arr[i]=i;

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

k+=arr[i]+i;

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

}

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

voidswap(intx,inty)

{

intt;

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

}

main()

{

inta=3,b=4;

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

}

30.数据结构分为逻辑结构和存储结构,循环队列属于______结构。

31.在面向对象方法中,类的实例称为______。

32.以下程序的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

例如,若一维数组中的数据是:

2223445666677899101010

删除后,数组中的内容应该是:

2345678910。

请填空。

#include<stdio.h>

#defineN80

intfun(inta[],intn)

{inti,j=1;

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

if(a[j-1][

33.数据库设计分为以下6个设计阶段:需求分析阶段、______、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。

34.若有如下结构体说明:

structSIRU

{inta,b;charc:doubled;

structSTRU*p1,*p2;

};

请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型。

【】t[20]

35.下列程序输出的结果是______。

intm=17;

intfun(intx,inty)

{intm=3;

return(x*Y-m);

}

main()

{inta=5,b=7;

printf("%d\n",fun(a,B)/m);

}

36.下面的程序实现的是指针p所指向的地址的n个数中,求出最大的和最小的数据,请填空。

fun(int*p,intn)

{int*q;

intmax,min;

max=min=*p;

for(q=p;【】;q++)

if(*q>max)max=*q;

elseif(*q<min)min=*q;}

37.以下程序的运行结果为【】。

#defineFORMAT"%u,%u"

main()

{inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

printf("\n");

printf(FORMAT,**a,*a[0]);

printf(FORMAT,*(a[0]+1),*&a[0][1]);

printf(FORMAT,a[1][0],*(*(a+1)+0));

}

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

#definePOW(r)(r)*(r)

main()

{intx=3,y=2,t;

t=POW(x+y);

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

}

39.若x和a均是int型变量,则计算完x=(a=4,6*2)后的x值为______。

40.数据库保护分为:安全性控制、______、并发性控制和数据的恢复。

三、1.选择题(20题)41.已知字母A的ASCⅡ码为十进制数的65,下面程序的输出是______。main(){charch1,ch2;ch1='A'+'5'-'3';ch2='A'+'6'-'3';printf("%d,%c\n",ch1,ch2);}

A.67,DB.B,CC.C,DD.不确定的值

42.以下程序的输出结果是______。main(){charstr[12]={'s','t','r','i','n','g'};printf("%d/n",strlen(str));}

A.6B.7C.11D.12

43.函数ftell(fp)的作用是()。

A.得到fp所指向文件的当前读写位置B.初始化流式文件的位置指针C.移动流式文件的位置指针D.以上答案均正确

44.在以下一组运算中,优先级最高的运算符是()

A.<=B.=C.%D.&&

45.函数rewind的作用是

A.使文件位置指针重新返回文件的开始位置

B.将文件位置指针指向文件中所要求的特定位置

C.使文件位置指针指向文件的末尾

D.使文件位置指针自动移至下一个字符位置

46.有下列程序main(){intt,a=1,b=5,c=-2;while(a>b>c){t=a;a=b;b=t;c++;}printf("%d,%d,%d",a,b,c);}程序输出的结果是()。

A.1,5,0B.1,5,-2C.5,1,-1D.5,1,-2

47.下列叙述中正确的是A.break语句只能用于switch语句

B.在switch语句中必须使用default

C.break语句必须与switch语句中的case配对使用

D.在switch语句中,不一定使用break语句

48.若有如下程序:sub(inta,intb,int*z){*z=a+b;return;}main(){inta=1,b=2,c=3,d,e;sub(a,b,&D);sub(c,d,&e);printf("%d",e);}则程序运行后的输出结果是

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

49.执行下列程序时输入456<空格>789<空格>123<回车>,输出结果是()。#include<stdio.h>main(){charm[80];intc,i;scanf("%c",&C);scanf("%d",&i);scanf("%s",&m);printf("%c,%d,%s\n",c,i,m);}

A.4.56789e+008B.4.78912e+006C.4,56,789,123D.4,56.789

50.表达式“1||2||3||4”的值是()。

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

51.若函数调用时,参数为基本数据类型的变量,下列叙述中正确的是()。

A.实参与其对应的形参共占存储单元

B.只有当实参与其对应的形参同名时才共占存储单元

C.实参与其对应的形参分别占用不同的存储单元

D.实参将数据传递给形参后,立即释放原先占用的存储单元

52.以下程序运行后,输出结果为______。main(){inta[2][3]={1,3,5,7,9,11),*s[2],**pp,*p;s[0]=a[0],s[1]=a[1];pp=s;p=(int*)malloc(sizeof(int));**pp=s[1][1];p=*pp;printf("%d\n",*p);}

A.1B.7C.9D.11

53.若有说明:inta[][4]={0,0};则下面不正确的叙述是()。

A.数组a的每个元素都可得到初值0

B.二维数组a的第一维大小为1

C.当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小

D.只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值

54.若有定义:“inta[2][3];”,则对a数组的第i行第j列元素的正确引用为()。

A.*(*(a+i)+j)B.(a+i)[j]C.*(a+i+j)D.*(a+i)+j

55.有以下程序:#include<stdio.h>main(){intx=8;for(;x>0;x--){if(x%3){printf("%d,",x--);continue;}printf("%d,",--x);}}程序的运行结果是()。

A.7,4,2B.8,7,5,2C.9,7,6,4D.8,5,4,2

56.在C语言中,函数返回值的类型最终取决于()。

A.函数定义时在函数首部所说明的函数类型

B.return语句中表达式值的类型

C.调用函数时主调函数所传递的实参类型

D.函数定义时形参的类型

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

A.break语句只能用于switch语句体中

B.continue语句的作用是使程序的执行流程跳出包含它的所有循环

C.break语句只能用在循环体内和switch语句体内

D.在循环体内使用break语句和continue语句的作用相同

58.在结构化程序设计中,模块划分的原则是()。

A.各模块应包括尽量多的功能

B.各模块的规模应尽量大

C.各模块之间的联系应尽量紧密

D.模块内具有高内聚度,模块间具有低耦合度

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

A.调用printf()函数时,必须要有输出项

B.使用putchar()函数时,必须在之前包含头文件stdio.h

C.在C语言中,整数可以以二进制、八进制或十六进制的形式输出

D.调节getchar()函数读入字符时,可以从键盘上输入字符所对应的ASCII码

60.某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为()

A.n+1B.n-1C.2nD.n/2

四、选择题(20题)61.

62.以下不正确的定义语句是

A.inty[5.3]={0,1,3,5,7,9};B.doublex[5]={2.0,4.0,6.0,8.0,10.0};

C.charc1[]={’1’,’2’,’3’,’4’,’5’};D.charc2[]={’\x10’,’\xa’,’\x8’};

63.有以下程序:

i

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

A.3,4B.4,1C.2,3D.1,2

64.

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

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

66.有以下程序:main(){inti=1,j=1,k=2;if((j++‖k++)&&i++)printf("%d,%d,%d\n",i,j,k);}执行后的输出结果是______。

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

67.语句int(*ptr)的含义是()。

A.ptr是一个返回值为int的函数

B.ptr是指向int型数据的指针变量

C.ptr是指向函数的指针,该函数返回一个int型数据

D.ptr是一个函数名,该函数的返回值是指向int型数据的指针

68.

有以下程序

#include<stdio.h>

main

{inty=9;

for(;y>0;y--)

if(y%3==0)printf("%d",--y);

}

程序的运行结果是()。

A.741B.963C.852D.875421

69.

70.

71.

72.为了避免嵌套的条件分支语句if—else的二义性,C语言规定:C程序中的else总是与_____组成配对关系。

A.缩排位置相同的ifB.在其之前未配对的ifC.在其之前未配对的最近的ifD.同一行上的if

73.

74.有以下程序:

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

A.2.3B.1,3C.1,4D.1,2

75.以下关于逻辑运算符两侧运算对象的叙述中正确的是()。

A.可以是任意合法的表达式B.只能是整数0或非0整数C.可以是结构体类型的数据D.只能是整数O或l

76.最简单的交换排序方法是()。A.快速排序B.选择排序C.堆排序D.冒泡排序

77.设有定义:intx=3;,以下表达式中,值不为l2的是()。

A.x*=x+1B.x++,3*xC.x*=(1+x)D.2*x.x+=6

78.按照“先进后出”原则组织数据的结构是()。

A.队列B.栈C.双向链表D.二叉树

79.

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

main

{intm=5;

if(m++>5)printf("%d\n",m):

elseprintf("%d\n",m--);

}

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

80.

五、程序改错题(1题)81.下列给定程序中函数fun()的功能是:求出如下分数序列的前n项之和,结果通过函数值返回。例如,若n=5,则应输出8.391667。请改正程序中的错误,使其得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:

六、程序设计题(1题)82.函数fun的功能是:将s所指字符串中下标为偶数同时ASCIl值为奇数的字符删除,S所指串中剩余的字符形成的新串放在t所指的数组中。例如,若s所指字符串中的内容为“ABCDEFGl2345”,其中字符C的ASCIl码值为奇数,在数组中的下标为偶数,因此必须删除;而字符l的ASCIl码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是“BDFl2345”。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:

参考答案

1.A

2.A

3.D

4.D

5.C解析:选项A)char*a;*a=“china”应改为a=china;,选项B)应该是charstr[6];D)项表述方法有错误。

6.D

7.B

8.D本题中del(char*s)函数实现的功能是:逐个读入S数组中的字符,如果遇到数字,则将数字存在s中,遇到非数字字符则跳过。所以最后输出的应该是字符串S中所有的数字的个数。

9.A

10.D

11.C解析:赋值的一般形式为:变量名:表达式;,赋值的方向为由右向左,即将:右侧表达式的值赋给:左侧的变量,执行步骤是先计算再赋值。选项A中运算符%的运算对象必须为整数,而选项A中26.8不为整数,故选项A不正确;选项B将一个变量赋值给一个常量,这在C语言中是不允许的,故选项B不正确;选项D中也是将一个常量3赋值给一个常量,故选项D不正确;所以,4个选项中选项C符合题意。

12.C

\n语句charp[]={a,b,c);定义了一个一维字符数组p[],并用3个字符a,b,c进行了初始化;而语句q[]='abe'表示定义了一个一维字符数组,并用一个字符串常量'abc'进行了初始化。在C语言中,系统在每个字符串常量的最后自动加入一个字符\0作为字符串的结束符。所以函数sizeof(q)=4,而sizeof(p)=3,因而选项C为正确答案。

\n

\n

\n

13.A根据题意可知,小写字母比与之对应的大写字母的ASCII值大32。A选项中字符W加变量c再对字母个数26取余,不能转换为对应的小写字母。故本题答案为A选项。

14.A

15.D

16.DC语言的数值常量中不能夹带空格,所以A选项错误。C语言中的变量都必须先定义再使用,变量的定义通常放在函数体的前部,也可以放在函数外部或复合语句的开头,不能随便放置,所以B选项错误。在C语言中,运算符两侧的运算数据类型可以不一致,且结果与精度较高的数据类型保持一致,所以C选项错误。故本题答案为D选项。

17.D

18.B本题考查for循环的使用。对于第1个for循环,任何一个i,内层j的循环都要使j~0到3,j=4时不符合,所以退出j循环;然后i减1,J仍然要从0~3,j=4时退出J循环直到i变成0,退出i循环。第一条for语句执行6次,第二条for语句执行4次,所以内循环体执行6*4=24次。

19.C解析:主函数main()定义了指向字符串的指针和一个字符数组,接着调用fun(s,t)函数,进行实参向形参传递,函数fun()第一个while语句判断*a中的值为“*”时继续扫描,当遇到不是“*”时结束,接着第二个while循环语句,将*a中从“a”开始的后续所有字符都赋予*b,也就是t[80]中的内容为“a*b****”,所以此题的运行结果为选项C)。

20.A使用顺序,选择(分支),循环三种基本结构构成的程序可以解决所有问题,而不只是解决简单问题,所以A错误。

21.m=4k=4i=5k=5m=4k=4i=5k=5解析:main()函数首先定义了1个变量i,并初始化为4。然后用表达式i++的值为实参调用函数fun(),因为后缀”表达式的值为增1之前的值,故此时传递给函数的参数m值为4。fun()函数中,首先让形参m自增k,由于此时k还是0,所以m不变,然后让k自增m,执行后k的值和m相同为4。最后fun()函数输出m和k廿的值,两个值都是4,故首先输出了“m=4k=4”,输出完后,k自增1(k变为5)。fun()函数执行完毕,返回main()函数中,此时i会被自增1变为5,故接着又输出的i和k的值都是5。故最终输出结果是“m=4k=4i=5k=5”。

22.x/y=%dx/y=%d解析:本题考查prinff语句的输出格式。printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为:printf('<格式化字符串>”,<参最表>)其中,格式化字符串包括两部分内容。一部分足正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以“%”开始,后跟一个或几个规定字符,用来确定输出内容格式。参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用“,”分开,且顺序一一

23.x.link=&z;或x.link=y.link;或x.link=x.link->link;或x.link=*(x.link).link;x.link=&z;或x.link=y.link;或x.link=x.link->link;或x.link=*(x.link).link;解析:链表中结点的删除,要删除结点y,只需要让结点x的指针域指向y结点的指针域所指向的后续结点就可,因此只需把结点z的地址赋给x的指针域就可以了,即让结点x的指针域指向结点z。而结点z的地址保存在结点y的指针域中,因此只需把结点y的指针域赋值给结点x的指针域即可。

24.*t*t解析:函数中首先让n=stxlen(s)所以while循环的循环条件表达式中*(s+n)指向字符串s的结束标志'0',处,而该处应该等于字符串t的第1个字符,另外循环体中让s和t指向下一个字符,即s+n和t同时被移动到下一个位置,所以该处应该填*t,即t所指内容.当t指向字符串结束标志'\\0'的时候,整个循环条件表达式的值也为0(“假”)了,循环结束.正好满足将t所指字符串复制到s所指的字符串的尾部。

25.线性数据结构线性数据结构解析:队列的链式存储称为链队列,它属于线性数据结构。

26.**p(p+i)

27.aa解析:“z”的ASCII码值为122,经过c-25运算后得97,以字符形式输出是a。

28.20

29.43344334解析:本题考查的是函数的传值调用。在C语宫中函数是传值调用的,印在函数中修改形参变量的内容,不会影响传给函数的实参变量的内容。题目中首先让a=3,b=4,然后调用swap()函数,该函数首先交换两个参数的值,然后输出交换后的值,即输出4和3,然后在主函数中再次输出a和b的值,由于传值调用不会影响实参的值,所以最后输出的是3和4。

30.存储或物理或存储结构或物理结构存储或物理或存储结构或物理结构解析:数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间。供队列循环使用。可知,循环队列应当是物理结构。

31.对象对象解析:类描述的是具有相似性质的一组对象。例如,每本具体的书是一个对象,而这些具体的书都有共同的性质,它们都属于更一般的概念“书”这一类对象。一个具体对象称为类的实例。

32.本题程序的流程是:让i;j都从1开始,其中j用于控制删除后剩下的数中的下标,i用于搜索原数组中的元素。j始终是新数组已有元素中最后一个元素的下一个元素的下标,所以if()中的条件是a[j-1]!=a[i],其中a[j-1]就是新数组中的最后一个元素,若条件成立则表示出现了不同的值,所以s[i]要留到新数组中。注本题中i、j的初值都要从1开始,该算法只能用于数组已排序的题目中。\r\n\r\n

33.概念设计阶段(数据库概念设计阶段)概念设计阶段(数据库概念设计阶段)

34.structSTRUstructSTRU解析:结构体类型是构造数据类型,是用户自己定义的一种类型。

结构体类型的定义:

struct结构体类型名

{

成员项表;

定义结构休变量的的形式为:

struct结构体类型名变量1,变量2,....

其中变量包括:一般变量、指针变量、数组变量等。

35.11解析:本题考查局部变量和全局变量的区别:局部变量是指作用域在函数级和块级的变量,全局变量是指作用域在程序级和文件级的变量。本程序首先定义了一个全局变量m=17,m=17的作用域在整个程序内。在fun函数内部定义了一个局部变量m=3,m=3的作用域仅在fun函数内部,通过fun函数返回两个形参的积再减m。在主函数中,输出fun(a,b)/m=(5*7-3)/17=1。

36.q<p+nq<p+n解析:通过地址传递可以在被调函数中对调用函数中的变量进行引用。

37.113399

38.2525解析:本题考查带参数的宏的定义及相关运算。运算过程为:t=POW(x+y)=(2+3)*(2+3)=25。

39.1212解析:x=(表达式1,表达式2,…)的形式,结果为最后一个表达式的值:x=(a=4,6*2)=2*6=12。

40.完整性控制完整性控制

41.A解析:本题考查ASCⅡ码值的相关知识及格式控制字符%d,%c,注意显示时整型和字符型格式的区别。

42.A解析:在C语言中,字符串的长度是其首字符到NULL(不含)字符的总字符个数。本题定义字符数组str的同时,对第7个元素,由系统自动添加上“\\0”,故字符串的长度为6。

43.A解析:位置指针当前值函数ftell()的基本调用格式为:ftell(fp)。

ftell()函数的参数说明:“fp”是指向文件的文件型指针。

ftell函数的功能:得到fp所指向文件的当前读写位置,即位置指针的当前值,如果函数的返回值为-1L,表示出错。

44.C

45.A解析:函数rewind的功能是将文件指针重新指向一个流的开头。用法如下:

intrewind(FILE*stream);并且无返值。

46.A解析:本题考查while循环。先判断while循环的控制表达式是否成亢,发现a>b>c不成立,所以不执行循环。直接输出a、b、c的值。

47.D解析:break语句除了能用于switch语句外,还可以用于循环语句中,因此选项A不正确。在switch语句中,可以使用default来执行所有case均失配时的分支,也可以不使用default,此时若所有case均失配则跳出switch,因此选项B不正确。在switch语句中,每个case的作用就是标出一个执行的起点,当符合某个case时,程序就从该case所标出的起点处开始执行,若没有break语句中断执行的话,程序会一直执行到switch的最后一条语句,而不是碰到下一个case就跳出switch。虽然break与case的配对使用会让所有case分支互不重叠条理明确,但不配对使用在C语言中也是允许的。因此选项C不正确,应该选择D。

48.D解析:第一次调用函数sub返回后,d的值为2+1=3;第二次调用函数sub返回后,e的值为3+3=6。

49.D

50.A解析:C语言中任何非0值都表示真,所以表达式1||2||3||4就是“真||真||真||真”,结果为真。又因为C语言中的真值转换为整型就是1,故选项A正确。

51.C解析:本题考查函数调用时的参数传递。函数的形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。在函数调用时,实参和其所对应的形参分别占用不同的存储单元,彼此之间不影响。

52.C解析:s是一个含有两个元素的指针数组,pp是一个指向指针变量的指针,s[0]是指向二维数组a行下标为0的元素的首地址,即a[0][0]的地址,s[1]为a[1][0]的地址。pp的值为s[0]的地址。**pp=s[1][1]后,a[0][0]的值将被赋值为a[1][1]的值,执行p=*pp;后,p中将是s[0]的值,最后的输出语句将输出地址s[0]所指向的数据,即a[0][0]。

53.D解析:本题考查二维数组的基本概念。对于二维数组,只可以省略第一个括号中的常量表达式,而不能省略第二个括号中的常量表达式。数组中未赋初值的元素系统会自动对它们赋初值0。

54.A解析:本题考查如何通过地址来引用数组元素。通过地址来引用数组元素的方法有下列5种:

①a[i][j];②*(a[i]+j);③*(*(a+i)+j);④*(a[i])[j];⑤*(&a[0][0]+3*i+j)。

55.D解析:本题考查for循环语句。x=8,for循环条件为真,8%3=2,不等于0,则if条件表达式为真,执行第一个输出语句,先输出x的值8,然后将x的值减1,此时x=7。然后执行continue语句结束本次循环。执行x--表示式,得x=6,for循环条件为真.6%3=0,则if条件表达式为假,执行第二个输出语句,先将x的值减1得x=5,然后输出x的值5。执行x--表示式,得x=4,for循环条件为真,4%3=1,不等于0,则if条件表达式为真,执行第一个输出语句,先输出x的值4,然后将x的值减1,此时x=3。然后执行continue语句结束本次循环。执行x--表示式,得x=2,for循环条件为真,2%3=2,不等于0,则if条件表达式为真,执行第一个输出语句,先输出x的值2,然后将x的值减1,此时x=1。执行x--表示式,得x=0,for循环条件为假,循环结束。

56.A解析:在C语言中,应当在定义函数时指定函数值的类型。凡不加类型说明的函数,默认按整型处理。在定义函数时对函数值说明的类型一般应该和return语句中的表达式类型一致。如果函数值的类型和return语句中的表达式类型不一致,则以函数值的类型为准,由系统自动进行转换,即函数类型决定返回值的类型。

57.C解析:只能在循环体内和switch语句体内使用break语句。当break出现在循环体的switch语句体内时,其作用只是跳出该switch语句体,并不能中止循环体的执行。若想强行中止循环体的执行,可以在循环体中,但并不在switch语句中设置break语句,满足某种条件,则跳出本层循环体。

58.D解析:本题考查软件工程中软件设计的概念和原理。人们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得到如下的启发式规则:

(1)改进软件结构,提高模块独立性;通过模块的分解或合并,力求降低耦合提高内聚。低耦合也就是降低不同模块间相互依赖的紧密程度,高内聚是提高一个模块内各元素彼此结合的紧密程度。

(2)模块的规模应适中。一个模块的规模不应过大,过大的模块往往是由于分解不够充分:过小的模块开销大于有益操作,而且模块过多将使系统接口复杂。因此过小的模块有时不值得单独存在。

(3)模块的功能应该可以预测,但也要防止模块功能过分局限。如果模块包含的功能太多,则不能体现模块化设计的特点:如果模块的功能过分的局限,使用范围就过分狭窄。

经过上述分析,本题的正确答案是选项D。

59.B

60.A解析:本题考查数据结构中二叉树的性质。二叉树满足如下一条性质,即:对任意一棵二叉树,若终端结点(即叶子结点)数为n0,而其度数为2的结点数为n2,则n0=n2+1。根据这条性质可知,若二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为n+1。因此,本题的正确答案是选项A。

61.B

62.A在一维数组中要注意的是,下标表达式中常量表达式的值必须大于等于零,并且小于自身元素的个数,即数组长度,选项A的下标不是整数,所以错误。

63.C本题考查结构体数组的相关操作,dt为结构体数组,那么指针P指向了结构体数组的一个元素,所以P一>x为1,P一>Y为2,结果为2,3。选项C正确。

64.C

65.C本题主要考查栈和队列的基本特性。栈是限定仅在表尾进行插入和删除操作的线性表,而队列则只允许在队尾进行插入操作,在队头进行删除操作。栈对数据元素的操作具有先进后出的特点,而队列对数据元素的操作具有先进先出的特点。

本题要求对栈和队列一起操作,将出栈S的元素进入队列Q,元素出队的顺序是a2,a3,a4,a6,a5,a1,根据队列的特性,那么元素入队的顺序也应该为a2,a3,a4,a6,a5,a1,这也就说明元素出栈的顺序为a2,a3,a4,a6,a5,a1,但元素入栈的顺序是a1,a2,a3,a4,a5,a6,根据这两个序列,我们可以推断出元素入栈出栈的过程为:首先a1入栈,它不马上出栈,而是让a2入栈,然后a2出栈,a3、a4分别入栈后又出栈,接着a5入栈,而不接着出栈,而是让a6入栈,这时,栈S中元素的个数为3个,分别是a1,a5,a6。因此,栈的容量至少为3。

66.C解析:本题考查“逻辑或”运算的特例。本题中if语句的条件表达式为(j++||k++)&&i++,首先计算表达式(j++||k++)的值,++运算符位于右侧,因此先取j、k当前值进行运算,因j=1,所以表达式(j++||k++)的值为真,k++表达式不再执行,故执行完表达式(j++||k++)&&i++后,j=2、k=2、i=2。

67.C本题考查的是指向函数的指针。函数指针定义的基本格式为:类型标识符(*指针变量名)()。“类型标识符”为函数返回值的类型。

68.C

\n在for循环中,当y的值为9、6或3时,执行输出语句,输出表达式--Y的值。Y先自减l,然后再输出y的值。

\n

69.B

70.C

71.D

72.C

73.D

74.B在f(int+P,int4q)函数中,执行P=P+1是将P所对应的地址加1,而0q=+q+1是将q所指向的n的地址所对应的值加1,所以m的得知所对应的值没有变,而n的值则为3了。因此B选项正确。

75.Ac语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是仨意合法的表达式,因此选择A)。

76.D冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

77.D本题考查逗号运算符的运算方式,逗号运算符的作用是将若干表达式连接起来,它的优先级别在所有运算符中是最低的,结合方向为”自左至右”。A)选项和c)选项的结果是一样的,可展开为:x=x*(x+1)=3*4=12;B)选项中先执行x++,因为++运算符有自加功能,逗号之前执行后x的值为4,逗号后的值就是整个表达式的值,即12;D)选项逗号之前并未给x赋值,所以表达式的值就是x+=6的值,即9。因此,本题答案为D)。

78.B栈是线性表的一种,其插入和删除运算都只在表的一端进行。进行插入、删除的一端称为栈顶,封闭的一端称为栈底。栈顶元素是最后被插入的元素,不是最后被删除的元素,是按先进后出的原则组织数据的。

79.B

\nm++的意思是先用m的值再自加1,所以表达式的值为5,m为6,此时if语句条件m++>5不成立,执行else语句,则输出m--的值为6,而此时m为5,故选择B选项。

\n

80.C

81.(1)错误:fun(intn)

正确:doublefun(intn)

(2)错误:s=s+(Double)a/b;

正确:s=s+(double)a/b;

【解析】本题考查函数的定义规则。函数定义的一般形式为类型标识符函数名(形式参数表列){函数体}。fun()函数中,最后返回的是变量s,由变量s的定义可知,返回值是double型,所以fun()函数定义时应明确注明标识符double类型。Double为书写问题,写程序时切记书写格式。

82.2021-2022年陕西省西安市全国计算机等级考试C语言程序设计学校:________班级:________姓名:________考号:________

一、单选题(20题)1.每次从无序表中取出一个元素,把它插入到有序表中的适当位置,此种排序方法叫做()排序。

A.插入B.堆C.快速D.归并排序

2.假设把整数关键码K散列到有N个槽的散列表,以下哪些散列函数是好的散列函数()

A.h(K)=KmodN

B.h(K)=1

C.h(K)=K/N

D.h(K)=(K+rand(N))modN,rand(N)返回一个0到N-1的整数

3.由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为________。

A.24B.48C.72D.53

4.设有宏定义:#defineIsDIV(k,n)((k%n==1)?1:0)且变量m已正确定义并赋值,则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是A.判断m是否能被5或者7整除

B.判断m是否能被5和7整除

C.判断m被5或者7整除是否余1

D.判断m被5和7整除是否都余1

5.下面判断正确的是

A.char*a="china";等价于char*a;*a="china";

B.charstr[5]={"china"};等价于charstr[]={"china"};

C.char*s="china";等价于char*s;s="china";

D.charc[4]="abc",d[4]="abc";等价于charc[4]=d[4]="abc";

6.如果最常用的操作是取第i个结点及其前驱,最节省时间的存储方式是()。

A.单链表B.双向链表C.单循环链表D.顺序表

7.

8.下面程序的运行结果是()。

#inelude<stdio.h>

voiddel(char*s)

{inti,j;

char*a;

a=s:

for(i=0,j=0;a[i]!='\0';i++)

{if(a[i]>='0'&&a[i]<='9')

{s[j]=a[i];

j++;

}

s[j]='\0';

}

}

main

{char*s="aa89gggh";

del(s):

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

}A.A.1B.2C.3D.4

9.连通图G中有n个顶点,G的生成树是()连通子图。

A.包含G的所有顶点B.包含G的所有边C.不包含G的所有顶点D.包含G的所有顶点和所有边

10.数据的不可分割的基本单位是()。

A.元素B.结点C.数据类型D.数据项

11.若以下选项中的变量已正确定义,则正确的赋值语句是()。

A.x1=26.8%3B.1+2=x2C.x3=0x12D.x4=1+2=3

12.

有下列程序:

main

{charp[]={a,h,c},q[]="a";

printf("%d%d\n".sizeof(P),sizeof(q));

}

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

A.44B.33C.34D.43

13.已知大写字母A的ASCII值是65,小写字母a的ASCII值是97。下列不能将变量c中的大写字母转换为对应小写字母的语句是()。

A.c=(‘A’,+c)%26-‘a’B.c=c+32C.c=c-‘A’+‘a’D.c=(c-‘A’)%26+‘a’

14.

15.

16.以下关于C语言的叙述中正确的是()。

A.C语言的数值常量中夹带空格不影响常量值的正确表示

B.C语言中的变量可以在使用之前的任何位置进行定义

C.在C语言算术表达式的书写中,运算符两侧的运算数据类型必须一致

D.C语言中的注释不可以夹在变量名或关键字的中间

17.

18.若i、j已定义成mt型,则下列程序段中内循环体的总执行次数是()。for(i=6;i>0;i--)for(j=0;j<4;j++){…}A.20B.24C.25D.30

19.有下列程序:#include<stdio.h>voidfun(char*a,char*B){while(*a=='*')a++;while(*b=*A){b++;a++;}}main(){char*s="*****a*b****",t[80];fun(s,t);puts(t);程序的运行结果是()。A.*****a*bB.a*bC.a*b****D.ab

20.以下叙述中错误的是()。

A.使用三种基本结构构成的程序只能解决简单问题

B.结构化程序由顺序、分支、循环三种基本结构组成

C.C语言是-种结构化程序设计语言

D.结构化程序设计提倡模块化的设计方法

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

intk=0;

voidfun(intm)

{m+=k;k+=m;

printf("m=%dk=%d",m,k++)

}

main()

{inti=4;

fun(i++);

printf("i=%dk=%d\n",i,k);

}

22.若变量x、y已定义为int类型且X的值为33,y的值为3,请将输出语句printf((),x/y);补充完整,使其输出的计算结果形式为:x/y=11。

23.设有以下定义

struetss

{intinfo;struetss*link;}x,y,z;

且已建立如下图所示链表结构:

请写出删除结点y的赋值语句【】。

24.以卜函数sstrcat()的功能是实现宁符串的连接,即将t所指字符串复制到s所指字符串的尾部。例如:s所指字符串为abcd,t所指字符申为efgh,函数调用后s所指字符串为abcdefgh。请填空。

#include<string.h>

voidsstrcat(char*s,char*t)

{intn;

n=strlen(s);

while(*(s+n)=){s++;t++;}

}

25.数据结构分为线性数据结构和非线性数据结构,带链的队列属于()。

26.以下程序的功能是输出字符串。请填空。

main()

{char*a[]={"Pascal","Clanguage","dbase","Cobol"};

char【】;

intj=0;

p=a;

for(;j<4;j++)

print{("%s\n",*【】);

}

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

main()

{charc='z';

printf("%c",c-25);}

28.下面程序的输出是()。

main()

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

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

arr[i]=i;

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

k+=arr[i]+i;

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

}

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

voidswap(intx,inty)

{

intt;

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

}

main()

{

inta=3,b=4;

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

}

30.数据结构分为逻辑结构和存储结构,循环队列属于______结构。

31.在面向对象方法中,类的实例称为______。

32.以下程序的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

例如,若一维数组中的数据是:

2223445666677899101010

删除后,数组中的内容应该是:

2345678910。

请填空。

#include<stdio.h>

#defineN80

intfun(inta[],intn)

{inti,j=1;

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

if(a[j-1][

33.数据库设计分为以下6个设计阶段:需求分析阶段、______、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。

34.若有如下结构体说明:

structSIRU

{inta,b;charc:doubled;

structSTRU*p1,*p2;

};

请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型。

【】t[20]

35.下列程序输出的结果是______。

intm=17;

intfun(intx,inty)

{intm=3;

return(x*Y-m);

}

main()

{inta=5,b=7;

printf("%d\n",fun(a,B)/m);

}

36.下面的程序实现的是指针p所指向的地址的n个数中,求出最大的和最小的数据,请填空。

fun(int*p,intn)

{int*q;

intmax,min;

max=min=*p;

for(q=p;【】;q++)

if(*q>max)max=*q;

elseif(*q<min)min=*q;}

37.以下程序的运行结果为【】。

#defineFORMAT"%u,%u"

main()

{inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

printf("\n");

printf(FORMAT,**a,*a[0]);

printf(FORMAT,*(a[0]+1),*&a[0][1]);

printf(FORMAT,a[1][0],*(*(a+1)+0));

}

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

#definePOW(r)(r)*(r)

main()

{intx=3,y=2,t;

t=POW(x+y);

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

}

39.若x和a均是int型变量,则计算完x=(a=4,6*2)后的x值为______。

40.数据库保护分为:安全性控制、______、并发性控制和数据的恢复。

三、1.选择题(20题)41.已知字母A的ASCⅡ码为十进制数的65,下面程序的输出是______。main(){charch1,ch2;ch1='A'+'5'-'3';ch2='A'+'6'-'3';printf("%d,%c\n",ch1,ch2);}

A.67,DB.B,CC.C,DD.不确定的值

42.以下程序的输出结果是______。main(){charstr[12]={'s','t','r','i','n','g'};printf("%d/n",strlen(str));}

A.6B.7C.11D.12

43.函数ftell(fp)的作用是()。

A.得到fp所指向文件的当前读写位置B.初始化流式文件的位置指针C.移动流式文件的位置指针D.以上答案均正确

44.在以下一组运算中,优先级最高的运算符是()

A.<=B.=C.%D.&&

45.函数rewind的作用是

A.使文件位置指针重新返回文件的开始位置

B.将文件位置指针指向文件中所要求的特定位置

C.使文件位置指针指向文件的末尾

D.使文件位置指针自动移至下一个字符位置

46.有下列程序main(){intt,a=1,b=5,c=-2;while(a>b>c){t=a;a=b;b=t;c++;}printf("%d,%d,%d",a,b,c);}程序输出的结果是()。

A.1,5,0B.1,5,-2C.5,1,-1D.5,1,-2

47.下列叙述中正确的是A.break语句只能用于switch语句

B.在switch语句中必须使用default

C.break语句必须与switch语句中的case配对使用

D.在switch语句中,不一定使用break语句

48.若有如下程序:sub(inta,intb,int*z){*z=a+b;return;}main(){inta=1,b=2,c=3,d,e;sub(a,b,&D);sub(c,d,&e);printf("%d",e);}则程序运行后的输出结果是

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

49.执行下列程序时输入456<空格>789<空格>123<回车>,输出结果是()。#include<stdio.h>main(){charm[80];intc,i;scanf("%c",&C);scanf("%d",&i);scanf("%s",&m);printf("%c,%d,%s\n",c,i,m);}

A.4.56789e+008B.4.78912e+006C.4,56,789,123D.4,56.789

50.表达式“1||2||3||4”的值是()。

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

51.若函数调用时,参数为基本数据类型的变量,下列叙述中正确的是()。

A.实参与其对应的形参共占存储单元

B.只有当实参与其对应的形参同名时才共占存储单元

C.实参与其对应的形参分别占用不同的存储单元

D.实参将数据传递给形参后,立即释放原先占用的存储单元

52.以下程序运行后,输出结果为______。main(){inta[2][3]={1,3,5,7,9,11),*s[2],**pp,*p;s[0]=a[0],s[1]=a[1];pp=s;p=(int*)malloc(sizeof(int));**pp=s[1][1];p=*pp;printf("%d\n",*p);}

A.1B.7C.9D.11

53.若有说明:inta[][4]={0,0};则下面不正确的叙述是()。

A.数组a的每个元素都可得到初值0

B.二维数组a的第一维大小为1

C.当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小

D.只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值

54.若有定义:“inta[2][3];”,则对a数组的第i行第j列元素的正确引用为()。

A.*(*(a+i)+j)B.(a+i)[j]C.*(a+i+j)D.*(a+i)+j

55.有以下程序:#include<stdio.h>main(){intx=8;for(;x>0;x--){if(x%3){printf("%d,",x--);continue;}printf("%d,",--x);}}程序的运行结果是()。

A.7,4,2B.8,7,5,2C.9,7,6,4D.8,5,4,2

56.在C语言中,函数返回值的类型最终取决于()。

A.函数定义时在函数首部所说明的函数类型

B.return语句中表达式值的类型

C.调用函数时主调函数所传递的实参类型

D.函数定义时形参的类型

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

A.break语句只能用于switch语句体中

B.continue语句的作用是使程序的执行流程跳出包含它的所有循环

C.break语句只能用在循环体内和switch语句体内

D.在循环体内使用break语句和continue语句的作用相同

58.在结构化程序设计中,模块划分的原则是()。

A.各模块应包括尽量多的功能

B.各模块的规模应尽量大

C.各模块之间的联系应尽量紧密

D.模块内具有高内聚度,模块间具有低耦合度

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

A.调用printf()函数时,必须要有输出项

B.使用putchar()函数时,必须在之前包含头文件stdio.h

C.在C语言中,整数可以以二进制、八进制或十六进制的形式输出

D.调节getchar()函数读入字符时,可以从键盘上输入字符所对应的ASCII码

60.某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为()

A.n+1B.n-1C.2nD.n/2

四、选择题(20题)61.

62.以下不正确的定义语句是

A.inty[5.3]={0,1,3,5,7,9};B.doublex[5]={2.0,4.0,6.0,8.0,10.0};

C.charc1[]={’1’,’2’,’3’,’4’,’5’};D.charc2[]={’\x10’,’\xa’,’\x8’};

63.有以下程序:

i

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

A.3,4B.4,1C.2,3D.1,2

64.

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

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

66.有以下程序:main(){inti=1,j=1,k=2;if((j++‖k++)&&i++)printf("%d,%d,%d\n",i,j,k);}执行后的输出结果是______。

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

67.语句int(*ptr)的含义是()。

A.ptr是一个返回值为int的函数

B.ptr是指向int型数据的指针变量

C.ptr是指向函数的指针,该函数返回一个int型数据

D.ptr是一个函数名,该函数的返回值是指向int型数据的指针

68.

有以下程序

#include<stdio.h>

main

{inty=9;

for(;y>0;y--)

if(y%3==0)printf("%d",--y);

}

程序的运行结果是()。

A.741B.963C.852D.875421

69.

70.

71.

72.为了避免嵌套的条件分支语句if—else的二义性,C语言规定:C程序中的else总是与_____组成配对关系。

A.缩排位置相同的ifB.在其之前未配对的ifC.在其之前未配对的最近的ifD.同一行上的if

73.

74.有以下程序:

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

A.2.3B.1,3C.1,4D.1,2

75.以下关于逻辑运算符两侧运算对象的叙述中正确的是()。

A.可以是任意合法的表达式B.只能是整数0或非0整数C.可以是结构体类型的数据D.只能是整数O或l

76.最简单的交换排序方法是()。A.快速排序B.选择排序C.堆排序D.冒泡排序

77.设有定义:intx=3;,以下表达式中,值不为l2的是()。

A.x*=x+1B.x++,3*xC.x*=(1+x)D.2*x.x+=6

78.按照“先进后出”原则组织数据的结构是()。

A.队列B.栈C.双向链表D.二叉树

79.

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

main

{intm=5;

if(m++>5)printf("%d\n",m):

elseprintf("%d\n",m--);

}

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

80.

五、程序改错题(1题)81.下列给定程序中函数fun()的功能是:求出如下分数序列的前n项之和,结果通过函数值返回。例如,若n=5,则应输出8.391667。请改正程序中的错误,使其得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:

六、程序设计题(1题)82.函数fun的功能是:将s所指字符串中下标为偶数同时ASCIl值为奇数的字符删除,S所指串中剩余的字符形成的新串放在t所指的数组中。例如,若s所指字符串中的内容为“ABCDEFGl2345”,其中字符C的ASCIl码值为奇数,在数组中的下标为偶数,因此必须删除;而字符l的ASCIl码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是“BDFl2345”。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:

参考答案

1.A

2.A

3.D

4.D

5.C解析:选项A)char*a;*a=“china”应改为a=china;,选项B)应该是charstr[6];D)项表述方法有错误。

6.D

7.B

8.D本题中del(char*s)函数实现的功能是:逐个读入S数组中的字符,如果遇到数字,则将数字存在s中,遇到非数字字符则跳过。所以最后输出的应该是字符串S中所有的数字的个数。

9.A

10.D

11.C解析:赋值的一般形式为:变量名:表达式;,赋值的方向为由右向左,即将:右侧表达式的值赋给:左侧的变量,执行步骤是先计算再赋值。选项A中运算符%的运算对象必须为整数,而选项A中26.8不为整数,故选项A不正确;选项B将一个变量赋值给一个常量,这在C语言中是不允许的,故选项B不正确;选项D中也是将一个常量3赋值给一个常量,故选项D不正确;所以,4个选项中选项C符合题意。

12.C

\n语句charp[]={a,b,c);定义了一个一维字符数组p[],并用3个字符a,b,c进行了初始化;而语句q[]='abe'表示定义了一个一维字符数组,并用一个字符串常量'abc'进行了初始化。在C语言中,系统在每个字符串常量的最后自动加入一个字符\0作为字符串的结束符。所以函数sizeof(q)=4,而sizeof(p)=3,因而选项C为正确答案。

\n

\n

\n

13.A根据题意可知,小写字母比与之对应的大写字母的ASCII值大32。A选项中字符W加变量c再对字母个数26取余,不能转换为对应的小写字母。故本题答案为A选项。

14.A

15.D

16.DC语言的数值常量中不能夹带空格,所以A选项错误。C语言中的变量都必须先定义再使用,变量的定义通常放在函数体的前部,也可以放在函数外部或复合语句的开头,不能随便放置,所以B选项错误。在C语言中,运算符两侧的运算数据类型可以不一致,且结果与精度较高的数据类型保持一致,所以C选项错误。故本题答案为D选项。

17.D

18.B本题考查for循环的使用。对于第1个for循环,任何一个i,内层j的循环都要使j~0到3,j=4时不符合,所以退出j循环;然后i减1,J仍然要从0~3,j=4时退出J循环直到i变成0,退出i循环。第一条for语句执行6次,第二条for语句执行4次,所以内循环体执行6*4=24次。

19.C解析:主函数main()定义了指向字符串的指针和一个字符数组,接着调用fun(s,t)函数,进行实参向形参传递,函数fun()第一个while语句判断*a中的值为“*”时继续扫描,当遇到不是“*”时结束,接着第二个while循环语句,将*a中从“a”开始的后续所有字符都赋予*b,也就是t[80]中的内容为“a*b****”,所以此题的运行结果为选项C)。

20.A使用顺序,选择(分支),循环三种基本结构构成的程序可以解决所有问题,而不只是解决简单问题,所以A错误。

21.m=4k=4i=5k=5m=4k=4i=5k=5解析:main()函数首先定义了1个变量i,并初始化为4。然后用表达式i++的值为实参调用函数fun(),因为后缀”表达式的值为增1之前的值,故此时传递给函数的参数m值为4。fun()函数中,首

温馨提示

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

评论

0/150

提交评论