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

下载本文档

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

文档简介

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

一、单选题(20题)1.

2.对n个关键字的序列进行快速排序,平均情况下的空间复杂度为_______

A.O(1)B.O(logn)C.O(n)D.O(nlogn)

3.

4.参加百年阿里培训的n位同学结伴去西湖旁边为游人指路,两人一组,他们打算先让体重之和恰好为102公斤的同学一组,请给出一个算法找到这样的组合,或者确定他们中不存在这样的组合,其中最优的算法时间复杂度为?(假设体重均为整数)()

A.O(log(n))B.O(n)C.O(nlog(n))D.O(n^2)

5.如果只想得到1024个元素组成的序列中第5个最小元素之前的部分排序的序列,用()方法最快

A.冒泡排序B.快速排序C.简单选择排序D.堆排序

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

A.通过指针变量存取某个变量值的方式称为“直接存取”方式

B.在程序的开头包含头文件stdio.h后,可以给指针变量赋NULL值

C.将一个指针变量中的值赋给另一个指针变量,则这两个指针变量指向同一地址

D.C语言中函数返回值的类型可以是简单的数据类型,也可以是指针类型

7.有下列程序:程序执行后的输出结果是()。

A.654321

B.65432

C.65453452

D.654534521

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

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

9.以下是if语句的基本形式:

if(表达式.语句

其中“表达式”()。

A.必须是逻辑表达式B.必须是关系表达式C.必须是逻辑表达式或关系表达式D.可以是任意合法的表达式

10.当c的值不为0时,在下列选项中不能正确将c的值赋给变量a、b的是()。

A.c=b=a;B.(a=c)||(b=c)C.(a=c)&&(b=c);D.a=c=b;

11.设有二维数组A7×8,每个数据元素占8个字节存储单元,顺序存放,A第一个元素A0,0的存储地址为1000,数组A的最后一个元素A6,7的存储地址为()。

A.1024B.1440C.1448D.1432

12.有以下程序main(){inta[3][3],*p,i;p=&a[0][0];for(i=0;i<9;i++)p[i]=i;for(i=0;i<3;i++)printf("%d",a[1][i]);}程序运行后的输出结果是

A.12B.123C.234D.345

13.

14.设有一个栈,元素依次进栈的顺序为A、B、C、D、E。下列()是不可能的出栈序列。

A.A,B,C,D,EB.B,C,D,E,AC.E,A,B,C,DD.E,D,C,B,A

15.有以下程序:voidf(inta[],inti,intj){intt;if(i<j){t=a[i];a[i]=a[j];a[j]=t;f(a,i+1,j-1);}}main(){inti,aa[5]={1,2,3,4,5};f(aa,0,4);for(i=0;i<5;i++)printf("%d,",aa[i]);printf("\n");}执行后输出结果是()。

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

16.有以下程序:#include<stdio.h>main(){chars[]={“012xy”;inti,n=0;for(i=0;s[i]|=0;i++)if(s[i]>=‘a’&&s[i]<=‘z’)n++;printf(“%d\n”,n);}程序的运行结果是()。

A.0B.2C.3D.5

17.线性表是具有n个()的有限序列。

A.表元素B.字符C.数据元素D.数据项

18.设有定义“doublea[10],*s=a;”,以下能够代表数组元素a[3]的是()。

A.(*s)[3]B.*(s+3)C.*s[3]D.*s+3

19.以下选项中非法的字符常量是()。

A.\101B.\65C.\xffD.\019

20.若有以下的定义:‘intt[3][2];”,能正确表示t数组元素地址的表达式是()。

A.&t[3][2]B.t[3]C.t[l]D.t[2][2]

二、2.填空题(20题)21.在面向对象程序设计中,从外面看只能看到对象有外部特征,而不知道也无须知道数据的具体结构以及实现操作的算法,这称为对象的______。

22.栈中允许进行插入和删除的一端叫做______。

23.阅读下面语句,则执行后的输出结果为【】。

#include"stdio.h"

main()

{chara,b;

for(a='0',b='9';a<b;a++,b--)

printf("%c%c",a,b);

printf("\n");}

24.软件工程研究的内容主要包括:【】技术和软件工程管理。

25.在计算机软件系统的体系结构中,数据库管理系统位于用户和【】之间。

26.若有定义:intk;,以下程序段的输出结果是______。for(k=2;k<6;k++,k++)printf("##%d",k);

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

main()

{

intp[7]=(11,13,14,15,16,17,18};

inti=0,j=0;

while(i<7&&p[i]%2==1)j+=p[i++];

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

}

28.设有以下结构体类型:

structst

{charname[8];

intnum;

floats[4];

}student[50];

并且结构体数组student中的元素都已有值。若要将这些元素写到硬盘文件fp中,请将以下fwrite语句补充完整:

fwrite(student,【】,1,fp);

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

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

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

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

intm=17;

intfun(intx,inty)

{intm=3;

return(x*Y-m);

}

main()

{inta=5,b=7;

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

}

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

#inciude<stdio.h>

main()

{chars[]="ABCabc";

s[5]='\0';

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

}

32.Jackson方法是一种面向【】的结构化方法。

33.某二叉树中度为2的结点有n个,则该二叉树中有【】个叶子结点。

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

main()

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

char【】;

intj=0;

p=a;

for(;j<4;j++)

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

}

35.若x和y都是double型变量,且x的初值为3.0,y的初值为2.0,则表达式pow(y,fabs(x))的值为【】。

36.下列的for语句的循环次数为______。

for(x=1,y=0;(y!=19)&&(x<7);x++);

37.十进制数111用八位二进制数表示为【】。

38.当线性表的元素总数基本稳定,且很少进行插入和删除操作,并要求以很快的速度存取线性表中的数据元素时,应采用【】存储结构。

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

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

三、1.选择题(20题)41.下列叙述中错误的是()。

A.一个C语言程序只能实现一种算法

B.c程序可以由多个程序文件组成

C.C程序可以由一个或多个函数组成

