2021-2022年甘肃省金昌市全国计算机等级考试C语言程序设计模拟考试(含答案)_第1页
2021-2022年甘肃省金昌市全国计算机等级考试C语言程序设计模拟考试(含答案)_第2页
2021-2022年甘肃省金昌市全国计算机等级考试C语言程序设计模拟考试(含答案)_第3页
2021-2022年甘肃省金昌市全国计算机等级考试C语言程序设计模拟考试(含答案)_第4页
2021-2022年甘肃省金昌市全国计算机等级考试C语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

2021-2022年甘肃省金昌市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(20题)1.

2.

3.在KMP算法中,已知模式串为ADABCADADA,请写出模式串的next数组值()

A.0,1,1,2,1,1,2,3,4,3

B.1,2,3,2,1,1,2,4,4,3

C.0,1,1,1,2,1,2,3,4,3

D.2,1,1,2,1,1,2,3,3,4

4.向一个栈顶指针为H的链栈中执行出栈运算时,需执行()。

A.p=H;H=H->link;free(p);

B.H=H->link;free(H);

C.p=H;H->link=H->link->link;free(p);

D.p=H;H=H->link;

5.计算机识别.存储和加工处理的对象被统称为_________

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

6.a、b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是()

A.'a'&&'b

B.a<=b

C.ab+c&&b-c

D.!((a<b)&&!c1)

7.如果要求一个线性表既能较快地查找,又能适应动态变化的要求,可以采用下列哪一种查找方法()

A.分块B.顺序C.折半D.哈希

8.

9.在inta=3,int*p=&a;中,*p的值是()

A.变量a的地址值B.无意义C.变量p的地址值D.3

10.使用深度优先算法遍历下图,遍历的顺序为()A.ABCDEFGB.ABDCFEGC.ABDECFGD.ABCDFEG

11.假设把整数关键码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的整数

12.有以下定义:structperson{charname[10];intage;};structpersonclass[10]={“Johu”,17,“Paul”,19,“Mary”,18,“Adam”,16,};能输出字母M的语句是()。

A.printf(“%c\n”,class[2].name[0]);

B.printf(“%c\n”,class[3].name[0]);

C.printf(“%c\n”,class[3].name[1]);

D.printf(“%c\n”,class[2].name[1]);

13.算法的时间复杂度是指A.算法的执行时间B.算法所处理的数据量C.算法程序中的语句或指令条数D.算法在执行过程中所需要的基本运算次数

14.软件生命周期中所花费用最多的阶段是()。

A.详细设计B.软件编码C.软件测试D.软件维护

15.

16.若有定义:floatx=1.5;inta=1,b=3,c=2;则正确的switch语句是()。A.switch(a+b){case1:prinf("*\n");.case2+1:printf("**(n");}

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

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

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

17.

18.若需要0(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择排序方法是()。A.快速排序B.堆排序C.归并排序D.直接插入排序

19.设有定义语句

则以下叙述正确的是().

A.f是指向函数的指针变量,该函数具有_个int类型的形参

B.f是基类型为int的指针变量

C.f是指向int类型一维数组的指针变量

D.f是函数名,该函数的返回值是基类型为int类型的地址

20.若有定义“inta=1234,b=-5678;”,用语句“printf("%+-6d%+-6d",a,b);”输出,以下正确的输出结果是()。

A.+1234-5678(中间有一个空格,最后有一个空格)

B.+1234-5678(最前面有一个空格,中间有一个空格)

C.+-1234+-5678(最前面和最后均无空格)

D.1234-5678(中间有两个空格,最后有一个空格)

二、2.填空题(20题)21.在程序设计阶段应该采取______和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。

22.在面向对象方法中,类之间共享属性和操作的机制称为______。

23.在树形结构中,没有前件的结点是()。

24.若有如下程序:

main()

{intx=4;y=3,Z=2,t;

t=x<y<z;

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

}

则程序运行后的输出结果是【】。

25.以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。

例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。

#include<stdio.h>

#include<ctype.h>

main()

{chars[80],d[80];inti,j;

gets(s);

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

if(【】){d[j]=s[i];j++;}

d[j]='\0';

puts(d);

}

26.设x和y均为int型变量,且x=1,y=2,则表达式double(1+x/y)的值为【】。

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

#include<stdio,h>

#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")

}

28.以下函数的功能是删除字符串s中的所有数字字符。请填空。

voiddele(char*s)

{

intn=0,i;

for(i=0,s[i];i++)

if(【】)

s[n++]=s[i];

s[n]=【】;

}

29.设一棵完全二叉树共有700个结点,则在该二叉树中有【】个叶子结点。

30.用以下程序计算1到100的整数的累加和。请填空。

main()

{inti,sum=【】;

i=1;

for(【】)

{sum+=j

i++;

}

printf("sum=%d\n",【】);

}

31.为了便于对照检查,测试用例应由输入数据和预期的【】两部分组成。

32.在一个容量为15的循环队列中,若头指针front=6,尾指针Year=9,则该循环队列中共有【】个元素。

33.性结构中,第一个结点没有前驱结点,其余每个结点有且只有【】个前驱结点;最后一个结点没有后继结点,其余每个结点有且只有【】个后继结点。

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

35.已有定义:charc=′′;inta=1,b;(此处c的初值为空格字符),执行b=!c&&a;后b的值为【】。

36.下列语句的输出结果是______。

chars[20]="aaaa",*sp=s;

puts(strcat(sp,"AAAAA"));

37.不改变关系表中的属性个数但能减少元组个数的是()。

38.若a是int型变量,则表达式(a=2*3,a*2),a+6的值为______。

39.若有如下程序:

voidsub()

{staticintx=8;

x/=2;printf("%d",x);

}

main()

{intm;

for(m=0;m<2;m++)sub();}

则程序运行后的输出结果是【】.

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

#include<stdio.h>

voidmain()

