2021年安徽省宣城市全国计算机等级考试C语言程序设计模拟考试(含答案)_第1页
2021年安徽省宣城市全国计算机等级考试C语言程序设计模拟考试(含答案)_第2页
2021年安徽省宣城市全国计算机等级考试C语言程序设计模拟考试(含答案)_第3页
2021年安徽省宣城市全国计算机等级考试C语言程序设计模拟考试(含答案)_第4页
2021年安徽省宣城市全国计算机等级考试C语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩49页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2021年安徽省宣城市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.有以下程序:#include<stdio.h>main(){inty=9;for(;y>0;y--)if(y%3==0)printf(“%d”,--y);}程序的运行结果是()。

A.852B.963C.741D.875421

2.

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

A.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令

B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件

C.用C语言编写的程序称为源程序,它以ASCII形式存放在一个文本文件中

D.C语言源程序经编译后生成扩展名为.obj的目标文件

4.若有定义语句:inta[3][6];,按在内存中的存放顺序,a数组的第10个元素是A.a[0][4]B.a[1][3]C.a[0][3]D.a[1][4]

5.在多媒体计算机系统中,不能用以存储多媒体信息的是A.光缆B.软盘C.硬盘D.光盘

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

A.在C语言程序中,main函数必须放在其他函数的最前面

B.每个后缀为C的C语言源程序都可以单独进行编译

C.在C语言程序中,只有main函数才可单独进行编译

D.每个后缀为.C的C语言源程序都应该包含一个main函数

7.若定义了函数double*function(),则函数function的返回值为()。

A.实数型B.实数的地址C.指向函数的指针D.函数的地址

8.以下选项中能用作数据常量的是()。

A.115LB.0118C.1.5e1.5D.o115

9.以下程序段中,输出信息不能正确反映变量大小关系的是()。

A.if(x>y)printf(“x>y”);if(x<y)printf(“x<y”);elseprintf(“x=y”);

B.if(x>=y)if(x>y)printf(“x>y”);elseprintf(“x=y”);elseprintf(“x<y”);

C.if(x>y)printf(“x>y”);if(y>x)printf(“x<y”);if(x==y)printf(“x=y”);

D.if(x>y)printf(“x>y”);elseif(y<x)printf(“x<y”);elseprintf(“x=y”);

10.设有定义语句:doublex=123.456;则语句printf(“%6.2f,%3.0f\n”,x,x);的输出结果是()。

A.123.46,123.0B.123.45,123C.123.46,123D.123.45,123.

11.对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是()。

A.快速排序B.冒泡排序C.直接插入排序D.堆排序

12.有下列程序:fun(intX,inty){return(x+y);)main(){inta=1,b=2,c=3,sum;sum=fun((a++,b++,a+b),c++);printf("%d\n",sum);}执行后的输出结果是()。A.6B.7C.8D.9

二、2.填空题(12题)13.设i,j,k均是int型变量,则执行以下for循环后,k的值为【】。

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

k=i+j;

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.数据库系统的三级模式分别为______模式、内部级模式与外部级模式。

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

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

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

main()

{unsignedshorta=65536;intb;

printf("%d\n",b=A);

}

18.语句:x++;、++x;、x=x+1;、x=1+x;,执行后都使变量x中的值增1,请写出一条同一功能的赋值语句(不得与列举的相同)【】。

19.顺序存储方法是把逻辑上相邻的结点存储在物理位置______的存储单元中。

20.请选出以下程序的输出结果#include<stdio.h>main(){inta[]={1,2,3,4},i;intx=0;for(i=0;i<4;i++){sub(a,x);Printf("%d",x);}printf("\n");}sub(S,y)int*s,y;{staticintt=3;y=s[t];t--;}

21.表达式pow(2.8,sqrt(float(x)))值的数据类型为______型。

22.设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为【】。

23.下面程序的功能是将一个字符串str的内容颠倒过来,请填空。

main()

{

inti,j,【】;charstr[]={"1234567");

for(i=0,j=strlen(str)【】;i<j;i++,j--)

{k=str[i];str[i]=str[j];str[j]=k;}

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

}

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

#include<stdio,h>

main()

{inta=1,b=2,c=3;

if(c=a)printf("%d\n",c);

elseprintf("%d\n",b);}

三、3.程序设计题(10题)25.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是按分数的高低排列学生的记录,低分在前。

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

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

试题程序:

#include<stdio.h>

#defineN16

typedefstruct

{charmum[10);

ints;

}STREC;

