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

下载本文档

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

文档简介

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

一、单选题(20题)1.下列叙述中错误的是()。A.在数据库系统中,数据的物理结构必须与逻辑结构一致,

B.数据库技术的根本目标是要解决数据的共享问题

C.数据库设计是指在已有数据库管理系统的基础上建立数据库

D.数据库系统需要操作系统的支持

2.有以下程序#include<stdio.h>structtt(intx;structtt*y;)*P;structtta[4]={20,a+1,15,a+2,30,a+3,17,a};main{inti;p=a;for(i=l;i<=2;i++){printf("%d,",p->x);P=p->y;}}程序的运行结果是()。A.20,30,B.30,17,C.15,30,D.20,15,

3.以下程序的输出结果是()。main(){inti,a[4][4]一{{1,3,5),{2,4,6},{3,5,7}};printf("%(1%d%d%d\n".a[O][3],a[1][2],a[2][1],a[3][0];}A.0650B.1470C.5430D.输出值不定

4.下列程序的输出结果是()。main(){inta=1,b=2;printf("%d,%d\n",--a,++b);}

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

5.栈和队列的共同特点是()。

A.都是先进先出B.都是先进后出C.只允许在端点处插入和删除元素D.没有共同点

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

A.“charc1,*c2,*c3[10];”是合法的变量定义语句

B.数组说明符的方括号中不能使用表达式

C.数组元素下标可以是非整数

D.若有定义“chararray[4];”,则语句“printf(“%c”,array[“3”]);”是合法的

7.以下选项中,当x为大于1的奇数时,值为0的表达式是A.x%2==1B.x/2C.x%2!=0D.x%2==0

8.

9.有以下程序段:charname[20】;intnum;scanf("name=%Snum=%d",name,&num);当执行上述程序段,并从键盘输入:name=Lilimum=1001<回车>后,name的值为()。A.LiliB.name=LiliC.Lilinum=D.name=Lilinum=1001

10.以下程序的输出结果是______。main(){inti,k,a[10],p[3];k=5;for(i=0;i<10;i++)a[i]=i;for(i=0;i<3;i++)p[i]=a[i*(i+1)];for(i=0;i<3;i++)k+=p[i]*2;printf("%d\n",k);}

A.20B.21C.22D.23

11.一个函数返回值的类型是由()决定的。

A.return语句中表达式的类型B.定义函数时指定的函数类型C.在调用函数时临时指定D.调用函数的主调函数的类型

12.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的()倍。A.A.1/2B.1C.2D.4

13.

14.有下列程序:程序执行后的输出结果是()。A.11B.43C.57D.53

15.以下程序的输出结果是()。main{intx=0.5;charz=‘a’;printf(“d\n”,(x&1)&&(z<‘z’));}A.0B.1C.2D.3

16.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则采用()存储方式最节省运算时间。

A.单链表B.给出表头指针的单循环链表C.双链表D.带头结点的双循环链表

17.为了提高软件模块的独立性,模块之间最好是()。

A.控制耦合B.公共耦合C.内容耦合D.数据耦合

18.检查软件产品是否符合需求定义的过程称为()。

A.确认测试B.集成测试C.验证测试D.验收测试

19.对关系S和R进行集合运算,结果中既包含S中的所有元组也包含R中的所有元组,这样的集合运算称为()

A.并运算B.交运算C.差运算D.积运算

20.下列程序的输出结果是()。#include<stdio.h>main{inti;for(i=1;i<=10,i++){if((i*i>=20)&&(i*i<=100))break;}printf("%d\n",i*i;}A.49B.36C.25D.64

二、2.填空题(20题)21.在索引查找或分块查找中,首先查找【】,然后再查找相应的【】,整个索引查找的平均查找长度等于查找索引表的平均查找长度与查找相应子表的平均查找长度之和。

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

#include<stdio.h>

main()

{inta[5]={2,4,6,8,10},*p;

p=a;p++;

printf("%d",*p);

}

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

structs

{intx,y;}data[2]={10,100,20,200};

main()

{

structs*p=data;

printf("%d\n",++(p->x));

}

24.仅依据规格说明书描述的程序功能来设计测试实例的方法称为【】。

25.若输入12、3、2、5、7,则以下程序的运行结果为【】。

intmax,min;

voidmax_min_value();

main()

{inti,number[5];

printf("输入5个整数;\n");

for(i=0;i<5;i++)scanf("%d",&number[i]);

maxminvalue(number,5);

printf("max=%d,min=%d\n",max,min);

getch();

}

voidmax_min_value(array,n)

intarray[],n;

{int*p;

max=min=*array;

for(p=array+1;p<array+n;p++)

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

elseif(*p<min)min=*p;

}

26.设函数findbig已定义为求3个数中的最大值,以下程序将利用函数指针调用findbig函数。请填空。

main()

{intfindbig(int,int,int);

int(*f)(),x,y,z,big;

f=【】。

scanf("%d%d%d",&x,&y,&z);

big=(*f)(x,y,z);

printf("big=%d\n",big);

}

27.数据库系统中实现各种数据管理功能的核心软件是______。

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

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

p=a;

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

main()

{inti,j,a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},b[4][3];

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

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

b[j][i]=a[i][j];

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

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

printf("%-3d",b[i][j]);

printf("\n");

}

}

30.解题方案的准确而完整的描述称为______。

31.一棵二叉树中共有80个叶子结点与10个度为1的结点,则该二叉树中的总结点数为【】。

32.函数调用语句:“fgets(buf,n,fp);”从fp指向的文件中读入,n个字符放到buf字符数组中,函数返回值为______。

33.最简单的交换排序方法是______。

34.算法的复杂度主要包括【】复杂度和空间复杂度。

35.在关系模型中,把数据看成是二维表,每一个二维表称为一个【】。

36.以下程序段中,错误的行号是【】。①#include<stdio.h>②main()③{charstr[14];str[]={"IloveChina!"};④printf("%s",str);⑤}

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

main()

{inta[]={31,27,20,12,6,1},*p=a;

p++;

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

}

38.若有如下定义:

int[]={11,24,56,19,29,39),*t=s;

则不移动指针t,且通过指针t引用数组中值为29的元素的表达式是【】。

39.若变量a,b已定义为int类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,请写出完整的的输出语句()。

