2021年陕西省铜川市全国计算机等级考试C语言程序设计真题一卷(含答案)_第1页
2021年陕西省铜川市全国计算机等级考试C语言程序设计真题一卷(含答案)_第2页
2021年陕西省铜川市全国计算机等级考试C语言程序设计真题一卷(含答案)_第3页
2021年陕西省铜川市全国计算机等级考试C语言程序设计真题一卷(含答案)_第4页
2021年陕西省铜川市全国计算机等级考试C语言程序设计真题一卷(含答案)_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

2021年陕西省铜川市全国计算机等级考试C语言程序设计真题一卷(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.给定数列(541,132,984,746,518,181,946,314,205,827)按照从小到大的顺序排列,采用冒泡排序时,第一趟扫描结果是()

A.(541,132,827,746,518,181,946,314,205,984)

B.(205,132,314,181,518,746,946,984,541,827)

C.(132,541,746,984,181,518,314,946,205,827)

D.(132,541,746,518,181,946,314,205,827,984)

2.若已包括头文件且已有定义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]

3.连通图G中有n个顶点,G的生成树是()连通子图。

A.包含G的所有顶点B.包含G的所有边C.不包含G的所有顶点D.包含G的所有顶点和所有边

4.若有定义:Typedefint*T[10];T*a;则以下与上述定义中a类型完全相同的是()。

A.int*a[10];

B.int**a[10];

C.int*(*a)[10];

D.int*a[][10];

5.以下叙述中错误的是(

)。A.函数形参的值也可以传回给对应的实参

B.函数调用可以作为一个独立的语句存在

C.若函数有返回值,必须通过r;mm语句返回

D.C程序必须由一个或一个以上的函数组成

6.堆是一种有用的数据结构。下列关键码序列()是一个堆。

A.94,31,53,23,16,72

B.94,53,31,72,16,23

C.16,53,23,94,31,72

D.16,31,23,94,53,72

7.以下程序输出的结果是#include<stdio.h>#include<string.h>main(){charw[][10]={"ABCD","EFGH","IJKL","MNOP"},k;for(k=1;k<3;k++)printf("%s\n",&w[k][k]);}

A.ABCDFGHKLB.ABCEFGUMC.EFGJKOD.FGHKL

8.

9.用二分法查找长度为10的、排好序的线性表,查找不成功时,最多需要比较多少次?()

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

10.有以下程序:#include<stdio.h>main(){ints[12]=(1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;for(i=0;i<12;i++) c[s[i]]++; for(i=1;i<5;i++) printf(“%d”,c[i]);printf(“\n”);}程序的运行结果是()。

A.2344B.4332C.1234D.1123

11.数据表A中有10000个元素,如果仅要求求出其中最大的10个元素,则采用()最节省时间。

A.堆排序B.希尔排序C.快速排序D.希尔排序

12.有以下程序:#include<stdio.h>main(){charch=‘1’;while(ch<‘9’){printf(“%d”,ch-‘0’);ch++;}}程序运行后的输出结果是()。

A.12345678B.01234567C.0D.1

二、2.填空题(12题)13.数据库管理系统是位于用户与______之间的软件系统。

14.若有定义inta[4][4]={1,2,3,4},{0},{4,6,8,10},{1,3,5,7}},则初始化后,a[1][1]得到的初值是______。

15.设一棵完全二叉树共有700个结点,则在该二叉树中有【】个叶子结点。

16.数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、数据结构、数据流、______和处理过程。

17.表示“整数x的平方大于36"时的值为“真”的C语言逻辑表达式是【】。

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

#inciude<stdio.h>

main()

{chars[]="ABCabc";

s[5]='\0';

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

}

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

#defineM2

#defineN4

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