intfun(STRECa[])

{

}

main()

{

STRECs[N]={{“GA005”,88},{“GA003”,64},

{“CA002”,77},{“GA004”,89},{“GA001”,54},

{“GA007”,72},{“GA008”,72},{“GA006”,65},

{“GA015”,83},{“GA013”,95},{“GA012”,55},

{“GA014”,68},{“GA01l”,78},{“GA017”,53},

{“GA018”,92},{“GA016”,82}};

inti;

FILE*out;

fun(s);

printf(“Thedataaftersorted:\n”);

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

{

if((i)%4==0)

/*每行输出4个学生记录*/

printf(“\n”);

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

}

printf(“\n”);

ut=fopen(“out21.dat”,“w”);

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

{

if((i)%4==0&&i)

fprintf(out,“\n”);

fPrintf(out,“%4d”,s[i].s);

}

fprintf(out,“\n”);

fClose(out);

}

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

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

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

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

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

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

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

28.函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在t所指的数组中。

例如,若s所指字符串中的内容为“ABCDEFGl2345”,其中字符C的ASCII码值为奇数,在数组中的下标为偶数,因此必须删除:而字符1的ASCII码值为奇数,在数组中的下标也为奇数,因此不应当删除,其他依此类推。

最后t所指的数组中的内容应是“BDFl2345”。

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

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

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

a=197

238

456

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

097

008

000

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

请勿改动主函数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;j<N;j++)

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

printf("\n");

}

}

30.请编写函数fun(),其功能是:将s所指字符串中除了下标为奇数、同时ASCII值为偶数的字符外,其余的全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。

例如,若s所指字符串中的内容为edB2A4Dsdg,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为偶数,因此也应当删除:而字符2的ASCII码值为偶数,所在数组中的下标为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是d24。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string,h>

voidfun(char*s,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf("\nPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

printf("\nTheresultis:%s\n",t);

}

31.请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:

234345753134436458100321135760

则输出结果为6,100。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

{

}

main()

{

inta[10]={234,345,753,134,436,458,

100,321,

135,760),k;

clrscr();

fun(a,10,&k);

printf("%dr%d\n",k,a[k]);

}

32.请编写函数fun(),其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

例如,输入17,则应输出46891012141516。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

voidfun(intm,int*k,intxx[])

{

}

main()

{

intm,n,zz[100];

clrscr();

printf("\nPleaseenteranintegernumber

between10and100:");

scanf("%d",&n);

fun(n,&m,zz);

printf("\n\nThereare%dnon-prime

numberslessthan%d:",m,n);

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

printf("\n%4d",zz[n]);

}

33.下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N],intn),该函数的功能是:使数字右上半三角元素中的值乘以m。

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

a=19

27

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

218

214

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N],intm)

{

}

main()

{

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

clrscr();

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

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

/*输出一个随机的5×5矩阵*/

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

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

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

}

printf("\n");

}

do

m=rand()%10;

while(m>=3);/*产生一个上于3的随机数*/

printf("m=%4d\n",m);

fun(a,m);

printf("THERESULT\n");

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

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

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

printf("\n");

}

}

34.请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:

876675896101301401980431451777

则输出结果为6,980。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

{

}

main()

{

inta[10]={876,675,896,101,301,401,

980,431,451,777},k;

clrscr();

fun(a,10,&k);

printf("%d,%d\n",k,a[k]);

}

四、单选题(0题)35.如下函数调用语句func(rec1,rec2+rec3,rec4,rec5);该函数调用语句中,含的实参个数是().

A.3B.4C.5D.有语法错误

五、单选题(0题)36.C语言常量的类型从字面形式上可区分,以下判断中正确的是()。

A.2E3——整型B.2.0E3——实型C.‘\025’——字符串D.“a”——字符型

六、单选题(0题)37.若要求从键盘读入含有空格字符的字符串,应使用函数

A.getc()B.gets()C.getehar()D.scanf()

参考答案

1.A第1次for循环,y的值为9,“y%3”的值为0,满足if条件输出“--y”,即先自减后输出,所以输出8;第2次for循环,y的值为7,“y%3”的值为1,不满足if条件,不执行printf语句;第3次for循环,y的值为6,“y%3”的值为0,满足if条件输出“--y”,即先自减后输出,所以输出5;第4次for循环,y的值为4,不满足if条件,不执行printf语句;第5次for循环,y的值为3,满足if条件,输出2;第6次for循环,y的值为1,不满足if条件,不执行printf语句。故本题答案为A选项。

