2021-2022学年宁夏回族自治区银川市全国计算机等级考试C语言程序设计测试卷一(含答案)_第1页
2021-2022学年宁夏回族自治区银川市全国计算机等级考试C语言程序设计测试卷一(含答案)_第2页
2021-2022学年宁夏回族自治区银川市全国计算机等级考试C语言程序设计测试卷一(含答案)_第3页
2021-2022学年宁夏回族自治区银川市全国计算机等级考试C语言程序设计测试卷一(含答案)_第4页
2021-2022学年宁夏回族自治区银川市全国计算机等级考试C语言程序设计测试卷一(含答案)_第5页
已阅读5页,还剩21页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2021-2022学年宁夏回族自治区银川市全国计算机等级考试C语言程序设计测试卷一(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.下面描述中,不属于软件危机表现的是()A.软件过程不规范B.软件开发生产率低C.软件质量难以控制D.软件成本不断提高

2.

3.若有定义语句“char*s1=“OK”,*s2=“ok”;”,以下选项中,能够输出“OK”的语句是()。

A.if(strcmp(s1,s2)!=0)puts(s2);

B.if(strcmp(s1,s2)!=0)puts(s1);

C.if(strcmp(s1,s2)==1)puts(s1);

D.if(strcmp(s1,s2)==0)puts(s1);

4.下列关于逻辑运算符两侧运算对象的叙述中正确的是()。

A.只能是整数0或1B.只能是整数0或非0整数C.可以是结构体类型的数据D.可以是任意合法的表达式

5.

6.设有定义:#include<stdio.h>#include<stdlib.h>typedefstruct{intx,y;}T;typedefstruct{intx,y;}*USER;USERfun(){USERp;p=(USER)malloc(sizeof(T));p->x=1;p->y=2;returnp;}函数fun返回值的类型是()。

A.T类型的结构体B.指向结构体类型的指针C.int类型的元素D.int类型的指针

7.若执行下列的程序时,从键盘上输入1和2,则输出结果是()。

#include<stdio.h>

main()

{inta,b,s;

scanf("%d%d",&a,&B);

S=a;

if(a<B)s=b;

s=s*s;

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

}

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

8.以下叙述中错误的是()。

A.函数的返回值类型不能是结构体类型,只能是简单类型

B.函数可以返回指向结构体变量的指针

C.可以通过指向结构体变量的指针访问所指结构体变量的任何成员

D.只要类型相同,结构体变量之间可以整体赋值

9.有以下程序:

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

A.abc+abc=defdef

B.abc+ABC=DEFdef

C.abcABCDEFdef

D.abcabcdefdef

10.

11.采用开放定址法处理散列表的冲突时,其平均查找长度()

A.高于二分查找B.高于链接法处理冲突C.低于二分查找D.低于链接法处理冲突

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

A.在C语言中,预处理命令行都以“#”开头

B.预处理命令行必须位于c源程序的起始位置

C.#include<stdi0.h>必须放在C程序的开头

D.C语言的预处理不能实现宏定义和条件编译的功能

二、2.填空题(12题)13.以下程序的输出结果是【】。

#include<stdio.h>

main()

{structstru

{inta;

floatb;

chard[4];

};

printf("%d\n",sizeof(structstru));}

14.软件工程研究的内容主要包括:软件开发技术和【】。

15.以下程序的作用是:从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上。请填空。

#include<stdio.h>

main()

{FILE*fp;charch;

fp=fopen(______);

ch=fSetc(fp);

while(!feof(fp)){putchar(ch);ch=fSetc(fp);}

putchar('\n');fclose(fp);

}

16.设a、b、c为整数,且a=2、b=3、c=4,则执行完以下语句后,a的值是【】。

a*=18+(b++)-(++c);

17.fseek函数的正确调用形式是【】。

18.下面程序的功能:输出100以内能被3整除且个位数为6的所有整数,请补充完整。

main()

{inti,j;

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

{j=i*10+6;

if(【】)continue;

printf("%d",j);

}

}

19.软件是由两部分组成的,一部分是【】,另一部分是文档资料。

20.mysulen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。

intmystrlen(Char*str)

{inti;

for{i=0;!='\0';i++);

return(______);

}

21.下列程序的输出结果是______。

#include<stdio.h>

intt(intx,inty,intcp,intdp)

{cp=x*x+y*y;

dp=x*x-y*y;

}

main()

{inta=1,b=8,c=7,d=9;

t(a,b,c,d);

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

}

22.若有定义floatb[15],*p=b;,且数组b的首地址为200H,则p/13所指向的数组元素的地址为______。

23.若有如下程序:

main()

{ints[]={1,2,3,4,5,6},*p=s;

printf("%d,%d\n",*(p+3),*(p+6));}

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

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

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));

}

