1、暨南大学20202021学年第2学期C语言程序设计考试试卷(A卷)考试范围:C语言程序设计;满分:100分;考试时间:120分钟院/系:_专业:_姓名:_ 考号:_题号一二三四总分得分注意事项:1答题前填写好自己的姓名、班级、考号等信息2请将答案正确填写在答题卡上第I卷(选择题)评卷人得分一、选择题(共20题,每题2分,共40分。下列每小题的四个选项中,有一项是最符合题意的,错选、多选或未选均无分)1设有定义:char s;int i=0;以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是()。Agets(s);Bwhile(s=getchar()!=n);s= 0;C
2、scanf(%s,s);Ddoscanf(%c,&s);while(s!=n); s=0;2有如下程序:#include#includestruct S char name;void change(struct S *data,int value) strcpy(data-name, *); value=13;main() struct S input; int num = 4; strcpy(input.name, THIS); change(&input,num); printf(%s,%dn,input.name,num);程序运行后的输出结果是()。A*,4B*,13CTHIS,4DT
3、HIS,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将已存在的类型用一个新的名字来代表C可以通过typedef增加新的类型D用typedef可以为各种类型起别名,但不能为变量起别名5以下关于编译预处理的叙述中错误
4、的是()。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-; main() char a = 123456; fun(a,strlen(a); puts(a);程序运行后的输出结果是()。A654321B116611C161616D1234567有以下
5、程序:#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() int a=1,2,3,4,5,6,7,8,i; for(i=2;i4;i+) b=fun(&a)+b; pri
6、ntf(%d,b); printf(n);程序运行后的输出结果是()。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); fclose(fp);程序运行后的输出结果是()。A123456B14C1234D12
7、10以下关于return语句的叙述中正确的是()。A一个自定义函数中必须有一条return语句B一个自定义函数中可以根据不同情况设置多条return语句C定义成void类型的函数中可以有带返回值的return语句D没有return语句的自定义函数在执行结束时不能返回到调用处11以下叙述中不正确的是()。A在不同的函数中可以使用相同名字的变量B函数中的形式参数是局部变量C在一个函数内定义的变量只能在本函数范围内有效D在一个函数的复合语句中定义的变量在本函数范围内有效12有以下程序:#includemain() char s = verygood, *ps = s; ps += 4; ps = n
8、ice; 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;Cint x;D#define N 10int x;15有以下程序:#includemain() int a=
9、-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);程序运行后的输出结果是()。A8,0B4,0C4,1D8,117有以下程序:#includemain() int a=5,b=1,t; t=(a2)|b; printf(%dn,t);程序运行后的输出结果是()。A21B11C6D118以下选项中非法的C语言字符常量是()。Ax9dB9Cx09D0919以下能正确表述算式sin(
10、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分,共24分)21下面程序的功能是根据近似公式:2/6 1/12+1/22+1/32+ +1/n2,求值。#include double pi(long n) do
11、uble 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);convert( str, number );puts(str);23下列给定程序中,函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存
12、放到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+) /*found*/ if(_=0) /*found*/ _=a; j+; /*found*/ return _;main() int
13、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分)24给定程序中,函数fun()的功能是判断整数n是否是”完数”。当一个数的因子之和恰好等于这个数本身时,就称这个数为“完数”。例如:6的因
14、子包括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; for (i=1;in;i+) if (n%i=0) am+=i; t=t-i; / *found* *k=m;/ *found* if (t=0) return 1;else return 0;int main() int
15、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); else printf(%d 不是完数。n,n); return 0;评卷人得分四、设计题(共1题,每题20分,共20分)25从键盘输入10个整数,编程求其中大于3且小于100的数的平均值并输出结果。【标准答案】第I卷(选择题)一、选择题(共20题,每题2分,共40分。下列每小题的四个选项中,有一项是最符合题意的,错选、多选或未选均无分)1C2A 3B4
16、C5A 6A 7B8C9A10B11D12D13C14D15D16A17A18D19A20C第II卷(非选择题)二、填空题(共3题,每题8分,共24分)21 1.0/(float)(i*i) sqrt(6*s)22 a+1 n%10+023a%2aj三、改错题(共1题,每题16分,共16分)24(1)错误:k=m 正确:*k=m(2)错误:if (t=0) 正确:if (t=0) 四、设计题(共1题,每题20分,共20分)25此题可以先利用循环从屏幕读取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!); else printf(%dn,s/n);11