{

charc1[20]="1234";

charc2[20]="5678";

char*p1,*p2;

p1=c1;

p2=c2;

while(*p1++)

while(*p1++=*p2++);

printf("%s,c1);

}

三、1.选择题(20题)41.在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂性为______。

A.O(1)B.O(n)C.O(n2)D.O(log2n)

42.以下叙述中正确的是()。

A.预处理命令行必须位于C源程序的起始位置

B.在C语言中,预处理命令行都以“#”开头

C.每个C程序必须在开头包含预处理命令行:#include<stdio.h>

D.C语言的预处理不能实现宏定义和条件编译的功能

43.结构化程序设计主要强调的是()。

A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序的易读性

44.用黑盒技术测试用例的方法之一为

A.因果图B.逻辑覆盖C.循环覆盖D.基本路径测试

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

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

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

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

46.以下选项中,与k=n++完全等价的表达式是

A.k=n,n=n+1B.n=n+l,k=nC.k=++nD.k+=n+1

47.设有下列二叉树:对此二叉树前序遍历的结果为()

A.ZBTYCPXAB.ATBZXCYPC.ZBTACYXPD.ATBZXCPY

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

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

49.若有下列说明和语句,已知int型数据占2个字节,则下列语句的输出结果是()。structst{chara[15];intb;doublec;};printf("%d",sizeof(structst));

A.15B.8C.25D.2

50.有以下程序main(){inti;for(i=0;i<3;i++)switch(i){case1:printf("%d",i);case2:printf("%d",i);default:printf("%d",i);}执行扣输出的结果是

A.11122B.12C.12020D.120

51.已知inta=1,b=3则a^b的值为

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

52.数据库技术的根本目标是要解决数据的()。

A.存储问题B.共享问题C.安全问题D.保护问题

53.若已包括头文件<stdio.h>且已有定义staticcharstr[9];,现要使str从键盘获取字符串"Thelady",应使用

A.scanf("%s",str)

B.for(i=0;i<9;i++)gethchar(str[i]);

C.gets(str);

D.for(i=0;i<9;i++)scanf("%s",&str[i]);

54.若有定义“char,*p2,*p3,*p4,ch;”,则不能正确赋值的程序语句为()

A.p1=&ch;scanf("%c",p1);

B.p2=(char*)malloc(1);scanf("%c",p2);

C.p3=getchar();

D.p4=&ch;*p4=getchar();

55.若有说明:int*p,m=5,n;以下正确的程序段是

A.p=&n;scanf("%d",&p);

B.p=&n;scanf("%d",*p)

C.scanf("%d",&n);*p=n;

D.p=&n;*p=m;

56.设char型变量x中的值为10100111,则表达式(2+x)(-3)的值为______。

A.10101001B.10101000C.11111101D.1010101

57.有以下程序main(){intx=10,y=10;printf("%d%d\n",x--,--y);}程序运行后的输出结果是()

A.1010B.99C.910D.109

58.若要求从键盘读入含有空格字符的字符串,应使用函数

A.getc()B.gets()C.getehar()D.scanf()

59.在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送()。A.调用语句B.命令C.口令D.消息

60.下面能正确进行字符串赋值操作的是

A.chars[5]={"ABCDE"};

B.chars[5]={′A′,′B′,′C′,′D′,′E′};

C.char*s;s="ABCDE";

D.char*s;scanf("%s",s);

四、选择题(20题)61.

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

#include<stdio.h>

main

{chara[2][4];

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

a[0][3]=&;

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

}

A.are&youB.youC.areD.&

62.

63.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是()。

A.模拟现实世界中不同事物之间的联系

B.强调模拟现实世界中的算法而不强调概念

C.使用现实世界的概念抽象地思考问题从而自然地解决问题

D.不强调模拟现实世界中的算法而强调概念

64.设有如下三个关系表

下列操作中正确的是()。

A.T=RnSB.T=RUSC.T=R×SD.T=R/S

65.以下选项中正确的语句组是()。

66.若有说明:int*P,m=5,n;,以下正确的程序段是()。A.p=&n;scanf("%d",&p);

B.p=&n;scanf("%d",*p);

C.scanf("%d",&n);*p=n;

D.p=&n;*p=m;

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

()。

68.两次运行下面的程序,如果从键盘上分别输入6和3,则输出结果是()。

if(x++>5)printf("%d",x);

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

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

69.链表不具有的特点是()。

A.不必事先估计存储空间B.可随机访问任意元素C.插入、删除不需要移动元素D.所需空间与线性表长度成正比

70.若有以下定义:

chara;intb;

floatc;doubled;

则表达式a*b+d-c值的类型为()。A.A.floatB.intC.charD.double

71.有以下程序:

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

72.

73.有以下程序:

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

A.4,5,6,4,5,6,

B.1,2,3,4,5,6,

C.4,5,6,1,2,3,

D.6,5,4,3,2,1,

74.下列关于定点数与浮点数的叙述中错误自是()。

A.在实数的浮点表示中,阶码是一个整数

B.整数是实数的特例,也可以用浮点数表示

C.实数的补码是其对应的反码在最后一位加1

D.相同长度的浮点数和定点数,前者可表示数的范围要大于后者

75.

76.

77.下列排序方法中,最坏情况下比较次数最少的是()。

A.冒泡排序B.简单选择排序C.直接插入排序D.堆排序

78.一个栈中初始元素依次为A、B、C、D、E。现将元素1、2、3、4、5依次入栈,然后将所有的元素依次出栈,则元素出栈的顺序是

A.12345ABCDEB.EDCBA54321C.ABCDE12345D.54321EDCBA

79.以下选项中有语法错误的是()。A.char*str[]={"guest"};

B.charstr[][lO]={"guest"};

C.char*str[3];str[t]={"9uest"};

D.charstr[3][lO];str[1]={"guest"};

80.

五、程序改错题(1题)81.下列给定程序中,函数proc()的功能是:将字符串str中的所有字符复制到字符串b中,要求在每复制3个字符之后插入1个空格。例如,在调用proc()函数之前给字符

串str输入abcdefghijk,调用函数之后,字符串b中的内容则为abcdefghijk。

请修改程序中的错误,使它能得出正确的结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

试题程序:

六、程序设计题(1题)82.N名学生的成绩已在主函数中放入一个带有头结点的链表结构中,h指向链表的头结点。请编写函数fun(),其功能是:找出学生的最高分,并由函数值返回。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。试题程序:

参考答案

1.D

2.D

3.A

4.A

5.A

6.D

7.D

8.C

9.D

10.C

11.A

12.AC语言规定数组的下标从0开始,结构体数组class初始化了前4个元素。第3个元素的name=“Marry”,则class[2].name[0]=‘M’。故本题答案为A选项。

13.DD。【解析】算法的时间复杂度是指算法需要消耗的时间资源。一般来说,计算机算法是问题规模。09函数fin),算法的时间复杂度也因此记做T(n)=O(f(n))。因此,问题的规模n越大,算法执行的时间的增长率与f(n)的增长率正相关,称作渐进时间复杂度(AsymptoticTimeComplexity)。简单来说就是算法在执行过程中所需要的基本运算次数。

14.D解析:软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。本题中,详细设计、软件编码和软件测试都属于软什开发阶段;维护是软件生命周期的最后一个阶段,也是持续时间最长,花费代价最大的一个阶段.软件工程学的一个目的就是提高软件的可维护性,降低维护的代价。

15.D

16.AB)选项中switch((int)x);语句中不应该有最后的分号。