三、3.程序设计题(10题)25.请编写函数fun,其功能是:计算并输出3到n之间(含3和n)所有素数的平方根之和。

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

注意:要求n的值大于2但不大于100。部分源程序在文件PROGl.C中。

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

26.请编写函数fun(),它的功能是计算下列级数和,和值由函数值返回。

S=1-x+x2(上标)/2!-x3(上标)/3!+…+(-1*x)n(上标)/n!

例如,当n=15,x=0.5时,函数值为0.606531。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

doublefun(doublex,intn)

{

}

main()

{

clrscr();

printf("%f",fun(0.5,15));

}

27.请编写函数fun(),它的功能是计算下列级数和,和值由函数值返回。

S=1+x+x2/2!3/3!+…/xn/n!

例如,当n=10,x=0.3时,函数值为1349859。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

doublefun(doublex,intn)

{

}

main()

{

clrscr();

printf("%f",fun(0,3,10));

}

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

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

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

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

29.编写程序,实现矩阵(3行3列)的转置(即行列互换)。

例如,若输入下面的矩阵:

100200300

400500600

700800900

则程序输出:

100400700

200500800

300600900

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

intfun(intarray[3][3])

{

}

main()

{

inti,j;

intarray[3][3]={{100,200,300},{400,

500,600},{700,800,900}};

clrscr();

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

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

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

printf("\n");

}

fun(array);

printf("Convertedarray:\n");

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

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

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

printf("\n");

}

}

30.请编一个函数floatfun(doubleh),函数的功能是对变量h中的值保留两位小数,并对第三位进行四舍五入(规定h中的值为正数)。

例如:若h值为8.32433,则函数返回8.32:若h值为8.32533,则函数返回8.33。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

floatfun(floath)

{

}

main()

{

floata;

clrscr();

printf("Entera:");

scanf("%f",&a);

printf("Theoriginaldatais:");

printf("%f\n\n",a);

printf("Theresult:%f\n",fun(a));

}

31.假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。

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

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

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

试题程序:

#include<stdio,h>

#include<conio.h>

voidfun(char*a)

{

}

main()

{

chars[81];

printf("Enterastring:\n");

gets(s);

fun(s);

printf("Thestringafterdeleted:\n");

puts(s);

}

32.学生的记录由学号和成绩组成,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");

}

33.请编写函数fun,其功能是:计算并输出

例如,在主函数中从键盘给n输入20后,输出为:s=534.188884。

注意:要求n的值大于1但不大于100。

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

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

34.请编写一个函数fun(),它的功能是:求出一个4×M整型二维数组中最小元素的值,并将此值返回调用函数。

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

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

试题程序:

#defineM4

#include<stdio.h>

fun(inta[])[M])

{

}

main()

{

intarr[4][M]={11,3,9,35,42,-4,24,32,6,48,-32,7,23,34,12,-7);

printf(“min=%d\n”,fun(arr));

}

四、单选题(0题)35.

