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

下载本文档

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

文档简介

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

一、单选题(20题)1.下列数据结构中,能用二分法进行查找的是()

A.无序线性表B.线性链表C.二叉链表D.顺序存储的有序表

2.现有二叉搜索树(BST)前序遍历结果序列为abdefgc,中序遍历结果序列为debgfac,请问后序遍历结果序列为()

A.debgfaCB.edgfbcAC.edgbfcAD.degbfaC

3.程序执行后的输出结果是()。A.321.cbaB.123.abcC.abc,123D.1bc,a23

4.有以下程序段intj;floaty;charname[50];scanf("%2d%f%s",&i,&y,name);当执行上述程序段,从键盘上输入555667777abc后,y的值为()。A.55566.0B.566.0C.7777.0D.566777.0

5.

6.现有1GB数据进行排序,计算资源只有1GB内存可用,下列排序方法中最可能出现性能问题的是()

A.堆排序B.插入排序C.归并排序D.快速排序E.选择排序F.冒泡排序

7.

8.交换两个变量的值,不允许用临时变量,应该使用下列()位运算符。

A.&B.^C.‖D.~

9.当执行下面的程序时,如果输入ABC,则输出结果是()#include<stdio.h>#include<string.h>main(){charss[10]="12345";gets(ss);strcat(ss"6789");printf("%s\n",ss);}

A.ABC6789B.ABC67C.12345ABC6D.ABC456789

10.

11.以下叙述中正确的是

A.语句inta[4][3]={{1,2},{4,5}};是错误的初始化形式

B.语句inta[4][3]={1,2,4,5};是错误的初始化形式

C.语句inta[][3]={1,2,4,5};是错误的初始化形式

D.在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵

12.程序中对fun函数有如下说明

void*fun();

此说明的含义是:A.fun了数无返回值

B.fun函数的返回值可以是任意的数据类型

C.fun函数的返回值是无值型的指针类型

D.指针fun指向一个函数,该函数无返回值

13.

14.非线性结构是数据元素之间存在一种()。

A.一对多关系B.多对多关系C.多对一关系D.一对一关系

15.有以下程序:voidfun1(char*p){char*q;q=p;while(*q!='\0'){(*q)++;q++;}}main(){chara[]={"Program"),*p;p=&a[3];fun1(p)printf("%s\n",A);}程序执行后的输出结果是()。

A.ProhsbnB.PrphsbnC.ProgsbnD.Program

16.有以下程序

A.741B.963C.852D.87542l

17.下列定义数组的语句中正确的是______。

A.#definesize10charstr1[size],str2[size+2];

B.charstr[];

C.intnum['10'];

D.intn=5;inta[n][n+2];

18.线处应填入().A.b[i++]B.b[i]++C.b[i+=2]D.b[i]+=2

19.

20.有下列程序:main{chars[]="abcde";s+=2:printf("%d\n",s[0]);}执行后的结果是()。A.输出字符a的ASCII码B.输出字符c的ASCII码C.输出字符cD.程序出错

二、2.填空题(20题)21.用树型结构表示实体类型及实体间联系的数据模型称为【】。

22.面向对象的模型中,最基本的概念是对象和______。

23.软件测试中路径覆盖测试是整个测试的基础,它是对软件【】进行测试。

24.软件开发环境是全面支持软件开发全过程的【】集合。

25.以下程序中,函数SumColumMin的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值,和值通过形参传回主函数输出。请填空,

#include<stdio.h>

#defineM2

#defineN4

voidSumColumMin(inta[M][N],int*sum)

{inti,j,k,s=0;

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

k=O;

for(j=1;j<M;j++)

if(a[k][i]>a[j][i])k=j;

s+:【】;

}

【】=s;

}

main()

{intx[M][N]={3,2,5,1,4,1,8,3},s;

SumColumMin(【】);

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

}

26.有以下程序:

voidf(inty,int*x)

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

main()

{intx=2,y=4;

f(y,&x);

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

}

执行后输出结果是上【】。

27.以下程序从输入的10个字符串中找出最长的那个串,请填空。

#include<stdio.h>

#include<string.h>

#defineN10

main()

{charstr[N][81],*sp;

inti;

for(i=0;i<N;i++)gets(str[i]);

sp=str[0];

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

if(strlen(sp)<strlen(str[i]))

【】;

printf("输出最长的那个串:\n%s\n",sp);

printf("输出最长的那个串的长度:%d\n",strlen(sp));}

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

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

main()

{inti=3,j=5,*p=&i,*q=&j;

swap(p,q);printf("%d%d\n",*p,*q);

}

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

fun(int*p,intn)

{int*q;

intmax,min;

max=min=*p;

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

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

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

30.阅读下面程序段,则执行后输出的结果是【】。

#include"stdio.h"

main()

{charfun(char,int);

chara=′A′;

intb=13;

a=fun(a,b);

putchar(a);}

charfun(chara,intb)

{chark;

k=a+b;

returnk;}

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

32.已定义charch='$';inti=1,j;,执行j!=ch&&i++以后,i的值为______。

33.数据的______结构在计算机存储空问中的存放形式称为数据的存储结构或物理结构。

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

#include<stdio.h>

main()

{ihtx=0210;printf("%x\n",x);

}

35.下面程序的运行结果是______。

#include<stdio.h>

intf(inta[],intn)

{if(n>1)

returna[0]+f(a+1,n-1);

else

returna[0];

}

main()

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

s=f(aa+2,4);printf("%d\n",s);

}

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

structs

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

main()

{

structs*p=data;

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

}

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

main()

{inta=5,b=5,y,z;

y=b-->++a?++b:a;

z=++a>b?a:y;

printf("%d,%d,%d,%d",a,b,y,z);

}

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

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

main()