40.数据元素之间______的整体称为逻辑结构。

三、1.选择题(20题)41.对于n个结点的单向链表(无表头结点),需要指针单元的个数至少为______。

A.n-1B.nC.n+1D.2n

42.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为()。

A.GEDHFBCAB.DGEBHFCAC.ABCDEFGHD.ACBFEDHG

43.调用gets和puts函数时,必须包含的头文件是

A.stdio.hB.stdlib.hC.defineD.以上都不对

44.下列函数的运行结果是

main()

{inti=2,p;

intj,k;

j=i;k=++i;p=f(j,k);

printf("%d",p);}

intf(inta,intb)

{intc;

if(a>b)c=1;

elseif(a==b)c=0;

elsec=-1;

return(c);}

A.-1B.1C.2D.编译出错,无法运行

45.下列二维数组初始化语句中,不正确的是()。

A.intb[][2]={1,2,3,4,5,6,7};

B.intb[3][5]={0,0,0};

C.intb[][4]={{1,2},{3,4,5},{6}};

D.intb[3][2]={(1,2),(3,4),(5,6)};

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

A.ZBTYCPXAB.ATBZXCYPC.ZBTACYXPD.ATBZXCPY

47.以下能正确表示x在-5到-1或5到1范围(含5和1)内,值为“真”的表达式是()

A.(x>=-5)||(x<=-1)&&(x<=5)&&(x>=1)

B.!(x>=-5||x<=-1&&x<=5||x>=1)

C.x<-5&&x>-1||x<1&&x>5

D.(x<-5)||(x>-1&&x<1)||(x>5)

48.以下选项中,合法的一组C语言数值常量是()。

A.028.5e-3-0xf

B.12.0X0234.5e0

C.1774e1.50abe

D.0x8A10,0003.e5

49.设有以下说明语句typedefstruct{intn;charch[8];}PER;则下面叙述中正确的是

A.PER是结构体变量名

B.PER是结构体类型名

C.typedefstruct是结构体类型

D.struct是结构体类型名

50.下列有关格式输入函数scanf的叙述中正确的是()

A.输入项可以是C语言中规定的任何变量,并且在任何变量前必须加地址符号“&”

B.可以只有格式控制项,没有地址列表项

C.在输入数据时,必须规定精度。如:scanf("%4.2f",&d);

D.当输入数据时,必须指明变量地址

51.有以下程序:main(){unsignedchara,b,c;a=0x3;b=a│0x8;c=b<<1;printf("%d%d\n",b,C);}程序运行后的输出结果是()。

A.-1112B.-19C.1224D.1122

52.如果要限制一个变量,命名其只能为本文件所用,必须通过()来实现。

A.外部变量说明B.静态内部变量C.静态外部变量D.局部变量说明

53.有以下函数intaaa(char*s){char*t=s;while(*t++);t--;return(t-s);}以下关于aaa函数的功能的叙述正确的是A.求字符串s的长度B.比较两个串的大小C.将串s复制到串tD.求字符串s所占字节数

54.设有定义:charp[]={‘1’,‘2’,‘3’,},*q=p;,以下不能计算出一个char型数据所占字节数的表达式是______。

A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sizeof(p[0])

55.下列程序的输出结果是______。main(){inti,k,a[10],p[3];k=5;for(i=0;i<10;i++)a[i]=ifor(i=0;i<3;i++)p[i]=a[i*(i+1)];for(i=0;i<3;i++)k+=p[i]*2;printf("%d\n",k);}

A.20B.21C.22D.23

56.有如下程序

main()

{floatx=2.0,y;

if(x<0.0)y=0.0;

elseif(x<10.0)y=1.0/x;

elsey=1.0;

printf("%f\n",y);}

该程序的输出结果是

A.0.000000B.0.250000C.0.500000D.1.000000

57.算法的时间复杂度是指______。

A.执行算法程序所需要的时间B.算法程序的长度C.算法执行过程中所需要的基本运算次数D.算法程序中的指令条数

58.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是______。

A.地址传递B.单向值传递C.由实参传给形参。再由形参传同实参D.传递方式由用户指定

59.若输入1.5、2.5,则以下程序的运行结果为______。main(){floata,b;intc;scanf("%f,%f,",&a,&b);c=max(a,b);printf("%d",c);}max(x,y)floatx,y;{floatz;z=x>y?x:y;return(z);}

A.1.5B.2.5C.2D.3

60.下列叙述中错误的是()。

A.线性表是由n个元素组成的一个有限序列

B.线性表是一种线性结构

C.线性表的所有结点有且仅有一个前件和后件

D.线性表可以是空表

四、选择题(20题)61.

62.

63.

64.设有如下定义:

若要使P指向data中的n域,正确的赋值语句是()。

A.

B.

C.

D.

65.设有以下语句:

其中0≤k<5。以下不是对字符串的正确引用的是()。

A.*strpB.strp[k]C.str[k]D.strp

66.有以下程序:

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

A.12B.14C.1234D.123456

67.若有以下程序:

上面程序的输出结果是()。

A.5B.7C.1D.3

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

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

69.已知intx=(1,2,3,4);变量x的值是()。

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

70.若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是()。

A.X+1=yB.++X.Y=X一一C.X=X+10=X+YD.double(X)/10

71.若有定义“inta=5,b=7;”,则表达式a%=(b%2)运算后,a的值为()。

A.0B.1C.11D.3

72.

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

main

{intp[8]={11,12,13,14,15,16,17,18},i=0,j=0;

while(i++<7)

if(p[i]%2)j+=p[i];

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

}

A.42B.45C.56D.60

73.

74.

75.用树形结构来表示实体之间联系的模型称为()。

A.关系模型B.层次模型C.网状模型D.数据模型

76.若变量c为char类型,能正确判断出c为小写字母的表达式是_______。A.′a′<=c<=′z′

B.(c>=′a′)||(c<=′z′)

C.(′a′=C)

D.(c>=′a′)&&(c<=′z′)

77.若有以下定义和语句:“doubler=99,*p=&r;*P=r;”,则以下正确的叙述是()。

A.两个*p含义相同,都说明给指针变量p赋值

B.在“doubler=99,*p=&r;”中,把r的地址赋值给了P所指的存储单元

C.语句“*p=r;”把变量r的值赋给指针变量P

