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

下载本文档

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

文档简介

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

一、单选题(20题)1.有以下程序:#includemain(){inty=9;for(;y>0;y--)If?y%3==0)printf("%d",---y);}程序的运行结果是()。A.852B.963C.741D.875421

2.对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K)=K%9作为散列函数,则散列地址为1的元素有()个。

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

3.以下程序的输出结果是______。charcchar(charch){if(ch>='A'&&ch<='z')ch=ch-'A'+'a';returnch;}main(){chars[]="ABC+abc=defDEF",*p=s;while(*p){*p=cchar(*p);p++;}printf("%s\n",s);}

A.abe+ABC=DEFdef

B.abc+abe=defdef

C.abcaABCDEFdef

D.abcabcdefdef

4.树的度为3,且有9个度为3的节点,5个度为1的节点,但没有度为2的节点。则该树中的叶子节点数为()。

A.18B.33C.19D.32

5.若有运算符:>、*=、<<、%、sizeof,则它们按优先级(由低至高)的正确排列次序为()。

A.*=<<>%sizeof

B.<<*=>%sizeof

C.%=><<sizeof%

D.*=><<%sizeof

6.

7.定义int*swap()指的是______。

A.—个返回整型值的函数swap()

B.一个返回指向整型值指针的函swap()

C.一个指向函数swap()的指针,函数返回一个整型值

D.以上说法均错

8.设某文件内排序后得到100个初始归并段(初始顺串),若使用多路归并排序算法,且要求三趟归并完成排序,问归并路数最少为()

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

9.

10.以下程序的主函数中调用了在其面前定义的fun函数#include<stdio.h>...main(){doublea[15],k;k=fun(a);...}则以下选项中错误的fun函数首部是()。、A.doublefun(doublea[l5])

B.doublefun(double*a)

C.doublefun(doublea[])

D.doublefun(doublea)

11.在说明语句:int*f();中,标识符f代表的是

A.一个用于指向整型数据的指针变量

B.一个用于指向一维数组的行指针

C.一个用于指向函数的指针变量

D.一个返回值为指针型的函数名

12.

13.有以下语句:intb;charc[10];,则正确的输入语句是______。

A.scanf("%d%s",&b,&c);

B.scanf("%d%s",&b,c);

C.scanf("%d%s",b,c);

D.scanf("%d%s",b,&c);

14.下列程序的输出结果是()。#includedstdi0.h>#includedstring.h>voidfun(intb[]){staticinti=0;do{b[i]+=b[i+1];}while(++i<2);}main{intk,a[5]={1,3,5,4,9};fun(a);for(k=0;k<5;k++)printf("%d",a[k]);}A.13579B.48579C.48549D.48999

15.

16.下列叙述中,正确的是()

A.软件交付使用后还需要进行维护

B.软件一旦交付使用就不需要再进行维护

C.软件交付使用后其生命周期就结束

D.软件维护是指修复程序中被破坏的指令

17.有如下说明inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是()

A.*p+9B.*(p+8)C.*p+=9D.p+8

18.一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是()

A.不确定B.n-i+1C.iD.n-i

19.若已包括头文件且已有定义charsl[18],s2={"ABCDE")和inti,现要将字符串”ABCDE”赋给sl,下列语句错误的是()。

A.strcpy(s1,s2)

B.strcpy(s1,"ABCDE");

C.sl="ABCDE";

D.for(i=0;i<6;i++)sl[i]=s2[i]

20.在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是A.O(n)

B.O(n2)

C.O(log2n)

D.O(nlog2n)

二、2.填空题(20题)21.请在以下程序第一行的下划线处填写适当内容,使程序能正常运行。

#include<stdio.h>

【】(double,double);

main()

{doublex,y;

scanf("%If%If",&x,&y);

printf("%If\n",max(x,y));

}

doublemax(doublea,doubleb)

{return(a>b?a:b);}

22.以下程序的功能是计算:s=1+12+123+1234+12345。请填空。

main()

{intt=0,s=0,i;

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

{t=i+______;s=s+t;}

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

}

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

main()

{chara[]="Language",b[]="Programe";

char*p1,*p2;

intk;

p1=a;p2=b;

for(k=0;k<=7;k++)

if(*(p1+k)==*(p2+k))printf("%c,*(p1+k));

}

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

main()

{chars[]="ABCD",*p;

for(p=s+1;p<s+4;p++)printf("%s\n",p);}

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

26.已知字符'A'的ASCII码值为65,以下语句的输出结果是【】。

charch='B';

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

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

#include<stdio.h>

main()

{intx=1,y=0,a=0,b=0;

switch(x)

{case1:

switch(y)

{case0:a++;break;

case1:b++;break;

}

case2:a++;b++;break;

case3:a++;b++;

}

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

}

28.下列软件系统结构图的宽度为[]。

29.当运行以下程序时,输入abed,程序的输出结果是:【】。

insert(charstr[])

{inti

i=strlen(str);

while(i>0)

{str[2*i]=str[i];str[2*-1]='*';i--;}

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

}

main()

{charstr[40];

scanf("%s",sB);insert(str);

}

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.下列语句的输出结果是______。

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

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

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

33.软件生命周期分为软件定义期、软件开发期和软件维护期,详细设计属于______中的一个阶段。

34.如果调用fopen函数不成功,则函数返回【】;如果调用fclose函数不成功,则函数返回【】。

35.已知存储结构如下所示,请填空。

datanext

structlink{chardata;

【】;

}node;

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

#include<stdio.h>

main()

{inti;

for(i=′a′;i<′f′;i++,i++)printf("%c",i-′a′+′A′);

printf("\n");

}

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

main()

{

inta,b,c;

a=25;

b=025;

c=0x25;

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

}

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

main()

{intarr[8],i,k=0;

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

arr[i]=i;

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

k+=arr[i]+i;

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

}

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

#include<stdio.h>

#defineMAX(x,y)(x)>(y)?(x):(y)

main()

{inta=5,b=2,c=3,d=3,t;

t=MAX(a+b,c+d)*10;

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

}

40.阅读程序,填空补充程序。

#define【】30

main()

{【】;

num=10;

total=num*PRICE;

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

}

三、1.选择题(20题)41.以下程序的输出结果是______。main(){inti,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1];for(i=0;i<4;i+=2)printf("%d",p[i]);}