{inti=3,j=5,*p=&i,*q=&j;

swap(p,q);printf("%d%d\N,*p,*q))

}

39.设有如下定义

#defineMYSWAP(z,x,y){z=x;x=y;y=z;}

floata=5,b=16,c;

MYSWAP(______,a,b);

40.对于长度为n的顺序存储的线性表,当随机插入和删除—个元素时,需平均移动元素的个数为【】。

三、1.选择题(20题)41.下面程序的输出是_______。typedefunion{longx[2];inty[4];charz[8];}MYTYPE;MYTYPEthem;main(){printf("%d\n",sizeof(them));}

A.32B.16C.8D.24

42.若变量a、i已正确定义,且i已正确赋值,合法的语句是()。A.A.a==1B.++iC.a=a++=5D.a=int(i)

43.有以下程序#include<stdio.h>main(){inty=9;for(;y>0;y--)if(y%3==0)printf("%d",--y);}程序的运行结粜是()。

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

44.在结构化方法中,软件功能分解属于软件开发中的______阶段。

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

45.设有如下定义intx=10,y=3,z;则语句printf("%d\n",z=(x%y,x/y));的输出结果是()

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

46.若程序中定义了以下函数:doublemyadd(doublea,doubleb){return(a+b);}并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下选项中错误的说明是()。

A.doublemyadd(doublea,b);

B.doublemyadd(double,double);

C.doublemyadd(doubleb,doublea);

D.doublemyadd(doublex,doubley);

47.下列特征中不是面向对象方法的主要特征的是()。

A.多态性B.继承C.封装性D.模块化

48.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是()

A.EOFB.0C.非零值D.NULL

49.下列选项可以正确表示字符型常量的是

A.′\r′B.aC.\897D.296

50.软件开发的结构化生命周期方法将软件生命周期划分成()

A.定义、开发、运行维护

B.设计阶段、编程阶段、测试阶段

C.总体设计、详细设计、编程调试

D.需求分析、功能定义、系统设计

51.有以下程序#defineN20fun(inta[],intn,:Intm){inti,i;for(i=m;i>n;i--)a[i+1);a[i];}main(){inti,a[N]={1,2,3,4,5,6,7,8,9,10};fuu(a,2,9);for(i=0;i<5;i++)printf("%d",a[i]);}程序运行后的输出结果是

A.10234B.12344C.12334D.12234

52.有以下程序:main(){inti;for(i=1,i<=40;i++){if(i++%5==0)if(++i%8==0)printf("%d",i);}printf("\n");}执行后的输出结果是()。

A.5B.24C.32D.40

53.下面程序段的运行结果是

chara[]="lanuage",*p;

p=a;

while(*p!=′u′){printf("%c",*p-32);p++;}

A.LANGUAGEB.languageC.LAND.langUAGE

54.数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是()

A.控制流B.加工C.数据存储D.源和潭

55.下面程序在屏幕上的输出是______。main(){printf(“ab\b\bc”);}A.ab\b\bcB.acC.abcD.abc

56.下面程序的执行结果是______。#defineMAX10nta[MAX],i;main(){printf("\n");sub1();sub3(A);sub2();sub3(A);}sub1(){for(i=0;i<1MAX;i++)a[i]-i+i;}sub2(){inta[MAX],i,max;max=5;for(i=0;i<max;i++)a[i]=i;}sub3(inta[]){inti;for(i=0;i<MAX;i++)printf("%d",a[i]);printf("\n");}

A.02468101214161801234

B.01234024681012141618

C.012345678901234

D.024681012141618024681012141618

57.微机显示器一般有两组引线,它们是()

A.电源线与信号线B.电源线与控制线C.电源线与地线D.控制线与地线

58.阅读下列程序,则执行后的结果为#include"stdio.h"main(){intc[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56};printf("%x,%x\n",c[2][2],*(*(c+1)+1));}

A.3e,6B.62,5C.56,5D.3E,6

59.下列对于软件测试的描述中正确的是()。

A.软件测试的目的是证明程序是否正确

B.软件测试的目的是使程序运行结果正确

C.软件测试的目的是尽可能多地发现程序中的错误

D.软件测试的目的是使程序符合结构化原则

60.设x、y、t均为血型变量,则执行语句x=y=3;t=++x||++y;后,y的值为______。

A.不定值B.4C.3D.1

四、选择题(20题)61.

62.在执行下述程序时,若从键盘输入6和8,则结果为()。

A.36B.64C.48D.以上都不对

63.(33)有以下程序段

inti,n;

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

{n=rand()%5;

switch(n)

{case1:

case3:printf("%d\n",n);break;

case2:

case4:printf("%d\n",n);continue;

case0:exit(0);

}

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

}

以下关于程序段执行情况的叙述,正确的是

A)for循环语句固定执行8次

B)当产生的随机数n为4时结束循环操作

C)当产生的随机数n为1和2时不做任何操作

D)当产生的随机数n为0时结束程序运行

64.

65.

66.有以下程序:

程序运行后的输出结果是()。A.235B.0235C.02356D.2356

67.有以下程序:

#include<stdio.h>

structord

{intX,y;)dt[2]={1,2,3,4};

main()

{

structord*p=dt;

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

}

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

A.1,2

B.4,1

C.3,4

D.2,3

68.若有说明:inta[3][4]={0};,则下面正确的叙述是

A.只初始化了第一个元素,即a[0][0]可得到初值0

B.此初始化语句不正确

C.数组a中各元素都可得到初值,但其值不一定为0

D.数组a中每个元素均可得到初值0

69.有以下程序:

程序的运行结果是()。

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

70.

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

main

{intt=l;fun(fun(t));}

fun(inth)

{staticinta[3]={1.2.3};

intk;

for(k=0;k<3;k++)a[k]+=a[k]-h;

for(k=0;k<3;k++)printf("%d",a[k]);

printf("\n");

return(a[h]);}A.A.1,2,3,1,5,9,B.1,3,5,1,3,j,