17.A

18.C

19.A

20.Aprintf函数参数包括格式控制字符串和输出参数,其中格式控制字符串中除了格式控制字符外,其他字符原样输出。本题中的printf(“%+-6d%+-6d”,a,b);”,在%和格式控制字符d之间,“+”号表示输出的数字带正负号号表示输出数据向左对齐,“6”表示输出宽度,如果输出数据的宽度不够6,那么左对齐,右边补空格。所以本题输出+1234-5678(中间有一个空格,最后有一个空格)。本题答案为A选项。

21.自顶向下自顶向下解析:在程序设计时,应先考虑总体,后考虑细节,逐步使问题具体化,对复杂的问题,应该设计一些子目标作为过渡,上述方法概括为:自顶向下,逐步细化。

22.继承继承

23.根结点根结点

24.11解析:因为x=4,y=3,所以表达式x<y的值为假(0),又因为z=2,所以0<z的值为真(1),故最终输出的结果为1。

25.s[i]>='0'&&s[i]<='9'或isdigit(s[i])s[i]>='0'&&s[i]<='9'或isdigit(s[i])解析:根据题意和程序可知要填空的内容是:将字符申s中的数字字符放入d数组的条件。

26.11解析:本题考查两个知识点:一是x/y的值为整型,即为0;二是数1是double类型。

27.abcbccabcbcc解析:for循环用strcpy函数将字符数组ch的值'abc',分别复制给二维数组x的每一行,然后通过for循环先后打印出以x[0][0],x[1][1],x[2][2]开头的字符串'abe','bc','c',所以输出结果为:abcbcc。

