2021年海南省海口市全国计算机等级考试C语言程序设计测试卷一(含答案)_第1页
2021年海南省海口市全国计算机等级考试C语言程序设计测试卷一(含答案)_第2页
2021年海南省海口市全国计算机等级考试C语言程序设计测试卷一(含答案)_第3页
2021年海南省海口市全国计算机等级考试C语言程序设计测试卷一(含答案)_第4页
2021年海南省海口市全国计算机等级考试C语言程序设计测试卷一(含答案)_第5页
已阅读5页,还剩22页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2021年海南省海口市全国计算机等级考试C语言程序设计测试卷一(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.对于栈操作数据的原则是()。

A.先进先出B.后进先出C.后进后出D.不分顺序

2.已知有结构体:structsk{inta;floatb;}data,*p;若有p=&data,则对data的成员a的正确引用是()。

A.struct是结构体类型的关键字

B.st是结构体类型名

C.x、y、z都是结构体成员名

D.structstr是结构体类型名

3.

4.数据库是______的集合,它具有统一的结构形式并存放于统一的存储介质内,可被各个应用程序所共享。

A.视图B.消息C.数据D.关系

5.计算机算法指的是()。

A.计算方法B.排序方法C.解决问题的有限运算序列D.调度方法

6.函数原形中,下列()是不必要的。

A.函数的类型B.形式参数名C.函数名D.形式参数类型

7.以下选项中不合法的标识符是()。

A.&aB.FORC.printD._00

8.

9.下列程序的运行结果为()。#include<stdio.h>main{structdate{intyear,month,day;}today;printf("%d\n",sizeof(structdate));}A.8B.6C.10D.12

10.

11.

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

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

二、2.填空题(12题)13.若想通过以下输入语句使a=5.0,b=4,c=3,则输入数据的形式应该是【】。

intb,c;floata;

scanf("%f,%d,c=%d",&a,&b,&c)

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

#include<stdio.h>

#include<string.h>

char*ss(char*s)

{returns+strlen(s)/2;}

main()

{char*p,*str="abcdefgh";

p=ss(str);printf("%s\n",p);

15.软件危机出现于60年代末,为了解决软件危机,人们提出了【】的原理来设计软件,这就是软件工程诞生的基础。

16.以下程序的功能是建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data域不放数据,表空的条件是ph->next==NULL),请填空。

#include<stdio.h>

structlist{intdata;structlist*next;};

structlist*creatlist()

{structlist*p,*q,*ph;inta;ph=(structlist*)malloc(sizeof(structlist));

p=q=ph;printf("Inputanintegernumber;entre-1toend:\n");

scanf("%d",&a);

while(a!=-1)

{p=(structlist*)malloc(sizeof(structlist));

【】=a;q->next=p;【】=p;scanf("%d",&a);}

p->next=′\0;return(ph);}

main()

{structlist*head;head=creatlist();}

17.语句“int(*ptr)();”的含义是______是指向函数的指针,该函数返回一个int型数据。

18.下面程序的功能是调用sub函数计算数组a中字符串的长度,请填空。

sub(chars[])

{intn;

for(n=0;【】n++);

return【】;

}

main()

{char*a;intk;

gets(a);

【】

printf("%d",k);

19.按照逻辑结构分类,结构可以分为线性结构和非线性结构,栈属于______。

20.数据结构分为线性结构和非线性结构,线性表、栈和队列都属于【】。

21.下面程序中函数fun的功能是:找出一维数组元素中的最大值和它所在的下标,并将最大值和其下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。请填空。

#include<stdlib.h>

#include<sldio.h>

voidfun(inta[],intn,int*max,int*d)

{inti;

*max=a[0];*d=0;

for(i=0;【】;i++)

if(*max<【】)

{*max=a[i];*d=i;}

}

main()

{inti,x[20],max,index,n=10;

randomize();

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

{x[i]=rand()%50;printf("%4d",x[i]);}

printf("\n");

fun(x,n,&max.&index);

printf("Max=%5d,Index=%4d\n",max,index);

}

22.数据库系统中实现各种数据管理功能的核心软件是______。

23.测试的目的是暴露错误,评价程序的可靠性;而______的目的是发现错误的位置并改正错误。

24.有以下程序

intfa(intx){returnx*x;}

intfb(intx){retumx*x*x;}

intf(int(*f1)(),int(*f2)(),intx)

{returnf2(x)-f1(x);}

main()

{inti;i=f(fa,fb,2);printf("%d\n",i);}

程序运行后,输出结果是【】。

三、3.程序设计题(10题)25.请编写函数fun(),该函数的功能是:实现B=A+A',即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main()函数中输出。

例如,输入下面矩阵:

123

456

789

其转置矩阵为:

147

258

369

则程序输出:

2610

61014

101418

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

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

试题程序:

#include<stdio.h>

#include<conio,h>

voidfun(inta[3][3],intb[3][3])

{

}

main()

{

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

t[3][3];

inti,j;

clrscr();

fun(a,t);

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

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

printf("%7d",t[i][j]);

printf("\n");

}

}

26.请编写函数fun(),它的功能是:判断字符串是否是回文?若是,函数返回1,主函数中输出:YES,否则返回0,主函数输出NO。回文是指顺读和倒读都一样的字符串。

例如,字符串LEVEL是回文,而字符串12312就不是回文。

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

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

[试题源程序]

#include<stdio.h>

#defineN80

intfun(char*str)

{

}

main()

{

chars[N];

printf("Enterastring:")"gets(s);

printf("\n\n");puts(s);

if(fun(s))

printf("YES\n");

else

printf("NO\n");

NONO();

}

NONO()

{

/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/

FILE*rf,*wf;

inti;chars[N];

rf=fopen("K:\\k06\\24010001\\in.dat","r");

wf=fopen("K:\\k06\\24010001\\out.dat","w");

for(i=0;i<10;i++){

fscanf(rf,"%s",s);

if(fun(S))

fprintf(wf,"%sYES\n",s);

else

fprintf(wf,"%sNO\n",s);

}

fclose(rf);

fclose(wf);

}

27.下列程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N]),该函数的功能是使数组右上半三角元素中的值全部置成0。例如a数组中的值为