2.B

3.AC语言中的非执行语句不会被编译,不会被转换成二进制的机器指令,所以A选项错误。由C语言构成的指令序列称为C语言源程序,C语言源程序经过C语言编译程序编译之后,生成一个扩展名为.obj的二进制文件(称为目标文件);最后要由“连接程序”把此目标文件与C语言提供的各种库函数连接起来生成一个扩展名为.exe的可执行文件。故本题答案为A选项。

4.B解析:二维数组的元素在内存中是按行列顺序连续存放的。以本题的二维数组a[3][6]为例,它的元素在内存中的存放顺序是:a[0][0]、a[0][1]、a[0][2]…a[0][5]、a[1][0]、\u3000a[1][1]…a[1][5]、a[2][0]…a[2][5]。由此可见,第10个元素就是第2行第4个元素,即a[1][3]。故应该选择B。

5.A解析:光缆是传输多媒体信息的通道,不能用以存储多媒体信息。

6.BC语言是一种成功的系统描述语言,具有良好的移植性,每个后缀为.C的C语言源程序都可以单独进行编译。

7.B

8.AA选项中“115L”表示长整型数据。B选项是八进制常量的表示方法,但是在八进制中不能含有数字8,所以B选项错误。C选项中e后面应该是整数,而不能是小数1.5,所以C选项错误。D选项中八进制常量应该是以数字“0”开始,而不是以字母“o”开始。故本题答案为A选项。

9.A选项A中,若条件“x>y”为真,输出“x>y”;若条件“x<y”为真,输出“x<y”;若条件“x>=y”为真,输出“x=y”。选项A错误,其他选项都正确。故本题答案为A选项。

10.C对于double类型的实数,可以在printf函数的格式化字符串中使用”n1.n2”的形式来指定输出宽度(n1和n2分别代表一个整常数)。其中n1指定输出数据的宽度(包括小数点),n2指定小数点后小数位的位数,n2也称为精度。当输出数据的小数位多于n2位时,截取右边多余的小数,并对截取部分的第1位小数做四舍五入处理;当输出数据的小数位少于n2时,在小数的最右边补0,使得输出数据的小数部分宽度为n2;如果指定“n1.0”格式,则不输出小数点和小数部分。题干中,%6.2f表示输出6位宽度,2位小数,所以被截取的小数位为0.006,进行四舍五入,结果为123.46;%3.0f表示输出3位宽度,0位小数,结果为123。故本题答案为C选项。

11.D各种排序方法中最坏情况下需要比较的次数分别为:冒泡排序n(n-1)/2、快速排序n(n-1)/2、简单插入排序n(n-1)/2、希尔排序0(n1.5)、简单选择排序n(n-1)/2、堆排序O(nlog2n)

12.C函数fun(intx,inty)的功能是返回x+Y的值。在主函数中,变量a,b,c的初始值分别为1,2,3。因此逗号表达式“a++,b++,a+b”的值等于5,表达式c++的值为3,调用于函数的表达式为“fun(5,3);”,其返回值等于8。

13.10

14.fun(a4)+fun(b4)-fun((a+b)3);fun(a,4)+fun(b,4)-fun((a+b),3);解析:函数fun的功能是计算x的n次方,a的4次方的调用函数为fun(a,4),b的4次方的调用函数为fun(b,4),(a+b)的3次方的调用函数为fun((a+b),3),计算m=a4+b4-(a+b)3的函数调用语句为:fun(a,4)+fun(b,4)-fun((a+b),3);

15.概念(或概念级)概念(或概念级)

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.00解析:对于一个unsignedshort来说,它能取的最大值是65535。这里给a赋值65536,已经超出了它的取值范围,这样它的高位将被截掉,只把低位赋给它(全零)。所以a的值实际为0。

18.x+=1;

19.相邻相邻

20.C

21.floatfloat解析:在此表达式中x是float类型的变量,经过开方所得到的结果仍是float类型,再和2.8进行运算时,应该先将2.8转换成float类型再运算,最后结果仍是float型。

22.33解析:本题考查的是C语言逗号表达式的相关知识。程序在计算逗号表达式时,从左到右计算由逗号分隔各表达式的值,整个逗号表达式的值等于其中最后一个表达式的值。本题中,首先i被赋值为2,再自加1,最后i++的值计算为3。

23.k-1k\r\n-1解析:程序山使用了整型变量i、j、k,使用前应先声明,因此第1个空应填变量k。i和j作为下标的值,i被赋初值为0,j应为下标的最大值,下标的最大值为数组的长度减1。