28.s[i]<'0'||s[i]>'9'或!(s[i]>='0'&&s[i]<='9')或!(isdigit(s[i]))或isdigit(s[i])==0或s[i]>'9'||s[i>'0'或!(s[i]<='9'&&s[i]>='0')或*(s+i)<'0'||*(s+i)>'9'或!(*(s+i)>='0'&&*(s+i)<=9或!(isdigit(*(s+i)))或*(s+i)>='9'&&*(s+i)<='0'或!(*(s+i)<='9'&&*(s+i)>='0'或isdigis[i]<'0'||s[i]>'9'或!(s[i]>='0'&&s[i]<='9')或!(isdigit(s[i]))或isdigit(s[i])==0或s[i]>'9'||s[i>'0'或!(s[i]<='9'&&s[i]>='0')或*(s+i)<'0'||*(s+i)>'9'或!(*(s+i)>='0'&&*(s+i)<=9或!(isdigit(*(s+i)))或*(s+i)>='9'&&*(s+i)<='0'或!(*(s+i)<='9'&&*(s+i)>='0'或isdigi解析:从一个字符串中删除某字符的力‘法是从字符串的第一个字符开始一一判断该字符是否是要被删除,若不是则把它放到结果字符串中,若是则不放入结果字符串中。本题的第一个空应判断s[i]是否为数字字符,只有在不是数字字符的情况下才存入结果字符串,所以应填入s[i]<'0'||s[i]>'9'。最后应在结果字符串的末尾填上字符串结束标志\\0。

29.350350解析:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。在根据完全二叉树的定义,在一棵完全二叉树中,最多有1个度为1的结点。因此,设一棵完全二叉树具有n个结点,若n为偶数,则在该二叉树中有n/2个叶子结点以及n/2-1个度为2的结点,还有1个是度为1的结点:若n为奇数,则在该二叉树中有[n/2]+1个叶子结点以及[n/2]个度为2的结点,没有度为1的结点。本题中,完全二叉树共有700个结点,700是偶数,所以,在该二叉树中有350个叶子结点以及349个度为2的结点,还有1个是度为1的结点。所以,本题的正确答案为350。

30.0i<=100;sum

31.输出结果输出结果解析:注意:测试的基本方法和步骤。

32.3

33.11

34.完整性控制完整性控制

35.11解析:字符空格的ASCII码不为0,所以本题中表达式\ue008!c\ue009的值为0,b=0&&1的结果显然为0。

36.aaaaAAAAAaaaaAAAAA解析:函数strcat(sp,'AAAAA')的作用是将字符中“AAAAA”连接到字符串sp的末尾,并自动覆盖字符数组sp末尾的\'\\0\'。

37.选择选择解析:关系数据库的专门关系运算包括选择、投影和连接3种,其中选择不改变关系表中的属性个数但能减少元组个数。

38.1212解析:本题考查逗号表达式的运算规则。逗号表达式的基本格式为:“表达式1,表达式2,…”,其整个表达式的结果取最后一个子表达式的值。本题中首先计算逗号表达式中的第1个表达式a=2*3=6,然后计算第2个表达式a*2,这时整个表达式的值为12,但要注意,因为第2个表达式并没有给a赋值,因此a的值不变;接下来执行最后一个表达式a+6=12,所以整个表达式最后的值为12。

39.4242解析:主函数中的for循环循环两次,即函数sub()被调用两次。在sub()中x被定义为静态整型变量,当调用函数sub()完毕返回主函数,x中的值仍然保留,下次调用函数sub()时,x不再被赋初值。第1次调用x/=2相当于x=x/2=8/2=4,第2次调用x=x/2=4/2=2,因此输出42。

40.1567815678解析:本题使用了双重while循环,外循环的循环条件是*p1++,即每次循环时让p1指向其后面的一个元素,而p1自增之前所指内容为0时循环结束。内循环的循环条件是*p1++=*p2++,即每次循环时让p1和p2指向其后面的一个元素,而将p2自增之前所指的元素复制到p1自增之前所指的地址中去,直到p2自增之前所指内容为0时循环结束。p1本来一开始是指向c1[0],由于外循环判断条件时让p1自增了,所以进入内循环时p1指向c1[1],而内循环将p2所指字符串复制到p1所指位置,所以内循环的结果是c1[1]、c1[2]、c1[3]、c1[4]、c1[5]分别被c2[0]、c2[1]、c2[2]、c2[3]、c2[4]改写成'5'、'6'、'7'、'8'、'\\0'。故程序输出的结果为15678。

41.B

42.B解析:选项B)正确,预处理命令行之前都有一个“#”符号。C语言提供三种预处理:宏替换,文件包含,条件编译。

43.D解析:程序不仅是编写完就结束了,为了测试和维护程序,往往还有其他人阅读和跟踪程序,因此程序设计的风格应该强调简单和清晰,即程序的易读性,“清晰第一,效率第二”。

44.A解析:黑盒测试主要方法有等价值划分法,边界值分析法。错误推测法、因果图法等。白盒测试的主要方法有逻辑覆盖、基本路径测试循环覆盖等。因此只有A属于黑盒测试。

45.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。

46.A解析:在本题中k=n++,为后缀运算。根据其运算规则,首先n先加一,但n++表达式的值依然n原来的值,即k的值没有改变。选项A中先给k赋值为n,然后n再加1,k值没有变化,所以这个表达式和本题中表达式等价;选项B中先n加1,然后将n加1后的值赋给k,k变化了比原来的值大1,所以这个表达式和本题中表达式不等价;选项C中先计算表达式左边的表达式++n的值,执行++n后,左边的表达式的值为n的值加1,然后将n+1后的值赋给k,所以这个表达式和本题中的表达式不等价;选项D中表达式展开为k=k/(n+1),k的值发生了变化,所以这个表达式和本题中的表达式不等价.所以4个选项中A正确。

47.B解析:所谓二叉树的前序遍历(DLR)是指在访问根结点、遍历左子树与遍历右子树这3者中,首先访问根结点,然后遍历左子树,最后遍历右子树,并且,在遍历左右子树时,上述规则同样适用,即“根-左-右”。故该二叉树的前序遍历结果为“ATBZXCYP”。对于本题,若使用后序遍历和中序遍历的结果分别为“ZBTYCPXA”和“TZBACYXP”。

48.D解析:因为x的值为大于1的奇数,所以x除以2的余数等于1。所以选项D)等于关系表达式的结果为假,即等于0。

49.C解析:本题主要考查结构体的内存使用:对结构体而言,结构中不同的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构中每个成员所占内存空间大小的总和,结构中每个成员相互独立。题中intb占2个字节,chara[15]占15个字节,doublec占8个字节,所以共25个字节。

50.A解析:本题考核的知识点是for循环和switch语句的综合运用。for循环执行了3次,第一次时i的值为0,执行其后的switch语句,没有匹配的case,执行default语句后的pdntf语句,输出为0;第二次循环时i的值为1,执行其后的switch语句,与第一个case分支匹配,执行其后的printf语句,输出1,由于没有遇到break语句,所以一直向下执行,又输出了两个1,第三次循环时i值为2,执行其后的switch语句,同理输出两个2。所以,A选项为所选。

51.C解析:^是按位异或运算,如果对应位不同则结果为1,相同则为0。

52.B解析:数据库产生的背景就是计算机的应用范围越来越广泛,数据量急剧增加,对数据共享的要求越来越高。共享的含义是多个用户、多种语言、多个应用程序相互覆盖的使用一些公用的数据集合。在这样的背景下,为了满足多用户、多应用共,享数据的要求,就出现了数据库技术,以便对数据库进行管理。因此,数据库技术的根本目标就是解决数据的共享问题。故选项B正确。

53.C解析:gets(str)是专门用来输入字符串的函数,可以包含空格,因此只有选项C)正确,其他选项都不正确。注意:通过scanf函数从键盘输入数据。

54.C

55.D解析:“&”是求址运算符,“*”是指变量说明符。选项A)、B)应改为scanf('%d',p);选项C)中指针变量p未指向一确定的内存单元,不能为其赋值,并且这样做很危险,建议不使用。

56.D解析:异或运算符(^)的运算规则是:参加运算的两个相应位同号,则结果为0(假);异号则为1(真)。取反运算符(-)的运算规则是:对一个二进制数按位取反,即将0变为1,1变为0。本题(-3)是对3(二进制形式为00000011)按位取反即11111100。表达式(2+x)(-3)的值就等价于(00000010+10100111)^11111100,结果为01010101。

57.D

58.B解析:scanf()语句用“空格”区别不同的字符串;getc()与getchar()语句不能用于字符串的读入。

59.D解析:面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种相互合作需要一个机制协助进行,这样的机制称为消息。消息是一个实例与另一个实例之间传递的信息,它请求对象执行某一处理或回答某一要求的信息,它统一了数据流和控制流。

60.C解析:考查了一维字符数组的定义和初始化。选项A)和B)定义的数组空间太小,至少应该为6个字符的长度才可以。选项D)中的指针s未赋初值,所以指向一个不确定的地址,因而不能用scanf输入数据到这一指针所指向的地址中。

61.A

\nstrcpy实现的功能是复制,该操作把are复制到a中,a[0][3]=&,且strcpy(a[1],'you')把you复制到a[1]中,故输出a为“are&you”。

\n

62.A

63.C\n面向对象的设计方法的基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。它虽强调模拟现实世界中的概念而不强调算法,但是它鼓励开发者在软件开发的过程中从应用领域的概念角度去思考。

\n