{

inti,i,k,s;0;

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

{

k=0;

for(j=1j<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);

}

20.类是一个支持集成的抽象数据类型,而对象是类的【】。

21.数据结构分为逻辑结构与存储结构,线性链表属于【】。

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

main()

{charc='z';

printf("%c",c-25);}

23.没有chara,b;,,若要通过a&b运算屏蔽掉a中的其他位,只保留第2位和第8位(右起为第1位),则b的二进制是【】。

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

#include<stdio.h>

main()

{charm;

m='B'+32;

printf("%c\n",m);

}

三、3.程序设计题(10题)25.请编写一个函数fun(),它的功能是:根据以下公式求π的值(要求满足精度0.005,即某项小于0.005时停止迭代)。

π/2=1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*4/(3*5*7*9)+…

+1*2*3*…*n/(3*5*7*…*(2n+1))

程序运行后,如果输入精度0.0005,则程序输出3.14…。

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

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

试题程序:

#include<conio.h>

#include<math.h>

doublefun(doubleeps)

{

}

main()

{

doublex;

printf("Inputeps:");

scanf("%1f",&x);

printf("\neps=%1f,PI=%1f\n",x,fun(x));

}

26.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。

例如,若学生的成绩是:85,76,69,85,91,72,64,87,则平均分应当是:78.625。

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

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

27.请编写函数fun,其功能是:计算并输出3到n之间(含3和n)所有素数的平方根之和。

例如,在主函数中从键盘给n输入100后,输出为:sum=148.874270。

注意:要求n的值大于2但不大于100。部分源程序给出如下。清勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

[试题源程序]

#include<math.h>

#include<stdio.h>

doublefun(intn)

{

}

main()

{

intn;

doublesum;

printf("\n\nInputn:");

scanf("%d",&n);

sum=fun(n);

printf("\n\nsum=%f\n\n",sum);

}

28.假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言中提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是ABCDEFG。

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

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

试题程序:

#include<conio,h>

#include<stdio,h>

voidfun(char*a)

{

}

main()

{

chars[81];

printf("Enterastring:\n");

gets(s);

fun(s);

printf("Thestringafterdeleted:\n");

puts(s);

}

29.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun(),该函数的功能是;找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。

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

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

试题程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

#defineN10

typedefstructss/*定义结构体*/

{charnum[10];

ints;

}STU;

fun(STUa[],STU*s)

{

}

main()

{

STUa[N]={{"A01",81},{"A02",89},

{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},

{"A09",80},{"A10",71}},m;

inti;

clrscr();

printf("*****Theoriginaldata*****");

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

printf("No=%sMark=%d\n",a[i].hum,

a[i].s);

fun(a,&m);

printf("*****THERESULT*****\n");

printf("Thetop:%s,%d\n",m.num,m.s);

}

30.函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的十位和千位上,b中的十位和个位数依次放在变量c的个位和百位上。

例如,当a=45,b=12。调用该函数后,c=5241。

注意:部分源程序存在文件.PROGl.C中。数据文件IN.DAT中的数据不得修改。

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

31.请编写一个函数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");

}

32.m个人的成绩存放在score数组中,请编写函数fun(),它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。

例如,当score数组中的数据为10,20,30,40,50,60,70,80,90时,函数返回的人数应该是4,below中的数据应为10,20,30,40。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(intscore[],intm,intbelow[])

{

}

main()

{

ihti,n,below[9];

intscore[9]={10,20,30,40,50,60,70,

80,90};

clrscr();

n=fun(score,9,below);

printf("\nBelowtheaveragescoreare:");

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

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

}

33.请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是将大于整数m且紧靠m的k个非素数存入所指的数组中。

例如,若输入15,5,则应输出16,18,20,21,22。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

voidfun(intm,intk,intxx[])

{

}

main()

{

intm,n,zz[1000];

clrscr();

printf("\nPleaseentertwointegers:");

scanf("%d%d",&m,&n);

fun(m,n,zz);

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

printf("%d",zz[m]);

printf("\n");

}

34.请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17,5,则应输出:19,23,29,3l,37。

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

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

四、单选题(0题)35.

五、单选题(0题)36.设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1,则栈S的容量至少应该是()。

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