D.一个c函数可以单独作为一个C程序文件存在

42.设已定义i和k为int类型变量,则以下for循环语句______。for(i=0;k=-1,k=1,i++,k++)printf("****\n");

A.判断循环结束的条件不合法B.是无限循环C.循环—次也不执行D.循环只执行一次

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

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

44.设有定义:intk=1,m=2;floatf=7;则以下选项中错误的表达式是()。

A.k=k>=kB.-k++C.k%int(f)D.k>=f>=m

45.若有说明:int*p1,*p2,n=8,m;下列均是正确赋值语句的选项是()。

A.p1:&n;p2=&pl;

B.p1=n;

C.p1=&n;*p2=p1;

D.p1=&n;p2=p1;

46.下列程序的输出结果是()。#include<stdio.h>main(){inta=3,b=2,c=1;if(a<B)if(b<0)c=0;elsec++;printf("%d\n",C);}

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

47.有以下程序main(){chara='a',b;printf("%c,",++A);printf("%c\n"。b=a++);}程序运行后的输出结果是

A.b,bB.b,cC.a,bD.a,c

48.数据库管理系统提供给用户的接口是()

A.过程化语言B.数据库语言C.宿主语言D.面向对象语言

49.在软件测试设计中,软件测试的主要目的是()。

A.实验性运行软件B.证明软件正确C.找出软件中全部错误D.为发现软件错误而执行程序

50.下列程序的输出结果是()。#include<stdio.h>main(){inta[2][3]={{1,2,3},{4,5,6}},(*p)[3],i;p=a;for(i=0;i<3;i++){if(i<2)p[1][i]=p[1][i]-1;elsep[1][i]=1;}printf("%d\n",a[0][1]+a[1][1]+a[1][2]);}

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

51.请选出以下语句的输出结果()printf("%d\n,strlen("\t\"065\xff\n"));

A.5B.14C.8D.输出项不合法,无正常输出

52.下列选项中,不能用作标识符的是A._1234_B._1_2C.int_2_D.2_int_

53.现有如下程序段#include"stdio.h"main(){inta[5][6]={23,3,65,21,6,78,28;5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1};inti=0,j=5;printf("%d\n",*(&a[0][0]+2*i+j-2));}则程序的输出结果为

A.21B.78C.23D.28

54.下面的for语句的循环次数为()。

A.是无限循环B.循环次数不定C.最多执行6次D.最多执行5次

55.下列程序语句中,不正确的是______。

A.maia(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);……}intadd(floatx,floaty){……}

B.main(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);……}floatadd(floatx,floaty){……}

C.floatadd()maia(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);……}floatadd(floatx,floaty){……}

D.floatadd(floatx,floaty){……}main(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);……}

56.请选出下面正确的程序段()。

A.int*s;scanf("%d",s);┆

B.int*s,k;*s=100;┆

C.int*s,k;char*p,c;s=&k;p=&c;*p='a';┆

D.int*s,k;char*p,c;s=&k;p=&c;s=p;*s=1;┆

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

A.局部变量说明为static存储类,其生存期将得到延长

B.全局变量说明为static存储类,其作用域将被扩大

C.任何存储类的变量在未赋初值时,其值都是不确定的

D.形参可以使用的存储类说明符与局部变量完全相同

58.设x,y均是int类型变量,则以下不正确的函数调用为______。

A.getchar();

B.putchar('\108');

C.scanf("%d%*2d%d",&x,&y);

D.putchar('\'');

59.在C程序中,判逻辑值时,用“非0”表示逻辑值“真”,又用“0”表示逻辑值“假”。在求逻辑值时,逻辑真和逻辑假可分别表示为

A.10B.01C.非0非0D.11

60.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用<>(尖括号)括起时,寻找被包含文件的方式是()。

A.仅仅搜索当前目录

B.仅仅搜索源程序所在目录

C.在标准目录下查找指定的文件

D.先在源程序所在目录搜索,如查找不到,再按系统指定的标准目录查找

四、选择题(20题)61.

62.

63.以下选项中正确的定义语句是()。

A.double,a,b;B.doublea=b=7;C.doublea;b;D.doublea=7,b=7;

64.一些重要的程序设计语言(inC语言和Pascal语言)允许过程的递归调用,而实现递归调用中的存储分配通常用()。

A.栈B.堆C.数组D.链表

65.

66.下列叙述中正确的是()。A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的

B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构

C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构

D.线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性

67.

68.

69.

70.

71.有以下程序

main()

{

intn[3],i,j;

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

n[i]=0;

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

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

n[j]=n[i]+1;

printf("%d\n",n[1]);

}

程序运行后的输出结果是A.A.2

B.1

C.0

D.3

72.有以下程序:

#includc<stdio.h>

voidfun(int*p)

{printf("%d\n",p[5]);}

main()

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

fun(&a[3]);

}

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

A.5B.6C.8D.9

73.

74.有以下程序:

#include<stdio.h>

main()

