2021年河南省洛阳市全国计算机等级考试C语言程序设计_第1页
2021年河南省洛阳市全国计算机等级考试C语言程序设计_第2页
2021年河南省洛阳市全国计算机等级考试C语言程序设计_第3页
2021年河南省洛阳市全国计算机等级考试C语言程序设计_第4页
2021年河南省洛阳市全国计算机等级考试C语言程序设计_第5页
已阅读5页,还剩110页未读, 继续免费阅读

下载本文档

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

文档简介

2021年河南省洛阳市全国计算机等级考试C语言程序设计学校:________班级:________姓名:________考号:________

一、单选题(20题)1.有以下程序段: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

2.设x和y均为bool量,则x&&y为真的条件是()。

A.它们均为真B.其中一个为真C.它们均为假D.其中一个

3.有以下程序段:charstr[4][12]={“aaa”,“bbb”,“ccc”,“ddd”},*p[4];inti;for(i=0;i<4;i++)p[i]=str[i];以下选项中不能正确引用字符串的是()。

A.*p[3]B.p[3]C.str[2]D.*p

4.以下正确的字符串常量是()。A.“\\\”B.‘abc’C.OlympicGamesD.“”

5.

6.下面程序段的运行结果是char*p="abcdefgh";p+=3;printf("%d\n",strlen(strcpy(p,"ABCD")));

A.8B.12C.4D.7

7.

8.C语言中,要求参加运算的数必须是整数的运算符是()。

A./B.!C.%D.==

9.已知i,j,k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1,j的值为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);

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

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

11.

12.从未排序序列中依次取出元素与已排序序列中的元素作比较,将取出的元素放入已排序序列中的正确位置上,此方法称为______。

A.归并排序B.选择排序C.交换排序D.插入排序

13.在堆栈中存取数据的原则是。A.先进先出B.后进先出C.先进后出D.随意进出

14.若有以下定义和语句:chars[10]="abcd!",*s2="\nl23\\";Drintf("%d%d\n",strlen(sl),strlen(s2));则输出结果是()。A.55B.105C.107D.58

