2021-2022学年四川省广安市全国计算机等级考试C语言程序设计真题(含答案)_第1页
2021-2022学年四川省广安市全国计算机等级考试C语言程序设计真题(含答案)_第2页
2021-2022学年四川省广安市全国计算机等级考试C语言程序设计真题(含答案)_第3页
2021-2022学年四川省广安市全国计算机等级考试C语言程序设计真题(含答案)_第4页
2021-2022学年四川省广安市全国计算机等级考试C语言程序设计真题(含答案)_第5页
已阅读5页,还剩22页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2021-2022学年四川省广安市全国计算机等级考试C语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.若有以下定义和语句charc1='b',c2='e'printf("%d,%c\n",c2-c1,c2-'a'+A);则输出结果()

A.2,MB.3,EC.2,ED.输出项与对应的格式控制不一致,输出结果不确定

2.设S为一个长度为n的字符串,其中的字符各不相同,则S中的互异的非平凡子串(非空且不同于S本身)的个数为()。

A.2n-1B.n2C.(n2/2)+(n/2)D.(n2/2)+(n/2)-1

3.下面程序的输出结果是______。#include<stdio.h>main(){char*p[]={"BOOL","OPK","H","SP"};inti:for(i=3;i>=0;i-,i-)printf("%c",*p[i]);printf("\n");}

A.SOB.SPC.SPOPKD.SHOB

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

A.构成C程序的基本单位是函数

B.可以在一个函数中定义另一个函数

C.main函数必须放在其他函数之前

D.C函数定义的格式是K&R格式

5.若有序表的关键字序列为(b,c,d,e,f,g,q,r,s,t),则在二分查找关键字b的过程中,先后进行的关键字依次为()

A.f,c,BB.f,d,BC.g,c,BD.g,d,B

6.

7.若有定义“inta;longb;doublex,y;”,则以下选项中正确的表达式是()。

A.a=x<>yB.a%(int)(x-y)C.(a*y)%bD.y=x+y=x

8.下列程序的输出结果是()。#include<stdio.h>main(){structst{inty,x,z;};union{longi;intj;chark;}un;printf("%d,%d\n",sizeof(structst),sizeof(un));}

A.6,2B.6,4C.8,4D.8,6

9.折半查找法的查找速度一定比顺序查找法快()。

A.正确B.错误

10.

11.设有inta=15,b=240;,则表达式(a&b)&b||b的值为______。

A.0B.1C.真D.假

12.算术运算符和圆括号有不同的运算优先级,对于表达式“a+b+c*(d+e)”,关于执行顺序,以下说法正确的是()。

A.先执行“(d+e)”得r2,再执行“c*r2”得r3,再执行“a+b”得r1,最后执行“r1+r3”得表达式最后结果

B.先执行“a+b”得r1,再执行“(d+e)”得r2,再执行“c*r2”得r3,最后执行“r1+r3”得表达式最后结果

C.先执行“(d+e)”得r2,再执行“c*r2”得r3,再执行“b+r3”得r4,最后执行“a+r4”得表达式最后结果

D.先执行“a+b”得r1,再执行“r1+c”得r5,再执行“(d+e)”得r2,最后执行“r5*r2”得表达式最后结果

二、2.填空题(12题)13.算法执行过程中所需要的基本运算次数称为算法的______。

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

#defineMCRA(m)2*m

#defineMCRB(n,m)2*MCRA(n)+m

main()

{inti-2,j=3;

printf("%d\n",MCRB(j,MCRA(i)));

}

15.在一个容量为32的循环队列中,若头指针front=3,尾指针rear=2,则该循环队列中共有______个元素。

16.在结构化设计方法中,数据流图表达了问题中的数据流与加工间的关系,并且每一个______实际上对应一个处理模块。

17.在进行模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块(桩模块),其中【】的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。

18.设i,j,k均是int型变量,则执行以下for循环后,k的值为【】。

for(i=0,j=10;i<=j;i++,j--)

k=i+j;

19.下列程序的循环次数是______。

x=2;

do

{x=x*x;}

while(!x);

20.以下程序的输出结果是()。#include<stdio.h>fun(){staticinta=0;a+=3;printf("%d",A);}main(){intcc;for(cc=1;cc<5;cc++)fun();printf("\n");}

21.按照“先进先出”的原则组织数据的结构是______。

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

23.若有如下程序:

voidsub()

{staticintx=8;

x/=2;printf("%d",x);

}

main()

{intm;

for(m=0;m<2;m++)sub();}

则程序运行后的输出结果是【】.

