2021年山西省运城市全国计算机等级考试C语言程序设计预测试题(含答案)_第1页
2021年山西省运城市全国计算机等级考试C语言程序设计预测试题(含答案)_第2页
2021年山西省运城市全国计算机等级考试C语言程序设计预测试题(含答案)_第3页
2021年山西省运城市全国计算机等级考试C语言程序设计预测试题(含答案)_第4页
2021年山西省运城市全国计算机等级考试C语言程序设计预测试题(含答案)_第5页
已阅读5页,还剩24页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2021年山西省运城市全国计算机等级考试C语言程序设计预测试题(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.读取二进制文件的函数调用形式为:fread(buffersize,count,fp);,其中buffer代表的是()。

A.一个文件指针,指向待读取的文件

B.一个整型变量,代表待读取的数据的字节数

C.一个内存块的首地址,代表读人数据存放的地址

D.一个内存块的字节数

2.有以下程序:#include<stdiO.h>main(){FILE*fp;intk,n,i,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w");for(i=0;i<6;i++)fprintf(fp,"%d\n",a[i]);fclose(fp);fp(i=0;i<3;i++)fscanf(fp,"%d%d",&k,&n);fclose(fp);printf("%d\n,%d\n,k,n);}程序运行后的输出结果是()。A.1,2B.3,4C.5,6D.123,456

3.

4.

5.以下函数的时间复杂度和空间复杂度为()A.T(n)=O(2^n),S(n)=O(n)

B.T(n)=O(1),S(n)=O(1)

C.T(n)=O(2^n),S(n)=O(1)

D.T(n)=O(n),S(n)=O(n)

6.以下不能正确进行字符串赋初值的语句是

A.charstr[5]="good!";

B.charstr[]="good!";

C.char*srt="good!";

D.charstr[5]={'g','o','o','d'};

7.有以下程序:#include<stdio.h>main(){inti,j,m=1;for(i=1;i<3;i++){for(j=3;j>0;j--){if(i*j>3)break;m*=i+j;}}printf("m=%d\n",m);}程序运行后的输出结果是()。A.m=6B.m=2C.m=4D.m=3

8.p指向线性链表中某一结点,则在线性链表的表尾插入结点s的语句序列是()。

A.while(p->next!=NULL)p=p->next;p->next=s;s->next=NULL;

B.while(p!=NULL)p=p->next;p->next=s;s->next=NULL;

C.while(p->next!=NULL)p=p->next;s->next=p;p->next=NULL;

D.while(p!=NULL)p=p->next->next;p->next=s;s->next=p->next;

9.

10.

若变量均已正确赋初值,则以下语句中

错误的是()。

A.tl=t2;

B.t2.numl=tl.numl;

C.t2.mark=tl.Mark

D.t2.num2=tl.hum2;

11.下列叙述中正确的是()。

A.continue语句的作用是使程序的执行流程跳出包含它的所有循环

B.break语句只能用在循环体内和switch语句体内

C.在循环体内使用break语句和continue语句的作用相同

D.break语句只能用于switch语句体中

12.下列叙述中错误的是()。A.程序可以由多个程序文件组成

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

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

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

二、2.填空题(12题)13.数据库的逻辑模型设计阶段的任务是将______转换成关系模式。

14.函数fun的功能是计算xn

doublefun(doublex,intn)

{inti;doubley=1;

for(i=1;i<=n;i++)y=y*x;

returny;

}

主函数中已正确定义m、a、b变量并赋值,而且调用fun函数计算:m=a4+b4-(a+b)3。实现这一计算的函数调用语句为【】。

15.下面程序有两个printf语句,如果第一个printf语句输出的是194,则第二个printf语句的输出结果是【】。

main()

{inta[10]={1,2,3,4,5,6,7,8,9,0},*p;

p=a;

printf("%x\n",p);

printf("%x\n,p+9);

}

16.在面向对象方法中,类的实例称为______。

17.以下程序的功能是:将输入的正整数按逆序输出。例如:若输入135则输出531。请填空。

#include<stdio.h>

main()

{intn,s;

printf("Enteranumber:");scanf("%d",&n);

printf("Output:");

do

{s=n%10;printf("%d",s);【】;

}while(n!=0);

printf("\n");

}

18.下列程序运行后的输出的结果是______。

#include<stdio.h>

main()

{chars[20];

scanf("%s",s);

printf("%s",s);

}

运行程序,输入HOWAREYOU。

19.下面程序的运行结果是【】。

#include<stdio.h>

main()

{inty,a;

y=2,a=1;

while(y--!=-1)

{do{a*=y;a++;}while(y--);}

printf("%d,%d",a,y);}

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

21.下述程序的输出结果是【】。

#include<stdio.h>

intfun(intx)

{intp;

if(x==0||x==1)

return3;

else

p=x-fun(x-2);

returnp;}

voidmain()

{printf("\n%d",fun(9));}

22.一棵二叉树第6层(根结点为第一层)的结点最多为______个。

23.已有定义如下:

structnode

{intdata;

structnode*next;

}*p;

以下语句调用malloc函数,使指针p指向一个具有structnode类型的动态存储空间。请填空。

p=(structnode*)malloc(【】);

24.问题处理方案的正确而完整的描述称为______。

三、3.程序设计题(10题)25.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:找出学生的最高分,由函数值返回。

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

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

试题程序:

#include<stdio.h>

#include<stdlib.h>

#defineN8

structslist

{doubles;

structslist*next;

};

typedefstructslistSTREC;

doublefun(STREC*h)

{

}

STREC*creat(double*s)

{

STREC*h,*p,*q;

inti=0;

h=p=(STREC*)malloc(sizeof(STREC));

p->s=0;

while(i<N)

/*产生8个节点的链表,各分数存入链表中*/

{q=(STREC*)malloc(sizeof(STREC));

p->s=s[i];i++;p->next=q;p=q;

}

p->next=0;

returnh;/*返回链表的首地址*/

}

outlist(STREC*h)

{

STREC*p;

p=h->next;

printf("head");

do

{printf("->%2.0f",p->s);p=p->next;}

/*输出各分数*/

while(p!=0);

printf("\n\n");

}

main()

{

doubles[N]={85,76,69,85,91,72,64,87},

max;

STREC*h;

h=creat(s);

outlist(h);

max=fun(h);

printf("max=%6.1f\n",max);

}

26.请编写函数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。

注意;部分源程序给出如下.

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

试题程序:

#include<math.h>

#include<stdio.h>

doublefun(doublex[10])

{

}

main()

{

doubles,x[i0]={95.0,89.0,76.0,65.0,

88.0,72.0,85.0,81.0,90.0,56.0};

inti;

printf("\nTheoriginaldatais:\n");

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

printf("%6.1f",x[i]);

printf("\n\n");

s=fun(x);

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

}

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

}

28.请编写一个函数fun(),它的功能是:将ss所指字符串中所有下标为偶数位置的字母转换为小写(若该位置上不是字母,则不转换)。

例如,若输入ABC4efG,则应输出aBc4efg。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*SS)