15.有以下函数:intfun(char*x,char*y){intn=0;.while((*x==*y)&&*x!="\0){x++;y++;n++;}returnn;}函数的功能是()。

A.将y所指字符串赋给x所指存储空间

B.查找和y所指字符串中是否有"\0'

C.统计x和y所指字符串中最前面连续相同的字符个数

D.统计x和y所指字符串中相同的字符个数

16.若有以下程序段intm=0xabc,n=0xubc;m-=n;printf("%X\n",m);执行后输出结果是

A.0X0B.0x0C.0D.0XABC

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

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

18.以下程序的输出结果是()。#defineM(x,y,z)x*y+zmain(){inta=l,b=2,c=3;printf("%d\n",m(a+b.b+c,c+a));}A.19B.17C.15D.12

19.算法的空间复杂度是指()。

A.算法在执行过程中所需要的计算机存储空间

B.算法所处理的数据量

C.算法程序中的语句或指令条数

D.算法在执行过程中所需要的临时工作单元数

20.下面程序的输出结果是______。main(){inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a+4;printf("%d\n",p[3]);}

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

二、2.填空题(20题)21.有以下程序

voidf(inty,int*x)

{y=y+*x;*X=*X+y;}

main()

{intx=2,y=4;

f(y,&x);

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

}

执行后输出结果是______。

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

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

}

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

main()

{inta=10;

a=(3*5,a+4);printf("a=%d\n",a);

}

24.设有下列宏定义:

#defineA2

#defineB(A+3)

则执行赋值语句"k=B*20;"(k为int型变量)后,k的值是______。

25.以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符依次存放到该文件中,用#作为结束输入的标志,请填空。

#include<stdio.h>

main()

{FILE*fp;

charch,fname[10];

printf("Inputthenam\n");

gets(fname);

if((fp=【】==NULL)

{printf("Cannotopen\n");exit(0);}

printf("Enterdata\n");

while(ch=getchar()!='#')

fputc(【】,fp);

fclose(fp);

}

26.()的目的是分析数据间内在语义关联,在此基础上建立一个数据的抽象模型。

27.已知字符A的ACSII码值为65,以下语句的输出结果是______。

charch='B';

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

28.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、______和选择排序。

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

main()

{char*p[]={"BOOL","OPK","H","SP"};

inti;

for(i=3,i>=0;i--,i--)printf("%c",*p[i]);

printf("\n");

}

30.软件维护活动包括以下几类:改正性维护、适应性维护、【】维护和预防性维护。

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

main()

{

chara[]="123456789",*p;

inti=0;

p=a;

while(*p)

{

if(i%2==0)

*p='*';

p++;i++;

}

puts(a);

}

32.若有定义:inta=4,b=5,c=6;然后顺序执行下列语句后,变量b中的值是()。c=(a-=(b-5));c=(a%3)+(b=1);

33.深度为5的满二叉树中,叶子结点的个数为______。

34.下面程序的功能是调用sub函数计算数组a中字符串的长度,请填空。

sub(chars[])

{intn;

for(n=0;【】n++);

return【】;

}

main()

{char*a;intk;

gets(a);

【】

printf("%d",k);

35.一棵二叉树第六层(根结点为第一层)的结点数最多为______个。

36.二分法查找仅限于这样的表:表中的数据元素必须有序,其存储结构必须是______。

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

#include<stdio.h>

main()

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

p=a;p++;

printf("%d",*p);

}

38.以下程序是从终端读入数据到数组中,统计其中正数的个数,并计算它们的和。请填

main()

{

inti,a[20],sum,count;

sum=count=【】;

for(i=0;i<20;i++)scanf("%d("%d",【】);

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

{

if(a[i]>0)

{count++;

sum+=【】;

}

}

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

}

39.以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。

structnode

{intinfo;

【】link;};

40.在面向对象方法中,允许作用于某个对象上的操作称为【】。

三、1.选择题(20题)41.树是结点的集合,它的根结点数目是()。

A.有且只有1B.1或多于1C.0或1D.至少2

42.下列语句中符合C语言语法的赋值语句是()

A.a=7+b+c=a+7;

B.9=7+b+9++a+7;

C.a=7+b,b++,a+7;

D.a=7+b,c=a+7;

43.对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是()。

A.冒泡排序为n/2B.冒泡排序为nC.快速排序为nD.快速排序为n(n-1)/2

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

#include<stdio.h>

main()

{inta=0,i;

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

{switch(i)

{case0:

case3:a+=1;

case1:

case2:a+=2;

default:a+=3;

}

}

printf("%d",a);

}

A.19B.18C.6D.8

45.若有定义语句:inta[2][3],*p[3],则以下语句中正确的是A.p=a;B.p[0]=a;C.p[0]=&a[1][2];D.p[1]=&a;

46.若有以下定义的语句structstudent{intage;intnum;};structstudentstu[3]={{1001,20},{1002,19},{1003,21}};main(){stmctstudent*p;p=stu;…}则以下不正确的引用是

A.(p++)->numB.p++C.(*p).numD.P=&stu.age.

47.有以下程序main(){union{unsignedintn;unsignedcharC;}ul;u1.C='A';printf("%c\n",u1.n);}执行后输出结果是

A.产生语法错B.随机值C.AD.65

48.以下数组定义中不正确的是_______。

A.inta[2][3];

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

C.intc[100][100={0};

D.intd[3][]={{1,2},{1,2,3},{1,2,3,4}};

49.算法具有五个特性,以下选项中不属于算法特性的是_____。A.有穷性B.简洁性C.可行性D.确定性

50.有以下程序:#include<stdio.h>#defineP3voidF(intx){return(P*x*x);tmain(){printf("%d\n",F(3+5));}程序运行后的输出结果是()。

A.192B.29C.25D.编译出错

51.若已建立如下图所示的单向链表结构:在该链表结构中,指针p、s分别指向图中所示结点,则不能将s所指的结点插入到链表末尾仍构成单向链表的语句组是______。

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

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

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

D.p=(*p).next;(*s).next=(*p).next;(*p).next=s;

52.下列选项中不属于结构化程序设计方法的是()。

A.自顶向下B.逐步求精C.模块化D.可复用

53.现有如下程序段#include"stdio.h"main(){intk[30]={12,324,45,6,768,98,21,34,453,456};intcount=0,i=0;while(k[i]){if(k[i]%2==0||k[i]%5==0)count++;i++;}printf("%d,%d\n",count,i);}则程序段的输出结果为

A.7,8B.8,8C.7,10D.8,10

54.若有以下说明和语句,则四个选项中是对c数组元素的正确引用的是()。intc[4][5],(*cp)[5];cp=c;

A.cp+1B.*(cp+3)C.*(cp+1)+3D.*(*cp+2)

55.若要对a进行++运算,则a应具有下面说明

A.inta[3][2];

B.char*a[]{"12","ab"};

C.char(*a)[3];

D.intb[10],*a=b;

56.对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为______。A.N+1B.NC.(N+1)/2D.N/2

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

A.预处理命令行都必须以#号开始

B.在程序中凡是以#号开始的语句行都是预处理命令行

C.宏替换不占用运行时间,只占编译时间

D.定义#definePI3.1415926;是正确的

58.以下程序的输出结果是______。fun(intx,inty,intz){z=x*x+y*y;}main(){inta=31;fun(5,2,a);printf("%d",a);}

A.0B.29C.31D.无定值

59.有以下程序:main(intarge,char*argv[]){intn,i=0;while(arv[1][i]!='\0'{n=fun();i++;}printf("%d\n",n*argc)}intfun(){staticints=0;s+=1;returns;}假设程序经编译、连接后生成可执行文件exam.exe,若输入以下命令行exam123<回车>则运行结果为()。

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

60.若变量a,b已正确定义,且b已正确赋值,则合法的语句是()。

A.b=double(b);B.++b;C.a=a++=5;D.a=double(b);

四、选择题(20题)61.

62.有以下程序:

#include<stdi0.h>

main()

{inta=1,b=2;

for(;a<8;a++){b+=a;a+=2;)

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

}

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

A.9,18

B.8,11

C.7,11

D.10,14

63.

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

#include<stdio.h>

main

{inti;

for(i=l;i<=10;i++)

{if(i*i>=20)&&(i*i<=100))

break;

}

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

}

A.49B.36C.25D.64

64.

65.在结构化方法中,软件功能分别属于下列软件开发中的(

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

66.

67.

68.

69.设有条件表达式:(EXP)?i++;j--,则以下表达式中(EXP)完全等价的是()。

A.(EXP==0)B.(EXP!=0)C.(EXP==1)D.(EXP!=1)

70.若有定义:doublex;,则表达式IX=0,x+10,x+十的值是()。

A.11.0B.10.0C.0.0D.1.0

71.

72.

有下列程序:

main

{intk=5:

while(--k)printf("%d",k=1);

printf("\n");

}

执行后的输出结果是()。

A.1B.2C.4D.死循环

73.

74.若有语句:Char*line[5];,以下叙述中正确的是()。

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

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

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

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

75.以下选项中不能作为C语言合法常量的是

A.’Fab’B.0.7e+9C."\b"D.’\01211’

76.34.有以下程序

#include<stdio.h>

unionpw

{inti;

charch[2];

}a;

main()

{a.ch[0]=13;a.ch[1]=0;

printf("%d\n",a.i);

}

程序的输出结果是

A.13B.14

C.0D.20

77.设变量已正确定义,则下列能正确计算f=n!的程序段是()。

A.f=0;for(i=1;i<=n;i++)f*=i;

B.f=1;for(i=1;i<n;i++)f*=i;

C.f=1;for(i=n;i>1;i++)f*=i;

D.f=1;for(i=n;i>=2;i--)f*=i;

78.

79.有以下程序

fun(int*a,intn)

{inti,j=0,p;

p=j;

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

if(a[i]<a[p])

____;

return(p);

}

在下画线处应填入的是

A.i=pB.a[p]=a[i]

C.p=jD.p=i

80.

五、程序改错题(1题)81.下列给定的程序中,函数proc的功能是:用选择法对数组中的m个元素按从小到大的顺序进行排序。

例如,排序前的数据为:1132-5214

则排序后的数据为:-52111432

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

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

试题程序:

#include<stdio.h>

#defineM20

voidproc(inta[],intn)

{

inti,j,t,P;

//****found****

for(j=0;j<n-1;j++);

{

p=j;

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

if(a[[i]<a[p])

p=i;

t=a[p];

a[p]=aEj3;

//****found****

a[p]=t;

}

}

voidmain

{

intarr[M]={11,32,-5,2,14},i,m=5;

printf("排序前的数据:");

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

printf("%d",arr[i]);

printf("\n");

proc(arr,m);

printf("排序后的顺序:");

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

printf("%d",arr[i]);

printf("\n");

}

六、程序设计题(1题)82.请编写一个函数proc(),它的功能是:求出一个4×N整型二维数组中最大元素的值,并将此值返回调用函数。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:

参考答案

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

2.A

3.A“*P[3]”是一个字符,也就是str[3][0],不是字符串,选项A错误。“P[3]”“str[2]”和“*p”分别代表了ddd、ccc、aaa。故本题答案为A选项。

4.D在C语言中,字符串常量是用双引号标注的字符序列,因此B选项和C选项不正确。字符序列中可包含一些转义字符,转义字符以“\\”开头。A选项中包含3个前两个(\\\\)代表一个“\\”字符,后面一个为“””。因为\\”被看作一个“””,所以该字符串缺少一个结束的“””。因此A选项不正确。D选项的两个“”之间没有任何字符,代表的是一个空串,是合法的字符串常量,因此D选项正确。B选项的abc应该使用双引号标注。故本题答案为D选项。

5.B

6.C在本题中,程序段首先定义了字符型指针变量p,并使其指向一个字符串,然后将指针变量p加3,即使其指向字符串的第四个元素。然后执行输出语句,通过输出语句的输出格式我们可以知道,最后输出的是一个十进制数的整型数值,其输出列表为strlen(strcpy(P,″ABCD″))。这就要求我们了解strlen函数和strcpy函数的作用。

strcpy的调用格式是:strcpy(目的地址,源地址),其功能是把源地址的字符串复制到目的地址中,这种复制将覆盖原来的字符串。strcat函数的功能是将源地址的字符串复制到目的地址字符串的后面。

strlen的调用格式是:strlen(字符串地址),其功能是返回字符串中字符的个数。

那么程序中执行strcpy(P,″ABCD″)后指针变量p所指向的字符串为“ABCD”,该字符串中字符的个数为4,那么执行strlen后,程序最终输出的结果是4。因此本题正确的答案是C。

7.B

8.C

9.C

10.D

11.D

12.D

13.C

14.A\\n和\\\\分别为转义字符,各占据一个字符的位置。

15.C本题中由循环条件可知遇到“0或x与y所指的字符的值不等中的一个条件时就结束,所以功能是统计x和y所指字符串中最前面连续相同的字符个数。

16.C解析:C语言中的自反赋值运算符。“m-=n”相当于“m=m-n”,两个相等的数相减,其值为0。

17.D

18.DM(a+b,b+C,c+a)=a+b*b+c+c+a=1+2*2+3+3+1=12,注意x*y+z而不是(x)*(y)+z。

19.A算法的空间复杂度是指算法在执行过程中所需要的内存空间。所以选择A项。

20.B解析:指针变量p指向数组a的第5个元素,p[3]在原指向基础上移3个单位,指针变量p将指向第8个元素(下标为7的元素),值为7。

21.8484解析:本题考核的知识点是函数的调用、值传递和地址传递的区别。“值传递”指实参将值传递给形参后,实参与形参再无联系。也就是说对行参的改变将不影响实参;地址传递是指地址或数组名作为形参时的参数传递,这种情况下对形参的改变将对实参产生影响.函数f(Y*x)的作用是让y的值加上指针x所指向变量的值,让指针x所指向变量的值加上y的值。由于形参y是传值的,形参x是传地址的,故调用该函数后,作为实参的y的值将不改变,而实参x的值将改变,故最后输出的y的值为4,而x的值为8。

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

23.a=14a=14解析:逗号表达式的值是以逗号分隔的最后一个表达式的值。所以题目中的语句a=(3*5,a+4);就等价于a=a+4;。故本题输出结果是a=14。

24.100100解析:本题考查带参数的宏定义及相关运算。运算过程为:k=B*20=(A+3)*20=(2+3)*20=100。

25.fopen(fname"w")chfopen(fname,'w')\r\nch解析:数组fname用来存放终端输入的一个文件的文件名;文件使用方式'w'是为写而打开文本文件。若文件不存在,系统将用在fopen调用中以指定的文件名建立一个新文件;若存在,则覆盖原有内容;fputs(ch,fp)的功能是将字符ch写到文件指针fp所指的文件中去。

26.数据库概念设计数据库概念设计解析:数据库概念设计的目的是分析数据间内在语义关联,在此基础上建立一个数据的抽象模型。

27.B66B66解析:printf函数的功能是按照指定的格式,在标准输出设备上输出数据,它有两种参数:格式控制参数和输出项参数。本题中,printf('%c%d\\n',ch,ch)表示以字符格式和十进制整数格式输出ch,B的ACSII码值为66,即在计算机中B的十进制整数格式是66。所以,输出为B66。

28.交换排序交换排序解析:所谓排序是指将一个无序序列整理成按值非递减顺序排列成的有序序列,常用的排序方法有:交换排序、插入排序和选择排序。其中交换排序包括冒泡排序和快速排序,插入排序包括简单插入排序和希尔排序,选择排序包括直接选择排序和堆排序。

29.SO

30.完善性软件维护活动包括以下几类:改正性维护,适应性维护、完善性维护和预防性维护,完善性维护是指为了满足用户对软件提出的新功能与性能要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。

31.*2*4*6*8**2*4*6*8*解析:程序中定义了一个字符数组a,并初始化为123456789,接着定义了一个指针p并让它指向数组a,紧接着执行了一个while循环,此循环的作用是:当i为偶数时,将“*”赋给a[i],p指向数组末尾,循环结束,此时数组中a[0]、a[2]、a[4]、a[6]和a[8]的值都为“*”,所以最后调用puts()函数输出的a的值为*2*4*6*8*

32.11解析:本题考查的是基本赋值运算符和赋值表达式。a-=(b-5)等价于a=a-(b-5)=4,c=a=4;a%3=1,c=(a%3)+(b=1)=2,其中b的值被b=1确定为1。

33.1616解析:满二叉树的叶子结点都在最后一层,即第4层,且第4层的结点达到最大数,即25-1=16。

34.s[n]!='\0';或s[n];nk=sub(a);s[n]!='\\0';或s[n];\r\nn\r\nk=sub(a);解析:函数sub()通过for循环计算字符串的长度,当字符串没有结束时循环,因此判断循环与否的条件是看字符串是否结束。故第1空应该填写s[n];或其他等价表达式。循环结束返回字符串长度值,循环变量n中累计了循环的次数即字符串的长度,故第2空应该填n。主函数中的空白处应该是一条调用函数sub()的语句,将字符串的首地址作为实参传递给形参,并将返回值赋值给变量k。故第3空应该填k=sub(a);。

35.3232解析:二叉树的一个性质是,在二叉树的第k层上,最多有2k-1(k≥1)个结点。由此,26-1=32.所以答案为32。

36.顺序存储(顺序方式存储)顺序存储(顺序方式存储)解析:二分法查找对表的要求是有序的顺序表,即第一要求是数据元素有序,第二要求是按顺序方式存储。

37.44解析:在主函数中,语句p=a;p++使用指针p指向数组a[1],所以输出结果为4。

38.0&a[i]a[i]0\r\n&a[i]\r\na[i]解析:本题要求从终端读入数据到数组中,统计其中正数的个数,并计算它们的和。程序中首先要对存放正数个数的变量count及存放和值的变量sum初始化为0,所以第一空应填0。接着要求从终端读入数据到数组中,可以通过scanf函数实现,因此第二空应填&a[i]。最后通过sum+=a[i];语句累加正数a[i]的值到sum中,因此第三空应填a[i]。

39.structnode*structnode*解析:本题中的结构类型名为structnode,所以空白处应填:structnode*。即定义一个指向自身的结构体指针。

40.方法方法解析:在面向对象方法中,方法是指允许作用于某个对象上的各种操作。

41.A树形结构是一类重要的非线性数据结构。树是n(n≥0)个结点的集合,对应任意一棵非空树,它具有以下几点重要的性质。

①有且仅有一个特定的称为根的结点。

②当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,TM,其中每一个集合本身又是一棵树,称为子树。

因此,本题的正确答案有且只有一个。

42.D

43.DD。【解析】本题主要考查对排序算法的理解。冒泡排序法首先将第一个记录的关键字与第二个记录的关键字进行比较,若逆序则交换,然后比较第二个与第三个,以此类推,直至第n-1个与第n个记录的关键字进行比较。第一趟冒泡排序使最大的关键字元素放到最后。以此类推,进行第2~n次冒泡排序。如果在排序过程中不存在逆序,则排序结束。在最坏情况下,冒泡排序中,若初始序列为“逆序”序列,则需要比较n(D-1)/2次。快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字比另一部分记录的关键字小,然后分别对这两部分记录继续进行排序,最终达到整个记录有序。对于快速排序,当初始记录序列按关键字有序或基本有序时,快速排序退化为冒泡排序,最坏情况下比较次数为n(n-1)/2。

44.A解析:本题考查switch语句。当i=1时,执行case1,因为没有遇到break语句,所以依次往下运行,a=a+2=2,a=a+3=5当i=2时,执行case2,因为没有遇到break语句,所以依次往下运行,a=a+2=7,a=a+3=10;当i=3时,执行case3,a=a+1=11,因为没有遇到break语句,所以依次往下运行,a=a+2=13,a=a+3=16;当i=4时,执行default,a=a+3=19,结束循环。

45.C解析:选项A中,p为数组名,其值是不能被改变的,故非法;选项B中,p[0]的类型是int*,而a是二维数组名(类型为int[][3]),两者无法赋值,故非法:选项C中,p[0]为int型指针,&a[1][2]是int型变量的地址,可以合法赋值;选项D中,p[1]是int型指针,而&a是二维数组的地址(类型为int(*)[2][3]),两者无法赋值,故非法。所以本题应该选择C。

46.D

47.C解析:在定义共用体的同时,定义了一个共用体型变量u1,共占两个字节,有两个成员n和c,两个成员的首地址是相同的.因此给u1.c赋一个“A”,其实就是给无符号整型成员u1.n的低字节赋一个“A”,输出u1.n的时候是以字符型的形式输出,只输出它的低地址的一个字节,因此为“A”。所以,C选项为所选。

48.D解析:一维数组的定义方式为:

类型说明符数组名[常量表达式];

选项A符合此定义形式,正确;C语言中多维数组赋初值时可以部分赋值,也可以不指定除第一维以外的其他维的大小,故选项C正确;另外,如果对全部数组元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省,所以选项B正确,而选项D是错误的。

49.B解析:一个算法应当具有以下5个特性:有穷性;确定性;可行性;有零个或多个输入;由一个或多个输出.简洁性不属于这5个特性,所以本题应该选择B。

50.D解析:return语句用于从被调函数带回一个函数值。void关键字表示“无类型”,即不需要从被调函数中带回函数值,所以不需要return语句,故编译时出错。

51.A解析:在答案A中:p=p->next;s->next=p;p->next=s;s的确已插到了链表的末尾,但它的next却并没有为NULL,而是指向了它的直接前趋p,这样它就不是一个单向链表(单向链表最后一个结点的next指针一定是一个NULL)。

52.D解析:20世纪70年代以来,提出了许多软件设计方法,主要有①逐步求精:对复杂的问题,应设计一些子目标作过渡,逐步细化;②自顶向下:程序设计时应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化;⑧模块化:一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每个小目标称为一个模块,而可复用是面向对象程序设计的一个优点。

53.D解析:在C语言中,定义一维数组的语句一般形式如下:

类型名数组名[常量表达式];

一维数组的引用形式为:数组名[下标表达式]。count表示能被2整除或被5整除的个数,i则计算有多少个数组元素。

54.D解析:本题考查数组元素的引用。语句cp=c;将数组c的首行地址赋给了指针数组cp。选项A)的cp+1是指将数组c的首行地址加1,即为第二行地址;选项B)的*c(cp+3)是地址,等于数组c的首地址加3的内存单元的内容,不是对数组元素的引用;选项c)的*(cp+1)+3是地址,等于数组c的首地址加1的内存单元中存放的值加3,不是对数组元素的引用。

55.A解析:左移1位,相当于乘以2,题中的x的值是一个八进制,转换为+进制数是32,再乘以2,x的值为64,以%。八进制形式输出,显示为100。

56.B解析:在进行顺序查找过程中,如果被查的元素是线性表中的最后一个,或者被查元素根本不性表中,则为了查找这个元素需要与线性表中所有元素进行比较,这是顺序查找最坏的情况。

57.D解析:带参数的宏定义如下:#define宏名(参数)字符串。本题中,宏定义的作用是指定用标识符PI来代替“3.1415926”这个字符串,但宏定义不是C语句,行末不加分号。

58.C解析:函数fun的形参是简单变量,main函数中调用fun时只是把实参的值传递给形参,形参的改变不影响实参,所以调用完函数fun后a的值不发生变化,即a=31。

59.A解析:主函数的第一个参数argc为整形参数,记下从命令行输入的参数的个数;第二个参数argv是一个字符型的指针数组,它的每一个元素指向命令行输入的参数字符数。在本例中argc的值为2,argv[0]指向字符串“exam”,argv[1]指向参数字符串“123”。在main()函数中,while循环执行了3次,调用了3次fun()函数;第一次调用了fun()函数时,定义了一个静态变量s并赋初值0,加1后作为函数值返回,n的值为1;第二次调用fun()函数时,静态变量s的值将保留上一次退出时的值1,再加1为2,作为函数值返回,n的值为2;同理第三次调用返回后,n的值为3。输出n*argc的值为6所以,A选项为所选。

60.B解析:要解答此题只要知道两个知识点:①在C语言中规定进行强制类型转换的格式是:(double)变量名;②在C语言中不允许给表达式赋值。

61.D

62.D\n第一次执行循环前,a=1,满足a<8,执行循环后,b=3,a=3。执行完a++操作后,a=4。由于a<8,执行第二次循环后,b=7,a=6,执行完a++操作后,a=7。由于a<8,执行第三次循环后,b=14,a=9,执行完a++操作后a=10。此时不满足a<8,跳出循环。

\n

63.C

\n当if执行到第一个满足(i*i>一20)&&(i*i<=100)这个条件的i出现时,通过break语句跳出循环,执行下面的printf语句。

\n

64.C

65.C总体设计过程通常由两个主要阶段组成:系统设计,确定系统的具体实现方案;结构设计,确定软件结构。为确定软件结构,首先需要从实现角度把复杂的功能进~步分解。分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。

66.B

67.C

68.C

69.B解析:条件表达式的形式为:“表达式1?表达式2:表达式3”。其含义为:当“表达式1”的值为非零时,求出“表达式2”的值,此时“表达式2”的值就是整个条件表达式的值;当“表达式1”的值为零时,求出“表达式3”的值,此时“表达式3”的值就是整个条件表达式的值。对于本题来说,当表达式EXP为非0值时条件成立,即执行语句i++;当EXP等于0时,执行语句j--;这等同于条件表达式“(EXP!=0)?i++:i++;”。

70.Cc语言中,逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式。逗号运算符的优先级是所有运算符中级别最低的,逗号运算符保证左边的子表达式运笑结束后才进行右边的子表达式的运算。也麓是辽,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。后置自增运算:k++表示先运算,后自■:曹置自增运算:++k表示先自加,后运算。因此,表达式l;O,I+10。x++的计算过程为首先赋值x=0,然后将x加l0,包是并不对x进行赋值,最后计算x++,并,根据后置自增运算的计算结果,即为x=0.0。故答案为C选项。

71.A

72.A

\n在程序语句中,k的初始值为5,进行第l次while循环后,k自减1为4,非0,执行循环体里的printf语句,输出k,此时k的值变为1。程序执行第2次循环时,k自减1变为0,为假,退出while循环语句。所以程序的最后结果为1。

\n

73.B

74.A解析:理解复杂定义要掌握两点:一、右结合原则.本题中的定义char*line[5];等价于char*(line[5]);;二、自外向内分解成typedef语句。char*(line[5]);等价于typedefchar*A;Aline[5];其中A被typedef定义成字符指针的别名,然后line被定义成A的一维数组,即字符指针的一维数组。再来看看行指针的定义char(*line)[5];它应该被分解成typedefcharB[5];B*line;其中B被定义成包含5个元素的一维字符数组,然后line被定义成指向B的指针,即指向包含5个元素的一维字符数组的指针。所以两者切不可混淆了,后者的括号不能省略。故本题应该选择A。

75.A本题考查C语言中常量的定义。常量是指程序在运行过程中,其值不能被改变的量。C语言中常见的常量主要有整型常量、实型常量、字符型常量。整型常量包括十进制整数,如456;八进制整数,以0开头,如0456;十六进制整数,以0x开头,如0x456。实型变量包括十进制小数形式,如.456;指数形式,如456e0,字母e前面必须有数字,e后面的数字必须为整数,如456e-4。字符型常量是用单撇号括起来的一个字符。如,’a’,’A’等。’a’不等于’A’。字符型常量还包括一种转义字符,以’\\’开头,表示将’\\’后面的字符转换成另外的意义。字符串也可以作为常量,用双撇号括起来,如'abc'。本题A选项中单撇号括起来的不是一个字符,而是三个字符,故不是合法常量。B选项是实型变量的指数表示形式。C选项是字符串常量,用双撇号引起来。D选项是字符’\\0’,因为在碰到’\\0’后,字符串结束,因此只读取到’\\0’,所以D选项是合法常量。

76.A本题主要考查联合体的内容。关于联合体,我们需要注意以下几个特点。

(1)联合体不允许做初始化赋值,赋值只能在程序中进行。

(2)由于联合体成员共享存储空间的原因,导致一个联合体变量每次只能给一个成员变量赋值,而且联合体中所有成员的首地址相同,即都是变量的地址。

(3)联合体的存储空间与其成员变量中所需空间最大的变量保持一致,即联合变量的长度等于各成员中最长的长度。

在本题中,程序首先定义了一个联合体和一个该联合体的联合体变量a,在主函数中,分别用两条语句给联合体成员赋值,由于ch是一个数组,它的元素仍按普通数组一样排列。程序要求的输出结果是a.i,由于联合体中所有成员的首地址相同,即a.i与a.ch的首地址相同,而在ch中第一个元素为13,因此,输出a.i的结果就为13。本题正确的答案是A。

77.D解析:要正确计算函数f=n!,由n!的数学定义可知n!=n*(n-1)*(n-2)*……*1。在选项A)中,由于f的初值为0,在for循环语句中,f依次乘以1,2,3,……,n。最后计算f=n!=O,所以选项A)不正确。在选项B)中,f的初值为1,在for循环语句中,f依次乘以1,2,3,……,(n-1)。最后计算得到f=(n-1)!,所以选项B)不正确。在选项C)中,f的初值为1,在for循环语句中,f依次乘以n,n+1,n+2,……,所以选项C)不正确。在选项D)中,f的初值为1,在for循环语句中,f依次乘以n,n-1,n-2,……,2。最后计算f=n!,所以选项D)正确。