{FILE*fp;charstr[10];

fp=fopen("myfile,dat","");

{puts("abe",ip);fclose(fp);

fp=fopen("myfile.dat","a*");

fprintf(fp,"%d",28);

rewind(fp);

fscanf(fp,"%S",str);puts(str);

fclose(fp);

}

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

A.abcB.28cC.abc28D.内类型不一致而出错

75.

76.下列关于C语言文件的叙述中正确的是()。A.文件睦数据序列组成,可以构成二进制文件或文本文件

B.文件由结构序列组成,可以构成二进制文件或文本文件

C.文件由一系列数据依次排列组成,只能构成二进制文件

D.文件由字符序列组成,其类型只能是文本文件

77.

78.软件工程出现的原因是

A.程序设计方法学的影响B.软件产业化的需要C.软件危机的出现D.计算机的发展

79.设有定义:,以下不能计算出一"/Pchar型数据所占字节数的表达式是()。

80.

五、程序改错题(1题)81.下列给定程序中,函数fun()的功能是:求两个非零正整数的最大公约数,并作为函数值返回。例如,若num1和num2分别为49和21,则输出的最大公约数为7;若num1和num2分别为27和81,则输出的最大公约数为27。请改正程序中的错误,使它能得出正确结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:

六、程序设计题(1题)82.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun(),其功能是根据以下公式计算S,并将计算结果作为函数值返回,通过形参传入。例如,若n的值为11时,函数的值为1.833333。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<string.h>floatfun(intn){}voidmain(){ intn; floats; system(“CLS”); printf(“\nPleaseenterN:”); scanf(“%d”,&n); s=fun(n); printf(“Theresultis:%f\n”,s);}

参考答案

1.D

2.D

3.D

4.B

5.D解析:从平均时间性能而言,快速排序最佳,其所需时间最少,但快速排序在最坏情况下的时间性能不如堆排序和归并排序。当序列中的记录基本有序或元素个数较少时,冒泡排序和简单选择排序为最佳排序方法,故本题答案应该为选项D。

6.A通过指针变量存取某个变量值的方式称为“间接存取”方式,选项A错误;头文件stdio.h中定义了NULL,在程序的开头包含stdio.h后,可以给指针变量赋NULL值,表示一个空指针,选项B正确;将一个指针变量中的值赋给另一个指针变量,这两个指针变量指向同一地址,选项C正确;C语言中函数返回值的类型可以是简单的数据类型,也可以是指针类型,选项D正确。故本题答案为A选项。

7.C程序首先定义整型变量a和b,a的初值为123456。接着通过while循环,判断a的值是否为0,若不为0,则执行循环体。每次循环将a当前值的个位数字(a%10)赋给b,a自身除以10。再通过switch语句判断b的值执行对应分支语句。所以对应a的每个个位数,b的取值为6,5,4,3,2,1。当b取值为6时,执行default,输出6,接着继续执行case1,通过break退出switch。执行下一次循环,当b取值为5时,执行case5输出5。执行下一次循环,当b取值为4时,执行case4输出4,继续执行case5输出5。接着执行下一次循环,当b取值为3时,执行case3输出3,执行case4输出4,执行case5输出5;当b取值为2时,执行case2输出2,通过break退出switch;当b取值为1时,执行break,此时a的取值为0,循环终止。综上,程序输出结果为:65453452。本题答案为C选项。

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

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

9.D解析:本题主要考查关于if语句的说明,if后面圆括号中的表达式,可是任意合法的C语言表达式(如:逻辑表达式、关系表达式、算术表达式、赋值表达式等),也可以是任意类型的数据(如:整型、实型、字符型、指针型等。)

10.C选项A是先将a的值赋给变量b,再将变量b的值赋给变量c,不合题意;B选项中由于c的值不为0,在将c的值赋给变量a后,表达式a=c的值为1,不再对表达式b=c计算;对于c选项,表达式a=c的值为1,再求表达式b=c的值为1,然后进行逻辑与运算;D选项将b的值赋给c后再赋给e,故选择C选项。

11.B

12.D解析:本题考查的是二维数组元素在内存中的排列形式。虽然二维数组成多维数组从结构上来看不是线性的,但是在C语言中,这些数组元素在内存中的排列是连续线性存放的。它们的排列规则是:第一维下标变化最慢,最右边的下标变化最快.例如本题中定义的二维数组a[3][3]中9个元素在内存中的排列顺序是:a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2],a[2][0],a[2][1],a[2][2]。在主函数中,首先定义了二维数组a[3][3],然后定义了一个指针p指向数组a的第1个元素a[0][0]。在第一个for循环中,依数组a在内存中的排列顺序为其元素赋从0~8九个值,然后用第二个for循环依次输出a[1][0],a[1][1],a[1][2]三个元素的值。所以,4个选项中选项D符合题意。

13.A

14.C

15.A解析:在C语言中所谓函数的递归是指在调用一个函数的过程中,又出现了直接或间接调用该函数本身,直接调用该函数本身的称为函数递归,而间接调用该函数称为函数的间接递归调用。由程序可以看出函数f(a,i,j)为一递归函数,其功能是当i<j时,将数组中的元素a[i]和a[j]交换,然后再调用函数f(a,i+1,j-1),将数组中a[i+1]和a[j--]交换,这样一直递归到数组下标i=j,可见该递归函数的作用是使数组中首尾元素依次互换。主函数中定义了一个长度为5的数组aa并初始化,然后调用f(a,0,4),将数组a中的元素依次互换,故最后for循环输出的数组aa中各元素的值为5、4、3、2、1,所以,4个选项中选项A符合题意。

16.B程序首先给字符数组s赋值为“012xy”。for循环语句的功能是遍历字符串,通过if条件语句对字符串中的小写字母进行计数,字符串中小写字母个数为2,即n=2。故本题答案为B选项。

17.A

18.B题中,首先定义了double型的数组a,并将数组首地址赋给指针s。“(*s)”表示“a[1]”,“s[3]”不是指针变量,不能使用间址运算符“*”,故选项A、C不能表示“a[3]”;选项D的“*s+3”等于“a[0]+3”。故本题答案为B选项。

19.D在选项中,\\019,以0开头的数都为八进制数,而八进制的表示数字是0~7,所以答案选择D。

20.C数组的下标是从0开始的,A中越界,行下标和列下标都不能越界;B中,虽然是个地址,但是也同样越界了;选项C中表示的是第一个的首地址;选项D表示的为其元素的值,并不是地址。

21.封装性封装性解析:对象具有下列5个基本特点:①标识惟一性;②分类性:③多态性;④封装性;⑤模块独立性好。其中,封装性是指从外面看只能看到对象的外部特征,对象的内部特征即处理能力的实行和内部状态,对外是不可见的,对象的内部状态只能由其自身改变。

22.栈顶栈顶解析:栈是限定在表的一端进行插入和删除操作的线性表。在表中,允许插入和删除的一端叫做“栈顶”,不允许插入和删除的一端叫做“栈底”。