D.语句“*p=r;”取变量r的值放回r中

78.有以下程序

#include<stdio.h>

main()

{charcl,c2;

c1=A+8-4

c2=A+8-5;

printf("%C,%d\n",cl,c2);

}

已知字母A的ASCIl码为65,程序运行后的输出结果是()。

A.E,69B.D,69C.E,DD.输出无定值

79.有以下程序:

voidmain()

{intk=0,n=0;

while(k<5)

{switch(k)

{default:break;

case1:n+=k;

case2:

case3:n+=k;

}

k++;

}

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

}

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

A)0B)4

C)6D)7

80.由两个栈共享一个存储空间的好处是______。A.A.减少存取时间,降低下溢发生的概率

B.节省存储空间,降低上溢发生的概率

C.减少存取时间,降低上溢发生的概率

D.节省存储空间,降低下溢发生的概率

五、程序改错题(1题)81.下列给定程序中,函数proc的功能是:首先把b所指字符串中的字符按逆序存放,然后将str1所指字符串中的字符和Str2所指字符串中的字符,按排列的顺序交叉合并到str所指数组中,过长的剩余字符接在str所指数组的尾部。例如,当str1所指字符串中的内容为ABCDEFG,str2所指字符串中的内容为1234时,str所指数组中的内容应该为A483C2D1EFG;而当str1所指字符串中的内容为1234,str2所指字符串中的内容为ABCEDFG时,str所指数组中的内容应该为1G2F31:4DCBA。

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

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

试题程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio。h>

#include<string.h>

voidproc(char*strl,char*str2,char*str){

inti,j;charch;

i=0;j=strleu(str2)-1;

//****found****

while(i>j)

{

ch=str2[i];str2[i]=str2[j];str2[j]=ch;

i++;j--;

}

while(*str1||*str2)

{

if(*str1){*str=*str1;str++;str1++;)

if(*str2){*str=*str2;str++;str2++;)

}

//****found****

*str=0:

}

voidmain

{

chars1[100],s2[100],t[200];

system("CLS");

printf("\nEnters1string:");

scanf("%s",sl);

printf("\nEnters2string:");

scanf("%s",s2);

proc(s1,s2,t);

printf("\nTheresultis:%s\n",t);

}

六、程序设计题(1题)82.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是将M行N列的二维数组中的数据,按列的顺序依次存放到一维数组中,将一维数组中数据的个数存放在形参n所指的存储单元中。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>voidfun(int(*s)[10],int*b,int*n,intmm,intnn){}main(){intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;inta[100]={0},n=0;printf(“Thematrix:\n”);for(i=0;i<3;i++){for(j=0;j<4;j++)printf(“%3d”,w[i][j]);printf(“\n”);}fun(w,a,&n,3,4);printf(“TheAarray:\n”);for(i=0;i<n;i++)<p=""></n;i++)<>printf(“%3d”,a[i]);}

参考答案

1.A解析:本题考查数据库系统的基本概念和知识。数据的逻辑结构,是数据间关系的描述,它只抽象地反映数据元素之间的逻辑关系,而不管其在计算机中的存储方式。数据的存储结构,又叫物理结构,是逻辑结构在计算机存储器里的实现。这两者之间没有必然的联系。因此,选项A的说法是错误的。

数据库可以看成是长期存储在计算机内的、大量的、有结构的和可共享的数据集合。因此,数据库具有为各种用户所共享的特点。不同的用户可以使用同一个数据库,可以取出它们所需要的子集,而且容许子集任意重叠。数据库的根本目标是要解决数据的共享问题。因此,选项B的说法是正确的。

数据库设计是在数据库管理系统的支持下,按照应用的要求,设计一个结构合理、使用方便、效率较高的数据库及其应用系统。数据库设计包含两方面的内容:一是结构设计,也就是设计数据库框架或数据库结构;二是行为设计,即设计基于数据库的各类应用程序、事务等。因此,选项C的说法是错误的。

数据库系统除了数据库管理软件之外,还必须有其他相关软件的支持。这些软件包括操作系统、编译系统、应用软件开发工具等。对于大型的多用户数据库系统和网络数据库系统,还需要多用户系统软件和网络系统软件的支持。因此,选项D的说法是正确的。因此,本题的正确答案是选项A。

2.D程序的结构体数组a的元素形成了一个单向的循环链表,每个元素的指针成员都指向下一个元素的地址。

3.A当所赋的值不够其列的宽度时,系统在其后自动补0,因此a[0][3]=0,a[1][2]=6,a[2][1]=5,a[3][0]=0,故选择A选项。

4.D解析:本题主要考查自加(++)、自减(--)运算符的使用。“++i,--i”在使用i之前,先使i的值加1或者减1,然后再使用i此时的值参与运算;“i++,i--”是在使用i参与表达式运算之后,再使i的值加1或者减1。本题中--a和++b是先执行a减1和b加1操作,再输出表达式的值。

5.C解析:考查栈和队列概念的掌握。栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。二者的区别是:栈只允许在表的一端进行插入或删除操作,是一种'后进先出'的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除操作,是一种'先进先出'的线性表。模块之间的耦合程度反映了模块的独立性,也反映了系统分解后的复杂程度。按照耦合程度从弱到强,可以将其分成5级,分别是:数据耦合、同构耦合、控制耦合、公用耦合和内容耦合。选项C),没有这种耦合方式。

6.AC语言规定定义数组时,数组的长度必须是整型常量,数组说明符的方括号中表达式只要是常量即合法,因此选项B错误。C语言规定,数组元素下标必须是非负整数,因此选项C错误。选项D中,“chararray[4]”数组的长度为4,“army[“3”]”中“3”是常量字符串,与C语言规定数组的下标必须是非负整数不符。故本题答案为A选项。

7.D解析:因为x的值为大于1的奇数,所以x除以2的余数等于1,因此,选项A)、C)中表达式的结果为真,不为0;对于选项B)来说,x除以2的商不会等于0;选项D)中表达式的结果为假,即等于0。

8.B

9.A考查简单的C程序。由题可知,程序中输入name的值为Lili,所以输出的必定是Lili,答案选择A。

10.B解析:第1个循环对数组a进行赋值:第2个循环对数组p进行赋值;第3个循环对k进行累加,k的初值等于5,第1次循环,k=k+p[0]*2=5+0*2=5,第2次循环,k=k+p[1]*2=5+2*2=9,第3次循环,k=k+p[2]*2=9+6*2=21并输出。