64.C\n对于两个关系的合并操作可以用笛卡尔积表示。设有n元关系R和in元关系s,它们分别有P和q个元组,则R与S的笛卡儿积记为R×S它是一个m+n元关系,元组个数是P×q由题意可得,关系T是由关系R与关系s进行笛卡尔积运算得到的。

\n

65.A字符指针可以用字符串常量赋值,字符数组不可以,所以答案选择A)。

66.D"&”是求址运算符,”*”是指变量说明符。选项A)、B)改为scanf(”%d”,p);选项c)中指针变量P未指向一确定的内存单元,不能为其赋值,并且这样做很危险,建议不使用。

67.A本题考查的知识点是:9etCharl函数和逻辑表达式的判定。题目要求“当读人字母N时结束循环”,所WE)、D)选项不对;选项B)中,作为条件的表达式的值恒成立,不符合题目要求,故本题选A)。

68.C

69.B链表采用的是链式存储结构,它的结点空间可以动态申请和释放;它的数据元素的逻辑次序靠结点的指针来指示,插入、删除不需要移动数据元素。但是链式存储结构也有不足之处:每个结点中的指针域需额外占用存储空间,它是一种非随机存储结构。

70.D在表达式a*b+d-c中,double的类型最高,C语言中,由低类型自动向高类型转换,所以最后的结果一定是double型。

71.A外循环第一次i的值为1,内循环第一次j的初值为l,打印1*1=1;内循环第二次j的值为2,打印1$2=2;内循环第三次J的值为3,打印1}3=3,打印回车换行,退出内循环。外循环第二次i的值为2,内循环第一次j的初值为2,打印2*2=4;内循环第二次j的值为3,打印2。3=6,打印回车换行,退出内循环。外循环第三次i的值为3,内循环第一次j的初值为3,打印3*3=9,打印回车换行,退出内循环。

72.B

73.A首先利用fwrite函数将数组a中的数据写到文件中,接着fseek函数的功能是读文件的位置,指针从文件头向后移动3个int型数据,这时文件位置指针指向的是文件中的第4个int数据”4”,然后fread函数将文件fp中的后3

个数据4,5,6读到数组a中,这样就覆盖了数组中原来的前3项数据。最后数组中的数据就成了{4,5,6,4,5,6}。

74.C正整数的补码与其原码一致;负整数的补码是其对应的反码在最后一位加l。

75.B

76.A

77.D冒泡排序、简单插入排序与简单选择排序法在最坏情况下均需要比较n(n-1)/2次,而堆排序在最坏情况下需要比较的次数是nlog2n。故答案为D选项。

78.D栈是具有后进先出(LIFO)性质的线性表,表尾称为栈顶,表头称为栈底。栈的插入和删除操作都是在栈顶执行的,向栈内插入元素的操作称为入栈,从栈内删除元素的操作称为出栈。题目中所给出的栈的初始状态自栈底到栈顶的元素分别为A,B,C,D,E。此时的栈顶元素为E,向栈内插入元素1,2,3,4,5,插入操作结束时,栈内自栈底到栈顶的元素为A,B,C,D,E,1,2,3,4,5,栈顶元素为5。出栈操作是从栈顶开始的,顺序为5,4,3,2,1,E,D,C,B,A。

79.D在D选项中,首先定义了一个二维数组str,str[1]="9uest,在赋值时"使用一个字符串进行赋值是错误的,所以答案选择D。

80.C

81.

82.

【解析】本题考查的是结构体类型、指针型变量、链表和if语句等知识点。需要用for循环遍历链表中的每一个结点,用判断语句比较结点数据域的大小。可以通过while循环实现对最大成绩的查找,具体步骤为遍历链表遇到比max大的值(max<h->s)则赋值给max,max=h->s。需要注意的是,h是指向结构体类型的指针变量,引用它指向的结构体的成员时,要用指向运算符“一>”。

2021-2022年甘肃省金昌市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(20题)1.

2.

3.在KMP算法中,已知模式串为ADABCADADA,请写出模式串的next数组值()

A.0,1,1,2,1,1,2,3,4,3

B.1,2,3,2,1,1,2,4,4,3

C.0,1,1,1,2,1,2,3,4,3

D.2,1,1,2,1,1,2,3,3,4

4.向一个栈顶指针为H的链栈中执行出栈运算时,需执行()。

A.p=H;H=H->link;free(p);

B.H=H->link;free(H);

C.p=H;H->link=H->link->link;free(p);

D.p=H;H=H->link;

5.计算机识别.存储和加工处理的对象被统称为_________

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

6.a、b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是()

A.'a'&&'b

B.a<=b

C.ab+c&&b-c

D.!((a<b)&&!c1)

7.如果要求一个线性表既能较快地查找,又能适应动态变化的要求,可以采用下列哪一种查找方法()

A.分块B.顺序C.折半D.哈希

8.

9.在inta=3,int*p=&a;中,*p的值是()

A.变量a的地址值B.无意义C.变量p的地址值D.3

10.使用深度优先算法遍历下图,遍历的顺序为()A.ABCDEFGB.ABDCFEGC.ABDECFGD.ABCDFEG

11.假设把整数关键码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的整数

12.有以下定义:structperson{charname[10];intage;};structpersonclass[10]={“Johu”,17,“Paul”,19,“Mary”,18,“Adam”,16,};能输出字母M的语句是()。

A.printf(“%c\n”,class[2].name[0]);

B.printf(“%c\n”,class[3].name[0]);

C.printf(“%c\n”,class[3].name[1]);

D.printf(“%c\n”,class[2].name[1]);

13.算法的时间复杂度是指A.算法的执行时间B.算法所处理的数据量C.算法程序中的语句或指令条数D.算法在执行过程中所需要的基本运算次数

14.软件生命周期中所花费用最多的阶段是()。

A.详细设计B.软件编码C.软件测试D.软件维护

15.

16.若有定义:floatx=1.5;inta=1,b=3,c=2;则正确的switch语句是()。A.switch(a+b){case1:prinf("*\n");.case2+1:printf("**(n");}

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

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

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

17.