23.918273645918273645解析:for是C语言的关键字,其后的一对圆括号中通常含有3个表达式,各个表达式之间用分号隔开,这3个表达式可以是任意形式的表达式,通常主要用于for循环控制。

24.软件开发

25.操作系统或OS操作系统或OS解析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务。位于用户和操作系统之间。

26.本题主要考查for循环语句。for循环的增量表达式为逗号表达式,相当于k+=2;,即每次循环后k增加2。第一次循环时,k=2,因此输出##2;第二次循环时k=4,输出##4。此后k=6,不满足循环条件。\r\n\r\n

27.2424解析:本题程序定义了一维数组p,有七个数组元素,整型变量i,j初值分别为0,当while的条件表达式(i<7&&p[i]%2=1)的值为真时,执行语句j+=p[i++];,如:当i=0时,i<7为真,p[i]%2=11%2=1,表达式(p[i]%2=1)的值为真,所以接个表达式(i<7&&p[i]%2=1的值为真,执行j=j+p[i++]=0+11=11,i=1;,依此类推可以得出答案24。

28.sizeof(structst)*50sizeof(structst)*50解析:fwrite函数的一般调用形式为:fwrite(buffer,size,count,fp);其中:buffer是一个指针变量,是要输出数据的起始地址;size是要写的字节数;count是要写多少个size字节的数据项;fp是文件指针。

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

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

31.ABCabABCab解析:本题中字符数组的初值是“ABCabc”,s[5]='c',然后通过s[5]='\\0'重新给s[5]赋值,在C语言中'\\0'是字符串结束标志,执行s[5]='\\0',其实是将s[5]的值去掉只保留前面的字符。

32.数据结构数据结构解析:Jackson方法是—‘种面向数据结构的结构化方法。

33.n+1n+1解析:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为0的结点多一个。

34.**p(p+i)

35.88解析:fabs函数功能是求x的绝对值,计算结果为double型。pow功能是计算x的y次方的值,计算结果同样为double型。所以本题表达式相当于2.0的3.0次方,结果为8.000000。

36.66解析:分析程序可知,每循环一次,x的值加1,然后检测循环控制条件(y!=19)&&(x<7),因y的值不变,故满足x<7时循环6次。

37.11011111101111解析:本题通过除2取余法即可求出十进制数111所对应的二进制数1101111。

38.顺序顺序

39.C

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

41.A答案A

解析:一个C程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个C语言程序可以实现多种算法。

42.B解析:本题定义了一个for循环,循环变量是i,但由于本题并没有设置循环条件,所以循环的条件永远默认为真,即无限次执行循环。

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

44.C解析:A、D选项是关系运算表达式,在C语言中,只要关系运算符两边是合法的表达式就可以了。C选项中,%只能对整型进行运算,其中对f进行了强制类型转换,但是转换的表达式错了,应为:(int)(f)。

45.D解析:本题考查指针变量的赋值。选项A)中,p1、p2本身都是地址变量,不能再将p1取地址赋给p2;选项B)中,不能将整型数据直接赋值给指针型数据;选项C)中,*p2代表了一个整型变量,而*p2=p1这个语句试图把一个地址值放入一个整型变量中是错误的;选项D)中指针间的赋值是正确的。

46.C解析:本题考查if语句。第一个if语句,先判断条件,发现a<b不成立,不再执行下列的语句,直接执行最后的printf输出语句,然后结束程序,整个过程c的值没有发生变化。

47.A解析:程序中的第一个输出语句输出表达式++a的值,该++a是在使用a之前,先使a的值加1,即为a加1为字符b,此时a的值为b,所以第一个输出语句输出的值为b,第二个输出语句中输出的b的值,这时b的值为表达式a++的值,a++是在使用a之后(此时a的值为b,所以赋给b的值为B),使a的值加一因此第二个输出的值也为b.所以,4个选项中选项A符合题意。

48.C

49.D解析:使用人工或自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。软件测试是为了发现错误而执行程序的过程。测试要以查找错误为中心,而不是为了演示软件的正确功能。

50.B解析:第1次执行for循环,p[1][0]=p[1][0]-1=3:第2次执行for循环,p[1][1]=p[1][1]-1=4:第3次执行for循环,p[1][2]=1,最后输出的是a[0][1]+a[1][1]+a[1][2]=2+4+1=7。

51.A

52.D解析:本题考核的知识点是用户的标识符。在C语言中,合法的标识符由字母、数字和下划线组成,并且第一个字符必须为字母或者下划线,如:acd,d_ad、_adf124,_124等都是合法的标识符号.而2asdf、_sd/=都不是合法的标识符.在C语言中大写字母和小写字母被认为是两个不同的字符,如:ACD和acd是两个不同的标识符号。选项D中用下划线作为第一个字符,这是不合法的,故选项D不正确,所以,4个选项中选项D符合题意。

53.A解析:通过地址来引用二维数组,若有以下定义:inta[3][4],i,j;且当0≤i≤3,0≤j<4则可以有以下几种方式来引用数组中的第i行,第j列的元素:\ue008a[i][j]\ue009,\ue008*(a[i]+j),\ue009*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。表达式&a[0][0]+2*i+j-2相当于是地址&a[0][0]加上多少偏移量。

54.D

55.B

56.C解析:本题的选项A)和B)犯了一个同样的错误,即指针变量s定义后并没有指向具体的变量。也就是说,s中没有确定的地址值,它的值是不可预见的,所指向的单元也是不可预见的,因此不能进行赋值操作。另外,在选项D)中,s是int型指针变量,p是char型指针变量,指向的内存单元所占用的字节数是不同的,因而不能将字符指针变量p的值赋给整型指针变量s。

57.A解析:局部变量在执行到它所在的程序块时产生,执行完时被摧毁,而静态局部变量的生存期将一直延长到程序运行结束,故选项A正确;全局变量的只有一种静态存储类别,故全局变量说明为static存储类,和没有说明为static存储类其生存期都是一直延长到程序运行结束,故选项B不正确:未赋初值的局部变量的初值是随机的,故选项C不正确;形参只能是一般局部变量,不能使用任何存储类说明符,故选项D不正确。所以,4个选项中选项A符合题意。