A.52B.51C.53D.97

42.以下程序的运行结果是

#defineMAX(A,B)(A)>(B)?(A):(B)

#definePRINT(Y)printf("Y=%d\t",Y)

main()

{inta=1,b=2,c=3,d=4,t;

t=MAX(a+b,c+d);

PRINT(t);}

A.Y=3B.存在语法错误C.Y=7D.Y=0

43.下列程序的输出结果是______。main(){inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++)for(j=0;i<=i;j++)s+=a[i][j];printf("%d\n",s);}

A.18B.19C.20D.21

44.若定义inta=10,则表达式a+=a-=a*=a的值是()。

A.0B.-180C.-100D.-90

45.在面向对象设计中,对象有很多基本特点,其中“从外面看只能看到对象的外部特性,而对象的内部对外是不可见的”这一性质指的是对象的

A.分类性B.标识惟一性C.多态性D.封装性

46.已知intt=0;while(t=1){…}则以下叙述正确的是()。

A.循环控制表达式的值为0B.循环控制表达式的值为1C.循环控制表达式不合法D.以上说法都不对

47.字长为16位的计算机是指______。

A.该计算机能够处理的最大数不超过16

B.该计算机中的CPU可以同时处理16位的二进制信息

C.该计算机的内存量为16MB

D.该计算机每秒钟所能执行的指令条数为16MIPS

48.若a、b、c、d都是int型变量且都已经正确赋初值,则下列不正确的赋值语句是()。

A.a+d;B.a++;C.a=b=c=d=100;D.a=(b=3)+(d=5);

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

A.仅仅搜索当前目录

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

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

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

50.在面向对象方法中,()描述的是具有相似属性与操作的一组对象。

A.属性B.事件C.方法D.类

51.简单的交换排序方法是()。

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

52.有以下程序voidsum(inta[]){a[0]-a[-1]+a[1];}main(){inta[10]={1,2,3,4,5,6,7,8,9,10};sum(&a[2]);printf(“%d\n”,a[2]);}程序运行后的输出结果是A.6B.7C.5D.8

53.结构化程序设计的核心和基础是()。

A.结构化分析方法B.结构化设计方法C.结构化设计理论D.结构化编程方法

54.在E-R图中,用来表示实体之间联系的图形是()

A.矩形B.椭圆形C.菱形D.平行四边形

55.若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是()。

A.-3B.9C.-12D.6

56.在软件测试设计中,软件测试的主要目的是

A.实验性运行软件B.证明软件正确C.找出软件中全部错误D.尽可能多地发现软件中的错误

57.sizeof(float)是()。A.一个双精度型表达式B.一个整型表达式C.一种函数调用D.一个不合法的表达式

58.循环链表的主要优点是______。

A.不再需要头指针了

B.己知某个结点的位置后,能够容易找到它的直接前驱

C.在进行插入、删除运算时,能更好地保证链表不断开

D.从表中任一结点出发都能扫描到整个链表

59.下列能正确定义字符串的语句是()。

A.charstr[]={'\64'};

B.charstr="kx43";

C.charstr=";

D.charstr[]="\0";

60.以下能正确定义二维数给的是

A.inta[][3];

B.inta[][3]={2*3};

C.inta[][3]={};

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

四、选择题(20题)61.对于循环队列,下列叙述中正确的是()。A.队头指针是固定不变的

B.队头指针—定大于队尾指针

C.队头指针_定小于队尾指针

D.队头指针可以大于队尾指针,也可以小于队尾指针

62.当执行以下程序段时,()。x=-l:do{x=x*X;)while(!x);A.循环体将执行一次B.循环体将执行两次C.循环体将执行无限次D.系统将提示有语法错误

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

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

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

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

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

64.

65.有以下程序

main()

{inti=010,j=0X10;

pirntf("%d,%d\n",i,j);

}

该程序的输出结果是

A.10,10B.8,10

C.8,16D.10,16

66.

67.有以下程序:

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

A.1127B.1212C.1111D.117

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

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

69.

70.

71.

72.有以下程序:执行时输入:0<;回车>;后,则输出结果是()。A.5,B.0,0,0,0,0,C.0,1,2,3,4,D.0,1.

73.若intk=8;,则执行下列程序后,变量k的正确结果是

main()

{intk=8;

switch(k)

{case8:k+=1;

case10:k+=1;

case11:k+=1;break;

default:k+=1;

}

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

}

A.12B.11

C.10D.9

74.以下程序的功能是

#include<stdio.h>

main()

{FILE*fp1;*fp2;

fp1=fopen("file1","r");

fp2=fopen("file2","w");

while(!feof(fp1))

fputc(fgetc(fp1),fp2);

fclose(fp1);

fclose(fp2);

}

A.将磁盘文件的内容显示在屏幕上

B.将两个磁盘文件合为一个

C.将一个磁盘文件复制到另一个磁盘文件中

D.将两个磁盘文件合并后送屏幕

75.

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

77.软件开发离不开系统环境资源的支持,其中必要的测试数据属于A.硬件资源B.通信资源C.支持软件D.辅助资源

78.若执行以下程序时从键盘上输入9,则输出结果是()。main(){intn;scanf(”%d”,&n);if(n++<10)printf(”/%d\n”,n);elseprintf(”%d\n”,n--);}A.11B.10C.9D.8