11.B

12.B

13.A

14.D函数f是一个递归函数。当x>=2时,递归调用自身,返回值为x*f(x-l)+(x-l)*f(x-2);3x<2时,返回值为1。main函数中,调用函数f传入4,所以y的值是f(4)。f(4)等价于4*f(3)+3*f(2);f(3)等价于3*f(2)+2*f(1);f(2)等价于2*f(1)+1*f(0);f(0)、f(1)等价于1。综上:f(2)等于3,f(3)等于11,f(4)等于53。本题答案为D选项。

15.B(x&1)&&(z<‘z’)=(0.5&1)&&(‘a’<‘z’)=1&&1=1,故选择B选项。

16.D

17.D解析:耦合性与内聚性是模块独立性的两个定性标准,是互相关联的。在程序设计中,各模块间的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚、低耦合,有利于提高模块的独立性。

18.A本题主要考查软件测试的基本知识。软件测试的步骤可分为单元测试(模块测试)、集成测试、确认测试和系统测试。

(1)单元测试是针对每个模块进行的测试,它可从程序的内部结构出发设计测试用例,多个模块可以平行、对立地测试。单元测试主要用于发现详细设计和编程时犯下的错误。单元测试多采用白盒测试,辅之以黑盒测试。

(2)集成测试是在单元测试的基础上,根据模块结构图将各个模块连接起来,必须精心计划,应提交集成测试计划、集成测试规格说明和集成测试分析报告。主要目标是发现与接口有关的问题。集成测试可以发现概要设计时犯的错误。

(3)确认测试用于验证软件的功能和性能及其他特性是否与用户的要求一致。确认测试主要用于发现需求分析时犯下的错误,一般使用黑盒法测试,以表明软件符合需求说明书的要求,应该仔细设计测试用例和测试过程。确认测试必须有用户参加,或以用户为主,用户应参与设计测试用例,通常情况下,主要使用生产中的实际数据进行测试,测试数据通过用户接口输入。

(4)系统测试是将已经通过确认测试的软件,作为整个计算机系统的元素与计算机硬件、外设和网络等其他因素结合在一起,进行一系列的组装测试和确认测试。系统测试的目的是通过与系统的需求定义做比较,发现软件与系统的定义不符合的地方。系统测试可以发现问题定义时犯下的错误。

19.AA)【解析】关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,新关系中包含两个关系中的所有元组。

20.C本题考查for循环及if语句。当执行到第一个满足(i*i>一20)&&(i*i<=100)这个条件的i出现时,break跳出循环,执行下列的printf语句。

21.索引表块索引表\r\n块

22.指针P指向数组a的首地址,执行语句p++;后p指向数组a的第2个元素的地址,即a[1]的地址,因此*p=a[1]=4。\r\n\r\n

23.1111解析:程序中结构体数组data首地址(即&data[0])赋值给结构体指针变量p,++(P->x)表示先将p所指向的结构体变量的成员x值加1,然后将此x(即data[0].x)输出。

24.黑箱法黑箱法

25.max=12min=2

26.findbigfindbig解析:f是指向函数的指针变量,根据题意要求,空格处应填入findbig。

本题目考查:C语言中指向函数的指针变量定义的一般形式为;

数据类型标识符(*指针变量名)();

“数据类型标识符”表示函数返回值的类型。

函数的调用可以通过函数名调用,也可以通过函数指针调用。在给函数指针变量赋值时,只需给出函数名而不必给出参数。(*p)()表示定义一个指向函数的指针变量,专门用来存放函数的入口地址,可以先后指向不同的指针变量。用函数指针调用函数时,只需要将(*p)代替函数名即可,在(*p)之后的括号中,根据需要写上参数。

27.数据库管理系统数据库管理系统解析:数据库管理系统是数据库的管理机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。

28.6060解析:程序中定义a是一个3行2列的二维数组,p是指向两个元素的一维数组指针,并让p指向二维数组a的首行。则代码*(*(p+2)+1)中的p+2指向二维数组a的第三行a[2],*(p+2)指向a[2[]0],*(p+2)+1指向a[2][1],*(*(p+2)+1)是引用a[2][1],其值是60。

29.159261037114812159\r\n2610\r\n3711\r\n4812解析:程序的功能是将一个二维数组的行和列元素互换,存到另一个二维数组中。

30.算法算法解析:算法是指对解题方案的准确而完整的描述。

31.179179解析:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。本题中的二叉树有80个叶子结点,因此,该二叉树有80-1=79个度为2的结点;又知本题中的二叉树有10个度为1的结点。因此,本题中的二叉树总结点数为:叶子结点数+度为1的结点数+度为2的结点数=80+10+79=179

32.buf的首地址buf的首地址解析:考查fgets()函数的功能,fgets()函数用来从文件中读入字符串。调用格式为:fgets(buf,n,fp)。此处,fp是文件指针,buf是存放字符串的起始地址,n是一个int型变量。调用函数fgets()时,最多能读入n-1个字符,系统自动在最后加字符串结束标志,并以buf作为函数值返回。

33.冒泡排序冒泡排序解析:交换排序是指借助数据元素之间的互相交换进行排序的一种方法。冒泡排序是一种最简单的交换排序方法,它是通过相邻元素之间的相互交换逐步将线性表变成有序。

34.时间时间解析:算法的复杂度主要指时间复杂度和空间复杂度。所谓算法的时间复杂度,是指执行算法所需要的计算工作量;算法的空间复杂度,一般是指执行这个算法所需要的内存空间。

35.关系关系解析:在数据库中,一个表就是一个关系。一个关系的逻辑结构就是一张二维表。

36.③数组可以在定义时整体赋初值,但不能在赋值语句中整体赋初值。因此,可将第三行改为charstr[14]={"IloveChina!"};

37.1212解析:本题签考查如何用指针引用数组元素。分析程序,首先定义了一个指向数组a的指针p,p指向数组的首地址,通过p++,将p指向a[1],p+2是将指针后移2位指向a[3],*(p+2)即是取a[3)的值12。