18.若需要0(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择排序方法是()。A.快速排序B.堆排序C.归并排序D.直接插入排序

19.设有定义语句

则以下叙述正确的是().

A.f是指向函数的指针变量,该函数具有_个int类型的形参

B.f是基类型为int的指针变量

C.f是指向int类型一维数组的指针变量

D.f是函数名,该函数的返回值是基类型为int类型的地址

20.若有定义“inta=1234,b=-5678;”,用语句“printf("%+-6d%+-6d",a,b);”输出,以下正确的输出结果是()。

A.+1234-5678(中间有一个空格,最后有一个空格)

B.+1234-5678(最前面有一个空格,中间有一个空格)

C.+-1234+-5678(最前面和最后均无空格)

D.1234-5678(中间有两个空格,最后有一个空格)

二、2.填空题(20题)21.在程序设计阶段应该采取______和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。

22.在面向对象方法中,类之间共享属性和操作的机制称为______。

23.在树形结构中,没有前件的结点是()。

24.若有如下程序:

main()

{intx=4;y=3,Z=2,t;

t=x<y<z;

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

}

则程序运行后的输出结果是【】。

25.以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。

例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。

#include<stdio.h>

#include<ctype.h>

main()

{chars[80],d[80];inti,j;

gets(s);

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

if(【】){d[j]=s[i];j++;}

d[j]='\0';

puts(d);

}

26.设x和y均为int型变量,且x=1,y=2,则表达式double(1+x/y)的值为【】。

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

#include<stdio,h>

#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")

}

28.以下函数的功能是删除字符串s中的所有数字字符。请填空。

voiddele(char*s)

{

intn=0,i;

for(i=0,s[i];i++)

if(【】)

s[n++]=s[i];

s[n]=【】;

}

29.设一棵完全二叉树共有700个结点,则在该二叉树中有【】个叶子结点。

30.用以下程序计算1到100的整数的累加和。请填空。

main()

{inti,sum=【】;

i=1;

for(【】)

{sum+=j

i++;

}

printf("sum=%d\n",【】);

}

31.为了便于对照检查,测试用例应由输入数据和预期的【】两部分组成。

32.在一个容量为15的循环队列中,若头指针front=6,尾指针Year=9,则该循环队列中共有【】个元素。

33.性结构中,第一个结点没有前驱结点,其余每个结点有且只有【】个前驱结点;最后一个结点没有后继结点,其余每个结点有且只有【】个后继结点。

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

35.已有定义:charc=′′;inta=1,b;(此处c的初值为空格字符),执行b=!c&&a;后b的值为【】。

36.下列语句的输出结果是______。

chars[20]="aaaa",*sp=s;

puts(strcat(sp,"AAAAA"));

37.不改变关系表中的属性个数但能减少元组个数的是()。

38.若a是int型变量,则表达式(a=2*3,a*2),a+6的值为______。

39.若有如下程序:

voidsub()

{staticintx=8;

x/=2;printf("%d",x);

}

main()

{intm;

for(m=0;m<2;m++)sub();}

则程序运行后的输出结果是【】.

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

#include<stdio.h>

voidmain()