79.

80.

五、程序改错题(1题)81.下列给定程序中,函数fun()的功能是:将str所指字符串中的字母转换为按字母序列的后续字母(Z转换A,z转换a),其他字符不变。

请修改函数fun()中的错误,得出正确的结果。

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

试题程序:

六、程序设计题(1题)82.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是统计s所指字符串中的数字字符个数,并将其作为函数值返回。例如,s所指字符串中的内容是2def35adh253kjsdf7/kj8655x,函数fun()返回值为11注意:部分源程序在文件prog1.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:

参考答案

1.A答疑:[解析]第一次for循环,y的值为9.y%3的值为0.满足条件打印-y,即先减一-后打印,所以打印8;第二次for循环,y的值为7.y%3的值为1.不执行打印语句;第三次for循环,y的值为6.y%3的值为0.满足条件打印--y,即先减-后打印,所以打印5;第四次for循环,y的值为4.不满足条件,不执行打印语句;第五次for循环,y的值为3.满足条件,打印输出2;第六次for循环,y的值为1.不满足条件,不执行打印语句。

2.D

3.B解析:字符数组元素作函数参数是单向的值传递。函数cchar的功能是将大写字母转换为小写字母。主函数中while循环语句的条件是判断指针p当前指向的字符是否为空,若不为空,则调用函数cchar,即主函数中通过循环语句将字符串'ABC+abc=defDEF'中的大写字母全部转换为小写字母,因此printf的输出结果为选项B。

4.C设叶子结点数为〃,则该树的结点数为n+9+5=n+\n14,根据树中的结点数=树中所有结点的度之和+1,得9×3+0×2+5×1+n×0+1=n+14,则n=19。本题选择C选项。

5.D解析:本题主要考查算术运算的优先级。顺序如下:

[*]

注:*=、>、<<、%、sizeof的优先级依次递增。

6.D

7.B解析:—个函数可以带回—个整型值、字符值、实型值等,但也可以带回指针型数据,即地址。本题的定义中,包括括号和*号,由于()优先级高于*。故它是—个返回整型指针的函数。

8.A

9.A

10.A由题可知fun的参数为变量,而a[15]为常量,所以答案为A。

11.D解析:带回指针值的函数,其一般定义形式为:

类型标识符*函数名(参数表);

例如;int*f(x,y);

其中,f是函数名,调用它以后能得到一个指向整型数据的指针(地址),x,y是函数f的形参。在f的两侧分别为*运算符和()运算符,而()优先级高于*,因此f先与()结合,显然是函数形式。这个函数前面有一个*,表示此函数是指针型函数(函数值是指针)。前面的int表示返回的指针指向整型变量。

12.B

13.B解析:b是整型数,在输人语句中要加取地址符,而c是数组名,本身就是数组的首地址,因此不用加取地址符。

14.C本题考查do-while循环,在fun函数中,首先定义了静态变量i=0,do-while循环要实现的功能是以b[0]=b[0]+b[1],b[1]=b[1]+b[2],其他元素不变的规则重新给b数组赋值。在主函数中,通过调用fun函数,按上面的规则对数组a重新赋值,最后输出数组a。

15.D

16.A解析:维护是软件生命周期的最后一个阶段,也是持续时间最长、付出代价最大的阶段。软件工程学的目的就在于提高软件的可维护性,同时也要设法降低维护的代价。

软件维护通常有以下四类;

①为纠正使用中出现的错误而进行的改正性维护;

②为适应环境变化而进行的适应性维护;

③为改进原有软件而进行的完善性维护;

④为将来的可维护和可靠而进行的预防性维护。

软件维护不仅包括程序代码的维护,还包括文档的维护。文档可以分为用户文档和系统文档两类。但无论是哪类文档,都必须与程序代码同时维护。只有与程序代码完全一致的文档才有意义和价值。由此可知,本题中选项B、C、D中的说法都是错误的。

17.B解析:在C语言的数组元素的引用方法,我们在前面已经讲过了,比如数组元素a[0],可以用表达式*(p+0),即*p来引用,对于数组元素a[1],可以用表达式*(p+1)来引用,在这里,p+1的值就是数组元素a[1]的地址,对此地址使用“间接访问运算符”:*(p+1)就代表存储单元a[1],注意:一对圆括号不可少。同样,对于数组元素a[2],则可以用表达式。(p+2)来引用…,对于数组元素a[9],可以用表达式,(p+9)来引用。因此,当指针变量p指向a数组的起始地址时,若0≤i<10,则数组元素a[i]可以用*(p+i)来表示。

18.B

19.C数组名sl是代表sl数组首地址的地址常量,因为“=”左边不能出现常量,所以s1="ABCDE"的方法是错误的。

20.C解析:二分查找法也称为折半查找法。它的基本思想是:将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2],则找到x,算法终止;如果x<a[n/2],则只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列);如果x>a[n/2],则只要在数组a的右半部继续搜索x。每次余下n/(2i)个元素待比较,当最后剩下一个时,即n/(2i)=1。故n=2i;所以i=log2n。

21.doublemax或externdoublemaxdoublemax或externdoublemax解析:main函数中调用了一个max函数,而max函数是在调用之后定义的,所以要求填空的内容应该是对函数进行声明的语句。由max函数的定义可知此函数是double型的,因此空格处应该填doublemax或externdoublemax。

22.t*10或10*tt*10或10*t解析:本题要求累加一系列有规律的数,从输出结果来看,s保存的是最终结果,而s在循环体中,每次累加一个t,则说明t在5次循环中分别等于1.12、123、1234、12345;而t每次循环等于“填空内容”加上循环变量i,又因为i在5次循环中分别等于1、2、3、4,5,所以t每次循环要加的“填空内容”应分别为0、10、120,1230,12340,这一系列值正好是前一次t的值的10倍.所以“填空内容”应是t*10。