C.1,3,5,0,4,8,

D.1,3。5,-1,3,7,

72.有以下程序:

程序的运行结果是()。

A.*****a*bB.a*bC.a*b****D.ab

73.有以下程序程序执行后的输出结果是()

A.60B.50C.45D.55

74.有3个关系R、S和T如下.

则由关系R和S得到关系T的操作是()。A.自然连接B.差C.交D.并

75.若变量已正确定义为int型,要通过语句:scanf(”%d,%d,%d”,&;a,&;b,&C.;给a赋值l、给b赋值2、给C赋值3,以下输入形式中错误的是()。(注:口代表一个空格符)

76.以下正确的字符串常量是()。A.A."\\\"

B.'abc'

C.OlympicGames

D.""

77.

78.下列哪个属性是用来定义内联样式的?()

A.fontB.classC.stylesD.style.

79.

设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n—c>d)运算后,n的值是()n

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

80.若有定义语句:doublea,*p=&a;,以下叙述中错误的是()。A.定义语句中的*号是一个间址运算符

B.定义语句中的*号是一个说明符

C.定义语句中的p只能存放double类型变量的地址

D.定义语句中,*p=&a把变量a的地址作为初值赋给指针变量P

五、程序改错题(1题)81.下列给定程序中,函数fIm和funx的功能是:用二分法求方程的一个根,并要求绝对误差不超过0.001。

.例如,若给m输入一100,n输入90,则函数求得的二个根为2.000。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:

六、程序设计题(1题)82.编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串123412132,输入字符为1,则输出3。

注意:部分源程序在文件PROCl.C中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填人你编写的若干语句。

参考答案

1.DD)【解析】二分法查找只适用于顺序存储的有序表,表中的元素按值从小到大排列。

2.B

3.D[解析]字符串是一个特殊的数组,所以按照数组的规则,s1应该指向的是数组的首地址,即"abc的第一个字符的地址。s2指向的是"123"的第一个字符的地址。调用swap函数之后交换的是两个字符串的第一个字符ai和1的内容,所以打印输出为D)。

4.B变量J只接收输入数据的前两位,从第三位开始直到空格之间的输入整数都会被保存到浮点型变量Y中。

5.D

6.C

7.C

8.B按逻辑位运算特点:①用按位与运算将特定位清为0或保留特定位;②用按位或运算将特定的位置为1;③用按位异或运算将某个变量的特定位翻转或交换两个变量的值。

9.A

10.B

11.D二维数组在初始化时,可以省第1维,但是不可以省第2维。可以为部分数组元素初始化。A选项、B选项和C选项内的初始化都没有错误。因此D选项正确。

12.D解析:返回指针的函数定义为:返回值类型,函数名(\u3000\u3000),而指向函数的指针定义为:返回值类型(*变量名)(\u3000\u3000)。本题中函数fun返回一个无类型的指针。

13.C

14.B

15.A解析:在函数fun1()中,首先将形参p的内容存入临时指针q中,然后使用—个while循环,当q所指内容不是字符串结束标志'\\0\'时,让q所指内容增1,然后将指针q增1指向下一个位置。所以函数fun1()实现的功能是:将传入字符串的所有字符自增1。主函数,指针p在被传入fun1()函数之前,初始化指向的是宁符数组a的第4个元素\'g\',所以最终输出的结果应该是Prohsbn。故应该选择A。

16.C在for循环中,当y的值为9、6或3时,执行输出语句,输出表达式“——y”的值。y先自减1,然后再输出y的值。

17.A

18.D

19.D

20.D因为字符数组s[]中的数组名s表示的是一个地址常量。所以语句“s+=2;”不能将指针在当前位置的基础上再向后移动两位。因而程序编译时出错。

21.层次模型用树型结构表示实体类型及实体间联系的数据模型称为层次模型,用有向图结构表示实体类型及实体间联系的数据模型称为网状模型,用二维表格结构表示实体及其联系的数据模型称为关系模型。

22.类类

23.结构结构解析:路径测试是白盒测试方法中的—种,它要求对程序中的每条路径最少检查一次,目的是对软件的结构进行测试。

24.软件工具软件工具

25.a[k][i]*sumx&sa[k][i]\r\n*sum\r\nx,&s解析:程序段for(j=1;j<M;j++)if(a[k][i]>a[j][i]))k=j;是找出第i列的最小值,第一处应该是每列最小值累加,所以填a[k][i];和值要通过形参传回主函数,第二处应该填*sum;根据形参可以确定第三处应该填x,&s。

26.8484解析:函数f(y,*x)的作用是让y的值加上指针x所指向变量的值,让指针x所指向变量的值加上y的值。由于形参y是传值的,形参x是传地址的,故调用该函数后,作为实参的y的值将不改变,而实参x的值将改变,故最后输出的y的值为4,而x的值为8。

27.sp=str[i]sp=str[i]解析:二维字符数组即数组的每个元素又是一个字符串,即字符串数组。题中二维数组的第一行的首地址赋给字符指针sp,使sp指向了二维字符数组的一个字符串。求字符串长度函数strlen比较当前字符串与数组的下一个元素的字符串的长度,如果当前字符串的长度小于下一个元素的,则指针sp又指向了下一个元素,直到比较到数组的最后一个元素,得到的sp指针所指向的字符串即为长度最长的字符串。