{

charc1[20]="1234";

charc2[20]="5678";

char*p1,*p2;

p1=c1;

p2=c2;

while(*p1++)

while(*p1++=*p2++);

printf("%s,c1);

}

三、1.选择题(20题)41.在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂性为______。

A.O(1)B.O(n)C.O(n2)D.O(log2n)

42.以下叙述中正确的是()。

A.预处理命令行必须位于C源程序的起始位置

B.在C语言中,预处理命令行都以“#”开头

C.每个C程序必须在开头包含预处理命令行:#include<stdio.h>

D.C语言的预处理不能实现宏定义和条件编译的功能

43.结构化程序设计主要强调的是()。

A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序的易读性

44.用黑盒技术测试用例的方法之一为

A.因果图B.逻辑覆盖C.循环覆盖D.基本路径测试

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

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

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

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

46.以下选项中,与k=n++完全等价的表达式是

A.k=n,n=n+1B.n=n+l,k=nC.k=++nD.k+=n+1

47.设有下列二叉树:对此二叉树前序遍历的结果为()

A.ZBTYCPXAB.ATBZXCYPC.ZBTACYXPD.ATBZXCPY

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

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

49.若有下列说明和语句,已知int型数据占2个字节,则下列语句的输出结果是()。structst{chara[15];intb;doublec;};printf("%d",sizeof(structst));

A.15B.8C.25D.2

50.有以下程序main(){inti;for(i=0;i<3;i++)switch(i){case1:printf("%d",i);case2:printf("%d",i);default:printf("%d",i);}执行扣输出的结果是

A.11122B.12C.12020D.120

51.已知inta=1,b=3则a^b的值为

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

52.数据库技术的根本目标是要解决数据的()。

A.存储问题B.共享问题C.安全问题D.保护问题

53.若已包括头文件<stdio.h>且已有定义staticcharstr[9];,现要使str从键盘获取字符串"Thelady",应使用

A.scanf("%s",str)

B.for(i=0;i<9;i++)gethchar(str[i]);

C.gets(str);

D.for(i=0;i<9;i++)scanf("%s",&str[i]);

54.若有定义“char,*p2,*p3,*p4,ch;”,则不能正确赋值的程序语句为()

A.p1=&ch;scanf("%c",p1);

B.p2=(char*)malloc(1);scanf("%c",p2);

C.p3=getchar();

D.p4=&ch;*p4=getchar();

55.若有说明:int*p,m=5,n;以下正确的程序段是

A.p=&n;scanf("%d",&p);

B.p=&n;scanf("%d",*p)

C.scanf("%d",&n);*p=n;

D.p=&n;*p=m;

56.设char型变量x中的值为10100111,则表达式(2+x)(-3)的值为______。

A.10101001B.10101000C.11111101D.1010101

57.有以下程序main(){intx=10,y=10;printf("%d%d\n",x--,--y);}程序运行后的输出结果是()

A.1010B.99C.910D.109

58.若要求从键盘读入含有空格字符的字符串,应使用函数

A.getc()B.gets()C.getehar()D.scanf()

59.在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送()。A.调用语句B.命令C.口令D.消息

60.下面能正确进行字符串赋值操作的是

A.chars[5]={"ABCDE"};

B.chars[5]={′A′,′B′,′C′,′D′,′E′};

C.char*s;s="ABCDE";

D.char*s;scanf("%s",s);

四、选择题(20题)61.

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

#include<stdio.h>

main

{chara[2][4];

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

a[0][3]=&;

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

}

A.are&youB.youC.areD.&

62.

63.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是()。

A.模拟现实世界中不同事物之间的联系

B.强调模拟现实世界中的算法而不强调概念

C.使用现实世界的概念抽象地思考问题从而自然地解决问题

D.不强调模拟现实世界中的算法而强调概念

64.设有如下三个关系表

下列操作中正确的是()。

A.T=RnSB.T=RUSC.T=R×SD.T=R/S

65.以下选项中正确的语句组是()。

66.若有说明:int*P,m=5,n;,以下正确的程序段是()。A.p=&n;scanf("%d",&p);

B.p=&n;scanf("%d",*p);

C.scanf("%d",&n);*p=n;

D.p=&n;*p=m;

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

()。

68.两次运行下面的程序,如果从键盘上分别输入6和3,则输出结果是()。

if(x++>5)printf("%d",x);

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

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

69.链表不具有的特点是()。

A.不必事先估计存储空间B.可随机访问任意元素C.插入、删除不需要移动元素D.所需空间与线性表长度成正比

70.若有以下定义:

chara;intb;

floatc;doubled;

则表达式a*b+d-c值的类型为()。A.A.floatB.intC.charD.double

71.有以下程序:

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

72.

73.有以下程序:

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

A.4,5,6,4,5,6,

B.1,2,3,4,5,6,

C.4,5,6,1,2,3,

D.6,5,4,3,2,1,

74.下列关于定点数与浮点数的叙述中错误自是()。

A.在实数的浮点表示中,阶码是一个整数

B.整数是实数的特例,也可以用浮点数表示

C.实数的补码是其对应的反码在最后一位加1

D.相同长度的浮点数和定点数,前者可表示数的范围要大于后者

75.

76.

77.下列排序方法中,最坏情况下比较次数最少的是()。

A.冒泡排序B.简单选择排序C.直接插入排序D.堆排序

78.一个栈中初始元素依次为A、B、C、D、E。现将元素1、2、3、4、5依次入栈,然后将所有的元素依次出栈,则元素出栈的顺序是

A.12345ABCDEB.EDCBA54321C.ABCDE12345D.54321EDCBA

79.以下选项中有语法错误的是()。A.char*str[]={"guest"};

B.charstr[][lO]={"guest"};

C.char*str[3];str[t]={"9uest"};

D.charstr[3][lO];str[1]={"guest"};

80.

五、程序改错题(1题)81.下列给定程序中,函数proc()的功能是:将字符串str中的所有字符复制到字符串b中,要求在每复制3个字符之后插入1个空格。例如,在调用proc()函数之前给字符

串str输入abcdefghijk,调用函数之后,字符串b中的内容则为abcdefghijk。

请修改程序中的错误,使它能得出正确的结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

试题程序:

六、程序设计题(1题)82.N名学生的成绩已在主函数中放入一个带有头结点的链表结构中,h指向链表的头结点。请编写函数fun(),其功能是:找出学生的最高分,并由函数值返回。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。试题程序:

参考答案

1.D

2.D

3.A

4.A

5.A

6.D

7.D

8.C

9.D

10.C

11.A

12.AC语言规定数组的下标从0开始,结构体数组class初始化了前4个元素。第3个元素的name=“Marry”,则class[2].name[0]=‘M’。故本题答案为A选项。

13.DD。【解析】算法的时间复杂度是指算法需要消耗的时间资源。一般来说,计算机算法是问题规模。09函数fin),算法的时间复杂度也因此记做T(n)=O(f(n))。因此,问题的规模n越大,算法执行的时间的增长率与f(n)的增长率正相关,称作渐进时间复杂度(AsymptoticTimeComplexity)。简单来说就是算法在执行过程中所需要的基本运算次数。

14.D解析:软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。本题中,详细设计、软件编码和软件测试都属于软什开发阶段;维护是软件生命周期的最后一个阶段,也是持续时间最长,花费代价最大的一个阶段.软件工程学的一个目的就是提高软件的可维护性,降低维护的代价。

15.D

16.AB)选项中switch((int)x);语句中不应该有最后的分号。

17.A

18.C

19.A

20.Aprintf函数参数包括格式控制字符串和输出参数,其中格式控制字符串中除了格式控制字符外,其他字符原样输出。本题中的printf(“%+-6d%+-6d”,a,b);”,在%和格式控制字符d之间,“+”号表示输出的数字带正负号号表示输出数据向左对齐,“6”表示输出宽度,如果输出数据的宽度不够6,那么左对齐,右边补空格。所以本题输出+1234-5678(中间有一个空格,最后有一个空格)。本题答案为A选项。

21.自顶向下自顶向下解析:在程序设计时,应先考虑总体,后考虑细节,逐步使问题具体化,对复杂的问题,应该设计一些子目标作为过渡,上述方法概括为:自顶向下,逐步细化。

22.继承继承

23.根结点根结点

24.11解析:因为x=4,y=3,所以表达式x<y的值为假(0),又因为z=2,所以0<z的值为真(1),故最终输出的结果为1。

25.s[i]>='0'&&s[i]<='9'或isdigit(s[i])s[i]>='0'&&s[i]<='9'或isdigit(s[i])解析:根据题意和程序可知要填空的内容是:将字符申s中的数字字符放入d数组的条件。

26.11解析:本题考查两个知识点:一是x/y的值为整型,即为0;二是数1是double类型。

27.abcbccabcbcc解析:for循环用strcpy函数将字符数组ch的值'abc',分别复制给二维数组x的每一行,然后通过for循环先后打印出以x[0][0],x[1][1],x[2][2]开头的字符串'abe','bc','c',所以输出结果为:abcbcc。