38.*(t+4)*(t+4)解析:本题定义了指针变量t,并用数组s的首地址给它赋初值。t+4代表数组第6个元素的地址,*(t+4)是取得该地址中的值即29,而此时并没有移动指针t。

39.printf(“a=%db=%d”aB);printf(“a=%d,b=%d”,a,B);解析:printf函数的一般格式为:“printf(格式控制,输出表列)”。

40.逻辑关系逻辑关系

41.C解析:在n个结点的单向链表(无表头结点)中,每个结点都有一个指针单元(即指针域),加上头指针,至少需要n+1个指针单元。

42.B遍历是按照一定规则对树中全部结点逐一访问的方法。二叉树可由根结点、左子树和右子树三个部分组成。根据对根结点访问的先后顺序,可将遍历方法分为先序遍历、中序遍历和后序遍历三种。先序遍历首先访问根结点,再先序遍历左子树,最后先序遍历右子树,可见遍历是一个递归的过程。求树的遍历这种问题的关键在于认清每棵子树的根结点的访问顺序。题目给出了一棵树的先序遍历和中序遍历的结点顺序,先序遍历的第一个结点为整棵树的根结点,即根结点为A,而在中序遍历的顺序中,结点A的前面还有DBGE四个结点,表示这四个结点构成以A为结点的二叉树的左子树,同理,中序遍历中A结点后面的CHF三个结点构成以A为结点的二叉树的右子树。于是原来的对一棵二叉树的分析变为对该二叉树的左右子树的分析。以左子树为例,左子树结点的先序遍历为BDEG,中序遍历为DBGE,该子树的根结点为B,B结点的左子树为一个结点D,右子树为以E为根结点,结点G是E的左孩子。同理,可对CHF三个结点进行分析。

最后得到整棵树的结构后,按照后序遍历写出所有结点的顺序:DGEBHFCA。

43.A解析:gets函数和puts函数是库函数,必须包含的头文件是stdio.h。

44.A解析:函数调用相当于f(2,3),程序运算应得结果为'-1'。

45.D解析:在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取0;C语言规定,对于二维数组,只可以省略第1个方括号中的常量表达式,而不能省略第2个方括号中的常量表达式;赋的初值不能多于事先定义好的数组元素个数。

在选项D)赋值表达式中,对每一维的元素赋初值应用{},而不是()。

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

47.A

48.B解析:选项A中,028是八进制形式,但后面跟的8不在0~7之内,所以非法;选项C中,4e1.5是指数形式,但e后面所跟的不是整数,所以非法;选项D中,10,000中不能有“,”,所以非法。故本题应该选择B。

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

50.D解析:如果是指针型变量或数组名,则变量前不加地址符号&,所以选项A的说法有误。必须有地址列表项才能实现正确输入,所以选项B的说法有误。在输入数据时,不可以指定实型数据的精度,所以选项C的说法有误。只有选项D的说法正确。

51.D解析:将a的值转换为二进制位:00000011,再与0x8的二进制“00001000”位与,得到结果“00001011”赋值给b,b的值为11,再将b左移一位得到;00010110,赋值给c,c的值为22,所以最后输出的b,c的值位11,22。所以4个选项中D正确。

52.C

53.A解析:aaa()函数中,首先定义了一个字符指针t指向形参s,然后通过一个while循环让指针\u3000t不断递增,直到t指向字符串结束标志处。当t指向结束标志处时,由于后缀++运算符的原因,它还会被再递增1,所以接卜来的t--;语句让它回到结束标志处。最后返回t-s,因此s还是指向字符串第1个字符处,而t指向了字符串结尾,故返回值为字符串的长度值。

54.A解析:本题考查的重点是sizeof()的运用。sizeof用于返回其操作数(变量、类型)相对应数据类型的字节数。因此,选项A是错误的,因为p是一个地址,它既不是一个数据类型,也不是数据变量。

55.B

56.C解析:该题目测验考生对if...elseif结构的理解,比较简单。x的值满足x<10.0的关系,所以程序将执行y=1.0/x;语句,y的值应该等于0.5。最后,用printf函数输出时,%f的输出格式为小数点后保留6位。

57.C解析:算法的时间复杂度实际上就是执行算法程序所需要的计算工作量。为了客观地反映算法性能,在度量算法的时间复杂度时,应该与编写算法程序所使用的程序设计语言、执行算法程序时所使用的计算的工具以及程序员的水平无关。选项A错误,因为同一算法程序在运行速度不同的计算机上运行时,其计算时间是不同的。选项B错误,因为算法所编写的程序长度往往与程序设计语言以及程序员的水平有关,同一个算法,用不同的程序设计语言或者不同的程序员所编写出的程序其长度可能会大不相同。选项D错误,因为根据一个算法所编制出的程序之中,其指令条数往往与程序设计语言以及程序员的水平有关,不能用算法程序中的指令条数来度量算法的时间复杂度。所以,本题正确答案为C。

58.B解析:本题考查函数调用时的数据流向问题。简单变量只能实现单向的值传递。在调用函数时,通常在主调函数和被调函数之间有数据传递关系。在定义函数时,函数名后面括号中的变量名称为“形参”;在调用函数时,函数名后面括号中的变量名称为“实参”。有关实参和形参的说明如下:(1)形参在函数未被调用时,不占用存储单元,只有在发生函数调用时形参才被分配内存空间,函数调用结束后,释放形参所占的内存空间。(2)在被定义的函数中,必须指定形参的类型。(3)实参可以是常量、变量或表达式。(4)宴参与形参的类型应一致。(5)如果形参是简单变量,实参对形参的数据传递是按值传递,即单向传递,只能由实参传给形参,不能由形参传回来给实参。如果形参是地址变量,实参对形参的数据传递是按地址传递,可以实现双向传递,既能由实参传给形参,又能由形参传回来给实参。

59.C

60.CC.【解析】线性表是一种线性结构,由n(n≥0)个元素组成,所以线性表可以是空表。但是在线性表中,第一个结点没有前件,最后一个结点没有后件,其他结点有且只有一个前件和后件,所以选项C.是错误的。

61.A

62.B

63.C

64.C本题主要考查了结构体变量引用成员数据的方法,主要有以下两种:结构体变量名.成员名或结构体指针_>成员名。

65.Dstrp是一个指针数组名,即它是一个指向指针的指针,strp不是对字符串的引用。