24.11解析:该程序要注意的是if语句的判断条件“c=a”是赋值,而不是“c==a”。由于a=1,故条件c=a使c的值为1(真),所以输出c的值1。

25.intfun(STRECa[]){intij;STRECt;for(i=l;i<N;i++)/*用冒泡法进行排序进行N-1次比较*/for(j=0;j<N-1;j++)/*在每—次比较中要进行N-1次两两比较*/if(a[j].s>a[j+1].s)/*按分数的高低排列学生的记录低分在前*/{t=a[j];a[j]=a[j+1];a[j+1]=t;}}intfun(STRECa[])\r\n{\r\ninti,j;\r\nSTRECt;\r\nfor(i=l;i<N;i++)/*用冒泡法进行排序,进行N-1次比较*/\r\nfor(j=0;j<N-1;j++)/*在每—次比较中要进行N-1次两两比较*/\r\nif(a[j].s>a[j+1].s)/*按分数的高低排列学生的记录,低分在前*/\r\n{\r\nt=a[j];\r\na[j]=a[j+1];\r\na[j+1]=t;\r\n}\r\n}解析:冒泡法算法思路:如果有N个数,则要进行N-1次比较,在每—次比较中要进行N-1次两两比较(这种算法较好理解但不是最精的)。所谓两两比较就是从头到尾依次将相邻两个数进行比较并将其中大的数放在前或在后(若要求从小到大排序,则大的数要放在后。反之则对调),即两两比较后这两个数要形成题中所要求的顺序。由于总是从头到尾进行比较,所以第1次比较结束后,最大(或最小)数肯定在最后,第2次比较结束后,次最大(或次最小)数肯定在倒数的第2个数,依次类推,所以进行第一次比较时必须比较到最后一个数,而进行第2次比较时只要比较到倒数的第2个数即可,所以进行第i次比较I时只需比较N-i次即可(这种算法较难理解,但它是最好的)。

26.*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);解析:该程序功能是将正整数a、b合并形成一个新整数。本题类型首先要考虑整数的位数分离,然后要进行位数合成。也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。

27.

解析:该程序功能是求最低分数的学生。本题是关于求解结构体中某些成员的最小值,首先将第一个值设定为最小值,并在循环中将其他所有值与该值进行比较,求得最小值。

28.

解析:该程序功能是删除下标为偶数同时ASCII值为奇数的字符。解题过程利用if判断表达式选择下标为偶数同时ASCII值为奇数的字符,然后将符合条件的字符放入指定的字符串,这样就实现了函数功能。

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

30.voidfun(char*schart[]){intij=0;for(i=0;s[i]!='\0';i++)if(i%2!=0&&s[i]%2==0)/*将s所指字符串下标为奇数同时ASCII值为偶数的字符放入数组t中*/t[j++]=s[i];t[j]='\0';/*在字符串最后加上结束标志位*/}voidfun(char*s,chart[])\r\n{\r\ninti,j=0;\r\nfor(i=0;s[i]!='\\0';i++)\r\nif(i%2!=0&&s[i]%2==0)/*将s所指字符串下标为奇数同时ASCII值为偶数的字符放入数组t中*/\r\nt[j++]=s[i];\r\nt[j]='\\0';/*在字符串最后加上结束标志位*/\r\n}解析:本题要求除了下标为奇数同时ASCII值为偶数的字符之外,其他字符都删除。即题目要求留下下标为奇数同时ASCII值为偶数的字符。C语言中并没有直接删除字符的算法,请大家在做题的时候注意。

31.intfun(int*sinttint*k){inti;*k=0/*k所指的数是数组的下标值*/for(i=0;i<t;i++)if(s[*k]>s[i])*k=i;/*找到数组的最小元素把该元素的下标赋给k所指的数*/returns[*k];/*返回数组的最小元素*/}intfun(int*s,intt,int*k)\r\n{\r\ninti;\r\n*k=0/*k所指的数是数组的下标值*/\r\nfor(i=0;i<t;i++)\r\nif(s[*k]>s[i])\r\n*k=i;/*找到数组的最小元素,把该元素的下标赋给k所指的数*/\r\nreturns[*k];/*返回数组的最小元素*/\r\n}解析:本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应让*k的值为数组中的某一下标值勤,即*k=0。