24.语句:x++;++x;x=1/x;执行后都使变量x中的值增1,请写出一条同一功能的赋值语句______。

三、3.程序设计题(10题)25.请编写函数fun(),它的功能是计算:

s=(ln(1)+ln(2)+ln(3)+…+ln(m))0.5

在C语言中可调用log(n)函数求ln(n)。

例如,若m的值为20,则fun()函数值为6.506583。

注意:部分源程序给出如下。

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

doublefun(intm)

{

}

main()

{

clrscr();

printf("%f\n",fun(20));

}

26.某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。请编写fun()函数,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。

例如,若学生的成绩是85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应当是78.875。

注意:部分源程序给出如下。

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

试题程序:

#include<stdio.h>

#defineN8

typedefstruct

{charnum[10];

doubles[N];

doubleave;

}STREC;

voidfun()

{

}

main()

{

STRECs={"GA005",85.5,76,69.5,85,91,72,64.5,87.5);

inti;

fun(&s);

printf("The%s'sstudentdata:\n",s.num)//*输出学号*/

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

printf("%4.1f\n",s.s[i]);

/*输出各科成绩*/

printf("\nave=%7.3f\n",s.ave);

/*输出平均分*/

}

27.请编写一个函数voidfun(char*tt,intpp[]),统计在tt字符串中“a”到“z”26个字母各自出现的次数,并依次放在pp所指数组中。

例如:当输入字符串abcdefghabcdeabc后,程序的输出结果应该是:33322110000000000000000000

注意:部分源程序给出如下。

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

试题程序:

#include<conio.h>

#include<stdio.h>

voidfun(char*tt,intpp[])

{

}

main()

{

charaa[1000];

intbb[26],k,n;

clrscr();

printf("\nPleaseenteracharstring:");

scanf("%s",aa);

fun(aa,bb);

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

printf("%d",bb[k]);

printf("\n");

}

28.请编写函数fun,其功能是:计算并输出给定10个数的方差:

例如,给定的10个数为95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、90.0、56.0,输出为s=11.730729。

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

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

29.请编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+l到最后的字符移到字符串的前部。

例如,字符串中原有的内容为:ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是:DEFGHIJKABC。

注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,,仅在函数fun的花括号中填入你编写的若干语句。

30.程序定义了NxN的二维数组,并在主函数中自动赋值。请编写函数fun,函数的功能是:使数组右上三角元素中的值乘以m。

例如:若m的值为2,a数组中的值为:

注意:部分源程序存在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

31.请编写一个函数,函数的功能是删除字符串中的所有空格。

例如,主函数中输入“asdafaaz67”,则输出为“asdafaaz67”。

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

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

32.请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。

例如,在主函数中从键盘给n输入20后,输出为:s=0.583333。注意:要求n的值不大于100。

部分源程序在文件PROGl.C中。

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

33.请编写一个函数fun(),它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较短的字符串。若两个字符串长度相等,则返回第1个字符串。

例如,输入nanjing<CR>nanchang<CR>(<CR>为回车键),函数将返回nanjing。

注意:部分源程序给出如下。

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

试题程序:

#include<stdio.h>

char*fun(char*S,char*t)

{

}

main()

{

chara[20],b[10],*p,*q;

inti;

printf("Inputlthstring:");

gets(a);

printf("Input2thstring:");

gets(b);

printf(“%s”,fun(a,b));

}

34.请编写函数fun(),该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。

例如,若二维数组中的数据为:

WWWW

SSSS

HHHH

则字符串中的内容应是WSHWSHWSHWSH。

注意:部分源程序给出如下。

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

试题程序:

#include<stdio.h>

#defineM3

#defineN4

voidfun(char(*s)[N],char*b)

{

}

main()

{

chara[100],w[M][N]={{'W','W','W','W'},

{'S','S','S','S'},{'H','H','H','H'}};

inti,j;

printf("Thematrix:\n");

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

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

printf("%3c",w[i][j]);

printf("\n");

}

fun(w,a);

printf("TheAstring:In");

puts(a);

printf("\n\n");

}

四、单选题(0题)35.以下程序intaa[3][3]={{2},{4},{6}};main(){inti,*p=&aa[0][0];for(i=0;i<2;i++){if(i==0)aa[i][i+1]=*p+1;else++p;printf("%d",*p);}}的输出是________。

A.23B.26C.33D.36

五、单选题(0题)36.

六、单选题(0题)37.设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在什么位置()(脚注(10)表示用10进制表示)。

A.688B.678C.692D.696