66.D本题考查的是文件的综合应用。本题首先以创建方式打开文件”d2.dat”,两次调用fprintf函数把a[O],a[1],a[2],a[3],a[4],a[5]的值写到文件”d2.d8t”中,文件”d2.dat”的内容为:1,2,3<回车>4,5,6。然后把该文件关闭再以只读方式打开,文件位置指针指向文件头,再通过fs-canf函数从中读取两个整数到k和n中,由于格式符之间无间隔,因此输入数据可以用回车隔开,故输入的k的值为123,n的值为456。

67.C在c语言中,数组元素下标是从0开始的;指针变量P指向数组的首地址。for循环语句中,指针变量P始终指向数组的首地址,因而执行循环赋值语句后数组各元素的值均变为1。

68.C\n在最坏情况下,冒泡排序、简单选择排序和直接插入排序需要的比较次数都是n(n一1)/2,堆排序需要比较的次数为nlog2n,这也是堆排序的最大优点。

\n

69.D逗号表达式的值,结果为最后一个表达式的值。即4.

70.BA选项中不能将变量Y赋给表达式,c选项中错误与A选项一样,D选项中强制类型转换表达式应写成(doub1e)x/10。

71.A本题考查“%”运算符的使用。运算符“%”是整数除法的余数。本题中表达式a%=(b%2)等价于a=a%(b%2)=5%(7%2)=5%1=0。

72.B

\nC语言中,数组的下标默认为0,因此数组P的下标从0开始,所以p[8]的范围为0~7。第l次循环i=0,执行循环,得出i=1,因此p[i]为p[1]=12,12%2=0,不执行后面的语句;接着进行第2次循环,此时i=1,小于7执行循环,并且i自加,得i=2,因此p[i]为p[2]=13,13%2=1,执行后面的语句;依此类推最后退出循环。最后j的值为:j=13+15+17=45。

\n

73.C

74.A

75.B解析:在数据库系统中,由于采用的数据模型不同,相应的数据库管理系统(DBMS)也不同。目前常用的数据模型有3种:层次模型、网状模型和关系模型。在层次模型中,实体之间的联系是用树结构来表示的,其中实体集(记录型)是树中的结点,而树中各结点之间的连线表示它们之间的关系。所以,本题的正确答案是B。

76.D

77.B在定义*p=&r时,是表示r的地址赋给了p所指的存储单元,因此选项B正确。

78.A\n本值输出两个值,%c为输出一个字母,0/4d输出一个数字。“A”的ASCIl码为65,再加4之后为69,也就是字母E,所以本题A正确。

\n

79.D首先k=0,执行default,退出switch,k++,执行case1,2,3后,n=2,k++,执行case2,3,n=4,k++,执行case3,n=7.执行k++,执行default,k++,退出循环。

80.B栈是一种只允许在栈顶进行插入和删除操作的线性表,使两个栈共享同一存储空间的是双向栈,即将两个栈的栈顶设在向量空间的两端,让两个栈各自向中间空间延伸。当其中一个栈的元素较多,超过向量空间的一半时,只要另一个栈的元素不多,那么,前者就可以占用后者的部分存储空间。只有当整个向量空间被两个栈占满(即两个栈底相遇)时,才会发生上溢。使用这种栈的优点是可以有效地节省存取空间,降低上溢发生的概率,而对于存取时间并没有影响。

81.\n\t(1)错误:while(i>j)

\n正确:while(i<j)

\n(2)错误:*str=0;

\n正确:*str=\0;

\n【解析】由函数proc可知,变量i和j分别存放的是字符串str前面和后面第i个字符的位置,当i<j时,两个位置的字符交换。因此,“while(i>j)”应改为“while(i<j)”;交叉合并完成后,要为新的字符串添加结束符,因此,“*str=0;”应改为“*str=\0;”,\n