32.voidfun(intmint*kintxx[]){intijn=0;for(i=4;i<m;i++)/*找出大于1小于整数m的非素数*/{for(j=2;j<i;j++)if{i%j==0)break;if(j<i)xx[n++]=i;}*k=n;/*反回非素数的个数*/}voidfun(intm,int*k,intxx[])\r\n{\r\ninti,j,n=0;\r\nfor(i=4;i<m;i++)/*找出大于1小于整数m的非素数*/\r\n{for(j=2;j<i;j++)\r\nif{i%j==0)break;\r\nif(j<i)xx[n++]=i;\r\n}\r\n*k=n;/*反回非素数的个数*/\r\n}解析:这道题是考查一个数是不是素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解决,请学习者以此题为例,搞清判断素数的方法。

33.intfun(inta[][N]intm){intij;for(i=0;i<N;i++)for(j=i;j<N;j++)a[i][j]=a[i][j]*m;/*右上半三角元素中的值乘以m*/}intfun(inta[][N],intm)\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=i;j<N;j++)\r\na[i][j]=a[i][j]*m;/*右上半三角元素中的值乘以m*/\r\n}解析:本题考查表示右上关三角元素的算法。行下标肯定是从0到N-1,而列下标要根据行下标来定,当到第i行时列下标要从第i列开始,所以我们在编写程序时,第2个for()中有j=i(不是1);若要表示左下半三角元素时,行下标也是从0到N-1,列下标也是从0开始,但当到第i行时列只到i。所以要把上述的第2个for()改成for(j=0;j<=i;++)。

34.intfun(int*sinttint*k){inti;*k=0;/*k所指的数是数组的下标值*/for(i=0;i<t;i++)if(s[*k]<s[i])*k=i;/*找到数组的最大元素把该元素的下标赋给k所指的数*/returns[*k];/*返回数组的最大元素*/}intfun(int*s,intt,int*k)\r\n{\r\ninti;\r\n*k=0;/*k所指的数是数组的下标值*/\r\nfor(i=0;i<t;i++)\r\nif(s[*k]<s[i])*k=i;/*找到数组的最大元素,把该元素的下标赋给k所指的数*/\r\nreturns[*k];/*返回数组的最大元素*/\r\n}解析:本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应让*k的值为数组中的某一下标值,即*k=0。

35.B

36.B2E3是实型常量的指数形式,选项A错误;2.0E3是实型常量的指数形式,选项B正确;‘\\025’是八进制表示的转义字符,选项C错误;“a”是双引号标注的字符串常量,选项D错误。故本题答案为B选项。

37.B解析:scanf()语句用“空格”区别不同的字符串;getc()与getchar()语句不能用于字符串的读入。2021年安徽省宣城市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.有以下程序:#include<stdio.h>main(){inty=9;for(;y>0;y--)if(y%3==0)printf(“%d”,--y);}程序的运行结果是()。

A.852B.963C.741D.875421

2.

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

A.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令

B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件

C.用C语言编写的程序称为源程序,它以ASCII形式存放在一个文本文件中

D.C语言源程序经编译后生成扩展名为.obj的目标文件

4.若有定义语句:inta[3][6];,按在内存中的存放顺序,a数组的第10个元素是A.a[0][4]B.a[1][3]C.a[0][3]D.a[1][4]

5.在多媒体计算机系统中,不能用以存储多媒体信息的是A.光缆B.软盘C.硬盘D.光盘

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

A.在C语言程序中,main函数必须放在其他函数的最前面

B.每个后缀为C的C语言源程序都可以单独进行编译

C.在C语言程序中,只有main函数才可单独进行编译

D.每个后缀为.C的C语言源程序都应该包含一个main函数

7.若定义了函数double*function(),则函数function的返回值为()。

A.实数型B.实数的地址C.指向函数的指针D.函数的地址

8.以下选项中能用作数据常量的是()。

A.115LB.0118C.1.5e1.5D.o115

9.以下程序段中,输出信息不能正确反映变量大小关系的是()。

A.if(x>y)printf(“x>y”);if(x<y)printf(“x<y”);elseprintf(“x=y”);

B.if(x>=y)if(x>y)printf(“x>y”);elseprintf(“x=y”);elseprintf(“x<y”);

C.if(x>y)printf(“x>y”);if(y>x)printf(“x<y”);if(x==y)printf(“x=y”);

D.if(x>y)printf(“x>y”);elseif(y<x)printf(“x<y”);elseprintf(“x=y”);

10.设有定义语句:doublex=123.456;则语句printf(“%6.2f,%3.0f\n”,x,x);的输出结果是()。