58.B解析:八进制中的基本数为0~7,不可能出现8。

59.A解析:在C程序中,判断逻辑值时,用非0表示真,用0表示假。逻辑表达式计算时,逻辑表达式值为真是用1表示的,若逻辑表达式的值为假,则用0表示。

60.C解析:本题考查文件包含的知识点:格式1:#include(文件名),预处理程序在标准目录下查找指定的文件;格式2:#include“文件名”,预处理程序首先在引用被包含文件的源文件所在的目录中寻找指定的文件,如查找不到,再按系统指定的标准目录查找。

61.D

62.B

63.DA选项中变量类型符double后面不能有逗号。B选项中变量b不能先使用再定义,应该写成选项D中的格式。C选项中变量a后面应该是逗号而不是分号。

64.A在允许过程的递归调用的程序设计语言中,由于C语言中栈的特性为先进后出,因此用栈来实现递归调用中的存储分配。

65.A

66.B线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。

67.D

68.C

69.A

70.D

71.D初始时定义一个大小为3个一维整型数组,第一个for语句是对数组赋初值,每个值都为0。后面是一个for语句的嵌套调用,外层的循环变量i的取值为[0,2],内层循环变量的取值范围为[0,2]。最初外层的循环变量i=0,内层的循环变量j取值从0到2,计算n[j]=n[0]+1,得到n[0]=1,n[1]=1,n[2]=1。外层for语句的循环变量为1时,内层的循环变量j取值从0到2,计算n[j]=n[1]+1,得到n[0]=2,n[1]=2,n[2]=2。外层for语句的循环变量为2时,内层的循环变量j取值从0到2,计算n[j]=n[2]+1,得到n[0]=3,n[1]=3,n[2]=3。最后的输出结果为3。

72.B\n由题可知,fun(&a[3])是将&a[3]作为参数,而fun(int*p)后执行的语句为p[5],由数组a可知输出的为6。

\n

73.C

74.C\n本题考查文件的操作,首先打开文件,进行写操作,把“abc”写入“myfile”文件,再打开“myfile.data'文件,输入28,在键盘上接收字符,输出并关闭文件。本题结果为abc28。

\n

75.A

76.A文件有二进制文件和文本文件,里面的数据与类型无关,所以选择A)。

77.C

78.C软件工程这个概念正式出现在1968年NATO软件工程会议上。

自20世纪40年代计算机问世以来,如何编制符合要求的程序一直是人们追求的目标。并且,随着计算机应用领域的扩大,人们对软件的需求量剧增,对软件的正确性提出了更高的要求,并迫切地需要缩短软件生产周期。但是,当时的软件编制还只是一种手工活动,过多地依赖于程序员的个人能力和技巧,这就导致了软件的生产周期长、可靠性及可维护性也很差。软件开发远远落后于硬件发展,远远满足不了社会的需求,从而爆发了一场“软件危机”。

为了克服这种危机,结构化程序设计及软件工程应运而生,以期提高软件生产率,改善软件质量。

软件工程作为一门学科的出现给软件界带来了一场变革,众多的研究者和实践者投身于软件工程领域,并取得了丰硕成果。虽然离预期目标仍有很大距离,并未能从根本上克服软件危机,但是软件工程的思想毕竟给人们带来希望的曙光。

79.A根据题目中的定义可以知道sizeof(p),计算的是数组p中所有元素所占用的字节数,而不是char型数据所占字节数。

80.D

81.

【解析】本题是考查常用的求最大公约数的算法,其过程是设两数为a、b,若a大于b.则用a除以b,否则用b除以a,用除得的余数再去除以除数,再得到一个余数,一直除下去,直到余数为0,即可求出最大公约数。要实现变量a、b互换,应该使用t=a;a=b;b=t;,此处t为中问变量;返回值为最大公约数,因此应返回除数b,而不是a。

82.floatfun(intn){ inti,s1=0; floats=0.0; for(i=1;i<=n;i++) { s1=s1+i; /*求每一项的分母*/ s=s+1.0/s1; /*求多项式的值*/ } returns;}首先需要根据题意分析表达式的规律,得出通项,然后再完成程序语句。本题中公式的规律类似于求1+2+…+n的倒数之和。可以通过for循环语句来实现第1项到第n项的变化。先根据题目要求定义变量,注意该变量的数据类型。然后对其进行初始化操作,因为该变量相当于累加器,所以初值应为0(或0.0,根据变量数据类型来确定),再通过for循环语句来完成累加过程。本题中s1用来表示每一项的分母,每一项的分母都是由前一项分母加项数得到的。注意,由于s1定义成一个整型,因此在s=s+1.0/s1语句中不能把1.0写成1。2021年河北省唐山市全国计算机等级考试C语言程序设计学校:________班级:________姓名:________考号:________

一、单选题(20题)1.

2.对n个关键字的序列进行快速排序,平均情况下的空间复杂度为_______

A.O(1)B.O(logn)C.O(n)D.O(nlogn)

3.

4.参加百年阿里培训的n位同学结伴去西湖旁边为游人指路,两人一组,他们打算先让体重之和恰好为102公斤的同学一组,请给出一个算法找到这样的组合,或者确定他们中不存在这样的组合,其中最优的算法时间复杂度为?(假设体重均为整数)()

A.O(log(n))B.O(n)C.O(nlog(n))D.O(n^2)

5.如果只想得到1024个元素组成的序列中第5个最小元素之前的部分排序的序列,用()方法最快

A.冒泡排序B.快速排序C.简单选择排序D.堆排序

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

A.通过指针变量存取某个变量值的方式称为“直接存取”方式

B.在程序的开头包含头文件stdio.h后,可以给指针变量赋NULL值

C.将一个指针变量中的值赋给另一个指针变量,则这两个指针变量指向同一地址

D.C语言中函数返回值的类型可以是简单的数据类型,也可以是指针类型