23.gae

24.BCDCDDBCD\r\nCD\r\nD解析:本题考查指向字符串的指针的运算方法。指针变量p首先指向字符串中的第一个字符A,执行p=s+1后,p指向字符串中的第二个字符B,然后输出值“BCD”并换行,依次执行循环语句。

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

26.B66B66解析:字符B的ASCII码值为66,因此,按%c形式输出B,按%d形式输出66,输出结果为:B66。

27.a=2b=1a=2,b=1解析:本题考查了switch结构的内容。C语言中,程序执行完一个case标号的内容后,如果没有break语句,控制结构会转移到下一个case继续执行,因为case常量表达式只是起语句标号作用,并不是在该处进行条件判断。本题程序在执行完内部switch结构后,继续执行了外部switch结构的case2分支,最后a和b的值分别为2和1。

28.33解析:软件系统结构图的宽度:整体控制跨度(最大模块数的层)的表示。

29.a*b*c*da*b*c*d,解析:在insert()函数,因为题目要求输入的字符串为abed,所以执行完“i=strlen(str);”后,i中存放的是字符串abcd的长度值4。所以接F来的while循环会循环4次,每次让i减1,故4次循环中i的值依次为4、3、2、1。每次循环会执行两条语句str[2*i]=str[i];str[2*i-1]='*',当i=4时为:str[8]=str[4];str[7=='*';。执行结果是将字符串abed末尾的结束符'\\0'复制到其下标值2倍的位置,并在其前1位插入—个'*'哼符。接下来i=3,执行str[6]=str[3];str[5]='*'。执行后会将字符串abcd最后一个字符,d复制到其下标值2倍的位置,并在其前1位插入一个'*'字符。依次类推,直到i=1,执行str[2]=str[1];str[1]='*',将字符tb,往后移动了1位,并在原位置插入'*'字符。所以,循环结束后,字符串str会变为a*b*c*d*。这就是程序的输出结果。

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

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

32.在二叉树的第k层上,最多有2k-1(k>1)个结点。

33.软件开发软件开发解析:软件生命周期分为3个时期共8个阶段:软件定义期(问题定义、可行性研究和需求分析)、软件开发期(系统设计、详细设计、编码和测试)、软件维护期(即运行维护阶段)。

34.NULL或0EOF或-1NULL或0\r\nEOF或-1解析:如果fopen()函数调用不成功,则返回一个空指针值NULL(0);如果fclose()函数调用不成功,则返回EOF(-1)。所以本题的两个空应分别填NULL和EOF。

35.strucklink*nextstrucklink*next解析:结构体变量构成链表要求结构体中必须有一个指向该结构体变量自身的指针用来指明链表的下一个结点。注意:结构体变量的定义及其成员变量的引用。

36.ACEACE解析:在本题中,for循环体每执行完一次,变量i的值自加两次。i的初值为\'a\',执行一次循环后变为\'c\',之后再变成\'e\',当其变为\'g\'时,循环条件若不满足,循环终止,故本题共输出3个字符。表达式'i-\'a\'+\ue008\'A\'\ue009'即表示输出i对应的大写字母,结果为ACE。

37.252137252137解析:本题中先定义了整型变量a、b和c,然后分别给赋值a为25,b为八进制的025,c为十六进制0x25。然后调用pruntf()函数将a、b和c分别用十进制输出,且中间用空格隔开,八进制025转换为十进制的值为21,十六进制的0x25转换为十进制的值为37,故最后的输出结果为252137。

38.20

39.77解析:程序中经过宏替换后,表达式t=MAX(a+b,c+d)*10变为t=(a+b)>(c+d)?(a+b):(c+d)*10。因为(a+b)>(c+d)为真,所以t=(a+b),输出结果为7。

40.PRICEintnumtotaltotalnumPRICE\r\nintnum,total\r\ntotal,num解析:程序中出现了变量num,total以及宏PRICE,因此应在相应位置说明它们。

41.C解析:题中*p=&x[1][1];是指将数组x的数组元素x[1][1]的地址赋值给指针变量p,使p指向x[1][1]这个数组元素,那么p[0]即为指针变量p当前所指向的数组元素x[1][1]的值。

42.C解析:考查带参数的宏替换。宏替换不像函数调用要进行参数值的计算、传递等,而只是简单按照原格式进行字符串的替换。

43.A

44.B解析:算术运算符的运算规则是:从右到左的原则。所以表达式中先计算a=a-a*(上标)a的值是-90,再计算a=a+a的值是-180。

45.D解析:从外面看只能看到对象的外部特性,而对象的内部,即处理能力的实行和内部状态,指的是对象的封装性。

46.B解析:t=1是将t赋值为1,所以循环控制表达式的值为1。判断t是否等于1时,应用t==1,注意“=”与“==”的用法。

47.B解析:字长是指CPU可以同时处理二进制的位数,是由CPU的型号和类型决定的。

48.A解析:C语言规定,赋值号的右边可以是一个赋值表达式.因此选项C)、选项D)正确:在选项B)中,a++是一个自加1的表达式,a被重新赋值,因此它是一个合法的赋值表达式:选项A)中,a+d是一个算术表达式,虽然最后有一个分号,但这个表达式中没有赋值操作,因此它不是一条赋值语句。

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

50.D解析:类(calss)描述的是具有相似属性与操作的一组对象,而一个具体对象则是其对应类的一个实例。

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