82.voidfun(int(*s)[10],int*b,int*n,intmm,intnn){inti,j;for(j=0;j<nn;j++)/*将二维数组中的数据按列的顺序依次存入一维数组中*/for(i=0;i<=""p="">{b[*n]=*(*(s+i)+j);*n=*n+1;/*通过指针返回元素个数*/}}题目要求实现将二维数组元素存入一维数组。使用for循环语句来控制二维数组元素的下标,同时使用指针变量配合操作。可以用两个循环来处理问题,由于是按列的顺序取出,因此第1个循环用于控制列下标,第2个循环用于控制行下标。2021-2022年河北省唐山市全国计算机等级考试C语言程序设计学校:________班级:________姓名:________考号:________

一、单选题(20题)1.下列叙述中错误的是()。A.在数据库系统中,数据的物理结构必须与逻辑结构一致,

B.数据库技术的根本目标是要解决数据的共享问题

C.数据库设计是指在已有数据库管理系统的基础上建立数据库

D.数据库系统需要操作系统的支持

2.有以下程序#include<stdio.h>structtt(intx;structtt*y;)*P;structtta[4]={20,a+1,15,a+2,30,a+3,17,a};main{inti;p=a;for(i=l;i<=2;i++){printf("%d,",p->x);P=p->y;}}程序的运行结果是()。A.20,30,B.30,17,C.15,30,D.20,15,

3.以下程序的输出结果是()。main(){inti,a[4][4]一{{1,3,5),{2,4,6},{3,5,7}};printf("%(1%d%d%d\n".a[O][3],a[1][2],a[2][1],a[3][0];}A.0650B.1470C.5430D.输出值不定

4.下列程序的输出结果是()。main(){inta=1,b=2;printf("%d,%d\n",--a,++b);}

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

5.栈和队列的共同特点是()。

A.都是先进先出B.都是先进后出C.只允许在端点处插入和删除元素D.没有共同点

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

A.“charc1,*c2,*c3[10];”是合法的变量定义语句

B.数组说明符的方括号中不能使用表达式

C.数组元素下标可以是非整数

D.若有定义“chararray[4];”,则语句“printf(“%c”,array[“3”]);”是合法的

7.以下选项中,当x为大于1的奇数时,值为0的表达式是A.x%2==1B.x/2C.x%2!=0D.x%2==0

8.

9.有以下程序段:charname[20】;intnum;scanf("name=%Snum=%d",name,&num);当执行上述程序段,并从键盘输入:name=Lilimum=1001<回车>后,name的值为()。A.LiliB.name=LiliC.Lilinum=D.name=Lilinum=1001

10.以下程序的输出结果是______。main(){inti,k,a[10],p[3];k=5;for(i=0;i<10;i++)a[i]=i;for(i=0;i<3;i++)p[i]=a[i*(i+1)];for(i=0;i<3;i++)k+=p[i]*2;printf("%d\n",k);}

A.20B.21C.22D.23

11.一个函数返回值的类型是由()决定的。

A.return语句中表达式的类型B.定义函数时指定的函数类型C.在调用函数时临时指定D.调用函数的主调函数的类型

12.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的()倍。A.A.1/2B.1C.2D.4

13.

14.有下列程序:程序执行后的输出结果是()。A.11B.43C.57D.53

15.以下程序的输出结果是()。main{intx=0.5;charz=‘a’;printf(“d\n”,(x&1)&&(z<‘z’));}A.0B.1C.2D.3

16.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则采用()存储方式最节省运算时间。

A.单链表B.给出表头指针的单循环链表C.双链表D.带头结点的双循环链表

17.为了提高软件模块的独立性,模块之间最好是()。

A.控制耦合B.公共耦合C.内容耦合D.数据耦合

18.检查软件产品是否符合需求定义的过程称为()。

A.确认测试B.集成测试C.验证测试D.验收测试

19.对关系S和R进行集合运算,结果中既包含S中的所有元组也包含R中的所有元组,这样的集合运算称为()

A.并运算B.交运算C.差运算D.积运算

20.下列程序的输出结果是()。#include<stdio.h>main{inti;for(i=1;i<=10,i++){if((i*i>=20)&&(i*i<=100))break;}printf("%d\n",i*i;}A.49B.36C.25D.64

二、2.填空题(20题)21.在索引查找或分块查找中,首先查找【】,然后再查找相应的【】,整个索引查找的平均查找长度等于查找索引表的平均查找长度与查找相应子表的平均查找长度之和。

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

#include<stdio.h>

main()

{inta[5]={2,4,6,8,10},*p;

p=a;p++;

printf("%d",*p);

}

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

structs

{intx,y;}data[2]={10,100,20,200};

main()

{

structs*p=data;

printf("%d\n",++(p->x));

}

24.仅依据规格说明书描述的程序功能来设计测试实例的方法称为【】。

25.若输入12、3、2、5、7,则以下程序的运行结果为【】。

intmax,min;

voidmax_min_value();

main()

{inti,number[5];

printf("输入5个整数;\n");

for(i=0;i<5;i++)scanf("%d",&number[i]);

maxminvalue(number,5);

printf("max=%d,min=%d\n",max,min);

getch();

}

voidmax_min_value(array,n)

intarray[],n;

{int*p;

max=min=*array;

for(p=array+1;p<array+n;p++)

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

elseif(*p<min)min=*p;

}

26.设函数findbig已定义为求3个数中的最大值,以下程序将利用函数指针调用findbig函数。请填空。

main()

{intfindbig(int,int,int);

int(*f)(),x,y,z,big;

f=【】。

scanf("%d%d%d",&x,&y,&z);

big=(*f)(x,y,z);

printf("big=%d\n",big);

}

27.数据库系统中实现各种数据管理功能的核心软件是______。

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

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

p=a;

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

main()

{inti,j,a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},b[4][3];

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

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

b[j][i]=a[i][j];

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

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

printf("%-3d",b[i][j]);

printf("\n");

}

}

30.解题方案的准确而完整的描述称为______。

31.一棵二叉树中共有80个叶子结点与10个度为1的结点,则该二叉树中的总结点数为【】。

32.函数调用语句:“fgets(buf,n,fp);”从fp指向的文件中读入,n个字符放到buf字符数组中,函数返回值为______。

33.最简单的交换排序方法是______。

34.算法的复杂度主要包括【】复杂度和空间复杂度。

35.在关系模型中,把数据看成是二维表,每一个二维表称为一个【】。

36.以下程序段中,错误的行号是【】。①#include<stdio.h>②main()③{charstr[14];str[]={"IloveChina!"};④printf("%s",str);⑤}

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

main()

{inta[]={31,27,20,12,6,1},*p=a;

p++;

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

}

38.若有如下定义:

int[]={11,24,56,19,29,39),*t=s;

则不移动指针t,且通过指针t引用数组中值为29的元素的表达式是【】。

39.若变量a,b已定义为int类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,请写出完整的的输出语句()。

40.数据元素之间______的整体称为逻辑结构。

三、1.选择题(20题)41.对于n个结点的单向链表(无表头结点),需要指针单元的个数至少为______。

A.n-1B.nC.n+1D.2n

42.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为()。

A.GEDHFBCAB.DGEBHFCAC.ABCDEFGHD.ACBFEDHG

43.调用gets和puts函数时,必须包含的头文件是

A.stdio.hB.stdlib.hC.defineD.以上都不对

44.下列函数的运行结果是

main()

{inti=2,p;

intj,k;

j=i;k=++i;p=f(j,k);

printf("%d",p);}

intf(inta,intb)

{intc;

if(a>b)c=1;

elseif(a==b)c=0;

elsec=-1;

return(c);}

A.-1B.1C.2D.编译出错,无法运行

45.下列二维数组初始化语句中,不正确的是()。

A.intb[][2]={1,2,3,4,5,6,7};

B.intb[3][5]={0,0,0};

C.intb[][4]={{1,2},{3,4,5},{6}};

D.intb[3][2]={(1,2),(3,4),(5,6)};

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

A.ZBTYCPXAB.ATBZXCYPC.ZBTACYXPD.ATBZXCPY

47.以下能正确表示x在-5到-1或5到1范围(含5和1)内,值为“真”的表达式是()

A.(x>=-5)||(x<=-1)&&(x<=5)&&(x>=1)

B.!(x>=-5||x<=-1&&x<=5||x>=1)

C.x<-5&&x>-1||x<1&&x>5

D.(x<-5)||(x>-1&&x<1)||(x>5)

48.以下选项中,合法的一组C语言数值常量是()。

A.028.5e-3-0xf

B.12.0X0234.5e0

C.1774e1.50abe

D.0x8A10,0003.e5

49.设有以下说明语句typedefstruct{intn;charch[8];}PER;则下面叙述中正确的是

A.PER是结构体变量名

B.PER是结构体类型名

C.typedefstruct是结构体类型

D.struct是结构体类型名

50.下列有关格式输入函数scanf的叙述中正确的是()

A.输入项可以是C语言中规定的任何变量,并且在任何变量前必须加地址符号“&”

B.可以只有格式控制项,没有地址列表项

C.在输入数据时,必须规定精度。如:scanf("%4.2f",&d);

D.当输入数据时,必须指明变量地址

51.有以下程序:main(){unsignedchara,b,c;a=0x3;b=a│0x8;c=b<<1;printf("%d%d\n",b,C);}程序运行后的输出结果是()。

A.-1112B.-19C.1224D.1122

52.如果要限制一个变量,命名其只能为本文件所用,必须通过()来实现。

A.外部变量说明B.静态内部变量C.静态外部变量D.局部变量说明

53.有以下函数intaaa(char*s){char*t=s;while(*t++);t--;return(t-s);}以下关于aaa函数的功能的叙述正确的是A.求字符串s的长度B.比较两个串的大小C.将串s复制到串tD.求字符串s所占字节数

54.设有定义:charp[]={‘1’,‘2’,‘3’,},*q=p;,以下不能计算出一个char型数据所占字节数的表达式是______。

A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sizeof(p[0])

55.下列程序的输出结果是______。main(){inti,k,a[10],p[3];k=5;for(i=0;i<10;i++)a[i]=ifor(i=0;i<3;i++)p[i]=a[i*(i+1)];for(i=0;i<3;i++)k+=p[i]*2;printf("%d\n",k);}

A.20B.21C.22D.23

56.有如下程序

main()

{floatx=2.0,y;

if(x<0.0)y=0.0;

elseif(x<10.0)y=1.0/x;

elsey=1.0;

printf("%f\n",y);}

该程序的输出结果是

A.0.000000B.0.250000C.0.500000D.1.000000

57.算法的时间复杂度是指______。

A.执行算法程序所需要的时间B.算法程序的长度C.算法执行过程中所需要的基本运算次数D.算法程序中的指令条数

58.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是______。

A.地址传递B.单向值传递C.由实参传给形参。再由形参传同实参D.传递方式由用户指定

59.若输入1.5、2.5,则以下程序的运行结果为______。main(){floata,b;intc;scanf("%f,%f,",&a,&b);c=max(a,b);printf("%d",c);}max(x,y)floatx,y;{floatz;z=x>y?x:y;return(z);}

A.1.5B.2.5C.2D.3

60.下列叙述中错误的是()。

A.线性表是由n个元素组成的一个有限序列

B.线性表是一种线性结构

C.线性表的所有结点有且仅有一个前件和后件

D.线性表可以是空表

四、选择题(20题)61.

62.

63.

64.设有如下定义:

若要使P指向data中的n域,正确的赋值语句是()。

A.

B.

C.

D.

65.设有以下语句:

其中0≤k<5。以下不是对字符串的正确引用的是()。

A.*strpB.strp[k]C.str[k]D.strp

66.有以下程序:

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

A.12B.14C.1234D.123456

67.若有以下程序:

上面程序的输出结果是()。

A.5B.7C.1D.3

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

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

69.已知intx=(1,2,3,4);变量x的值是()。

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

70.若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是()。

A.X+1=yB.++X.Y=X一一C.X=X+10=X+YD.double(X)/10

71.若有定义“inta=5,b=7;”,则表达式a%=(b%2)运算后,a的值为()。

A.0B.1C.11D.3

72.

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

main

{intp[8]={11,12,13,14,15,16,17,18},i=0,j=0;

while(i++<7)

if(p[i]%2)j+=p[i];

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

}

A.42B.45C.56D.60

73.

74.

75.用树形结构来表示实体之间联系的模型称为()。

A.关系模型B.层次模型C.网状模型D.数据模型

76.若变量c为char类型,能正确判断出c为小写字母的表达式是_______。A.′a′<=c<=′z′

B.(c>=′a′)||(c<=′z′)

C.(′a′=C)

D.(c>=′a′)&&(c<=′z′)

77.若有以下定义和语句:“doubler=99,*p=&r;*P=r;”,则以下正确的叙述是()。

A.两个*p含义相同,都说明给指针变量p赋值

B.在“doubler=99,*p=&r;”中,把r的地址赋值给了P所指的存储单元

C.语句“*p=r;”把变量r的值赋给指针变量P

D.语句“*p=r;”取变量r的值放回r中

78.有以下程序

#include<stdio.h>

main()

{charcl,c2;

c1=A+8-4

c2=A+8-5;

printf("%C,%d\n",cl,c2);

}

已知字母A的ASCIl码为65,程序运行后的输出结果是()。

A.E,69B.D,69C.E,DD.输出无定值

79.有以下程序:

voidmain()

{intk=0,n=0;

while(k<5)

{switch(k)

{default:break;

case1:n+=k;

case2:

case3:n+=k;

}

k++;

}

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

}

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

A)0B)4