{

}

main()

{

chartt[81];

clrscr();

printf("\nPleaseenteranstringwithin80

characters:\n");

gets(tt);

printf("\n\nAfterchanging,thestring\n

\%s",tt);

fun(tt);

printf("\nbecomes\n\%S\n",tt);

}

29.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。

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

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

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

例如,若输入17,5,则应输出19,23,29,3l,37。

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

请勿改动主函数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=O;m<n;m++)

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

printf("\n");

}

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

}

32.假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:除了尾部的,:号之外,将字符串中其他*号全部删除。形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言的字符串函数。

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

voidfun(char*a,char*p)

{

}

main()

chars[81],*t;

printf("Enterastring:\n");

gets(s);

t=s;

while(*t)

t++;

t--;/*指针t指向字符串尾部*/

while(*t=='*')

t--;/*指针t指向最后一个字母*/

fun(s,t);

printf("Thestringafterdeleted:\n");

puts(s);

}

33.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串的前导*号不得多于n个;若多于n个,则删除多余的*号:若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。

例如,字符串中的内容为:******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍为;*******A*BC*DEF*G****。n的值在主函数中输入。

在编写函数时,不得使用C语言提供的字符串函数。

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

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

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

例如,输入下面的矩阵:

100200300

400500600

700800900

程序输出:

100400700

200500800

300600900

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

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