六、单选题(0题)37.对线性表进行折半查找时,必须要求线性表()。

A.顺序方式存储B.链式方式存储C.以顺序方式存储,且结点按关键字有序排列D.以链式方式存储,且结点按关键字有序排列

参考答案

1.D

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

3.A

4.B由题意可知,T是一个数组指针,即int*[],所以使用T*a定义,可知a属于int**[\n]类型。本题答案为B选项。

5.A函数参数传递是个不可逆的过程,形参不会把值传回实参,所以A)选项(24)[答案]A)[解析]c的值为a乘以b的值,为3。所以答案选择A)。

6.D

7.D当k=1时,引用的是二维数组元素w[1][1],值为字符串“FGH”;当k=2时,引用的是数组元素w[2][2],即字符串“KL”;当k=3时,结束程序的执行。注意:字符串数组的定义。

8.D

9.B

10.B在“for(i=0;i<12;i++)c[s[i]]++”中,数组元素s[i]的值作为数组c的下标。当退出循环时,数组c的4个元素的值分别为4、3、3、2。故本题答案为B选项。

11.B

12.A表达式“ch-‘0’’将数字字符转为数字。输出的格式为%d。while循环从‘1’~‘8’,因此输出的结果是12345678。故本题答案为A选项。

13.操作系统操作系统解析:数据库管理系统是帮助用户创建和管理数据库的应用程序的集合。因此,数据库管理系统需要操作系统的支持,为用户提供服务。

14.二维数组可以看成是按矩阵形式排列的,题目中给二维数组赋初值是按行分段赋值的,a[4][4]可以分解为4个一维数组,其数组名分别为a[O]、a[1]、a[2]、a[3],这4个一维数组都有4个元素,a[0]的元素为a[0][0]、a[0][1]、a[0][2]、a[0][3]。\r\n\r\n

15.350350解析:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。在根据完全二叉树的定义,在一棵完全二叉树中,最多有1个度为1的结点。因此,设一棵完全二叉树具有n个结点,若n为偶数,则在该二叉树中有n/2个叶子结点以及n/2-1个度为2的结点,还有1个是度为1的结点:若n为奇数,则在该二叉树中有[n/2]+1个叶子结点以及[n/2]个度为2的结点,没有度为1的结点。本题中,完全二叉树共有700个结点,700是偶数,所以,在该二叉树中有350个叶子结点以及349个度为2的结点,还有1个是度为1的结点。所以,本题的正确答案为350。

16.数据存储数据存储

17.x<-6||x>6

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

19.a[k][i]*sumx&sa[k][i]\r\n*sum\r\nx,&s解析:本题考核的知识点是C程序的综合应用。本题中定义了一个函数SumColumMin(),该函数有两个参数,第一个参数为数组名,第二个参数为一个指针,用来访问存放数组中每列元素中的最小值的存储空间的变量。所以在主函数中调用SumColumMin()函数,应该将数组x和sum作为实参传给SumColumMin()中的形参,故第20个空格处应该填x,&s。在SumColumMin()函数中用了两重循环,用N记录数组的列,M记录数组的行。内循环共循环了M次,每循环一次将a[k][i]比较a[j][i](当k=0时,a[k][i]第一行第一列的值,然后将该值依次和第一列中的每个值比较,让a[k][i]表示较小的值,那么比较到最后一个元素后a[k][i]就是改列中最小元素的值),让k记录较小值元素的行下标,这样通过M次循环得到每列中的最小元素,然后退出内循环,继续执行该次外循环里的其他语句,即将刚求得第i列的最小值a[k][i]累加到s中,故第18个空格处应该填a[k][i],最后外循环共循环N次,将每列得最小值累加到s中,退出循环,然后让指针sum所指向得存储空间得值为s敲第19个空格处应该填*sum。

20.实例将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,对象则是其对应类的一个实例。

21.存储结构

22.aa解析:“z”的ASCII码值为122,经过c-25运算后得97,以字符形式输出是a。