A.123.46,123.0B.123.45,123C.123.46,123D.123.45,123.

11.对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是()。

A.快速排序B.冒泡排序C.直接插入排序D.堆排序

12.有下列程序:fun(intX,inty){return(x+y);)main(){inta=1,b=2,c=3,sum;sum=fun((a++,b++,a+b),c++);printf("%d\n",sum);}执行后的输出结果是()。A.6B.7C.8D.9

二、2.填空题(12题)13.设i,j,k均是int型变量,则执行以下for循环后,k的值为【】。

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

k=i+j;

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.数据库系统的三级模式分别为______模式、内部级模式与外部级模式。

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

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

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

main()

{unsignedshorta=65536;intb;

printf("%d\n",b=A);

}

18.语句:x++;、++x;、x=x+1;、x=1+x;,执行后都使变量x中的值增1,请写出一条同一功能的赋值语句(不得与列举的相同)【】。

19.顺序存储方法是把逻辑上相邻的结点存储在物理位置______的存储单元中。

20.请选出以下程序的输出结果#include<stdio.h>main(){inta[]={1,2,3,4},i;intx=0;for(i=0;i<4;i++){sub(a,x);Printf("%d",x);}printf("\n");}sub(S,y)int*s,y;{staticintt=3;y=s[t];t--;}

21.表达式pow(2.8,sqrt(float(x)))值的数据类型为______型。

22.设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为【】。

23.下面程序的功能是将一个字符串str的内容颠倒过来,请填空。

main()

{

inti,j,【】;charstr[]={"1234567");

for(i=0,j=strlen(str)【】;i<j;i++,j--)

{k=str[i];str[i]=str[j];str[j]=k;}

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

}

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

#include<stdio,h>

main()

{inta=1,b=2,c=3;

if(c=a)printf("%d\n",c);

elseprintf("%d\n",b);}

三、3.程序设计题(10题)25.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是按分数的高低排列学生的记录,低分在前。

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

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

试题程序:

#include<stdio.h>

#defineN16

typedefstruct

{charmum[10);

ints;

}STREC;

intfun(STRECa[])

{

}

main()

{

STRECs[N]={{“GA005”,88},{“GA003”,64},

{“CA002”,77},{“GA004”,89},{“GA001”,54},

{“GA007”,72},{“GA008”,72},{“GA006”,65},

{“GA015”,83},{“GA013”,95},{“GA012”,55},

{“GA014”,68},{“GA01l”,78},{“GA017”,53},

{“GA018”,92},{“GA016”,82}};

inti;

FILE*out;

fun(s);

printf(“Thedataaftersorted:\n”);

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

{

if((i)%4==0)

/*每行输出4个学生记录*/

printf(“\n”);

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

}

printf(“\n”);

ut=fopen(“out21.dat”,“w”);

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

{

if((i)%4==0&&i)

fprintf(out,“\n”);

fPrintf(out,“%4d”,s[i].s);

}

fprintf(out,“\n”);

fClose(out);

}

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

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

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

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

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

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

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

28.函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在t所指的数组中。

例如,若s所指字符串中的内容为“ABCDEFGl2345”,其中字符C的ASCII码值为奇数,在数组中的下标为偶数,因此必须删除:而字符1的ASCII码值为奇数,在数组中的下标也为奇数,因此不应当删除,其他依此类推。

最后t所指的数组中的内容应是“BDFl2345”。

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

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

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

a=197

238

456

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

097

008

000

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

请勿改动主函数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;j<N;j++)

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

printf("\n");

}

}

30.请编写函数fun(),其功能是:将s所指字符串中除了下标为奇数、同时ASCII值为偶数的字符外,其余的全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。

例如,若s所指字符串中的内容为edB2A4Dsdg,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为偶数,因此也应当删除:而字符2的ASCII码值为偶数,所在数组中的下标为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是d24。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string,h>

voidfun(char*s,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf("\nPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

printf("\nTheresultis:%s\n",t);

}

31.请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:

234345753134436458100321135760

则输出结果为6,100。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

{

}

main()

{

inta[10]={234,345,753,134,436,458,

100,321,

135,760),k;

clrscr();

fun(a,10,&k);

printf("%dr%d\n",k,a[k]);

}

32.请编写函数fun(),其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

例如,输入17,则应输出46891012141516。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

voidfun(intm,int*k,intxx[])

{

}

main()

{

intm,n,zz[100];

clrscr();

printf("\nPleaseenteranintegernumber

between10and100:");

scanf("%d",&n);

fun(n,&m,zz);

printf("\n\nThereare%dnon-prime

numberslessthan%d:",m,n);

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

printf("\n%4d",zz[n]);

}

33.下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N],intn),该函数的功能是:使数字右上半三角元素中的值乘以m。

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

a=19

27

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

218

214

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N],intm)