52.A本题考查的是数组和函数。sum()函数接收一个int型数组作参数,也可以把它看作是一个int型指针,语句a[0]=a[*1)+a(比的意思就是将参数指针指向内容的前一个元素和后一个元素的值相加放到指针所指的位置.因此,主函数中调用sum(&a[2]);的意思就是让a[2]=a[1]+a[3];,所以最后输出的结果是6。应该选择A。

53.CC。【解析】结构化程序设计的核心和基础是结构化设计理论,其中包括:结构化分析方法、结构化设计方法和结构化编程方法。

54.C解析:E-R模型可用E-R图来表示,它具有3个要素:①实体(型)用矩形框表示,框内为实体名称。②属性用椭圆型来表示,并用线与实体连接。属性较多时也可以将实体及其属性单独列表。③实体间的联系用菱形框表示。用线将菱形框与实体相连,并上标注联系的类型。

55.C解析:本题中首先定义一个整型变量a并给它赋初值为3,在表达式中,从右开始执行,即先执行“a-=a*a;”等价于a=a-a*a即a=3-3*3=-6,此时a的值为-6,接着执行“a+=a-;”相当于执行a=a+a即a=-6+(-6)=-12,此时a的值为-12。所以,4个选项中选项C符合题意。

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

57.B该函数用于数据类型和变量。注意:sizeof操作符不能用于函数、不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、void类型等。

58.D

59.D解析:字符串常量是用一对双括号括起来的一串字符。它用字符数组来存放,不能用一对大括号对括起来。

60.B解析:选项A中省略了第一维的长度,在c语言中是不允许的,故选项A错误;选项C也是省略第一维的长度;选项D中定义了一个2行3列的数组,而在赋值的时候却赋了一个3行的值给它,显然不正确,故选项D错误,所以,4个选项中选项B符合题意。

61.D循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构,所以对头指针有时可能大于队尾指针有时也可能小于队尾指针,故本题答案为D)。

62.Ado-wlfile的功能是先执行一次循环体,再判断条件是否成立,当x=-1时,执行do语句,x=x*x=1,接着执行while后的表达式,其值为0,退出循环,因此循环体只执行了一次。

63.A答案A

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

64.C

65.C本题主要考查八进制数与十六进制数的十进制输出。做这类题目的关键是对数据进行数制转换。

在程序中,首先定义了两个变量i和j,其中i的初值为一个八进制数10,而j的初值为一个十六进制数10,然后输出它们的十进制数。

一般情况下,八进制数与十进制数的转换通过二进制来实现,即先将八进制数转换为二进制数,然后将二进制转换为十进制数。八进制数的一位对应二进制数的三位,那么将八进制数10转换成二进制应该为001000,再将这个值转换为十进制,即2的三次方,结果为8。

将十六进制数转换为十进制数也可以通过二进制来实现。一位十六进制数对应四位二进制数,转换后为00010000,再将这个值转换为十进制数,即2的四次方,结果为16。

因此本题程序最后输出的结果为8,16。

66.C

67.D本题考查宏定义的用法,宏定义只是做个简单的替换,所以本题中执行f(2)=(2*N+1)=11,执行f(1+1)=(1+1}N+1)=7。选项D正确。

68.A解析:本题考查用strlen函数计算字符串长度的方法。该字符串中包含的字符是:\'\\t\'(跳格符)、\'\\'\'(双引号)、\'\\065\'(ASCII值为八进制065,也即+进制为51的字符)、\'\\xff\'(ASCII值为+六进制ff,也即+进制为255的字符)、\'\\n\'(换行符)。

69.A

70.B

71.C

72.C”anf(”%c”,&c),输入的字符,题目中输入了0,字符0,对应于ASCIl码为48,因此for循环中,i的范围从0~5,均小于48,if条件不成立,直接执行下一条语句,执行语句prinff,因此得到的结果是0,1,2,3,4。故答案为C选项。

73.B在本题中,程序的作用是通过switch语句改变已经被赋初值的变量k的值。程序中首先将变量k赋初值为8,然后使用switch选择结构。由于k的值为8,在switch结构中找到与之对应的块case8执行,完成一次k加1的操作,此时变量k的值变为9,由于没有break语句,程序接着往下执行,执行case10程序块,再完成一次k加1的操作,此时k的值为10,又由于没有break语句,程序接着往下执行,执行case11,再完成一次k加1的操作,此时k的值为11,程序碰到break语句,跳出switch结构。然后执行输出语句,输出的结果为11。

74.C本题主要考查文件的操作。在本题的程序中,首先定义了两个文件指针fp1和fp2,然后用指针fp1指向一个以读方式打开的文件file1,用指针fp2指向一个以写方式打开的文件file1,接着执行while循环,循环的结束条件是(!feof(fp1))为假,即feof(fp1)为真,表示对文件fp1的操作读取到结束符,因此,循环结束的条件是对文件file1的读取结束,循环体语句fputc(fgetc(fp1),fp2);中用到了fgetc和fputc函数,C语言提供这两个函数对文本文件进行字符的读写操作。fgetc(fp1)函数的作用是从输入流fp1的当前位置返回一个字符,并将文件指针指示器移到下一个字符处;fputc(ch,fp2)函数的作用是将字符ch的值写入所指定的流文件的当前位置处,并将文件指针后移一位。

根据上面的分析,可以知道循环结束后,即将指针fp1指向的文件复制到指针fp2指向的文件中,然后关闭两个操作的文件。因此,本题程序的作用是将一个磁盘文件复制到另一个磁盘文件中,本题正确答案选C。

75.A

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

77.D软件开发离不开系统环境资源的支持,其中主要的资源有硬件资源、通信资源、辅助资源等。(1)硬件资源是指组成计算机及相关应用所需要的硬件,它是软件开发必不可少的资源,因为无论什么样的软件工具都需要在硬件上完成任务,它是其他资源的基础资源。(2)通信资源是指为软件开发提供通信支撑的资源,它与测试数据无关。(3)支持软件是指为软件开发提供操作平台的软件,如常用的面向对象开发的Rose软件,它主要是软件开发的工具。通过对上述分析的总结,可以知道本题的正确答案选D。