23.1000001010000010解析:运算“&”的规则是只有当两个相应的二进制位都为1时,该位的结果才为1。要保留第2、8位,只要将其与二进制数10000010相与。

24.bb解析:本题实现的功能是把大写字母转换为小写字母。小写字母的ASCII码值比相应的大写字母的ASCII码值大32。

25.doublefun(doubleeps){doubles=1.0s1=1.0;intn=1;while(s1>=eps)/*当某项大于精度要求时继续求下—项*/{s1=s1*n/(2*n+1);/*求多项式的每—项*/s=s+s1;/*求和*/n++;}return2*s;}doublefun(doubleeps)\r\n{\r\ndoubles=1.0,s1=1.0;\r\nintn=1;\r\nwhile(s1>=eps)/*当某项大于精度要求时,继续求下—项*/\r\n{s1=s1*n/(2*n+1);/*求多项式的每—项*/\r\ns=s+s1;/*求和*/\r\nn++;\r\n}\r\nreturn2*s;\r\n}解析:从第2项开始以后的每一项都是其前面一项乘以n/(2*n+1),程序中用s1来表示每一项,s来表示总和后的结果。要注意s1,s的初值都为1.0,返回时要乘以2即return2*s,这跟数学思想有关系,学习者理解后就很简单了。

26.

解析:该程序功能是求出存储在带头节点的链表结构中成绩的平均分。解题思路是,首先对单链表中存储的所有成绩求总分,然后对总分计算平均值。

27.doublefun(intn){intij=0;doubles=0;for(i=3;i<=n;i++){for(j=2;j<i;j++)if(i%j==0)break;if(j==i)s=s+sqrt(i);}returns;}doublefun(intn)\r\n{\r\ninti,j=0;\r\ndoubles=0;\r\nfor(i=3;i<=n;i++)\r\n{\r\nfor(j=2;j<i;j++)\r\nif(i%j==0)\r\nbreak;\r\nif(j==i)\r\ns=s+sqrt(i);\r\n}\r\nreturns;\r\n}

28.voidfun(char.*a){intij=0;for(i=0;a[i]!='\0';i++)if(a[i]1='*')a[j++]=a[i];/*若不是要删除的字符'*'则留下*/a[j]='\0';/*最后加上字符结束符'*'/}voidfun(char.*a)\r\n{\r\ninti,j=0;\r\nfor(i=0;a[i]!='\\0';i++)\r\nif(a[i]1='*')\r\na[j++]=a[i];/*若不是要删除的字符'*'则留下*/\r\na[j]='\\0';/*最后加上字符结束符'*'/\r\n}解析:同样的问题我们在前面也碰到过,本题中是删除多余字符('*')。所以用循环从字符串的开始往后一个一个进行比较,若不是要删除的字符(用ifa[i]!='*')来控制)则留下。注意下标变量j要从0开始,最后还要加上字符串结束符'\\0'。29.fun(STUa[]STU*s)\r\n{\r\ninti;\r\n*s=a[0];\r\nfor(i=0;i<N;i++)/*找出成绩最高的学生记录*/\r\nif(s->s<a[i].s)\r\n*s==a[i];\r\n}fun(STUa[],STU*s)\r\n{\r\ninti;\r\n*s=a[0];\r\nfor(i=0;i<N;i++)/*找出成绩最高的学生记录*/\r\nif(s->s<a[i].s)\r\n*s==a[i];\r\n}解析:本题的流程是这样的,先使s指向第1个学生,我们的题干目的是找出分数最高的学生,所以if语句的条件是s->s<a[i].s。此外,在做本题时,我们应该熟练掌握“指向运算符”和“成员运算符”的相关知识。题中“s->s”也可换成“(*s).s”。

30.

解析:该程序功能是将两个正整数合并形成一个整数的题型。本题类型首先要考虑整数的位数分离,然后要进行位数合成。也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。

31.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()不应省略。

32.intfun(intscore[]intmintbelo

温馨提示

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

评论

0/150

提交评论