C)6D)7

80.由两个栈共享一个存储空间的好处是______。A.A.减少存取时间,降低下溢发生的概率

B.节省存储空间,降低上溢发生的概率

C.减少存取时间,降低上溢发生的概率

D.节省存储空间,降低下溢发生的概率

五、程序改错题(1题)81.下列给定程序中,函数proc的功能是:首先把b所指字符串中的字符按逆序存放,然后将str1所指字符串中的字符和Str2所指字符串中的字符,按排列的顺序交叉合并到str所指数组中,过长的剩余字符接在str所指数组的尾部。例如,当str1所指字符串中的内容为ABCDEFG,str2所指字符串中的内容为1234时,str所指数组中的内容应该为A483C2D1EFG;而当str1所指字符串中的内容为1234,str2所指字符串中的内容为ABCEDFG时,str所指数组中的内容应该为1G2F31:4DCBA。

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

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

试题程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio。h>

#include<string.h>

voidproc(char*strl,char*str2,char*str){

inti,j;charch;

i=0;j=strleu(str2)-1;

//****found****

while(i>j)

{

ch=str2[i];str2[i]=str2[j];str2[j]=ch;

i++;j--;

}

while(*str1||*str2)

{

if(*str1){*str

温馨提示

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

评论

0/150

提交评论