{

}

main()

{

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

clrscr();

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

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

/*输出一个随机的5×5矩阵*/

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

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

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

}

printf("\n");

}

do

m=rand()%10;

while(m>=3);/*产生一个上于3的随机数*/

printf("m=%4d\n",m);

fun(a,m);

printf("THERESULT\n");

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

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

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

printf("\n");

}

}

34.请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:

876675896101301401980431451777

则输出结果为6,980。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

{

}

main()

{

inta[10]={876,675,896,101,301,401,

980,431,451,777},k;

clrscr();

fun(a,10,&k);

printf("%d,%d\n",k,a[k]);

}

四、单选题(0题)35.如下函数调用语句func(rec1,rec2+rec3,rec4,rec5);该函数调用语句中,含的实参个数是().

A.3B.4C.5D.有语法错误

五、单选题(0题)36.C语言常量的类型从字面形式上可区分,以下判断中正确的是()。

A.2E3——整型B.2.0E3——实型C.‘\025’——字符串D.“a”——字符型

六、单选题(0题)37.若要求从键盘读入含有空格字符的字符串,应使用函数

A.getc()B.gets()C.getehar()D.scanf()

参考答案

1.A第1次for循环,y的值为9,“y%3”的值为0,满足if条件输出“--y”,即先自减后输出,所以输出8;第2次for循环,y的值为7,“y%3”的值为1,不满足if条件,不执行printf语句;第3次for循环,y的值为6,“y%3”的值为0,满足if条件输出“--y”,即先自减后输出,所以输出5;第4次for循环,y的值为4,不满足if条件,不执行printf语句;第5次for循环,y的值为3,满足if条件,输出2;第6次for循环,y的值为1,不满足if条件,不执行printf语句。故本题答案为A选项。

2.B

3.AC语言中的非执行语句不会被编译,不会被转换成二进制的机器指令,所以A选项错误。由C语言构成的指令序列称为C语言源程序,C语言源程序经过C语言编译程序编译之后,生成一个扩展名为.obj的二进制文件(称为目标文件);最后要由“连接程序”把此目标文件与C语言提供的各种库函数连接起来生成一个扩展名为.exe的可执行文件。故本题答案为A选项。

4.B解析:二维数组的元素在内存中是按行列顺序连续存放的。以本题的二维数组a[3][6]为例,它的元素在内存中的存放顺序是:a[0][0]、a[0][1]、a[0][2]…a[0][5]、a[1][0]、\u3000a[1][1]…a[1][5]、a[2][0]…a[2][5]。由此可见,第10个元素就是第2行第4个元素,即a[1][3]。故应该选择B。

5.A解析:光缆是传输多媒体信息的通道,不能用以存储多媒体信息。

6.BC语言是一种成功的系统描述语言,具有良好的移植性,每个后缀为.C的C语言源程序都可以单独进行编译。

7.B

8.AA选项中“115L”表示长整型数据。B选项是八进制常量的表示方法,但是在八进制中不能含有数字8,所以B选项错误。C选项中e后面应该是整数,而不能是小数1.5,所以C选项错误。D选项中八进制常量应该是以数字“0”开始,而不是以字母“o”开始。故本题答案为A选项。

9.A选项A中,若条件“x>y”为真,输出“x>y”;若条件“x<y”为真,输出“x<y”;若条件“x>=y”为真,输出“x=y”。选项A错误,其他选项都正确。故本题答案为A选项。

10.C对于double类型的实数,可以在printf函数的格式化字符串中使用”n1.n2”的形式来指定输出宽度(n1和n2分别代表一个整常数)。其中n1指定输出数据的宽度(包括小数点),n2指定小数点后小数位的位数,n2也称为精度。当输出数据的小数位多于n2位时,截取右边多余的小数,并对截取部分的第1位小数做四舍五入处理;当输出数据的小数位少于n2时,在小数的最右边补0,使得输出数据的小数部分宽度为n2;如果指定“n1.0”格式,则不输出小数点和小数部分。题干中,%6.2f表示输出6位宽度,2位小数,所以被截取的小数位为0.006,进行四舍五入,结果为123.46;%3.0f表示输出3位宽度,0位小数,结果为123。故本题答案为C选项。