28.3535解析:函数swap(int*a,int*b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,形参指针变量a和b分别指向i和j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为35。

29.q<p+nq<p+n解析:考查对于函数的地址传递的掌握情况。通过地址传递可以在被调函数中对调用函数中的变量进行引用。

30.NN解析:函数说明语句中的类型名必须与函数返回值的类型一致。本题实现的是在字符'A'的ASCII码值上加上一个常数,使之变成另一个ASCII码值,从而输出字符。

31.完整性控制完整性控制

32.11解析:在执行逻辑表达式“j=!ch&&i++”时,首先判断j=!ch的值,因为“ch='$'”不为0,所以“j=!ch=0”,编译系统便不再计算表达式“i++”的值,i的值不变,仍为1。

33.逻辑逻辑解析:数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构或物理结构。

34.8888解析:程序中的0210表示八进制数,%x是以十六进制形式输出。本题可先将0210转换为十进制数,再将其转换为十六进制数。

35.本题主要考查函数的嵌套调用和数组名作为实参。实际程序运行结果应为aa[2]+aa[3]+aa[4]+aa[5]=18。\r\n\r\n

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

37.7467

38.3535解析:函数swap(int*a,int*b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,形参指针变量a和b分别指向i和j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为35。

39.CC解析:本题关键在考生是不是了解宏的基本运用,再使用宏的时候明显少了一个实参。在定义宏的时候变量z是用来做中间变量的,题目中缺的变量就是一个中间变量C。

40.n/2n/2解析:删除—个元素,平均移动的元素个数为(n-1+n-2+…+0)/n=(n-1)/2;插入一个元素,平均移动元素个数为(n+n-1+n-2+…+1)/n=(n+1)/2:所以总体平均移动元素个数为n/2。

41.C解析:sizeof(x)是一个标准C函数,它的返回值是x型的数据结构占用的内存字节数,题目中定义了一个共用体,共用体变量在内存中所占的长度等于最长的成员的长度。

42.B本题主要考查C语言合法语句的定义。

在选项A中,a==1不是一个合法的语句,因为它没有语句结束标识符“;”,不能说是一条语句,如果作为一个表达式,它是正确的。

在选项B中,由于变量i已被正确定义并有初值,“++i;”是正确的语句。

在选项C中,由于正确的赋值语句中,赋值符号的左边不能为常量或表达式,而右边不能为变量或表达式,很明显,“a=a++=5;”违背了赋值语句的原则。

在选项D中,“a=int(i);”语句是不正确的,在C语言中没有这种表示形式,如果是想将变量i强制转换为整型的操作,应该为“a=(int)i;”。

43.C解析:y的初值为9,所以在for循环中,当y的值为9、6或3时,if语句的条件成立,执行输出语句,输出表达式--y的值。因为自减符号在y的前面,所以首先y自减1,然后再输出y的值,故输出结果为852。

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

45.A

46.A解析:函数声明是对所用到的函数的特征进行必要的声明,编译系统以函数声明中给出的信息为依据,对调用表达式进行检测,以保证调用表达式与函数之间的参数正确传递。函数声明的一般格式为:

类型标识符函数名(类型标识符形参,…);

这些信息就是函数定义中的第一行的内容。这里形参的名字是不重要的,重要的是类型标识符,函数声明中也可以不写形参名只写该形参的声明类型,但不能只写形参名而不写该形参的类型。本题中,选项A中doublemyadd(doublea,b),没写出形参b的类型。

47.DD。【解析】面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括:分类性、多态性、封装性、模块独立性、继承和多态性等。模块化是结构化程序设计的特点。

48.C

49.A解析:C语言中,一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号括起来作为字符常量,字符常量的的范围是0~127。由于字符常量用单引号括起来,所以选项B),C)错误,选项D)超过了字符常量的表示范围。

50.A解析:通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。它可以分为软件定义、软件开发及软件运行维护3个阶段。

51.C解析:数组名可以作为实参传送,由于数组名本身是一个地址值,因此,在函数中对形参数组元素的修改也会相应改变实参数组的元素.在本题中,函数fun()通过一个for循环,将形参数组a中下标为n到m之间的元素向后移动一位,a[n]元素的值不变。所以主函数调用fun(a,2,9);之后,数组a的内容变成{1,2,3,3,4,5,5,6,7,8,9,10},最后通过for循环输出数组前5个元素为12334。选项C符合题意。

52.C解析:i=30时,条件表达式“i++%5==0”为真,i++后i=31,++i后i=32,即条件表达式“++i%8==0”为真。

53.C解析:本段程序的作用是输出字符串'lanuage'中字母u之前的字符,并将其转化为大写字母。注意:如果一个字符数组用来作为字符串使用,那么在定义该字符数组时,数组的大小就应该比它将要实际存放的最长字符多一个元素,以存放\'\\0\'。

54.A解析:数据流图包括4个方面,即加工(转换)(输入数据经加工变换产生输出)、数据流(沿箭头方向传送数据的通道,一般在旁边标注数据流名)、存储文件(数据源)(表示处理过程中存放各种数据的文件)、源和潭(表示系统和环境的接口,属系统之外的实体)。不包括选项中的控制流。

55.BC语言中允许使用一种特殊形式的字符常量,就是以一个“\\”开头的字符序列,这样的字符称为“转义字符”。常用的转义字符有:\\n,换行;\\t,水平制表;\\b,退格;\\r,回车。

56.D解析:函数sub1给全局作用范围内数组a(长度为10)的每个元素赋值,函数sub2中数组a仅在本函数范围内有效,长度也是10,但仅给前5个元素赋值,main函数调用sub3时,传递数组地址均是全局作用范围内数组a的地址,因此两次调用打印的结果相同。

57.A

58.A解析:数组a[5][5],0<=i<5,0<=j<5,则可以用5种表达式来引用,a[i][j],*a(a[i]+j),*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+5*i+j)。数组的下限为0,%后面为小写的x,所以输出的结果为小写字母表示的十六进制。

59.C解析:关于软件测试的目的,GrenfordJ.Myers在《TheArtofSoftwareTesting》一书中给出了深刻的阐述:软件测试是为了发现错误而执行程序的过程;一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例;一个成功的测试是发现了至今尚未发现的错误的测试。整体来说,软件测试的目的就是尽可能多地发现程序中的错误。本题答案为C。