参考答案

1.B

2.D

3.A解析:p[0]存放的是“BOOL\\0”的首地址:p[1]存放的是“OPK\\0”的首址等。在printf语句中输出的*p[i]表示p[i]字符串的第—个字符。在for循环中,i的初值为3,那么输出的第—个字符为“S”,接着两次i--,则输出的值为*p[1],即字符“O”,所以本题的输出为SO。

4.A解析:本题考查C语言的综合基础知识。构成C程序的基本单位是函数,一个C程序总是从main函数开始执行,而不论main函数在整个程序中的位置如何。C语言的函数定义都是互相平行、独立的,在定义函数时,一个函数内不能定义另一个函数。C函数定义的一般格式有两种:传统格式和现代格式。传统格式也称K&R格式,是早期编译系统使用的格式;现代格式又称ANSI格式,是现代编译系统使用的格式。

5.A

6.B

7.BC语言中没有“<>”运算符,所以A选项错误。运算符“%”的左右两个操作数必须为整型数据,所以B选项正确。表达式“a*y”的结果为double型,所以C选项错误。不能将值赋给像“x+y”这样的表达式,所以D选项错误。故本题答案为B选项。

8.B解析:本题主要考查结构体和联合内存使用的区别:结构中不同的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构中每个成员所占内存空间大小的总和,结构中每个成员相互独立;联合所占用的内存空间为最长的成员所占用的空间。

9.B

10.B

11.B

12.B题干表达式中,圆括号的优先级最高,乘法运算符次之,加法运算符最低。同优先级中,加法运算符的结合性从左向右结合,所以题干中的表达式执行顺序是:先执行“a+b”得r1,再执行“(d+e)”得r2,再执行“c*r2”得r3,最后执行“r1+r3”得表达式最后结果。故本题答案为B选项。

13.时间复杂度时间复杂度解析:算法在执行过程中所执行的基本运算的次数,也就是执行算法所需要的计算工作量,称为算法的时间复杂度。

14.1616解析:首先将程序中宏替换掉,先把“MCRA(i)”替换成“2*i”,然后把“MCRA(j,2*i)”替换成“2*2*j+2*i”,经计算该表达式的值为16,所以最后输出为16。

15.3131解析:设队列容量为m,如果:rear>front,则队列中元素个数为rear-front;如果rear<front,则队列中元素个数为m+(rear-front)。本题rear<front,则m=32+(2-3)=31。

16.加工加工解析:数据流图是从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。其中的每一个加工对应一个处理模块。

17.驱动模块驱动模块解析:在进行模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块(桩模块)。其中,驱动模块相当于被测试模块的主程序,它接收测试数据,并传给被测试模块,输出实际测试结果。承接模块通常用于代替被测试模块调用的其他模块,其作用仅做少量的数据操作,是一个模拟子程序,不必将子模块的所有功能带入。

18.10

19.11解析:do…while语句的功能是:首先执行循环体语句,然后检测循环控制条件表达式的值,若为真,则重复执行循环体语句,否则退出循环;do…while语句的特点是先执行后判断,因此循环体至少执行1次.本程序中x=2不符合循环条件,所以只循环1次。

20.3691236912解析:本题考查最基本的for循环。for(cc=1;cc<5;cc++)规定循环次数为4次,每次a+=3,即每次a的值增加3,但因为fun函数中变量a为static类型,所以每次调用完子函数之后,变量a所做的改变都要保存。

21.队列队列解析:队列是一种特殊的线性表,只允许在表的一端插入元素,在表的另一端删除元素,插入元素的一端叫做“队尾”,删除元素的一端叫做“队头”,先插入的元素先被删除,是按先进先出的原则组织数据的。

22.1919解析:根据二叉树的性质:在任意一棵二叉树中,度为。的结点(即叶子结点)总是比度为2的结点多一个。本题中度为2的结点数为18,故叶子结点数为18+1=19个。

23.4242解析:主函数中的for循环循环两次,即函数sub()被调用两次。在sub()中x被定义为静态整型变量,当调用函数sub()完毕返回主函数,x中的值仍然保留,下次调用函数sub()时,x不再被赋初值。第1次调用x/=2相当于x=x/2=8/2=4,第2次调用x=x/2=4/2=2,因此输出42。

24.x+=1x+=1解析:本题考查'++'、'--'运算符。'++'、'--'只能作用于变量,不能用于表达式或常量;前缀形式是在使用变量之前先将其值增1或减1,后缀形式是先使用变量原来的值,使用完后再使其增1或减1。