a=456

179

326,

则返回主程序后a数组中的值应为

000

100

320

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N])

{

}

main()

{

inta[N][N],i,j;

clrscr();

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

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

/*产生—个随机的5*5矩阵*/

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

{a[i][j]=rand()%10;

printf(“%4d”,a[i][j]);

}

printf(“\n”);

}

fun(a);

printf(“THERESULT\n”);

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

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

printf(“%4d”,a[i][j]);

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(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(p≤n-1)的数组元素平移到数组的最后。

例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为3。移动后,一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。

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

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

试题程序:

#include<stdio.h>

#defineN80

voidfun(int*w,intp,intn)

{

}

main()

{

inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

inti,p,n=15;

printf("Theoriginaldata:\n");

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

printf("%3d",a[i]);

printf("\n\nEnterp:");

scanf("%d",&p);

fun(a,p,n);

printf("\nThedataaftermoving:\n");

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

printf("%3d",a[i]);

printf("\n\n");

}

30.请编写函数fun(),该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。

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

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

试题程序:

#include<string.h>

#include<stdio,h>

#defineN80

intfun(char*s)

{

}

main()

{

charline[N];

intnum=0;

printf("Enterastring:\n");

gets(line);

num=fun(line);

printf("Thenumberofwordis:%d\n\n",

num);

}

31.请编写一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):

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

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

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

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

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

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

33.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。

[注意]部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

[试题源程序]

#include<stdio.h>

#defineN16

typedefstruct

{

charnum[i0];

ints;

}STREC;

intfun(STRECa[])

{

}

main()

{

STRECs[N]={

{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},

{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},

{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}

};

inti;

FILE*out;

fun(s);

printf("Thedataaftersorted:\n");

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

{

if((i)%4==0)

printf("\n");

printf("%s%4d",s[i].num,s[i].s);

}

printf("\n");

}

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

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

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

试题程序:

#include<stdio.h>

#include<string.h>

#include<aonio.h>

#defineN10

typedefstructss

{charnum[10];

ihts;

}STU;

fun(STUail,STU*s)

{

}

main()

{

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

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

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

{"A09",80),{"Al0",71}},m;