60.C解析:C语言中在做逻辑或运算时,自左向右判断各个参加或运算的表达式,一旦运算到某式的值为非零时,表明整个表达式一定为真,余下的语句则不再进行运算。本题中,++x的值为真,则++y并没有进行运算,所以y值不变。

61.C

62.B本题中a的值为6,b的值为8,最后s的值为8,s*=s等价于s=s*s。

63.D

64.B

65.D

66.B本题考查分支语句用法。因为变量的初始值分别为k=5、n=0,所以程序第1次进入循环时,执行default语句,输出0,k减1;这时n=0、k=4,程序进行第2次循环,执行case4:这个分支,结果是n=2、k=3,打印出2;这时n=2、k=3,break跳出,程序进行第3次循环,执行case3:这个分支,结果是n=3、k=2,打印出3;这时n=3、k=2,break跳出,程序然后进行第4次循环,执行case2:case4:这个分支,结果是n=5、k=1,打印出5,break跳出,这时因为n=5不满足n<5的循环条件,因此循环结束。

67.D\np一>x的值为1,++(p->x)作用是取p->x的值加1作为表达式的值即值为2,同理++(p->y)的值为3。所以选D。

\n

68.D二维数组进行初始化时可以按照分段进行赋值,将每一行看成一段,每一段的个数为列数。也可以按行连续赋值,不用分段,将所有的数值写成一行,系统会在数组每一行的元素个数与列数相同时,从下一行开始继续赋值。也可以对部分数组赋初值,未赋初值的元素自动取0。题目中可以看成是对数组按行进行连续赋值,并且只给出了第一行第一列的数值0,对于未赋值的元素,系统自动取0,故整个数组中的每个元素都可以取初值0。

69.B该题目考查函数参数传递以及if条件语句。当变量b为0时,将a的值返回给主调函数,因此a进行两次自减l后,将其值返回并输出。

70.C

71.D本题考查双重函数调用及for循环使用,fun函数中第一个for循环语句的作用是给数组a赋值。当第一次调用fun函数时,把实参1传给形参,输出a数组的元素为1,3,5;第二次调用fun函数时,由于数组a为静态局部变量,故输出a数组的元素为一1,3,7。

72.C在函数fun(char*a,char*b)中,while

73.A函数fun的功能是求数组的n个元素之和。fun(a,5)=15。由于s岫是静态局部变量,所以保持l5不变,fun(b,4)=45,所以s=fun(a,5)+fun(b,4)=60。

74.B关系之间的操作分为自然连接、投影、交、并、差等,由图可知此操作为差操作。

75.Dscanf()的格式控制串可以使用其他非空白字符,如本题中的逗号,但在输入时必须输入这些字符;以保证匹配。所以逗号必须输入。

76.D选项A中“\\\”为转义字符,故选项A错误,选项B和C显然不是字符串常量。选项D是一个字符串常量,称为空串。

77.C

78.D

79.C

\n因为a>b不成立,故表达式a>b的值为0,即为0赋给m,因此&&左边表达式的值为0,0与任何值&&运算都为0,于是不再计算&&右边表达式的值,所以此时的n仍然为2。

\n

80.A在变量定义doublea,*p:&a;中,*号是一个指针运算符,而非间址运算符,因此A)错误。

81.82.

intfun(char*ss,charc)

inti=0;

for(;*ss!=’\0‘;ss++)if(}ss==c

i++/*求出*所指字符串中指定字符的个数*/

returni;

【考点分析】

本题考查:for循环语句遍历字符串,并通过if条件语句,判断字符串是否结束。

【解题思路】

从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍历字符串,循环条件为字符串没有结束,即当前字符不是‘\0’,判断语句用来判断当前字符是否为指定字符。最后返回指定字符的个数。2021-2022年河北省衡水市全国计算机等级考试C语言程序设计学校:________班级:________姓名:________考号:________

一、单选题(20题)1.下列数据结构中,能用二分法进行查找的是()

A.无序线性表B.线性链表C.二叉链表D.顺序存储的有序表

2.现有二叉搜索树(BST)前序遍历结果序列为abdefgc,中序遍历结果序列为debgfac,请问后序遍历结果序列为()

A.debgfaCB.edgfbcAC.edgbfcAD.degbfaC

3.程序执行后的输出结果是()。A.321.cbaB.123.abcC.abc,123D.1bc,a23

4.有以下程序段intj;floaty;charname[50];scanf("%2d%f%s",&i,&y,name);当执行上述程序段,从键盘上输入555667777abc后,y的值为()。A.55566.0B.566.0C.7777.0D.566777.0

5.

6.现有1GB数据进行排序,计算资源只有1GB内存可用,下列排序方法中最可能出现性能问题的是()

A.堆排序B.插入排序C.归并排序D.快速排序E.选择排序F.冒泡排序

7.

8.交换两个变量的值,不允许用临时变量,应该使用下列()位运算符。

A.&B.^C.‖D.~

9.当执行下面的程序时,如果输入ABC,则输出结果是()#include<stdio.h>#include<string.h>main(){charss[10]="12345";gets(ss);strcat(ss"6789");printf("%s\n",ss);}

A.ABC6789B.ABC67C.12345ABC6D.ABC456789

10.

11.以下叙述中正确的是

A.语句inta[4][3]={{1,2},{4,5}};是错误的初始化形式

B.语句inta[4][3]={1,2,4,5};是错误的初始化形式

C.语句inta[][3]={1,2,4,5};是错误的初始化形式

D.在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵

12.程序中对fun函数有如下说明

void*fun();

此说明的含义是:A.fun了数无返回值

B.fun函数的返回值可以是任意的数据类型

C.fun函数的返回值是无值型的指针类型

D.指针fun指向一个函数,该函数无返回值

13.

14.非线性结构是数据元素之间存在一种()。