78.D

79.D本题考查对程序作用的理解。该函数具有两个形参a和n,a为数组名,n为数组中元素的个数。函数的返回值为p,这里p为数组的下标。初始时,i、j、p都为0,for循环的初始表达式为i=j,条件表达式为i<n,也就是当i=n时,for循环结束。该for循环表达的含义为:初始时,令a[i]=a[p]=a[0],随后i可从0开始递增,直到n-1,对于每一个a[i],都与a[p]进行比较,空白处需要填入语句的部分是if语句满足条件后要进行的操作,表示如果a[i]<a[p],应当进行怎样的处理。选项A是令i=p,此时整个程序中p的值没有发生改变,p=0,即如果a[i]<a[p],则令i=0,回到了初始化的状态,这样在for语句中造成了死循环,该选项错误。选项B是令a[p]=a[i],整个程序在运行过程中,p的值依然没有变化,p=0,即如果a[i]<a[0],则令a[0]=a[i],整个程序运行结束后,a[0]的数值应该为整个数组的最小值,用return语句返回下标0没有意义。选项C是令p=j,程序在运行过程中,j的值和p的值都没有发生改变,整个程序没有意义。选项D是p=i,该语句的含义是如果a[i]<a[p],则令p=i,程序结束后则有a[p]为数组中的最小值,将最小值的下标返回。