11.D各种排序方法中最坏情况下需要比较的次数分别为:冒泡排序n(n-1)/2、快速排序n(n-1)/2、简单插入排序n(n-1)/2、希尔排序0(n1.5)、简单选择排序n(n-1)/2、堆排序O(nlog2n)

12.C函数fun(intx,inty)的功能是返回x+Y的值。在主函数中,变量a,b,c的初始值分别为1,2,3。因此逗号表达式“a++,b++,a+b”的值等于5,表达式c++的值为3,调用于函数的表达式为“fun(5,3);”,其返回值等于8。

13.10

14.fun(a4)+fun(b4)-fun((a+b)3);fun(a,4)+fun(b,4)-fun((a+b),3);解析:函数fun的功能是计算x的n次方,a的4次方的调用函数为fun(a,4),b的4次方的调用函数为fun(b,4),(a+b)的3次方的调用函数为fun((a+b),3),计算m=a4+b4-(a+b)3的函数调用语句为:fun(a,4)+fun(b,4)-fun((a+b),3);

15.概念(或概念级)概念(或概念级)

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.00解析:对于一个unsignedshort来说,它能取的最大值是65535。这里给a赋值65536,已经超出了它的取值范围,这样它的高位将被截掉,只把低位赋给它(全零)。所以a的值实际为0。

18.x+=1;

19.相邻相邻

20.C

21.floatfloat解析:在此表达式中x是float类型的变量,经过开方所得到的结果仍是float类型,再和2.8进行运算时,应该先将2.8转换成float类型再运算,最后结果仍是float型。

22.33解析:本题考查的是C语言逗号表达式的相关知识。程序在计算逗号表达式时,从左到右计算由逗号分隔各表达式的值,整个逗号表达式的值等于其中最后一个表达式的值。本题中,首先i被赋值为2,再自加1,最后i++的值计算为3。

23.k-1k\r\n-1解析:程序山使用了整型变量i、j、k,使用前应先声明,因此第1个空应填变量k。i和j作为下标的值,i被赋初值为0,j应为下标的最大值,下标的最大值为数组的长度减1。

24.11解析:该程序要注意的是if语句的判断条件“c=a”是赋值,而不是“c==a”。由于a=1,故条件c=a使c的值为1(真),所以输出c的值1。

25.intfun(STRECa[]){intij;STRECt;for(i=l;i<N;i++)/*用冒泡法进行排序进行N-1次比较*/for(j=0;j<N-1;j++)/*在每—次比较中要进行N-1次两两比较*/if(a[j].s>a[j+1].s)/*按分数的高低排列学生的记录低分在前*/{t=a[j];a[j]=a[j+1];a[j+1]=t;}}intfun(STRECa[])\r\n{\r\ninti,j;\r\nSTRECt;\r\nfor(i=l;i<N;i++)/*用冒泡法进行排序,进行N-1次比较*/\r\nfor(j=0;j<N-1;j++)/*在每—次比较中要进行N-1次两两比较*/\r\nif(a[j].s>a[j+1].s)/*按分数的高低排列学生的记录,低分在前*/\r\n{\r\nt=a[j];\r\na[j]=a[j+1];\r\na[j+1]=t;\r\n}\r\n}解析:冒泡法算法思路:如果有N个数,则要进行N-1次比较,在每—次比较中要进行N-1次两两比较(这种算法较好理解但不是最精的)。所谓两两比较就是从头到尾依次将相邻两个数进行比较并将其中大的数放在前或在后(若要求从小到大排序,则大的数要放在后。反之则对调),即两两比较后这两个数要形成题中所要求的顺序。由于总是从头到尾进行比较,所以第1次比较结束后,最大(或最小)数肯定在最后,第2次比较结束后,次最大(或次最小)数肯定在倒数的第2个数,依次类推,所以进行第一次比较时必须比较到最后一个数,而进行第2次比较时只要比较到倒数的第2个数即可,所以进行第i次比较I时只需比较N-i次即可(这种算法较难理解,但它是最好的)。

26.*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);解析:该程序功能是将正整数a、b合并形成一个新整数。本题类型首先要考虑整数的位数分离,然后要进行位数合成。也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。

27.

解析:该程序功能是求最低分数的学生。本题是关于求解结构体中某些成员的最小值,首先将第一个值设定为最小值,并在循环中将其他所有值与该值进行比较,求得最

温馨提示

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

评论

0/150

提交评论