28.s[i]<'0'||s[i]>'9'或!(s[i]>='0'&&s[i]<='9')或!(isdigit(s[i]))或isdigit(s[i])==0或s[i]>'9'||s[i>'0'或!(s[i]<='9'&&s[i]>='0')或*(s+i)<'0'||*(s+i)>'9'或!(*(s+i)>='0'&&*(s+i)<=9或!(isdigit(*(s+i)))或*(s+i)>='9'&&*(s+i)<='0'或!(*(s+i)<='9'&&*(s+i)>='0'或isdigis[i]<'0'||s[i]>'9'或!(s[i]>='0'&&s[i]<='9')或!(isdigit(s[i]))或isdigit(s[i])==0或s[i]>'9'||s[i>'0'或!(s[i]<='9'&&s[i]>='0')或*(s+i)<'0'||*(s+i)>'9'或!(*(s+i)>='0'&&*(s+i)<=9或!(isdigit(*(s+i)))或*(s+i)>='9'&&*(s+i)<='0'或!(*(s+i)<='9'&&*(s+i)>='0'或isdigi解析:从一个字符串中删除某字符的力‘法是从字符串的第一个字符开始一一判断该字符是否是要被删除,若不是则把它放到结果字符串中,若是则不放入结果字符串中。本题的第一个空应判断s[i]是否为数字字符,只有在不是数字字符的情况下才存入结果字符串,所以应填入s[i]<'0'||s[i]>'9'。最后应在结果字符串的末尾填上字符串结束标志\\0。

29.350350解析:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。在根据完全二叉树的定义,在一棵完全二叉树中,最多有1个度为1的结点。因此,设一棵完全二叉树具有n个结点,若n为偶数,则在该二叉树中有n/2个叶子结点以及n/2-1个度为2的结点,还有1个是度为1的结点:若n为奇数,则在该二叉树中有[n/2]+1个叶子结点以及[n/2]个度为2的结点,没有度为1的结点。本题中,完全二叉树共有700个结点,700是偶数,所以,在该二叉树中有350个叶子结点以及349个度为2的结点,还有1个是度为1的结点。所以,本题的正确答案为350。

30.0i<=100;sum

31.输出结果输出结果解析:注意:测试的基本方法和步骤。

32.3

33.11

34.完整性控制完整性控制

35.11解析:字符空格的ASCII码不为0,所以本题中表达式\ue008!c\ue009的值为0,b=0&&1的结果显然为0。

36.aaaaAAAAAaaaaAAAAA解析:函数strcat(sp,'AAAAA')的作用是将字符中“AAAAA”连接到字符串sp的末尾,并自动覆盖字符数组sp末尾的\'\\0\'。

37.选择选择解析:关系数据库的专门关系运算包括选择、投影和连接3种,其中选择不改变关系表中的属性个数但能减少元组个数。

38.1212解析:本题考查逗号表达式的运算规则。逗号表达式的基本格式为:“表达式1,表达式2,…”,其整个表达式的结果取最后一个子表达式的值。本题中首先计算逗号表达式中的第1个表达式a=2*3=6,然后计算第2个表达式a*2,这时整个表达式的值为12,但要注意,因为第2个表达式并没有给a赋值,因此a的值不变;接下来执行最后一个表达式a+6=12,所以整个表达式最后的值为12。

39.4242解析:主函数中的for循环循环两次,即函数sub()被调用两次。在sub()中x被定义为静态整型变量,当调用函数sub()完毕返回主函数,x中的值仍然保留,下次调用函数sub()时,x不再被赋初值。第1次调用x/=2相当于x=x/2=8/2=4,第2次调用x=x/2=4/2=2,因此输出42。

40.1567815678解析:本题使用了双重while循环,外循环的循环条件是*p1++,即每次循环时让p1指向其后面的一个元素,而p1自增之前所指内容为0时循环结束。内循环的循环条件是*p1++=*p2++,即每次循环时让p1和p2指向其后面的一个元素,而将p2自增之前所指的元素复制到p1自增之前所指的地址中去,直到p2自增之前所指内容为0时循环结束。p1本来一开始是指向c1[0],由于外循环判断条件时让p1自增了,所以进入内循环时p1指向c1[1],而内循环将p2所指字符串复制到p1所指位置,所以内循环的结果是c1[1]、c1[2]、c1[3]、c1[4]、c1[5]分别被c2[0]、c2[1]、c2[2]、c2[3]、c2[4]改写成'5'、'6'、'7'、'8'、'\\0'。故程序输出的结果为15678。

41.B

42.B解析:选项B)正确,预处理命令行之前都有一个“#”符号。C语言提供三种预处理:宏替换,文件包含,条件编译。

43.D解析:程序不仅是编写完就结束了,为了测试和维护程序,往往还有其他人阅读和跟踪程序,因此程序设计的风格应该强调简单和清晰,即程序的易读性,“清晰第一,效率第二”。

44.A解析:黑盒测试主要方法有等价值划分法,边界值分析法。错误推测法、因果图法等。白盒测试的主要方法有逻辑覆盖、基本路径测试循环覆盖等。因此只有A属于黑盒测试。

45.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。

46.A解析:在本题中k=n++,为后缀运算。根据其运算规则,首先n先加一,但n++表达式的值依然n原来的值,即k的值没有改变。选项A中先给k赋值为n,然后n再加1,k值没有变化,所以这个表达式和本题中表达式等价;选项B中先n加1,然后将n加1后的值赋给k,k变化了比原来的值大1,所以这个表达式和本题中表达式不等价;选项C中先计算表达式左边的表达式++n的值,执行++n后,左边的表达式的值为n的值加1,然后将n+1后的值赋给k,所以这个表达式和本题中的表达式不等价;选项D中表达式展开为k=k/(n+1),k的值发生了变化,所以这个表达式和本题中的表达式不等价.所以4个选项中A正确。

47.B解析:所谓二叉树的前序遍历(DLR)是指在访问根结点、遍历左子树与遍历右子树这3者中,首先访问根结点,然后遍历左子树,最后遍历右子树,并且,在遍历左右子树时,上述规则同样适用,即“根-左-右”。故该二叉树的前序遍历结果为“ATBZXCYP”。对于本题,若使用后序遍历和中序遍历的结果分别为“ZBTYCPXA”和“TZBACYXP”。

48.D解析:因为x的值为大于1的奇数,所以x除以2的余数等于1。所以选项D)等于关系表达式的结果为假,即等于0。

49.C解析:本题主要考查结构体的内存使用:对结构体而言,结构中

温馨提示

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

评论

0/150

提交评论