inti;

clrscr0;

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

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

printf("No=%sMark=%d\n",ail].num,

a[i].s);

fun(a,&m);

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

printf("Thelowest:%s,%d\n",m.num,

m.s);

}

四、单选题(0题)35.

五、单选题(0题)36.下列选项中,当X为大于1的奇数时,值为0的表达式是()。

A.x%2==0B.x/2C.x%2!=0D.x%2==1

六、单选题(0题)37.下述哪一条是顺序存储结构的优点()。

A.插入运算方便B.可方便地用于各种逻辑结构的存储表示C.存储密度大D.删除运算方便

参考答案

1.B

2.B解析:本题主要考查结构类型的定义:struct是结构体类型的关键字;structstr是结构体类型名;x、y、z都是结构体成员名;st是结构变量名。

3.A

4.C解析:数据库是数据的集合,其中的数据是按数据所提供的数据模式存放的,它能构造复杂的数据结构,以建立数据之间的内在联系与复杂的关系-故答案为C。

5.C

6.A

7.AC语言的标识符由字母、数字、下划线组成,且第1个字符必须是字母或下划线。另外,关键字不能作为标识符。因为C语言中区分大小写,所以B选项中的“FOR”可以作为标识符来用。A选项中含有非法字符“&”,所以其不合法。故本题答案为A选项。

8.D

9.Bstructdate中包含year、month、day这3个整型变量,一个整型变量占2个字节;sizeof是求所占字节数的运算符。

10.D

11.A

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

13.5.04c=35.0,4,c=3解析:scanf(掐式控制,地址列表),如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。所以此题中输入数据的形式是5.04,c=3。

14.efghefgh解析:函数*ss的作用是使字符串指针往后移strlen(s)/2个位置。形参指针a指向字符串'abcdefeh',调用函数*ss后,指针指向e,所以输出为efgh。

15.软件工程学软件工程学

16.p->dataqp->data,q解析:本题考查的是链表这一数据结构对结构体变量中数据的引用。链表的特点是结构体变量中有两个域,一个是数据,另一个是指向该结构体变量类型的指针,用以指明链表的下一个结点。

17.ptrptr解析:本题考查函数指针的概念。函数指针的定义格式是:类型标识符(*指针变量名)()。注:“类型标识符”为函数返回值的类型。

18.s[n]!='\0';或s[n];nk=sub(a);s[n]!='\\0';或s[n];\r\nn\r\nk=sub(a);解析:函数sub()通过for循环计算字符串的长度,当字符串没有结束时循环,因此判断循环与否的条件是看字符串是否结束。故第1空应该填写s[n];或其他等价表达式。循环结束返回字符串长度值,循环变量n中累计了循环的次数即字符串的长度,故第2空应该填n。主函数中的空白处应该是一条调用函数sub()的语句,将字符串的首地址作为实参传递给形参,并将返回值赋值给变量k。故第3空应该填k=sub(a);。

19.线性结构线性结构解析:数据的逻辑结构是指数据元素之间的逻辑关系,分为线性结构和非线性结构。常见的线性结构有线性表、栈和队列等,常见的非线性结构有树、二叉树等。

20.线性结构线性结构解析:本题考查了数据结构的基本概念。与栈类似,队列也是线性表,可以采用链式存储结构,所以带链的队列属于线性结构。

21.i<na[i]i<na[i]解析:在main函数中,randomize是为了生成随机种子,以便在使用rand函数时产生不同的数。通过循环用rand函数产生10个随机数。在fun函数中,要在n个数中找最大值,所以第一处填写i<n,每次将当前最大值与数组中的某元素比较,第二处填写a[i]。

22.数据库管理系统数据库管理系统解析:数据库管理系统是数据库的管理机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。

23.调试调试

24.44解析:在主函数中调用函数f,函数f有三个参数,形参f1与f2分别是两个指向函数的指针。在f中执行f2(x)-f1(x),实际上是执行了fb(2)-fa(2),故执行i=(fa,fb,2)后i的值为23-22=4。