7.有下列程序:程序执行后的输出结果是()。

A.654321

B.65432

C.65453452

D.654534521

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

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

9.以下是if语句的基本形式:

if(表达式.语句

其中“表达式”()。

A.必须是逻辑表达式B.必须是关系表达式C.必须是逻辑表达式或关系表达式D.可以是任意合法的表达式

10.当c的值不为0时,在下列选项中不能正确将c的值赋给变量a、b的是()。

A.c=b=a;B.(a=c)||(b=c)C.(a=c)&&(b=c);D.a=c=b;

11.设有二维数组A7×8,每个数据元素占8个字节存储单元,顺序存放,A第一个元素A0,0的存储地址为1000,数组A的最后一个元素A6,7的存储地址为()。

A.1024B.1440C.1448D.1432

12.有以下程序main(){inta[3][3],*p,i;p=&a[0][0];for(i=0;i<9;i++)p[i]=i;for(i=0;i<3;i++)printf("%d",a[1][i]);}程序运行后的输出结果是

A.12B.123C.234D.345

13.

14.设有一个栈,元素依次进栈的顺序为A、B、C、D、E。下列()是不可能的出栈序列。

A.A,B,C,D,EB.B,C,D,E,AC.E,A,B,C,DD.E,D,C,B,A

15.有以下程序:voidf(inta[],inti,intj){intt;if(i<j){t=a[i];a[i]=a[j];a[j]=t;f(a,i+1,j-1);}}main(){inti,aa[5]={1,2,3,4,5};f(aa,0,4);for(i=0;i<5;i++)printf("%d,",aa[i]);printf("\n");}执行后输出结果是()。

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

16.有以下程序:#include<stdio.h>main(){chars[]={“012xy”;inti,n=0;for(i=0;s[i]|=0;i++)if(s[i]>=‘a’&&s[i]<=‘z’)n++;printf(“%d\n”,n);}程序的运行结果是()。

A.0B.2C.3D.5

17.线性表是具有n个()的有限序列。

A.表元素B.字符C.数据元素D.数据项

18.设有定义“doublea[10],*s=a;”,以下能够代表数组元素a[3]的是()。

A.(*s)[3]B.*(s+3)C.*s[3]D.*s+3

19.以下选项中非法的字符常量是()。

A.\101B.\65C.\xffD.\019

20.若有以下的定义:‘intt[3][2];”,能正确表示t数组元素地址的表达式是()。

A.&t[3][2]B.t[3]C.t[l]D.t[2][2]

二、2.填空题(20题)21.在面向对象程序设计中,从外面看只能看到对象有外部特征,而不知道也无须知道数据的具体结构以及实现操作的算法,这称为对象的______。

22.栈中允许进行插入和删除的一端叫做______。

23.阅读下面语句,则执行后的输出结果为【】。

#include"stdio.h"

main()

{chara,b;

for(a='0',b='9';a<b;a++,b--)

printf("%c%c",a,b);

printf("\n");}

24.软件工程研究的内容主要包括:【】技术和软件工程管理。

25.在计算机软件系统的体系结构中,数据库管理系统位于用户和【】之间。

26.若有定义:intk;,以下程序段的输出结果是______。for(k=2;k<6;k++,k++)printf("##%d",k);

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

main()

{

intp[7]=(11,13,14,15,16,17,18};

inti=0,j=0;

while(i<7&&p[i]%2==1)j+=p[i++];

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

}

28.设有以下结构体类型:

structst

{charname[8];

intnum;

floats[4];

}student[50];

并且结构体数组student中的元素都已有值。若要将这些元素写到硬盘文件fp中,请将以下fwrite语句补充完整:

fwrite(student,【】,1,fp);

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

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

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

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

intm=17;

intfun(intx,inty)

{intm=3;

return(x*Y-m);

}

main()

{inta=5,b=7;

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

}

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

#inciude<stdio.h>

main()

{chars[]="ABCabc";

s[5]='\0';

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

}

32.Jackson方法是一种面向【】的结构化方法。

33.某二叉树中度为2的结点有n个,则该二叉树中有【】个叶子结点。

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

main()

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

char【】;

intj=0;

p=a;

for(;j<4;j++)

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

}

35.若x和y都是double型变量,且x的初值为3.0,y的初值为2.0,则表达式pow(y,fabs(x))的值为【】。

36.下列的for语句的循环次数为______。

for(x=1,y=0;(y!=19)&&(x<7);x++);

37.十进制数111用八位二进制数表示为【】。

38.当线性表的元素总数基本稳定,且很少进行插入和删除操作,并要求以很快的速度存取线性表中的数据元素时,应采用【】存储结构。

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

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

三、1.选择题(20题)41.下列叙述中错误的是()。

A.一个C语言程序只能实现一种算法

B.c程序可以由多个程序文件组成

C.C程序可以由一个或多个函数组成

D.一个c函数可以单独作为一个C程序文件存在

42.设已定义i和k为int类型变量,则以下for循环语句______。for(i=0;k=-1,k=1,i++,k++)printf("****\n");

A.判断循环结束的条件不合法B.是无限循环C.循环—次也不执行D.循环只执行一次

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

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

44.设有定义:intk=1,m=2;floatf=7;则以下选项中错误的表达式是()。

A.k=k>=kB.-k++C.k%int(f)D.k>=f>=m

45.若有说明:int*p1,*p2,n=8,m;下列均是正确赋值语句的选项是()。

A.p1:&n;p2=&pl;

B.p1=n;

C.p1=&n;*p2=p1;

D.p1=&n;p2=p1;

46.下列程序的输出结果是()。#include<stdio.h>main(){inta=3,b=2,c=1;if(a<B)if(b<0)c=0;elsec++;printf("%d\n",C);}

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

47.有以下程序main(){chara='a',b;printf("%c,",++A);printf("%c\n"。b=a++);}程序运行后的输出结果是

A.b,bB.b,cC.a,bD.a,c

48.数据库管理系统提供给用户的接口是()