78.B当n为9时,此时if语句成立,执行n++后,n为10,因此输出n的值为10,故选择B选项。

79.D

80.B81.(1)错误:while(*str!=ˊ@ˊ)

正确:while(*str)或while(*str!=ˊ\0ˊ)或while(*str!=0)

(2)错误:(*str++);

正确:str++

【解析】首先判断字母是否为小写字母,如果是小写字母则进行转换。

第一个标识下“while(*str!=ˊ@ˊ)”语句原意是str不指向字符串尾就进入下面的循环,所以对于指针判断不为结束符的语句应该是循环为真,所以应为“while(*str)”或“while(*str!=ˊ\Oˊ)”或“while(*str!=0)”。

第二个标识下“(*str)++;”是对字符内容加1,而原题是对字符位置加1,所以将其改为“str++;”。

82.intfun(char*s)2;{intn=0;3char*p;4:;for(p=s;*p!=,\\0';p丄+)if((*p≥’o’)&&(≤’9’))6n++;7returnn;8}要统计字符串中数字字符的个数,首先应定义变量n,并将其初始化为0,然后遍历字符串,逐个判断字符是否为数字字符,判断条件为该元素的ASCII值在字符o和9的ASCII值之间,若判断条件成立,则使n的值加1,否则,继续判断下一个字符,直到字符串结束。2021-2022年浙江省宁波市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(20题)1.有以下程序:#includemain(){inty=9;for(;y>0;y--)If?y%3==0)printf("%d",---y);}程序的运行结果是()。A.852B.963C.741D.875421

2.对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K)=K%9作为散列函数,则散列地址为1的元素有()个。

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

3.以下程序的输出结果是______。charcchar(charch){if(ch>='A'&&ch<='z')ch=ch-'A'+'a';returnch;}main(){chars[]="ABC+abc=defDEF",*p=s;while(*p){*p=cchar(*p);p++;}printf("%s\n",s);}

A.abe+ABC=DEFdef

B.abc+abe=defdef

C.abcaABCDEFdef

D.abcabcdefdef

4.树的度为3,且有9个度为3的节点,5个度为1的节点,但没有度为2的节点。则该树中的叶子节点数为()。

A.18B.33C.19D.32

5.若有运算符:>、*=、<<、%、sizeof,则它们按优先级(由低至高)的正确排列次序为()。

A.*=<<>%sizeof

B.<<*=>%sizeof

C.%=><<sizeof%

D.*=><<%sizeof

6.

7.定义int*swap()指的是______。

A.—个返回整型值的函数swap()

B.一个返回指向整型值指针的函swap()

C.一个指向函数swap()的指针,函数返回一个整型值

D.以上说法均错

8.设某文件内排序后得到100个初始归并段(初始顺串),若使用多路归并排序算法,且要求三趟归并完成排序,问归并路数最少为()

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

9.

10.以下程序的主函数中调用了在其面前定义的fun函数#include<stdio.h>...main(){doublea[15],k;k=fun(a);...}则以下选项中错误的fun函数首部是()。、A.doublefun(doublea[l5])

B.doublefun(double*a)

C.doublefun(doublea[])

D.doublefun(doublea)

11.在说明语句:int*f();中,标识符f代表的是

A.一个用于指向整型数据的指针变量

B.一个用于指向一维数组的行指针

C.一个用于指向函数的指针变量

D.一个返回值为指针型的函数名

12.

13.有以下语句:intb;charc[10];,则正确的输入语句是______。

A.scanf("%d%s",&b,&c);

B.scanf("%d%s",&b,c);

C.scanf("%d%s",b,c);

D.scanf("%d%s",b,&c);

14.下列程序的输出结果是()。#includedstdi0.h>#includedstring.h>voidfun(intb[]){staticinti=0;do{b[i]+=b[i+1];}while(++i<2);}main{intk,a[5]={1,3,5,4,9};fun(a);for(k=0;k<5;k++)printf("%d",a[k]);}A.13579B.48579C.48549D.48999

15.

16.下列叙述中,正确的是()

A.软件交付使用后还需要进行维护

B.软件一旦交付使用就不需要再进行维护

C.软件交付使用后其生命周期就结束

D.软件维护是指修复程序中被破坏的指令

17.有如下说明inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是()

A.*p+9B.*(p+8)C.*p+=9D.p+8

18.一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是()

A.不确定B.n-i+1C.iD.n-i

19.若已包括头文件且已有定义charsl[18],s2={"ABCDE")和inti,现要将字符串”ABCDE”赋给sl,下列语句错误的是()。

A.strcpy(s1,s2)

B.strcpy(s1,"ABCDE");

C.sl="ABCDE";

D.for(i=0;i<6;i++)sl[i]=s2[i]

20.在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是A.O(n)

B.O(n2)

C.O(log2n)

D.O(nlog2n)

二、2.填空题(20题)21.请在以下程序第一行的下划线处填写适当内容,使程序能正常运行。

#include<stdio.h>

【】(double,double);

main()

{doublex,y;

scanf("%If%If",&x,&y);

printf("%If\n",max(x,y));

}

doublemax(doublea,doubleb)

{return(a>b?a:b);}

22.以下程序的功能是计算:s=1+12+123+1234+12345。请填空。

main()

{intt=0,s=0,i;

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

{t=i+______;s=s+t;}

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

}

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

main()

{chara[]="Language",b[]="Programe";

char*p1,*p2;

intk;

p1=a;p2=b;

for(k=0;k<=7;k++)

if(*(p1+k)==*(p2+k))printf("%c,*(p1+k));

}

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

main()

{chars[]="ABCD",*p;

for(p=s+1;p<s+4;p++)printf("%s\n",p);}

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

26.已知字符'A'的ASCII码值为65,以下语句的输出结果是【】。

charch='B';

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

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

#include<stdio.h>

main()

{intx=1,y=0,a=0,b=0;

switch(x)

{case1:

switch(y)

{case0:a++;break;

case1:b++;break;

}

case2:a++;b++;break;

case3:a++;b++;

}

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

}

28.下列软件系统结构图的宽度为[]。

29.当运行以下程序时,输入abed,程序的输出结果是:【】。

insert(charstr[])

{inti

i=strlen(str);

while(i>0)

{str[2*i]=str[i];str[2*-1]='*';i--;}

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

}

main()

{charstr[40];

scanf("%s",sB);insert(str);

}

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.下列语句的输出结果是______。

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

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

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

33.软件生命周期分为软件定义期、软件开发期和软件维护期,详细设计属于______中的一个阶段。

34.如果调用fopen函数不成功,则函数返回【】;如果调用fclose函数不成功,则函数返回【】。

35.已知存储结构如下所示,请填空。

datanext

structlink{chardata;

【】;

}node;

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

#include<stdio.h>

main()

{inti;

for(i=′a′;i<′f′;i++,i++)printf("%c",i-′a′+′A′);

printf("\n");

}

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

main()

{

inta,b,c;

a=25;

b=025;

c=0x25;

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

}

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

main()

{intarr[8],i,k=0;

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

arr[i]=i;

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

k+=arr[i]+i;

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

}

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

#include<stdio.h>

#defineMAX(x,y)(x)>(y)?(x):(y)

main()

{inta=5,b=2,c=3,d=3,t;

t=MAX(a+b,c+d)*10;

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

}

40.阅读程序,填空补充程序。

#define【】30

main()

{【】;

num=10;

total=num*PRICE;

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

}

三、1.选择题(20题)41.以下程序的输出结果是______。main(){inti,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1];for(i=0;i<4;i+=2)printf("%d",p[i]);}

A.52B.51C.53D.97

42.以下程序的运行结果是

#defineMAX(A,B)(A)>(B)?(A):(B)

#definePRINT(Y)printf("Y=%d\t",Y)

main()

{inta=1,b=2,c=3,d=4,t;

t=MAX(a+b,c+d);

PRINT(t);}

A.Y=3B.存在语法错误C.Y=7D.Y=0

43.下列程序的输出结果是______。main(){inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++)for(j=0;i<=i;j++)s+=a[i][j];printf("%d\n",s);}

