1、1暨南大学 20202021 学年第 2 学期C 语言程序设计考试试卷(语言程序设计考试试卷(A 卷)卷)考试范围:C 语言程序设计;满分:100分;考试时间:120 分钟院/系:_专业:_姓名:_ 考号:_题号一二三四总分得分注意事项:1答题前填写好自己的姓名、班级、考号等信息2请将答案正确填写在答题卡上第第 I 卷(选择题)卷(选择题)评卷人得分一、选择题(共一、选择题(共 20 题,每题题,每题 2 分,共分,共 40 分。下列每小题的四个选分。下列每小题的四个选项中,有一项是最符合题意的,错选、多选或未选均无分)项中,有一项是最符合题意的,错选、多选或未选均无分)1设有定义:char
2、s;int i=0;以下不能将一行(不超过 80 个字符)带有空格的字符串正确读入的语句或语句组是()。Agets(s);Bwhile(s=getchar()!=n);s=0;Cscanf(%s,s);Ddoscanf(%c,&s);while(s!=n);s=0;2有如下程序:#include#includestruct Schar name;void change(struct S*data,int value)strcpy(data-name,*);value=13;main()struct S input;int num=4;2strcpy(input.name,THIS);chang
3、e(&input,num);printf(%s,%dn,input.name,num);程序运行后的输出结果是()。A*,4B*,13CTHIS,4DTHIS,133下面结构体的定义语句中,错误的是()。Astruct ordint x;int y;int z;struct ord a;Bstruct ordint x;int y;int z;struct ord a;Cstruct ordint x;int y;int z;a;Dstruct int x;int y;int z;a;4以下叙述中错误的是()。A用 typedef 定义新的类型名后,原有类型名仍有效B可以用 typedef 将
4、已存在的类型用一个新的名字来代表C可以通过 typedef 增加新的类型D用 typedef 可以为各种类型起别名,但不能为变量起别名5以下关于编译预处理的叙述中错误的是()。A预处理命令行必须位于源程序的开始B源程序中凡是以#开始的控制行都是预处理命令行C一行上只能有一条有效的预处理命令D预处理命令是在程序正式编译之前被处理的6有以下程序#include#include void fun(char*w,int m)char s,*p1,*p2;p1=w;p2=w+m-1;while(p1p2)s=*p1;p1=p2;*p2=s;p1+;p2-;3main()char a=123456;fun
5、(a,strlen(a);puts(a);程序运行后的输出结果是()。A654321B116611C161616D1234567有以下程序:#include void fun(int x,int y,int*z)*z=y-x;main()int a,b,c;fun(10,5,&a);fun(7,a,&b);fun(a,b,&c);printf(%d,%d,%dn,a,b,c);程序运行后的输出结果是()。A5,2,3B-5,-12,-7C-5,-12,-17D5,-2,-78有以下程序:#include int b=2;int fun(int*k)b=*k+b;return(b);main()
6、int a=1,2,3,4,5,6,7,8,i;for(i=2;i4;i+)b=fun(&a)+b;printf(%d,b);printf(n);4程序运行后的输出结果是()。A1012B810C1028D10169有以下程序#include main()FILE*fp;int k,n,a=1,2,3,4,5,6;fp=fopen(d2.dat,w);fprintf(fp,%d%d%dn,a,a,a);fprintf(fp,%d%d%dn,a,a,a);fclose(fp);fp=fopen(d2.dat,r);fscanf(fp,%d%d,&k,&n);printf(%d%dn,k,n);f
7、close(fp);程序运行后的输出结果是()。A123456B14C1234D1210以下关于 return 语句的叙述中正确的是()。A一个自定义函数中必须有一条 return 语句B一个自定义函数中可以根据不同情况设置多条 return 语句C定义成 void 类型的函数中可以有带返回值的 return 语句D没有 return 语句的自定义函数在执行结束时不能返回到调用处11以下叙述中不正确的是()。A在不同的函数中可以使用相同名字的变量B函数中的形式参数是局部变量C在一个函数内定义的变量只能在本函数范围内有效D在一个函数的复合语句中定义的变量在本函数范围内有效12有以下程序:#inc
8、ludemain()char s=verygood,*ps=s;5ps+=4;ps=nice;puts(s);程序的运行结果是()。AniceBveryniceCnicegoodDverygood13若有函数void fun(double a,int*n).以下叙述中正确的是()。A调用 fun 函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送B形参 a 和 n 都是指针变量C形参 a 是一个数组名,n 是指针变量D调用 fun 函数时将把 double 型实参数组元素一一对应地传送给形参 a 数组14下列定义数组的语句中,正确的是()。Aint x;Bint N=10;int x
9、;Cint x;D#define N 10int x;15有以下程序:#includemain()int a=-2,b=0;while(a+&+b);printf(%d,%dn,a,b);程序运行后的输出结果是()。A1,3B0,2C0,3D1,216有如下程序:#include main()int a=8,b;b=(a2)%2;printf(%d,%dn,a,b);6程序运行后的输出结果是()。A8,0B4,0C4,1D8,117有以下程序:#includemain()int a=5,b=1,t;t=(a2)|b;printf(%dn,t);程序运行后的输出结果是()。A21B11C6D11
10、8以下选项中非法的 C 语言字符常量是()。Ax9dB9Cx09D0919以下能正确表述算式 sin(2r+30)的 C 语言表达式是()。Asin(2*3.14*r+3.14*30/180.0)Bsin(2*r+30)Csin(2*3.14*r+30)Dsin(2*3.14*r+30*3.14/360.0)20以下叙述中正确的是()。A在复合语句中不能定义变量B对于变量而言,“定义”和“说明”这两个词实际上是同一个意思C全局变量的存储类别可以是静态类D函数的形式参数不属于局部变量第第 II 卷(非选择题)卷(非选择题)评卷人得分二、填空题(共二、填空题(共 3 题,每题题,每题 8 分,共分
11、,共 24 分)分)721下面程序的功能是根据近似公式:2/6 1/12+1/22+1/32+1/n2,求值。#include double pi(long n)double s=0.0;long i;for(i=1;i=n;i+)s=s+;return();22下面函数的功能是将一个整数存放到一个数组中。存放时按逆序存放。例如:483 存放成384。#include void convert(char*a,int n)int i;if(i=n/10)!=0)convert(,i);*a=;char str10=;main()int number;scanf(%d,&number);conve
12、rt(str,number);puts(str);23下列给定程序中,函数 fun 的功能是:把形参 a 所指数组中的偶数按原顺序依次存放到a、a、a中,把奇数从数组中删除,偶数的个数通过函数值返回。例如,若 a 所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后,a所指数组中的数据为:4、2、6、8,返回值为 4。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序如下:#include#define N 9int fun(int a,int n)int i,j;j=0;for(i=0;in;i+)
13、/*found*/if(8_=0)/*found*/_=a;j+;/*found*/return_;main()int b=9,1,4,2,3,6,5,8,7,i,n;printf(nThe original data:n);for(i=0;iN;i+)printf(%4d,b);printf(n);n=fun(b,N);printf(nThe number of even:%dn,n);printf(nThen even:n);for(i=0;in;i+)printf(%4d,b);printf(n);评卷人得分三、改错题(共三、改错题(共 1 题,每题题,每题 16 分,共分,共 16 分
14、)分)24给定程序中,函数 fun()的功能是判断整数 n 是否是”完数”。当一个数的因子之和恰好等于这个数本身时,就称这个数为“完数”。例如:6 的因子包括 1、2、3,而 6=1+2+3,所以 6 是完数。如果是完数,函数返回值为 1,否则函数返回值为 0。数组 a 中存放的是找到的因子,变量 k 中存放的是因子的个数。请修改程序中的错误,使它能得到正确结果。注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。#include int fun(int n,int a,int*k)int m=0,i,t;t=n;9for(i=1;in;i+)if(n%i=0)am+=i;
15、t=t-i;/*found*k=m;/*found*if(t=0)return 1;elsereturn 0;int main()int n,a50,flag,i,k;scanf(%d,&n);flag=fun(n,a,&k);if(flag=1)printf(%d 是完数,其因子为:,n);for(i=0;ik;i+)printf(%d,ai);printf(n);elseprintf(%d 不是完数。n,n);return 0;评卷人得分四、设计题(共四、设计题(共 1 题,每题题,每题 20 分,共分,共 20 分)分)25从键盘输入 10 个整数,编程求其中大于 3 且小于 100的数
16、的平均值并输出结果。【标准答案】第第 I 卷(选择题)卷(选择题)一、选择题(共一、选择题(共 20 题,每题题,每题 2 分,共分,共 40 分。下列每小题的四个选项中,有一项是最符合题分。下列每小题的四个选项中,有一项是最符合题意的,错选、多选或未选均无分)意的,错选、多选或未选均无分)1C2A3B104C5A6A7B8C9A10B11D12D13C14D15D16A17A18D19A20C第第 II 卷(非选择题)卷(非选择题)二、填空题(共二、填空题(共 3 题,每题题,每题 8 分,共分,共 24 分)分)21 1.0/(float)(i*i)sqrt(6*s)22 a+1 n%10
17、+023a%2aj三、改错题(共三、改错题(共 1 题,每题题,每题 16 分,共分,共 16 分)分)24(1)错误:k=m正确:*k=m(2)错误:if(t=0)正确:if(t=0)四、设计题(共四、设计题(共 1 题,每题题,每题 20 分,共分,共 20 分)分)1125此题可以先利用循环从屏幕读取 10 个数,存放在一个一位数组中,然后循环判断大于3 且小于 100 的数,最后取平均值进行输出,程序如下:#includevoid main()int num,s=0,n=10;printf(input 10 numbers:);for(int i=0;i10;i+)scanf(%d,&num);if(num=100)num=0;n-;s+=num;if(n=0)printf(no exist!);elseprintf(%dn,s/n);