A.一对多关系B.多对多关系C.多对一关系D.一对一关系

15.有以下程序:voidfun1(char*p){char*q;q=p;while(*q!='\0'){(*q)++;q++;}}main(){chara[]={"Program"),*p;p=&a[3];fun1(p)printf("%s\n",A);}程序执行后的输出结果是()。

A.ProhsbnB.PrphsbnC.ProgsbnD.Program

16.有以下程序

A.741B.963C.852D.87542l

17.下列定义数组的语句中正确的是______。

A.#definesize10charstr1[size],str2[size+2];

B.charstr[];

C.intnum['10'];

D.intn=5;inta[n][n+2];

18.线处应填入().A.b[i++]B.b[i]++C.b[i+=2]D.b[i]+=2

19.

20.有下列程序:main{chars[]="abcde";s+=2:printf("%d\n",s[0]);}执行后的结果是()。A.输出字符a的ASCII码B.输出字符c的ASCII码C.输出字符cD.程序出错

二、2.填空题(20题)21.用树型结构表示实体类型及实体间联系的数据模型称为【】。

22.面向对象的模型中,最基本的概念是对象和______。

23.软件测试中路径覆盖测试是整个测试的基础,它是对软件【】进行测试。

24.软件开发环境是全面支持软件开发全过程的【】集合。

25.以下程序中,函数SumColumMin的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值,和值通过形参传回主函数输出。请填空,

#include<stdio.h>

#defineM2

#defineN4

voidSumColumMin(inta[M][N],int*sum)

{inti,j,k,s=0;

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

k=O;

for(j=1;j<M;j++)

if(a[k][i]>a[j][i])k=j;

s+:【】;

}

【】=s;

}

main()

{intx[M][N]={3,2,5,1,4,1,8,3},s;

SumColumMin(【】);

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

}

26.有以下程序:

voidf(inty,int*x)

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

main()

{intx=2,y=4;

f(y,&x);

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

}

执行后输出结果是上【】。

27.以下程序从输入的10个字符串中找出最长的那个串,请填空。

#include<stdio.h>

#include<string.h>

#defineN10

main()

{charstr[N][81],*sp;

inti;

for(i=0;i<N;i++)gets(str[i]);

sp=str[0];

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

if(strlen(sp)<strlen(str[i]))

【】;

printf("输出最长的那个串:\n%s\n",sp);

printf("输出最长的那个串的长度:%d\n",strlen(sp));}

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

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

main()

{inti=3,j=5,*p=&i,*q=&j;

swap(p,q);printf("%d%d\n",*p,*q);

}

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

fun(int*p,intn)

{int*q;

intmax,min;

max=min=*p;

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

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

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

30.阅读下面程序段,则执行后输出的结果是【】。

#include"stdio.h"

main()

{charfun(char,int);

chara=′A′;

intb=13;

a=fun(a,b);

putchar(a);}

charfun(chara,intb)

{chark;

k=a+b;

returnk;}

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

32.已定义charch='$';inti=1,j;,执行j!=ch&&i++以后,i的值为______。

33.数据的______结构在计算机存储空问中的存放形式称为数据的存储结构或物理结构。

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

#include<stdio.h>

main()

{ihtx=0210;printf("%x\n",x);

}

35.下面程序的运行结果是______。

#include<stdio.h>

intf(inta[],intn)

{if(n>1)

returna[0]+f(a+1,n-1);

else

returna[0];

}

main()

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

s=f(aa+2,4);printf("%d\n",s);

}

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

structs

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

main()

{

structs*p=data;

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

}

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

main()

{inta=5,b=5,y,z;

y=b-->++a?++b:a;

z=++a>b?a:y;

printf("%d,%d,%d,%d",a,b,y,z);

}

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

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

main()