A.18B.19C.20D.21

44.若定义inta=10,则表达式a+=a-=a*=a的值是()。

A.0B.-180C.-100D.-90

45.在面向对象设计中,对象有很多基本特点,其中“从外面看只能看到对象的外部特性,而对象的内部对外是不可见的”这一性质指的是对象的

A.分类性B.标识惟一性C.多态性D.封装性

46.已知intt=0;while(t=1){…}则以下叙述正确的是()。

A.循环控制表达式的值为0B.循环控制表达式的值为1C.循环控制表达式不合法D.以上说法都不对

47.字长为16位的计算机是指______。

A.该计算机能够处理的最大数不超过16

B.该计算机中的CPU可以同时处理16位的二进制信息

C.该计算机的内存量为16MB

D.该计算机每秒钟所能执行的指令条数为16MIPS

48.若a、b、c、d都是int型变量且都已经正确赋初值,则下列不正确的赋值语句是()。

A.a+d;B.a++;C.a=b=c=d=100;D.a=(b=3)+(d=5);

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

A.仅仅搜索当前目录

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

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

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

50.在面向对象方法中,()描述的是具有相似属性与操作的一组对象。

A.属性B.事件C.方法D.类

51.简单的交换排序方法是()。

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

52.有以下程序voidsum(inta[]){a[0]-a[-1]+a[1];}main(){inta[10]={1,2,3,4,5,6,7,8,9,10};sum(&a[2]);printf(“%d\n”,a[2]);}程序运行后的输出结果是A.6B.7C.5D.8

53.结构化程序设计的核心和基础是()。

A.结构化分析方法B.结构化设计方法C.结构化设计理论D.结构化编程方法

54.在E-R图中,用来表示实体之间联系的图形是()

A.矩形B.椭圆形C.菱形D.平行四边形

55.若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是()。

A.-3B.9C.-12D.6

56.在软件测试设计中,软件测试的主要目的是

A.实验性运行软件B.证明软件正确C.找出软件中全部错误D.尽可能多地发现软件中的错误

57.sizeof(float)是()。A.一个双精度型表达式B.一个整型表达式C.一种函数调用D.一个不合法的表达式

58.循环链表的主要优点是______。

A.不再需要头指针了

B.己知某个结点的位置后,能够容易找到它的直接前驱

C.在进行插入、删除运算时,能更好地保证链表不断开

D.从表中任一结点出发都能扫描到整个链表

59.下列能正确定义字符串的语句是()。

A.charstr[]={'\64'};

B.charstr="kx43";

C.charstr=";

D.charstr[]="\0";

60.以下能正确定义二维数给的是

A.inta[][3];

B.inta[][3]={2*3};

C.inta[][3]={};

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

四、选择题(20题)61.对于循环队列,下列叙述中正确的是()。A.队头指针是固定不变的

B.队头指针—定大于队尾指针

C.队头指针_定小于队尾指针

D.队头指针可以大于队尾指针,也可以小于队尾指针

62.当执行以下程序段时,()。x=-l:do{x=x*X;)while(!x);A.循环体将执行一次B.循环体将执行两次C.循环体将执行无限次D.系统将提示有语法错误

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

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

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

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

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

64.

65.有以下程序

main()

{inti=010,j=0X10;

pirntf("%d,%d\n",i,j);

}

该程序的输出结果是

A.10,10B.8,10

C.8,16D.10,16

66.

67.有以下程序:

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

A.1127B.1212C.1111D.117

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

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

69.

70.

71.