四、单选题(0题)35.

五、单选题(0题)36.有以下程序:

运行时,若输入123450<;回车>;,则输出结果是()。

A.66656B.6566456C.66666D.6666656

六、单选题(0题)37.若有下面的说明和定义

structtest

{intml;charm2;floatm3;

unionuu{charul[5];intu2[2];}ua;

}myaa;

则sizeof(structtest)的值是A.A.12B.16C.14D.9

参考答案

1.Cfread函数中的参数buffer是内存块的首地址,输入的数据存入此内存块中。

2.C此题是考查fprintf和fscanf,其中fprintf是向文件输出,文件为da2.dat文件,fscanf是向文件输入,所以根据程序循环写入和写出.可知答案为C。

3.D

4.B

5.A

6.A解析:本题考核的知识点是字符数组和字符指针变量的初始化。选项A定义了一个字符数组str,具有5个元素,但赋初值的时候,初值个数却是6个(有一个'\\0'),故选项A错误的;选项B定义了一个字符数组str并给它赋初值,由于省去了长度定义,长度由初值个数确定,相当于str[6],选项B正确;选项C定义了一个字符型指针变量并用一个字符串给它赋初值,使该字符型指针指向了该字符串,选项C正确;选项D是对字符型数组中单个元素依次赋初值,选项D正确。所以,4个选项中A为所选。

7.A本题考查了多重for循环。当(i*j)>3时,跳出循环,本题中i=1,j=3,i*J后值为3,所以执行下边语句:m*=i+j,也可写成m=m*i+j,这时要注意优先级,所以m的值为6。

8.A

9.B

10.C结构体变量中的第一成员都是数组,不能直接将变量tl的成员mark数组的地址赋给另一个变量t2的成员mark数组的地址。因为地址都是固定值,不能被赋值。结构体可以进行整体的赋值。

11.Bcontinue语句的作用是跳过循环体中剩余的语句而进行下一次循环,所以A选项错误。break语句的作用是终止正在执行的switch语句体,跳出switch语句体或者强制终止当前循环,从当前执行的循环中跳出,所以C、D选项错误。故本题答案为B选项。

12.B[解析]在一个C语言程序中可以进行多种算法的实现,对算法的个数没有规定,所以B)错误。

13.E-R图E-R图解析:数据库逻辑设计的任务是将概念模型进一步转化成相应的数据模型。而E-R图是主要的概念模型,因此数据库的逻辑设计的主要工作是将E-R图转换成关系模式。

14.m=fun(a4)+fun(b4)-fun(a+b3);m=fun(a,4)+fun(b,4)-fun(a+b,3);解析:函数fun(x,n)的作用是求x的n次方,因此a的4次方应该调用函数fun(a,4),b的4次方应该调用函数fun(b,4),a+b的3次方应该调用函数fun(a+b,3),所以题目中的数学表达式,写成C程序中的语句为m=fun(a,4)+fun(b,4)-fun(a+b,3)。

15.1a61a6解析:对于指针变量的运算,就是对地址的运算。本题中由于指针指向的是整型变量,所以,使指针变量移动9个位置也就是移动18个字节。注意,本题是以十六进制输出的。

16.对象对象解析:类描述的是具有相似性质的一组对象。例如,每本具体的书是一个对象,而这些具体的书都有共同的性质,它们都属于更一般的概念“书”这一类对象。一个具体对象称为类的实例。

17.n/=10或n=n/10n/=10或n=n/10解析:每次循环把n除以10所得的商赋给n。

18.HOWHOW解析:在scanf()函数中,使用空格作为分隔符,如果输入含有空格的字符串,则不能使用scanf()函数,所以本题中输入空格就返回了'\\0',s数组也就确定了,后面的输入就不再读入数组s中。

19.1-21,-2解析:考查嵌套的循环结构。题中外层while循环的循环条件是\ue008y--!=-1\ue009,即y>=0;内层do厀hile循环的循环条件是y--,即y-->0,y>=1。

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

21.77解析:本题考查的是函数的递归调用。x=0或x=1是递归的终止条件,然后用回代的方法从一个已知值推出下一个值,直到计算出最终结果。