25.voidfun(inta[3][3]intb[3][3]){intij;for(i=0;i<3;i++)for(j=0;j<3;j++)b[i][j]=a[i][j]+a[j][i];/*把矩阵a加上a的转置存放在矩阵b中*/}voidfun(inta[3][3],intb[3][3])\r\n{\r\ninti,j;\r\nfor(i=0;i<3;i++)\r\nfor(j=0;j<3;j++)\r\nb[i][j]=a[i][j]+a[j][i];/*把矩阵a加上a的转置,存放在矩阵b中*/\r\n}解析:在《线性代数》里面有矩阵转置的概念,行列数相等的二维数组的转置就是行列互换。即转置后的第i行第j列正好对应原矩阵的第j行第i列。

若要将矩阵a转置后还存入a中可用程序:

inti,j,t;

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

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

{t=a[i][j];a[i][j]=a[j][i];a[j][ii=t;}

注意第2个循环的初值。

若要将矩阵a转置后存入c中:

inti,j;

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

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

c[i][j]=a[j][i];

注意数组c和a的下标。

26.intfun(char*str){intin=0fg=1;char*p=str;while(*p){n++;P++;}for(i=0;i<n/2;i++)if(str[i]==str[n-1-i]);else{fg=0;break;}returnfg;}intfun(char*str)\r\n{\r\ninti,n=0,fg=1;\r\nchar*p=str;\r\nwhile(*p)\r\n{\r\nn++;\r\nP++;\r\n}\r\nfor(i=0;i<n/2;i++)\r\nif(str[i]==str[n-1-i]);\r\nelse\r\n{\r\nfg=0;\r\nbreak;\r\n}\r\nreturnfg;\r\n}解析:本题的设计思路是:(1)定义一个int型变量flag用做返回值,定义一个字符指针代替原串遍历,求字符串的长度;(2)利用循环及if条件语句判断字符串首尾对应字符是否相等;(3)如果为回文数,修改flag的值;(4)返回flag

27.intfun(inta[][N)){intij;for(i=0;i<N;i++)for(j=i;j<N;j++)a[i][j]=0;/*将数组右上半三角元素中的值全部置成0*/}intfun(inta[][N))\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=i;j<N;j++)\r\na[i][j]=0;/*将数组右上半三角元素中的值全部置成0*/\r\n}解析:本题旨在考查控制数组中右上半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。

28.

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

29.voidfun(int*wintpintn){intijt;for(i=0;i<=p;i++)/*循环左移p+1次*/{t=w[0];for(j=1/j<n;j++)/*实现循环左移*/w[j-1]=w[j];w[j-1]=t;}}voidfun(int*w,intp,intn)\r\n{\r\ninti,j,t;\r\nfor(i=0;i<=p;i++)/*循环左移p+1次*/\r\n{t=w[0];\r\nfor(j=1/j<n;j++)/*实现循环左移*/\r\nw[j-1]=w[j];\r\nw[j-1]=t;\r\n}\r\n}解析:本题采用“循环左移”的算法(关于“循环左移”,我们在后面的试题中有详细的解释)。和我们在前面分析的稍有不同的是,一个是整型数组,一个是字符型数组。

30.intfun(char*s){intij=0;for(i=0;s[i]!='\0';i++)if(s[i]!=''&&(s[i+l]==''||s[i+1]=='\O'))/*如果一个字母的下一个字符为空格或者结束标记则表示一个单词结束*/j++;returnj;/*返回单词个数*/}intfun(char*s)\r\n{\r\ninti,j=0;\r\nfor(i=0;s[i]!=\'\\0\';i++)\r\nif(s[i]!=\'\'&&(s[i+l]==\'\'||s[i+1]==\'\\O\'))/*如果一个字母的下一个字符为空格或者结束标记,则表示一个单词结束*/\r\nj++;\r\nreturnj;/*返回单词个数*/\r\n}解析:判断单词的个数,我们首先想到的是程序怎样识别是一个单词,也即循环语句中的fir(i=0;s[i]!='\\0';i++),本题重点是if句中的条件表达方式。

31.

解析:进入fun函数,根据前面的分析:(1)根据题意,需要把每一项累加起来;若每一累加项的值放在t中,后一项等于前一项累加项的值乘以n/(2*n+1)来求得。

(2)根据公式将求到的π/2

温馨提示

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

评论

0/150

提交评论