72.有以下程序:执行时输入:0<;回车>;后,则输出结果是()。A.5,B.0,0,0,0,0,C.0,1,2,3,4,D.0,1.

73.若intk=8;,则执行下列程序后,变量k的正确结果是

main()

{intk=8;

switch(k)

{case8:k+=1;

case10:k+=1;

case11:k+=1;break;

default:k+=1;

}

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

}

A.12B.11

C.10D.9

74.以下程序的功能是

#include<stdio.h>

main()

{FILE*fp1;*fp2;

fp1=fopen("file1","r");

fp2=fopen("file2","w");

while(!feof(fp1))

fputc(fgetc(fp1),fp2);

fclose(fp1);

fclose(fp2);

}

A.将磁盘文件的内容显示在屏幕上

B.将两个磁盘文件合为一个

C.将一个磁盘文件复制到另一个磁盘文件中

D.将两个磁盘文件合并后送屏幕

75.

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

77.软件开发离不开系统环境资源的支持,其中必要的测试数据属于A.硬件资源B.通信资源C.支持软件D.辅助资源

78.若执行以下程序时从键盘上输入9,则输出结果是()。main(){intn;scanf(”%d”,&n);if(n++<10)printf(”/%d\n”,n);elseprintf(”%d\n”,n--);}A.11B.10C.9D.8

79.

80.

五、程序改错题(1题)81.下列给定程序中,函数fun()的功能是:将str所指字符串中的字母转换为按字母序列的后续字母(Z转换A,z转换a),其他字符不变。

请修改函数fun()中的错误,得出正确的结果。

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

试题程序:

六、程序设计题(1题)82.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是统计s所指字符串中的数字字符个数,并将其作为函数值返回。例如,s所指字符串中的内容是2def35adh253kjsdf7/kj8655x,函数fun()返回值为11注意:部分源程序在文件prog1.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:

参考答案

1.A答疑:[解析]第一次for循环,y的值为9.y%3的值为0.满足条件打印-y,即先减一-后打印,所以打印8;第二次for循环,y的值为7.y%3的值为1.不执行打印语句;第三次for循环,y的值为6.y%3的值为0.满足条件打印--y,即先减-后打印,所以打印5;第四次for循环,y的值为4.不满足条件,不执行打印语句;第五次for循环,y的值为3.满足条件,打印输出2;第六次for循环,y的值为1.不满足条件,不执行打印语句。

2.D

3.B解析:字符数组元素作函数参数是单向的值传递。函数cchar的功能是将大写字母转换为小写字母。主函数中while循环语句的条件是判断指针p当前指向的字符是否为空,若不为空,则调用函数cchar,即主函数中通过循环语句将字符串'ABC+abc=defDEF'中的大写字母全部转换为小写字母,因此printf的输出结果为选项B。

4.C设叶子结点数为〃,则该树的结点数为n+9+5=n+\n14,根据树中的结点数=树中所有结点的度之和+1,得9×3+0×2+5×1+n×0+1=n+14,则n=19。本题选择C选项。

5.D解析:本题主要考查算术运算的优先级。顺序如下:

[*]

注:*=、>、<<、%、sizeof的优先级依次递增。

6.D

7.B解析:—个函数可以带回—个整型值、字符值、实型值等,但也可以带回指针型数据,即地址。本题的定义中,包括括号和*号,由于()优先级高于*。故它是—个返回整型指针的函数。

8.A

9.A

10.A由题可知fun的参数为变量,而a[15]为常量,所以答案为A。

11.D解析:带回指针值的函数,其一般定义形式为:

类型标识符*函数名(参数表);

例如;int*f(x,y);

其中,f是函数名,调用它以后能得到一个指向整型数据的指针(地址),x,y是函数f的形参。在f的两侧分别为*运算符和()运算符,而()优先级高于*,因此f先与()结合,显然是函数形式。这个函数前面有一个*,表示此函数是指针型函数(函数值是指针)。前面的int表示返回的指针指向整型变量。

12.B

13.B解析:b是整型数,在输人语句中要加取地址符,而c是数组名,本身就是数组的首地址,因此不用加取地址符。

14.C本题考查do-while循环,在fun函数中,首先定义了静态变量i=0,do-while循环要实现的功能是以b[0]=b[0]+b[1],b[1]=b[1]+b[2],其他元素不变的规则重新给b数组赋值。在主函数中,通过调用fun函数,按上面的规则对数组a重新赋值,最后输出数组a。

15.D

16.A解析:维护是软件生命周期的最后一个阶段,也是持续时间最长、付出代价最大的阶段。软件工程学的目的就在于提高软件的可维护性,同时也要设法降低维护的代价。

软件维护通常有以下四类;

①为纠正使用中出现的错误而进行的改正性维护;

②为适应环境变化而进行的适应性维护;

③为改进原有软件而进行的完善性维护;

④为将来的可维护和可靠而进行的预防性维护。

软件维护不仅包括程序代码的维护,还包括文档的维护。文档可以分为用户文档和系统文档两类。但无论是哪类文档,都必须与程序代码同时维护。只有与程序代码完全一致的文档才有意义和价值。由此可知,本题中选项B、C、D中的说法都是错误的。

17.B解析:在C语言的数组元素的引用方法,我们在前面已经讲过了,比如数组元素a[0],可以用表达式*(p+0),即*p来引用,对于数组元素a[1],可以用表达式*(p+1)来引用,在这里,p+1的值就是数组元素a[1]的地址,对此地址使用“间接访问运算符”:*(p+1)就代表存储单元a[1],注意:一对圆括号不可少。同样,对于数组元素a[2],则可以用表达式。(p+2)来引用…,对于数组元素a[9],可以用表达式,(p+9)来引用。因此,当指针变量p指向a数组的起始地址时,若0≤i<10,则数组元素a[i]可以用*(p+i

温馨提示

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

评论

0/150

提交评论