25.doublefun(intm){inti;doubles=0.0;for(i=1;i<=m;i++)s=s+log(i);/*计算s=ln(1)+ln(2)+ln(3)+…+in(m)*/returnsort(s);/*对s求平方根并返回*/}doublefun(intm)\r\n{\r\ninti;\r\ndoubles=0.0;\r\nfor(i=1;i<=m;i++)\r\ns=s+log(i);/*计算s=ln(1)+ln(2)+ln(3)+…+in(m)*/\r\nreturnsort(s);/*对s求平方根并返回*/\r\n}解析:首先,题目要求计算从1到m的对数的和,可用从1到m的循环,每次循环都累加求和。该题需要注意之处是,log()函数的形式参数应当为double型变量,而用于循环的基数变量为整数,需要进行强制转换。在返回的时候求小平方根。

26.voidfun(STREC*p){inti;p->ave=0.0;for(i=0;i<N;i++)p->ave=p->ave+p->s[i];/*求各门成绩的总和*/p->ave=p->ave/N;/*求平均分*/}voidfun(STREC*p)\r\n{\r\ninti;\r\np->ave=0.0;\r\nfor(i=0;i<N;i++)\r\np->ave=p->ave+p->s[i];/*求各门成绩的总和*/\r\np->ave=p->ave/N;/*求平均分*/\r\n}解析:本题考查自己定义形参的相关知识点,程序流程是这样的,在fun()函数中求出平均分后,返回到主函数时平均分也要带回,所以只能定义一个指针类型的形参STREC*p,此时,引用成员的方式可以是用指向运算符即p->ave和p->s[i],当然,也可用(*p).ave和(*p).s[i]。

27.voidfun(char*ttintpp[]){inti;fori=0;i<26;i++)pp[i]=0;/*初始化pp数组各元素为0*/for(;*tt!='\0';tt++)if(*tt>='a'&&*tt<='z')pp[*tt-'a']++;/*将tt字符串中'a'到'z'26个字母各自出现的次数依次放在pp数组中任一个小写字母减去'a'后所得结果正好是它对应的下标*/}voidfun(char*tt,intpp[])\r\n{\r\ninti;\r\nfori=0;i<26;i++)\r\npp[i]=0;/*初始化pp数组各元素为0*/\r\nfor(;*tt!='\\0';tt++)\r\nif(*tt>='a'&&*tt<='z')\r\npp[*tt-'a']++;/*将tt字符串中'a'到'z'26个字母各自出现的次数,依次放在pp数组中,任一个小写字\r\n母减去'a'后所得结果正好是它对应的下标*/\r\n}解析:第1个循环的作用是初始化数组pp,未经赋值变量的量为一个不确定数字。由于它要将'a'到'z'26个字母的个数依次放到数组pp中。即'a'的个数存于pp[0]中,'b'的个数存于pp[1]中,'c'的个数存于pp[2]中,…,依次类推。而'a'-'a'的值正好为0,'b'-'a'的值为1,'c'-'a'的值为2,…,依此类推。即任一个小写字母减去'a'后所得结果正好是它对应的下标,所以就有了pp[*tt-'a']++。但*tt必须是小写字母即if()不应省略。

28.

解析:该程序功能是计算并输出给定10个数的方差。解题思路是,根据题干中给出的方差公式首先计算出x’的值,然后计算根号里面的值,最后求其平方根。

29.

解析:该程序功能是移动字符串中的内容,第一个字符移动到最后,后面的字符往前移动一位,形成循环左移。移动m个字符的就是循环左移m次。

30.

解析:该程序功能是使数组右上半三角元素中的值乘以m。本题中首先要确定右上角半角元素的特点,然后对元素逐个进行乘以m的操作。其中,右上角的元素是行下标小于等于列下标的元素。

31.

解析:该程序功能是删除字符串中的所有空格。本题的解题思路是首先利用一个指向字符串的指针,查找不是空格的字符,然后将不是空格的字符赋值到字符串,如果是空格,则跳过该字符,这样就实现了空格字符的删除。

32.

解析:该程序功能是计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。解题过程首先求出能被5或9整除的所有自然数,然后在此基础上求得这些数的倒数之和。

33.char*fun(char*Schar*t){intij;for(i=0s[i]!=‘\0’;i++);/*求字符串的长度*/for(j=0;t[j]!=‘\0’;j++);/*比较两个字符串的长度*/returns;/*函数返回较短的字符串若两个字符串长度相等则返回第1个字符串*

温馨提示

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

评论

0/150

提交评论