80.C

81.(1)错误:for(j=0;j<n-1;j++);

\n正确:for(j=0;j<n-1j++)

\n(2)错误:a[p]=t;

\n正确:a[j]=t;

\n【解析】for循环结束的标志是for后的一个语句,如果for后面直接跟一个分号,说明是一个空循环不执行任何功能,因此“for(j=0;j<n-1;j++);”后面的分号应该去掉;当a[i]<a[p]时两元素互换,因此“a[p]=t;”应改为“a[j]=t”。

\n

82.

【解析】要求出二维数组中最大元素的值,需要比较二维数组中每一个元素的值。首先,定义变量max用来存放最大元素的值,将其初始化为二维数组中第一个元素的值。然后将其与后面的每一个元素进行比较,将二维数组中最大元素的值放到变量max当中,并将其返回给主函数。

2021年河南省洛阳市全国计算机等级考试C语言程序设计学校:________班级:________姓名:________考号:________

一、单选题(20题)1.有以下程序段: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

2.设x和y均为bool量,则x&&y为真的条件是()。

A.它们均为真B.其中一个为真C.它们均为假D.其中一个

3.有以下程序段:charstr[4][12]={“aaa”,“bbb”,“ccc”,“ddd”},*p[4];inti;for(i=0;i<4;i++)p[i]=str[i];以下选项中不能正确引用字符串的是()。