{inti=3,j=5,*p=&i,*q=&j;

swap(p,q);printf("%d%d\N,*p,*q))

}

39.设有如下定义

#defineMYSWAP(z,x,y){z=x;x=y;y=z;}

floata=5,b=16,c;

MYSWAP(______,a,b);

40.对于长度为n的顺序存储的线性表,当随机插入和删除—个元素时,需平均移动元素的个数为【】。

三、1.选择题(20题)41.下面程序的输出是_______。typedefunion{longx[2];inty[4];charz[8];}MYTYPE;MYTYPEthem;main(){printf("%d\n",sizeof(them));}

A.32B.16C.8D.24

42.若变量a、i已正确定义,且i已正确赋值,合法的语句是()。A.A.a==1B.++iC.a=a++=5D.a=int(i)

43.有以下程序#include<stdio.h>main(){inty=9;for(;y>0;y--)if(y%3==0)printf("%d",--y);}程序的运行结粜是()。

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

44.在结构化方法中,软件功能分解属于软件开发中的______阶段。

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

45.设有如下定义intx=10,y=3,z;则语句printf("%d\n",z=(x%y,x/y));的输出结果是()

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

46.若程序中定义了以下函数:doublemyadd(doublea,doubleb){return(a+b);}并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下选项中错误的说明是()。

A.doublemyadd(doublea,b);

B.doublemyadd(double,double);

C.doublemyadd(doubleb,doublea);

D.doublemyadd(doublex,doubley);

47.下列特征中不是面向对象方法的主要特征的是()。

A.多态性B.继承C.封装性D.模块化

48.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是()

A.EOFB.0C.非零值D.NULL

49.下列选项可以正确表示字符型常量的是

A.′\r′B.aC.\897D.296

50.软件开发的结构化生命周期方法将软件生命周期划分成()

A.定义、开发、运行维护

B.设计阶段、编程阶段、测试阶段

C.总体设计、详细设计、编程调试

D.需求分析、功能定义、系统设计

51.有以下程序#defineN20fun(inta[],intn,:Intm){inti,i;for(i=m;i>n;i--)a[i+1);a[i];}main(){inti,a[N]={1,2,3,4,5,6,7,8,9,10};fuu(a,2,9);for(i=0;i<5;i++)printf("%d",a[i]);}程序运行后的输出结果是

A.10234B.12344C.12334D.12234

52.有以下程序:main(){inti;for(i=1,i<=40;i++){if(i++%5==0)if(++i%8==0)printf("%d",i);}printf("\n");}执行后的输出结果是()。

A.5B.24C.32D.40

53.下面程序段的运行结果是

chara[]="lanuage",*p;

p=a;

while(*p!=′u′){printf("%c",*p-32);p++;}

A.LANGUAGEB.languageC.LAND.langUAGE

54.数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是()

A.控制流B.加工C.数据存储D.源和潭

55.下面程序在屏幕上的输出是______。main(){printf(“ab\b\bc”);}A.ab\b\bcB.acC.abcD.abc

56.下面程序的执行结果是______。#defineMAX10nta[MAX],i;main(){printf("\n");sub1();sub3(A);sub2();sub3(A);}sub1(){for(i=0;i<1MAX;i++)a[i]-i+i;}sub2(){inta[MAX],i,max;max=5;for(i=0;i<max;i++)a[i]=i;}sub3(inta[]){inti;for(i=0;i<MAX;i++)printf("%d",a[i]);printf("\n");}

A.02468101214161801234

B.01234024681012141618

C.012345678901234

D.024681012141618024681012141618

57.微机显示器一般有两组引线,它们是()

A.电源线与信号线B.电源线与控制线C.电源线与地线D.控制线与地线

58.阅读下列程序,则执行后的结果为#include"stdio.h"main(){intc[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56};printf("%x,%x\n",c[2][2],*(*(c+1)+1));}

A.3e,6B.62,5C.56,5D.3E,6

59.下列对于软件测试的描述中正确的是()。

A.软件测试的目的是证明程序是否正确

B.软件测试的目的是使程序运行结果正确

C.软件测试的目的是尽可能多地发现程序中的错误

D.软件测试的目的是使程序符合结构化原则

60.设x、y、t均为血型变量,则执行语句x=y=3;t=++x||++y;后,y的值为______。

A.不定值B.4C.3D.1

四、选择题(20题)61.

62.在执行下述程序时,若从键盘输入6和8,则结果为()。

A.36B.64C.48D.以上都不对

63.(33)有以下程序段

inti,n;

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

{n=rand()%5;

switch(n)

{case1:

case3:printf("%d\n",n);break;

case2:

case4:printf("%d\n",n);continue;

case0:exit(0);

}

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

}

以下关于程序段执行情况的叙述,正确的是

A)for循环语句固定执行8次

B)当产生的随机数n为4时结束循环操作

C)当产生的随机数n为1和2时不做任何操作

D)当产生的随机数n为0时结束程序运行

64.

65.

66.有以下程序:

程序运行后的输出结果是()。A.235B.0235C.02356D.2356

67.有以下程序:

#include<stdio.h>

structord

{intX,y;)dt[2]={1,2,3,4};

main()

{

structord*p=dt;

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

}

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

A.1,2

B.4,1

C.3,4

D.2,3

68.若有说明:inta[3][4]={0};,则下面正确的叙述是

A.只初始化了第一个元素,即a[0][0]可得到初值0

B.此初始化语句不正确

C.数组a中各元素都可得到初值,但其值不一定为0

D.数组a中每个元素均可得到初值0

69.有以下程序:

程序的运行结果是()。

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

70.

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

main

{intt=l;fun(fun(t));}

fun(inth)

{staticinta[3]={1.2.3};

intk;

for(k=0;k<3;k++)a[k]+=a[k]-h;

for(k=0;k<3;k++)printf("%d",a[k]);

printf("\n");

return(a[h]);}A.A.1,2,3,1,5,9,B.1,3,5,1,3,j,

C.1,3,5,0,4,8,

D.1,3。5,-1,3,7,

72.有以下程序:

程序的运行结果是()。

A.*****a*bB.a*bC.a*b****D.ab

73.有以下程序程序执行后的输出结果是()

A.60B.50C.45D.55

74.有3个关系R、S和T如下.

则由关系R和S得到关系T的操作是()。A.自然连接B.差C.交D.并

75.若变量已正确定义为int型,要通过语句:scanf(”%d,%d,%d”,&;a,&;b,&C.;给a赋值l、给b赋值2、给C赋值3,以下输入形式中错误的是()。(注:口代表一个空格符)

76.以下正确的字符串常量是()。A.A."\\\"

B.'abc'

C.OlympicGames

D.""

77.

78.下列哪个属性是用来定义内联样式的?()

A.fontB.classC.stylesD.style.

79.

设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n—c>d)运算后,n的值是()n

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

80.若有定义语句:doublea,*p=&a;,以下叙述中错误的是()。A.定义语句中的*号是一个间址运算符

B.定义语句中的*号是一个说明符

C.定义语句中的p只能存放double类型变量的地址

D.定义语句中,*p=&a把变量a的地址作为初值赋给指针变量P

五、程序改错题(1题)81.下列给定程序中,函数fIm和funx的功能是:用二分法求方程的一个根,并要求绝对误差不超过0.001。

.例如,若给m输入一100,n输入90,则函数求得的二个根为2.000。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:

六、程序设计题(1题)82.编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串123412132,输入字符为1,则输出3。

注意:部分源程序在文件PROCl.C中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填人你编写的若干语句。

参考答案

1.DD)【解析】二分法查找只适用于顺序存储的有序表,表中的元素按值从小到大排列。

2.B

3.D[解析]字符串是一个特殊的数组,所以按照数组的规则,s1应该指向的是数组的首地址,即"abc的第一个字符的地址。s2指向的是"123"的第一个字符的地址。调用swap函数之后交换的是两个字符串的第一个字符ai和1的内容,所以打印输出为D)。