A.过程化语言B.数据库语言C.宿主语言D.面向对象语言

49.在软件测试设计中,软件测试的主要目的是()。

A.实验性运行软件B.证明软件正确C.找出软件中全部错误D.为发现软件错误而执行程序

50.下列程序的输出结果是()。#include<stdio.h>main(){inta[2][3]={{1,2,3},{4,5,6}},(*p)[3],i;p=a;for(i=0;i<3;i++){if(i<2)p[1][i]=p[1][i]-1;elsep[1][i]=1;}printf("%d\n",a[0][1]+a[1][1]+a[1][2]);}

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

51.请选出以下语句的输出结果()printf("%d\n,strlen("\t\"065\xff\n"));

A.5B.14C.8D.输出项不合法,无正常输出

52.下列选项中,不能用作标识符的是A._1234_B._1_2C.int_2_D.2_int_

53.现有如下程序段#include"stdio.h"main(){inta[5][6]={23,3,65,21,6,78,28;5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1};inti=0,j=5;printf("%d\n",*(&a[0][0]+2*i+j-2));}则程序的输出结果为

A.21B.78C.23D.28

54.下面的for语句的循环次数为()。

A.是无限循环B.循环次数不定C.最多执行6次D.最多执行5次

55.下列程序语句中,不正确的是______。

A.maia(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);……}intadd(floatx,floaty){……}

B.main(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);……}floatadd(floatx,floaty){……}

C.floatadd()maia(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);……}floatadd(floatx,floaty){……}

D.floatadd(floatx,floaty){……}main(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);……}

56.请选出下面正确的程序段()。

A.int*s;scanf("%d",s);┆

B.int*s,k;*s=100;┆

C.int*s,k;char*p,c;s=&k;p=&c;*p='a';┆

D.int*s,k;char*p,c;s=&k;p=&c;s=p;*s=1;┆

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

A.局部变量说明为static存储类,其生存期将得到延长

B.全局变量说明为static存储类,其作用域将被扩大

C.任何存储类的变量在未赋初值时,其值都是不确定的

D.形参可以使用的存储类说明符与局部变量完全相同

58.设x,y均是int类型变量,则以下不正确的函数调用为______。

A.getchar();

B.putchar('\108');

C.scanf("%d%*2d%d",&x,&y);

D.putchar('\'');

59.在C程序中,判逻辑值时,用“非0”表示逻辑值“真”,又用“0”表示逻辑值“假”。在求逻辑值时,逻辑真和逻辑假可分别表示为

A.10B.01C.非0非0D.11

60.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用<>(尖括号)括起时,寻找被包含文件的方式是()。

A.仅仅搜索当前目录

B.仅仅搜索源程序所在目录

C.在标准目录下查找指定的文件

D.先在源程序所在目录搜索,如查找不到,再按系统指定的标准目录查找

四、选择题(20题)61.

62.

63.以下选项中正确的定义语句是()。

A.double,a,b;B.doublea=b=7;C.doublea;b;D.doublea=7,b=7;

64.一些重要的程序设计语言(inC语言和Pascal语言)允许过程的递归调用,而实现递归调用中的存储分配通常用()。

A.栈B.堆C.数组D.链表

65.

66.下列叙述中正确的是()。A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的

B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构

C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构

D.线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性

67.

68.

69.

70.

71.有以下程序

main()

{

intn[3],i,j;

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

n[i]=0;

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

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

n[j]=n[i]+1;

printf("%d\n",n[1]);

}

程序运行后的输出结果是A.A.2

B.1

C.0

D.3

72.有以下程序:

#includc<stdio.h>

voidfun(int*p)

{printf("%d\n",p[5]);}

main()

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

fun(&a[3]);

}

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

A.5B.6C.8D.9

73.

74.有以下程序:

#include<stdio.h>

main()