A.*p[3]B.p[3]C.str[2]D.*p

4.以下正确的字符串常量是()。A.“\\\”B.‘abc’C.OlympicGamesD.“”

5.

6.下面程序段的运行结果是char*p="abcdefgh";p+=3;printf("%d\n",strlen(strcpy(p,"ABCD")));

A.8B.12C.4D.7

7.

8.C语言中,要求参加运算的数必须是整数的运算符是()。

A./B.!C.%D.==

9.已知i,j,k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1,j的值为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);

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

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

11.

12.从未排序序列中依次取出元素与已排序序列中的元素作比较,将取出的元素放入已排序序列中的正确位置上,此方法称为______。

A.归并排序B.选择排序C.交换排序D.插入排序

13.在堆栈中存取数据的原则是。A.先进先出B.后进先出C.先进后出D.随意进出

14.若有以下定义和语句:chars[10]="abcd!",*s2="\nl23\\";Drintf("%d%d\n",strlen(sl),strlen(s2));则输出结果是()。A.55B.105C.107D.58

15.有以下函数:intfun(char*x,char*y){intn=0;.while((*x==*y)&&*x!="\0){x++;y++;n++;}returnn;}函数的功能是()。

A.将y所指字符串赋给x所指存储空间

B.查找和y所指字符串中是否有"\0'

C.统计x和y所指字符串中最前面连续相同的字符个数

D.统计x和y所指字符串中相同的字符个数

16.若有以下程序段intm=0xabc,n=0xubc;m-=n;printf("%X\n",m);执行后输出结果是

A.0X0B.0x0C.0D.0XABC

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

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

18.以下程序的输出结果是()。#defineM(x,y,z)x*y+zmain(){inta=l,b=2,c=3;printf("%d\n",m(a+b.b+c,c+a));}A.19B.17C.15D.12

19.算法的空间复杂度是指()。

A.算法在执行过程中所需要的计算机存储空间

B.算法所处理的数据量

C.算法程序中的语句或指令条数

D.算法在执行过程中所需要的临时工作单元数

20.下面程序的输出结果是______。main(){inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a+4;printf("%d\n",p[3]);}

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

二、2.填空题(20题)21.有以下程序

voidf(inty,int*x)

{y=y+*x;*X=*X+y;}

main()

{intx=2,y=4;

f(y,&x);

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

}

执行后输出结果是______。

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

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

}

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

main()

{inta=10;

a=(3*5,a+4);printf("a=%d\n",a);

}

24.设有下列宏定义:

#defineA2

#defineB(A+3)

则执行赋值语句"k=B*20;"(k为int型变量)后,k的值是______。

25.以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符依次存放到该文件中,用#作为结束输入的标志,请填空。

#include<stdio.h>

main()

{FILE*fp;

charch,fname[10];

printf("Inputthenam\n");

gets(fname);

if((fp=【】==NULL)

{printf("Cannotopen\n");exit(0);}

printf("Enterdata\n");

while(ch=getchar()!='#')

fputc(【】,fp);

fclose(fp);

}

26.()的目的是分析数据间内在语义关联,在此基础上建立一个数据的抽象模型。

27.已知字符A的ACSII码值为65,以下语句的输出结果是______。

charch='B';

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

28.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、______和选择排序。

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

main()

{char*p[]={"BOOL","OPK","H","SP"};

inti;

for(i=3,i>=0;i--,i--)printf("%c",*p[i]);

printf("\n");

}

30.软件维护活动包括以下几类:改正性维护、适应性维护、【】维护和预防性维护。

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

main()

{

chara[]="123456789",*p;

inti=0;

p=a;

while(*p)

{

if(i%2==0)

*p='*';

p++;i++;

}

puts(a);

}

32.若有定义:inta=4,b=5,c=6;然后顺序执行下列语句后,变量b中的值是()。c=(a-=(b-5));c=(a%3)+(b=1);

33.深度为5的满二叉树中,叶子结点的个数为______。

34.下面程序的功能是调用sub函数计算数组a中字符串的长度,请填空。

sub(chars[])

{intn;

for(n=0;【】n++);

return【】;

}

main()

{char*a;intk;

gets(a);

【】

printf("%d",k);

35.一棵二叉树第六层(根结点为第一层)的结点数最多为______个。

36.二分法查找仅限于这样的表:表中的数据元素必须有序,其存储结构必须是______。

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

#include<stdio.h>

main()

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

p=a;p++;

printf("%d",*p);

}

38.以下程序是从终端读入数据到数组中,统计其中正数的个数,并计算它们的和。请填

main()

{

inti,a[20],sum,count;

sum=count=【】;

for(i=0;i<20;i++)scanf("%d("%d",【】);

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

{

if(a[i]>0)

{count++;

sum+=【】;

}

}

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

}

39.以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。

structnode

{intinfo;

【】link;};

40.在面向对象方法中,允许作用于某个对象上的操作称为【】。

三、1.选择题(20题)41.树是结点的集合,它的根结点数目是()。

A.有且只有1B.1或多于1C.0或1D.至少2

42.下列语句中符合C语言语法的赋值语句是()

A.a=7+b+c=a+7;

B.9=7+b+9++a+7;

C.a=7+b,b++,a+7;

D.a=7+b,c=a+7;

43.对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是()。

A.冒泡排序为n/2B.冒泡排序为nC.快速排序为nD.快速排序为n(n-1)/2

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

#include<stdio.h>

main()

{inta=0,i;

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

{switch(i)

{case0:

case3:a+=1;

case1:

case2:a+=2;

default:a+=3;

}

}

printf("%d",a);

}

A.19B.18C.6D.8

45.若有定义语句:inta[2][3],*p[3],则以下语句中正确的是A.p=a;B.p[0]=a;C.p[0]=&a[1][2];D.p[1]=&a;

46.若有以下定义的语句structstudent{intage;intnum;};structstudentstu[3]={{1001,20},{1002,19},{1003,21}};main(){stmctstudent*p;p=stu;…}则以下不正确的引用是

A.(p++)->numB.p++C.(*p).numD.P=&stu.age.

47.有以下程序main(){union{unsignedintn;unsignedcharC;}ul;u1.C='A';printf("%c\n",u1.n);}执行后输出结果是

A.产生语法错B.随机值C.AD.65

48.以下数组定义中不正确的是_______。

A.inta[2][3];

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

C.intc[100][100={0};

D.intd[3][]={{1,2},{1,2,3},{1,2,3,4}};

49.算法具有五个特性,以下选项中不属于算法特性的是_____。A.有穷性B.简洁性C.可行性D.确定性

50.有以下程序:#include<stdio.h>#defineP3voidF(intx){return(P*x*x);tmain(){printf("%d\n",F(3+5));}程序运行后的输出结果是()。

A.192B.29C.25D.编译出错

51.若已建立如下图所示的单向链表结构:在该链表结构中,指针p、s分别指向图中所示结点,则不能将s所指的结点插入到链表末尾仍构成单向链表的语句组是______。

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

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

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

D.p=(*p).next;(*s).next=(*p).next;(*p).next=s;

52.下列选项中不属于结构化程序设计方法的是()。

A.自顶向下B.逐步求精C.模块化D.可复用

53.现有如下程序段#include"stdio.h"main(){intk[30]={12,324,45,6,768,98,21,34,453,456};intcount=0,i=0;while(k[i]){if(k[i]%2==0||k[i]%5==0)count++;i++;}printf("%d,%d\n",count,i);}则程序段的输出结果为

A.7,8B.8,8C.7,10D.8,10

54.若有以下说明和语句,则四个选项中是对c数组元素的正确引用的是()。intc[4][5],(*cp)[5];cp=c;

A.cp+1B.*(cp+3)C.*(cp+1)+3D.*(*cp+2)

55.若要对a进行++运算,则a应具有下面说明

A.inta[3][2];

B.char*a[]{"12","ab"};

C.char(*a)[3];

D.intb[10],*a=b;

56.对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为______。A.N+1B.NC.(N+1)/2D.N/2

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

A.预处理命令行都必须以#号开始

B.在程序中凡是以#号开始的语句行都是预处理命令行

C.宏替换不占用运行时间,只占编译时间

D.定义#definePI3.1415926;是正确的

58.以下程序的输出结果是______。fun(intx,inty,intz){z=x*x+y*y;}main(){inta=31;fun(5,2,a);printf("%d",a);}

A.0B.29C.31D.无定值

59.有以下程序:main(intarge,char*argv[]){intn,i=0;while(arv[1][i]!='\0'{n=fun();i++;}printf("%d\n",n*argc)}intfun(){staticints=0;s+=1;returns;}假设程序经编译、连接后生成可执行文件exam.exe,若输入以下命令行exam123<回车>则运行结果为()。

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

60.若变量a,b已正确定义,且b已正确赋值,则合法的语句是()。

A.b=double(b);B.++b;C.a=a++=5;D.a=double(b);

四、选择题(20题)61.

62.有以下程序:

#include<stdi0.h>

main()

{inta=1,b=2;

for(;a<8;a++){b+=a;a+=2;)

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

}

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

A.9,18

B.8,11

C.7,11

D.10,14

63.

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

#include<stdio.h>

main

{inti;

for(i=l;i<=10;i++)

{if(i*i>=20)&&(i*i<=100))

break;

}

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

}

A.49B.36C.25D.64

64.

65.在结构化方法中,软件功能分别属于下列软件开发中的(

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

66.

67.

68.

69.设有条件表达式:(EXP)?i++;j--,则以下表达式中(EXP)完全等价的是()。

A.(EXP==0)B.(EXP!=0)C.(EXP==1)D.(EXP!=1)

70.若有定义:doublex;,则表达式IX=0,x+10,x+十的值是()。

A.11.0B.10.0C.0.0D.1.0

71.

72.

有下列程序:

main

{intk=5:

while(--k)printf("%d",k=1);

printf("\n");

}

执行后的输出结果是()。

A.1B.2C.4D.死循环

73.

74.若有语句:Char*line[5];,以下叙述中正确的是()。

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

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

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

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

75.以下选项中不能作为C语言合法常量的是

A.’Fab’B.0.7e+9C."\b"D.’\01211’

76.34.有以下程序

#include<stdio.h>

unionpw

{inti;

charch[2];

}a;

main()

{a.ch[0]=13;a.ch[1]=0;

printf("%d\n",a.i);

}

程序的输出结果是

A.13B.14

C.0D.20

77.设变量已正确定义,则下列能正确计算f=n!的程序段是()。

A.f=0;for(i=1;i<=n;i++)f*=i;

B.f=1;for(i=1;i<n;i++)f*=i;

C.f=1;for(i=n;i>1;i++)f*=i;

D.f=1;for(i=n;i>=2;i--)f*=i;

78.

79.有以下程序

fun(int*a,intn)

{inti,j=0,p;

p=j;

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

if(a[i]<a[p])

____;

return(p);

}

在下画线处应填入的是

A.i=pB.a[p]=a[i]

C.p=jD.p=i

80.

五、程序改错题(1题)81.下列给定的程序中,函数proc的功能是:用选择法对数组中的m个元素按从小到大的顺序进行排序。

例如,排序前的数据为:1132-5214

则排序后的数据为:-52111432

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

温馨提示

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

评论

0/150

提交评论