22.3232解析:二叉树第k层上,最多有2k-1(k≥1)个结点。第6层的结点数最多是26-1=32。注意区别“二叉树的结点最多数”和“某一层的结点最多数”。前者的计算是深度为m的二叉树最多有2m-1个结点。

23.sizeof(structnode)或4sizeof(structnode)或4解析:malloc(sizeof(struetnode))的作用是开辟一个长度为sizeof(struetnode)的内存区。(structnode*)的作用是使malloc返回的指针转换为指向structnode类型数据的指针。

24.算法或程序或流程图算法或程序或流程图解析:算法是问题处理方案正确而完整的描述。

25.doublefun(STREC*h){doublemax=h->s;while(h!=NULL)/*通过循环找到最高分数*/{if(max<h->s)max=h->s;h=h->next;}returnmax;}doublefun(STREC*h)\r\n{\r\ndoublemax=h->s;\r\nwhile(h!=NULL)/*通过循环找到最高分数*/\r\n{if(max<h->s)max=h->s;\r\nh=h->next;\r\n}\r\nreturnmax;\r\n}解析:在本题中,h为一个指向结构体的指针变量,若要引用它所指向的结构体中的某一成员时,要用指向运算符“->”。由于是链表,所以要使h逐一往后移动,使用的是h=h->next。

26.doublefun(doublex[10]){doublexl=0.0s=0.0;inti;for(i=0;i<10;i++)xl=xl+x[i];xl-xl/10;/*求10个数的平均值*/for(i=0;i<l0;i++)s=s+(x[i]-xl)*(x[i]-x1);returnsqrt(s/l0);/*求10个数的方差*/}doublefun(doublex[10])\r\n{\r\ndoublexl=0.0,s=0.0;\r\ninti;\r\nfor(i=0;i<10;i++)\r\nxl=xl+x[i];\r\nxl-xl/10;\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10个数的平均值*/\r\nfor(i=0;i<l0;i++)\r\ns=s+(x[i]-xl)*(x[i]-x1);\r\nreturnsqrt(s/l0);\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10个数的方差*/\r\n}解析:又是一道算式表达题,程序中用第1个循环来完成求10个数的总和,接着再用x1=x1/10来求出平均值。

27.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中要将其中一个数转成浮点型数。

28.voidfun(char*ss){inti;for(i=0;ss[i]!='\0'i++)/*将ss所指字符串中所有下标为偶数位置的字母转换为小写*/if(i%2==0&&ss[i]>='A'&&ss[i]<='z')ss[i]=ss[i]+32;}voidfun(char*ss)\r\n{\r\ninti;\r\nfor(i=0;ss[i]!='\\0'i++)/*将ss所指字符串中所有下标为偶数位置的字母转换为小写*/\r\nif(i%2==0&&ss[i]>='A'&&ss[i]<='z')\r\nss[i]=ss[i]+32;\r\n}解析:从C语言的学习中我们知道,只要将小写字母减去32则转成大写字母,将大写字母加上32则转成小写字母。该程序是用if语句实现该功能转化的。

29.

解析:该程序功能是把高于或等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数返回值返回。解题过程首先求得平均分,然后将所有成绩与平均分进行比较,如果大于或等于平均分,存入指定数组。

30.voidfun(intmintkintxx[]){intijn;for(i=m+1n=0;n<k;i++)/*找大于m的素数循环k次即找出紧靠m的k个素数*/{for(j=2;j<i;j++)/*判断一个数是否为素数如果不是跳出此循环判断下一个数*/if(i%j==O)break;if(j>=i)/*如果是素数放入数组xx中*/xx[n++]=i;}}voidfun(intm,intk,intxx[])\r\n{\r\ninti,j,n;\r\nfor(i=m+1,n=0;n<k;i++)/*找大于m的素数,循环k次,即找出紧靠m的k个素数*/\r\n{for(j=2;j<i;j++)/*判断一个数是否为素数,如果不是,跳出此循环,判断下一个数*/\r\nif(i%j==O)break;\r\nif(j>=i)/*如果是素数,放入数组xx中*/\r\nxx[n++]=i;\r\n}\r\n}解析:本题只要掌握了判断素数的算法即不难完成了,其实程序缺少部分也正是这部分。

31.intfun(char*s){intij=

温馨提示

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

评论

0/150

提交评论