{FILE*fp;charstr[10];

fp=fopen("myfile,dat","");

{puts("abe",ip);fclose(fp);

fp=fopen("myfile.dat","a*");

fprintf(fp,"%d",28);

rewind(fp);

fscanf(fp,"%S",str);puts(str);

fclose(fp);

}

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

A.abcB.28cC.abc28D.内类型不一致而出错

75.

76.下列关于C语言文件的叙述中正确的是()。A.文件睦数据序列组成,可以构成二进制文件或文本文件

B.文件由结构序列组成,可以构成二进制文件或文本文件

C.文件由一系列数据依次排列组成,只能构成二进制文件

D.文件由字符序列组成,其类型只能是文本文件

77.

78.软件工程出现的原因是

A.程序设计方法学的影响B.软件产业化的需要C.软件危机的出现D.计算机的发展

79.设有定义:,以下不能计算出一"/Pchar型数据所占字节数的表达式是()。

80.

五、程序改错题(1题)81.下列给定程序中,函数fun()的功能是:求两个非零正整数的最大公约数,并作为函数值返回。例如,若num1和num2分别为49和21,则输出的最大公约数为7;若num1和num2分别为27和81,则输出的最大公约数为27。请改正程序中的错误,使它能得出正确结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:

六、程序设计题(1题)82.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun(),其功能是根据以下公式计算S,并将计算结果作为函数值返回,通过形参传入。例如,若n的值为11时,函数的值为1.833333。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<string.h>floatfun(intn){}voidmain(){ intn; floats; system(“CLS”); printf(“\nPleaseenterN:”); scanf(“%d”,&n); s=fun(n); printf(“Theresultis:%f\n”,s);}

参考答案

1.D

2.D

3.D

4.B

5.D解析:从平均时间性能而言,快速排序最佳,其所需时间最少,但快速排序在最坏情况下的时间性能不如堆排序和归并排序。当序列中的记录基本有序或元素个数较少时,冒泡排序和简单选择排序为最佳排序方法,故本题答案应该为选项D。

6.A通过指针变量存取某个变量值的方式称为“间接存取”方式,选项A错误;头文件stdio.h中定义了NULL,在程序的开头包含stdio.h后,可以给指针变量赋NULL值,表示一个空指针,选项B正确;将一个指针变量中的值赋给另一个指针变量,这两个指针变量指向同一地址,选项C正确;C语言中函数返回值的类型可以是简单的数据类型,也可以是指针类型,选项D正确。故本题答案为A选项。

7.C程序首先定义整型变量a和b,a的初值为123456。接着通过while循环,判断a的值是否为0,若不为0,则执行循环体。每次循环将a当前值的个位数字(a%10)赋给b,a自身除以10。再通过switch语句判断b的值执行对应分支语句。所以对应a的每个个位数,b的取值为6,5,4,3,2,1。当b取值为6时,执行default,输出6,接着继续执行case1,通过break退出switch。执行下一次循环,当b取值为5时,执行case5输出5。执行下一次循环,当b取值为4时,执行case4输出4,继续执行case5输出5。接着执行下一次循环,当b取值为3时,执行case3输出3,执行case4输出4,执行case5输出5;当b取值为2时,执行case2输出2,通过break退出switch;当b取值为1时,执行break,此时a的取值为0,循环终止。综上,程序输出结果为:65453452。本题答案为C选项。

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

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

9.D解析:本题主要考查关于if语句的说明,if后面圆括号中的表达式,可是任意合法的C语言表达式(如:逻辑表达式、关系表达式、算术表达式、赋值表达式等),也可以是任意类型的数据(如:整型、实型、字符型、指针型等。)

10.C选项A是先将a的值赋给变量b,再将变量b的值赋给变量c,不合题意;B选项中由于c的值不为0,在将c的值赋给变量a后,表达式a=c的值为1,不再对表达式b=c计算;对于c选项,表达式a=c的值为1,再求表达式b=c的值为1,然后进行逻辑与运算;D选项将b的值赋给c后再赋给e,故选择C选项。

11.B

12.D解析:本题考查的是二维数组元素在内存中的排列形式。虽然二维数组成多维数组从结构上来看不是线性的,但是在C语言中,这些数组元素在内存中的排列是连续线性存放的。它们的排列规则是:第一维下标变化最慢,最右边的下标变化最快.例如本题中定义的二维数组a[3][3]中9个元素在内存中的排列顺序是:a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2],a[2][0],a[2][1],a[2][2]。在主函数中,首先定义了二维数组a[3][3],然后定义了一个指针p指向数组a的第1个元素a[0][0]。在第一个for循环中,依数组a在内存中的排列顺序为其元素赋从0~8九个值,然后用第二个for循环依次输出a[1][0],a[1][1],a[1][2]三个元素的值。所以,4个选项中选项D符合题意。

13.A

14.C

15.A解析:在C语言中所谓函数的递归是指在调用一个函数的过程中,又出现了直接或间接调用该函数本身,直接调用该函数本身的称为函数递归,而间接调用该函数称为函数的间接递归调用。由程序可以看出函数f(a,i,j)为一递归函数,其功能是当i<j时,将数组中的元素a[i]和a[j]交换,然后再调用函数f(a,i+1,j-1),将数组中a[i+1]和a[j--]交换,这样一直递归到数组下标i=j,可见该递归函数的作用是使数组中首尾元素依次互换。主函数中定义了一个长度为5的数组aa并初始化,然后调用f(a,0,4),将数组a中的元素依次互换,故最后for循环输出的数组aa中各元素的值为5、4、3、2、1,所以,4个选项中选项A符合题意。

16.B程序首先给字符数组s赋值为“012xy”。for循环语句的功能是遍历字符串,通过if条件语句对字符串中的小写字母进行计数,字符串中小写字母个数为2,即n=2。故本题答案为B选项。

17.A

18.B题中,首先定义了double型的数组a,并将数组首地址赋给指针s。“(*s)”表示“a[1]”,“s[3]”不是指针变量,不能使用间址运算符“*”,故选项A、C不能表示“a[3]”;选项D的“*s+3”等于“a[0]+3”。故本题答案为B选项。

19.D在选项中,\\019,以0开头的数都为八进制数,而八进制的表示数字是0~7,所以答案选择D。

20.C数组的下标是从0开始的,A中越界,行下标和列下标都不能越界;B中,虽然是个地址,但是也同样越界了;选项C中表示的是第一个的首地址;选项D表示的为其元素的值,并不是地址。

21.封装性封装性解析:对象具有下列5个基本特点:①标识惟一性;②分类性:③多态性;④封装性;⑤模块独立性好。其中,封装性是指从外面看只能看到对象的外部特征,对象的内部特征即处理能力的实行和内部状态,对外是不可见的,对象的内部状态只能由其自身改变。

22.栈顶栈顶解析:栈是限定在表的一端进行插入和删除操作的线性表。在表中,允许插入和删除的一端叫做“栈顶”,不允许插入和删除的一端叫做“栈底”。

23.918273645918273645解析:for是C语言的关键字,其后的一对圆括号中通常含有3个表达式,各个表达式之间用分号隔开,这3个表达式可以是任意形式的表达式,通常主要用于for循环控制。

24.软件开发

25.操作系统或OS操作系统或OS解析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务。位于用户和操作系统之间。

26.本题主要考查for循环语句。for循环的增量表达式为逗号表达式,相当于k+=2;,即每次循环后k增加2。第一次循环时,k=2,因此输出##2;第二次循环时k=4,输出##4。此后k=6,不满足循环条件。\r\n\r\n

27.2424解析:本题程序定义了一维数组p,有七个数组元素,整型变量i,j初值分别为0,当while的条件表达式(i<7&&p[i]%2=1)的值为真时,执行语句j+=p[i++];,如:当i=0时,i<7为真,p[i]%2=11%2=1,表达式(p[i]%2=1)的值为真,所以接个表达式(i<7&&p[i]%2=1的值为真,执行j=j+p[i++]=0+11=11,i=1;,依此类推可以得出答案24。

28.sizeof(structst)*50sizeof(structst)*50解析:fwrite函数的一般调用形式为

温馨提示

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

评论

0/150

提交评论