五、单选题(0题)36.以下程序的输出结果是()。main(){charst[20]="hell0\O\t\\\”;printf("%d%d\n",strlen(st),sizeof(st));}A.99B.520C.1320D.2020

六、单选题(0题)37.设有二元关系R和三元关系s,下列运算合法的是()。

A.R∩SB.R∪SC.R-SD.R×S

参考答案

1.A软件危机主要表现在:软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质量难以保证;软件不可维护或维护程度非常低;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。所以选择A。

2.A

3.B“strcmp(S1,S2)”是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比较(按照ASCII值大小)。因为“OK”<“ok”,所以“strcmp(S1,S2)”为负值。故本题答案为B选项。

4.D解析:逻辑运算符两侧的运算对象可以是任意合法的表达式。逻辑表达式的运算结果或者为1(“真”),或者为0(“假”)。

5.C

6.B由题意可知:使用typedef将类型“struct{intx,y;}*”重命名为“USER”,所以函数fun的返回类型为“struct{intx,y;}*”,即指向结构体类型的指针。故本题答案为B选项。

7.B解析:本题考查if语句。scanf函数通过键盘读入a、b的值,a=1,b=2。第一个if语句,先判断条件,发现a<b条件成立,则s=b=2,s=s*s=4。

8.A函数返回值类型可以是简单类型和结构体类型。

9.A题干中,函数fun的功能是:判断形参ch是否为大写字母,若是大写字母则改写成小写字母,其他字符不变。main函数中,通过while循环,调用fun函数,将字符数组s中的各个字符传入,将s中的大写字母改成小写字母,程序输出:abc+abc=defdef。本题答案为A选项。

10.A

11.B

12.A预处理命令是以“#”号开头的命令,它们不是C语言的可执行命令,这些命令应该在函数之外书写,一般在源文件的最前面书写,但不是必须在起始位置书写,所以B、c错误。C语言的预处理能够实现宏定义和条件编译等功能,所以D错误。

13.14

14.软件工程管理软件工程管理解析:软件工程足指,采用工程的概念、原理、技术和方法指导软件的开发与维护:软件工程学的主要研究对象包括软件开发与维护的技术、方法、工具和管理等方面。即软件工程研究的内容主要包括:软件开发技术和软件工程管理。

15.解析:fopen函数的调用方式通常为fopen(文件名,使用文件方式)。本题中要求程序可以打开filea.dat文件,并且是要读取文件中的内容,所以空白处应当填入'filea.dat','r'。

16.3232解析:a*=18+(b++)-(++c)即a=a*(18+(b++)-(++c)),++c的值为5,a=2*(18+3-5)=32。b++是先使用b的值在对b加1,++c是先对c加1再使用c的值。

17.fseek(文件指针位移量起始点)fseek(文件指针,位移量,起始点)解析:本题考查函数fseek的用法。fseek函数的调用形式为:

fseek(文件指针,位移量,起始点)

“起始点”用0,1或2代替,其中,0代表“文件开始”;1为“当前位置”;2为“文件末尾”。“位移量”指以“起始点”为基点,向前移动的字节数。ANSIC和大多数C版本要求位移量是long型数据,这样当文件的长度大于64k时不致出现问题。ANSIC标准规定在数字的末尾加一个字母L,就表示long型。

18.i<10i%3!=0i<10\r\ni%3!=0解析:本题要求输出100以内能被3整除且个位数为6的所有整数,程序中j=i*10+6;语句是求个位数为6的整数,由此可得出程序的循环次数为i<10。然后通过if语句判断整数是否能被3整除,若不能则继续下一次循环,若能则输出该整数,所以逻辑表达式为j%3!=0。

19.程序程序解析:按照软件工程学的观点,一个完整的软件系统不仅包括一整套供计算机系统执行所必须的计算机化了的数据信息(简称为程序),还应包括一整套供计算机领域的技术人员和用户使用的非计算机化的文档资料。

20.*(srt+i)或str[i]i*(srt+i)或str[i]\r\ni解析:求str指向的字符串长度的算法是:用一个变量i表示字符串中字符的位置,一开始赋值为0,取出i位置的字符,判断是否为'\\0',若不是则i的值加1,如此循环直到取出的字符是'\\0'为止,此时i的值就是字符串的长度。由此可知,第一个空处应填第i位置上的字符*(str+i);第二个空格应该填字符串的长度i。

21.7979解析:因为在调用子函数时进行的是数值传递,调用子函数并不能改变实参的值,所以经过调用子函数,c、d的值并没有发生变化还是原来的值。

22.252H252H解析:要解答本题,首先要明白在对指针进行加、减运算时,数字'1'不是十进制数的'1',而是指'1'个存储单元长度。1个存储单元长度占存储空间的多少,应该视具体情况而定,如果存储单元的基类型是int型,则移动1个存储单元的长度就是位移2个字节;如果存储单元基类型是float型,则移动1个存储单元的长度就是位移4个字节。所以旷13所指向的数组元素的地址为:200H+(13*4)H=252H。

23.4不定值4,不定值

24.gae

25.

解析:函数fun的功能是计算并输出3到n之间(含3和n)所有素数的平方根之和,首先根据题干中的要求找出3到n之间的素数,并求出素数的平方根,然后求得这些平方根的和。

26.doublefun(doublexintn){intij=1;doubles=1.0s1=1.0;for(i=1;i<=n;i++){j=-1*j;s1=s1*i/*各项中的阶乘*/s=s+j*pow(xi)/s1;/*按公式求出*/}returns;}doublefun(doublex,intn)\r\n{\r\ninti,j=1;\r\ndoubles=1.0,s1=1.0;\r\nfor(i=1;i<=n;i++)\r\n{\r\nj=-1*j;\r\ns1=s1*i/*各项中的阶乘*/\r\ns=s+j*pow(x,i)/s1;/*按公式求出*/\r\n}\r\nreturns;\r\n}解析:本程序中用s1来表示每项的分母(即各项中的阶乘),要注意本程序中s和s1的初值都为1。注意到本题的公式中是加减相间的,这里要学会使用语句j=-1*j来实现。

27.doublefun(doublexintn){inti;doubles=1.0.s1=1.0;for(i=1;i<=n;i++){s1=s1*i;/*各项中的阶乘*/s=s+pow(xi)/s1;/*按公式求出*/}returns;}doublefun(doublex,intn)\r\n{\r\ninti;\r\ndoubles=1.0.s1=1.0;\r\nfor(i=1;i<=n;i++)\r\n{s1=s1*i;/*各项中的阶乘*/\r\ns=s+pow(x,i)/s1;/*按公式求出*/\r\n}\r\nreturns;\r\n}解析:本程序中用s1来表示每项的分母(即各项中的阶乘),要注意本程序中s和s1的初值都为1。

28.

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

29.intfun(intarray[3][3]){intijt;for(i=0;i<3;i++)/*将右上三角和左下三角对换实现行列互换*/for(j=i+1;j<3;j++){t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}}intfun(intarray[3][3])\r\n{\r\ninti,j,t;\r\nfor(i=0;i<3;i++)/*将右上三角和左下三角对换,实现行列互换*/\r\nfor(j=i+1;j<3;j++)\r\n{t=array[i][j];\r\narray[i][j]=array[j][i];\r\narray[j][i]=t;\r\n}\r\n}解析:注意对矩阵转置后仍然存回其本身时,只能循环矩阵中的一个角(本程序是右上半三角)。控制右上半三角的方法是在第2个循环中j从i+1或i开始,左下半三角的方法是在第2个循环中写成for(j=0;j<i;j++),若要控制所有元素在第2个循环要写成for(j=0;j<3;j++)。

30.floatfun(floath){longt;t=(h*1000+5)/10;/*单精度数h乘以1000后再加5相当十对h中的第三位小数进行四舍五入除以10后将其赋给一个长整型数时就把第三位小数后的数全部截去*/return(float)t/100;/*除以100保留2位小数*/floatfun(floath)\r\n{\r\nlongt;\r\nt=(h*1000+5)/10;/*单精度数h乘以1000后再加5,相当十对h中的第三位小数进行四舍五入\r\n除以10后将其赋给一个长整型数时就把第三位小数后的数全部截去*/\r\nreturn(float)t/100;/*除以100,保留2位小数*/解析:注意本题要求h的值真正发生了四舍五入,而不是为了输出,即不能用printf(“%7.2f”,h)来直接得到结果。由于单精度数h乘以1000后再加5,此时相当于对h中的第三位小数进行四舍五入,再将其赋给一个长整型数时就把第三位小数后的数全部截去。注意在return中要将其中一个数转成浮点型数。

31.voidfun(char*a){while(*a!='\0')a++;a--;/*指针a指向字符串的尾部*/while(*a=='*')a--/*指针a指向最后一个字母*/*(a+l)='\0';/*在字符串最后加上结束标志位*/}voidfun(char*a)\r\n{\r\nwhile(*a!='\\0')\r\na++;\r\na--;/*指针a指向字符串的尾部*/\r\nwhile(*a=='*')\r\n\u3000\u3000\u3000a--/*指针a指向最后一个字母*/\u3000\u3000\u3000\r\n*(a+l)='\\0';\u3000/*在字符串最后加上结束标志位*/\r\n\u3000}解析:前面我们遇到类似将字符串头部的'*'号全部删除,其实解题思路是一样的,请参照前面试题解析及参考答案。

32.#include<stdi0.h>#defineN16typed

温馨提示

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

评论

0/150

提交评论