4.B变量J只接收输入数据的前两位,从第三位开始直到空格之间的输入整数都会被保存到浮点型变量Y中。

5.D

6.C

7.C

8.B按逻辑位运算特点:①用按位与运算将特定位清为0或保留特定位;②用按位或运算将特定的位置为1;③用按位异或运算将某个变量的特定位翻转或交换两个变量的值。

9.A

10.B

11.D二维数组在初始化时,可以省第1维,但是不可以省第2维。可以为部分数组元素初始化。A选项、B选项和C选项内的初始化都没有错误。因此D选项正确。

12.D解析:返回指针的函数定义为:返回值类型,函数名(\u3000\u3000),而指向函数的指针定义为:返回值类型(*变量名)(\u3000\u3000)。本题中函数fun返回一个无类型的指针。

13.C

14.B

15.A解析:在函数fun1()中,首先将形参p的内容存入临时指针q中,然后使用—个while循环,当q所指内容不是字符串结束标志'\\0\'时,让q所指内容增1,然后将指针q增1指向下一个位置。所以函数fun1()实现的功能是:将传入字符串的所有字符自增1。主函数,指针p在被传入fun1()函数之前,初始化指向的是宁符数组a的第4个元素\'g\',所以最终输出的结果应该是Prohsbn。故应该选择A。

16.C在for循环中,当y的值为9、6或3时,执行输出语句,输出表达式“——y”的值。y先自减1,然后再输出y的值。

17.A

18.D

19.D

20.D因为字符数组s[]中的数组名s表示的是一个地址常量。所以语句“s+=2;”不能将指针在当前位置的基础上再向后移动两位。因而程序编译时出错。

21.层次模型用树型结构表示实体类型及实体间联系的数据模型称为层次模型,用有向图结构表示实体类型及实体间联系的数据模型称为网状模型,用二维表格结构表示实体及其联系的数据模型称为关系模型。

22.类类

23.结构结构解析:路径测试是白盒测试方法中的—种,它要求对程序中的每条路径最少检查一次,目的是对软件的结构进行测试。

24.软件工具软件工具

25.a[k][i]*sumx&sa[k][i]\r\n*sum\r\nx,&s解析:程序段for(j=1;j<M;j++)if(a[k][i]>a[j][i]))k=j;是找出第i列的最小值,第一处应该是每列最小值累加,所以填a[k][i];和值要通过形参传回主函数,第二处应该填*sum;根据形参可以确定第三处应该填x,&s。

26.8484解析:函数f(y,*x)的作用是让y的值加上指针x所指向变量的值,让指针x所指向变量的值加上y的值。由于形参y是传值的,形参x是传地址的,故调用该函数后,作为实参的y的值将不改变,而实参x的值将改变,故最后输出的y的值为4,而x的值为8。

27.sp=str[i]sp=str[i]解析:二维字符数组即数组的每个元素又是一个字符串,即字符串数组。题中二维数组的第一行的首地址赋给字符指针sp,使sp指向了二维字符数组的一个字符串。求字符串长度函数strlen比较当前字符串与数组的下一个元素的字符串的长度,如果当前字符串的长度小于下一个元素的,则指针sp又指向了下一个元素,直到比较到数组的最后一个元素,得到的sp指针所指向的字符串即为长度最长的字符串。

28.3535解析:函数swap(int*a,int*b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,形参指针变量a和b分别指向i和j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为35。

29.q<p+nq<p+n解析:考查对于函数的地址传递的掌握情况。通过地址传递可以在被调函数中对调用函数中的变量进行引用。

30.NN解析:函数说明语句中的类型名必须与函数返回值的类型一致。本题实现的是在字符'A'的ASCII码值上加上一个常数,使之变成另一个ASCII码值,从而输出字符。

31.完整性控制完整性控制

32.11解析:在执行逻辑表达式“j=!ch&&i++”时,首先判断j=!ch的值,因为“ch='$'”不为0,所以“j=!ch=0”,编译系统便不再计算表达式“i++”的值,i的值不变,仍为1。

33.逻辑逻辑解析:数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构或物理结构。

34.8888解析:程序中的0210表示八进制数,%x是以十六进制形式输出。本题可先将0210转换为十进制数,再将其转换为十六进制数。

35.本题主要考查函数的嵌套调用和数组名作为实参。实际程序运行结果应为aa[2]+aa[3]+aa[4]+aa[5]=18。\r\n\r\n

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

37.7467

38.3535解析:函数swap(int*a,int*b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,形参指针变量a和b分别指向i和j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为35。

39.CC解析:本题关键在考生是不是了解宏的基本运用,再使用宏的时候明显少了一个实参。在定义宏的时候变量z是用来做中间变量的,题目中缺的变量就是一个中间变量C。

40.n/2n/2解析:删除—个元素,平均移动的元素个数为(n-1+n-2+…+0)/n=(n-1)/2;插入一个元素,平均移动元素个数为(n+n-1+n-2+…+1)/n=(n+1)/2:所以总体平均移动元素个数为n/2。

41.C解析:sizeof(x)是一个标准C函数,它的返回值是x型的数据结构占用的内存字节数,题目中定义了一个共用体,共用体变量在内存中所占的长度等于最长的成员的长度。

42.B本题主要考查C语言合法语句的定义。

在选项A中,a==1不是一个合法的语句,因为它没有语句结束标识符“;”,不能说是一条语句,如果作为一个表达式,它是正确的。

在选项B中,由于变量i已被正确定义并有初值,“++i;”是正确的语句。

在选项C中,由于正确的赋值语句中,赋值符号的左边不能为常量或表达式,而右边不能为变量或表达式,很明显,“a=a++=5;”违背了赋值语句的原则。

在选项D中,“

温馨提示

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

评论

0/150

提交评论