《历年C语言期末考试试题.docx》由会员分享,可在线阅读,更多相关《历年C语言期末考试试题.docx(111页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、填空(15分)1 .一个C源程序中至少应包括一个函数。2 .在C语言中,一个char型数据在内存中占字节;一个int型数据在内存中占的字节。3 .在C语言中,实型数据分为两种类型,它们是和4 .若a是int型变量,且a的初值为6,贝!I计算表达式a+=a-=a*a后,a的值为。5 .在C语言中,格式输入是由库函数完成的,格式输出是由库函数完成的。6 . C语言提供的三种逻辑运算符是&,和 o二、单项选择(20分)1 .组成C语言程序的是()oA)子程序B)过程C)函数D)主程序和子程序2 . C语言中,用户能使用的合法标识符是().A)a_b!B)- xyzC) fa2D)5i3 .若定义
2、iloat a;现要从键盘输入a的数据,其整数位为3位,小数位为2位,则选用()A) scanf(%f,&a);B) scanf(%5.2f,a);C) scanfi%6.2f,&a);D) scanf(%f,a);4 .若有定义:int a=7; float x=2.5, y=4.7;则表达式 x+a%3*(int)(x+y)/4的值是()。A)2.75B)3.5C)2.5D)05.若定义int i;则以下循环语句的循环执行次数是()for(i=2; i=0;)printf(%d, i-);A)无限次 B)0次C)1次D)2次6 .在循环语句的循环体中,continue语句的作用是()A)立
3、即终止整个循环B)继续执行continue语句之后的循环体C)结束本次循环D)结束本次循环并跳出循环7 .下列对一维数组a的正确说明语句为().A) int a(10);B) int n=10, an;C) int n;D)#define SIZE 10scanfC%d”,&n);int aSIZE;int an;8 .以下对C语言中字符数组的错误描述是()。A)字符数组可以存放字符串B)字符数组中的字符串可以整个输入、输出C)可以在赋值语句中通过赋值运算符=对字符数组整体赋值D)字符数组中字符串的结束标志是,09 . C语言规定,函数返回值的类型由()所决定。B)调用该函数时的主调函数类型D
4、)在定义该函数时所指定的函数类型A) return语句中的表达式类型C)调用该函数时的形参类型10.以下程序的运行结果为(#define PT 3.5#define S(x) PT*x*xmain()int a=l, b=2;printf(%4.1fn,S(a+b);)A)7.5B)10.5C)14.0D)31.5三、程序阅读(25分)#include stdio.h”main ()int a,b;a=32767;b=a+l;printf(%dn%dn,a,b);2 .下列程序的输出的结果是什么?main()int a66, i,j;for(i=0; i6; i+)for(j=0;j6;j+)
5、if(ij) aij=O;pp/输fbr(i=O; i6; i-H-)fbr(j=0;j6;j+)printfC%3dM, ai|j);printffn);3 .下列程序输出的结果是什么?#include stdio.h”swap (int *pl, int *p2)int temp;temp=*pl;*pl=*p2;PPFi端找号试资料,就上写武资料网你的专武小帮手!w ww.ppk *p2=temp; main()int a,b; int *pa,*pb; scanf(H%d,%du,&a,&b);printf(H%d,%dH,a,b);pa=&a;pb=&b;if (ab) swap(p
6、a,pb);printf(%d,%dH,a,b);(1)如果输入4,5,打印的结果是(2)如果输入-3,4,打印的结果是#include stdio.h”int try(int a)static int x =3;x=x+1;return (x+a);main ()int a, x=2;for (a=0; a=l; a+)x=try(x);printffx 的值是:%dn,x);5.下列程序的输出的结果是什么?#include stdio.h”main ()int x;x=fun (4);printf(H%dnM, x);int fun (int n)int s;if(n=l)s=2;else
7、 s=n+fun (n-1);return (s);)四、程序填空(15分)1 .计算sum=l+l/2+l/4+.+l/50的值,并显示出来。#include stdio.hmain()int i=2;sum=1.0;while(i=)sum+=1.0/;i+=2;)printf (nsum=%fnH,sum);2 .下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。#include stdio.h”main()int i,j;fbr(i=O; i+)j=i*10+6;if() continue;printf(%d,j);)五、程序改错(15分)下列程序是用冒泡法按从
8、大到小顺序对一个int型数组排序。如果某行中的语句有错误,请在出错行上把正确的语句写出;如果没有错误则打上PPFii瑞找考试资料,就上考试资料网include stdio.h1.main()2.int array10;3.int4.printf (input 10 numbers:n);5.for (i=0; i10; i+)6.scanfT%d”,arrayi);7.for(j=0;jarrayi+1)1Lt=arrayi;12.array i=arrayi+1;13.arrayi+l=t;14.)15.fbr(i=O; i10; i-H-);16.printf(M%d arrayi);17
9、.)18.PPFii瑞六、程序设计(10分)1 .有3个实数a, b, c,由键盘输入,输出其中最大的数。(5分)2 .打印出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153=13+53+33。(5分)c语言考试题(一)一、单项选择题(每题2分,共20分)1、以下选项中属于C语言的数据类型是()A.复数型B.逻辑型C.集合型D.双精度型2、一个C程序的执行是从()A. main。函数开始,直到main。函数结束B.第一个函数开始,直到最后一个函数结束C.第一个语句开始,直到最后一个语句结束D. main。函数开始,直到最后一
10、个函数结束3、设有语句int a=3;则执行语句a+=a=a*a;后,变量a的值是()A.3 B.0C.-12D.94、若有 charcKHKdAOTWVT;则执行语句 printf(s”,c);结果是()。A. cdOeB.cC. cdD. cde5、已知:int a23=123,4,5,6,(*p)3=a;则下列表达式不是4的是()。A.*(*p+3)B.*p+3C.*(*(p+0)+3) D. a036、以下有宏替换不正确的叙述().A.宏替换不占用运行时间B.宏名无类型C.宏替换只是字符串替换D.宏名必须用大写字母表示7、执行 char str10= Chninaw ; strlen(
11、str)的值是()A.5 B.6 C.7 D.98、下面程序的输出结果是:()#define POWER(x)(x*x)main()int i=4; printfC%d”,P0WER(i2);A.-9 B.-7 C.5 D.-69、在定义inta342;后,第10个元素是()A. a2l2 B. al0l C. a20l D. a22l10、下面程序的输出结果是:()typedef structlong x2;short y4;char z8;MYTYPE;MYTYPE a;main() printf(u%dnn,sizeofi(a);A.2B.8C.14 D.24二、填空题(每空1分,共11
12、分)1、字符串A在内存中占用的字节数为。2、C语言中的标识符只能由字母、下划线和组成。3、若有定义语句int a=25,b=14,c=19;,以下语句的执行结果是if(a+=25&b-=2&c+) printf(*a=%d,b=%d,c=%dn”,a,b,c);else printfC#a=%d,b=%d,c=%dnM,a,b,c);4、有如下定义a=B172Na%;则执行语句printff%d,strlen(a);的结果为。5、若有定义:int a12=l,2,3,4,5,6,7,8,9,10,ll,12,*p4,i; for(i=0;iy?xz:y+);x=0x02fT;y=0xfH)0;
13、printf(2:%dn”,(x&y)4|0x005f);x=y=z=-l;-H-x|-H-y&-H-z;printf(H3:%d,%d,%dn,x,y,z);2、#define f(x) x*xmain()int a=6,b=2,c;c=fi(a+b)/fi(b);printfi(fc4%dn,c);)3、fun(int k) printfi(M%dH, k);if(k0)fun(k-l);main()int w=5; fiin(w); printfi(,nM);4、#includemain()int x=l,y=0;switch(x) case 1:switch(y) case O:pri
14、ntf(firstn);break;case 1:printfl(ttsecondn,);break;case 2:printfl(thirdn);5、#include main()int k=4; func(k); func(k);fiinc(int a) static int m=0;m+=a;printff%d”,m);)6、struct stint x;int *y;)*P;int s=30,20);struct st a=1,&s0,2,&s1;main() p=a; printf(”d J,px);printfC%dn”,+(*(+p)y);7、假定在当前盘目录下有2个文本文件,其
15、名称和内容如下:文件名:al.txt a2.txt内容:ABCDEF# abcdefW#include stdio.hmain()FILE *fp;void fc();if(fp=fopen(a 1.txt” Jr)=NULL)printf(HCan not open file!nM); exit(l);else fc(fp);fclose(fp);ifi(fp=fbpen(,a2.txt,7,rH)=NULL)printf(Can not open file!nM); exit(l);)else fc( fp);fclose(fp);void fc(fpl)FILE *fpl;char c;
16、while(c=fgetc(fp l)!-#*)putchar(c);|四、程序填空(每空2分,共14分)1、下面程序求矩阵a的主对角线元素之和,请填空。main() inta33=2,4,6,8,10,12,14,16,18;int sum=0,ij;for(i=0;i3;)for(j=O; J+)iRi=g) sum=sum+;printf(sum=%dn,sum);)2、下列函数coy把字符数组S2中的全部字符复制到字符数组SI中,复制时0,也要复制过去,0后面的字符不用。coy(char sl,char s2) int i;for(i=0;s2i!=;i+)sli=s2i;;3、下面程
17、序的功能是将字符串a中的下标为奇数的元素由小到大排序,其他元素不变,请填空。main() char a=students,t; int ij;for(i=l;i7;i+=2)for(j=i+2uz)? x+2; x-H-;则 x 的值是:;设 inta=0, b=0, c=0; c=+a|b+;,则 a、b、c 值分别是:9 .与if (x=0)等价的写法是if (!x );判断两个(float)变量x, z是否相等一般:if ( fabc(x-z)=y=z) B.(x=y) AND (y=z)C.(x=y)&(y=z) D.(xy)&(y=z)8 .根据定义inta=1,2,3, i1*p=
18、a;从语法分析是不正确的。A. ap-a B.*(&a) C. p D.*(*(a+i)9 .若有语句scanf (%d%d,&a,&b);要使变量a, b分别得到12和34;正确的输入形式为A.1234B.12,34 C.1234 D.12:3410 . unionuex int i; float f; char c;ex;贝ij sizeof (ex)的值是A.4B.5C.6D.7三.分析程序,写出运行结果。(每题4分,共20分)1 .源程序如下,运行时假定键盘输入字符串为2004、#includevoid main(void)int n=0;char c;while(c=getchar(
19、)!=n)/*字符型数字*/(if (c=0&c=9)n = n*10+ c- O;/*数字*/printftt4value=%d|nM ,n);)结果为:value=2004。2 .源程序如下:#includevoid main(void)intnum9=399,398,397,396,395,299,290,311,301);int score9=81,85,59,77,90,66,89,93,73;int iMax, iPos, i;iPos=0;iMax=scoreiPos;for (i=l ; iiMax)iPos=i;iMa x =scoreiPox;)printf (num=%d
20、, score=%d”, numiPos; scoreiPos);结果为:num=311, score=93。3 .源程序如下,运行时假定键盘输入数据为:12345678910#includevoid main(void)(inti, a10;int *p;p=a;for (i=0; i10; i-H-)scanf (d ”, p-H-);fbr(p=a; p; p+)if (*p%2) printf (“3d”,*p);结果为:135794 .源程序如下,两次运行,分别输入数据13和21#include#includevoid main(void)(int n s;scant (%d”,&n
21、);s=panduan ( n);if (s=l ) printf (yesn);else printf wnon);)int panduan(int n)int kJ;k=(int)sqrt(double)n);for(j=2; jk) retum(l);else retum(O);结果为yesno5 .源程序如下,运行时假定键盘输入字符为:AxByCz#include#includevoid main(void)|char str80;int i;gets(str);fbr(i=O; str!=O; i+)ifi(str=a&str=A&str=Z) str+=32;puts(str);)
22、结果为:aXbYcZ o四.下列程序中每个划线处有一个错误,改正划线中的错误,使其实现题目要求。(每体4分,共20分)1.求 s=l+2+3+、+100include改正为。void sum (void)改正为(int s9 i;for (s=0, i=l; i i, pow(i,x);改定为double v v pow(float x, int n)(int i;double p=0;改正为 ofbr (i=l; i改正为p*=x;retum(p);3 .源程序实现排升序。#includevoid main(void)int i, j, iMin, a10=4,3,5,1,10,12,2,6
23、,7,9, iTemp; for (i=0; i9; i+)(iMin=0;改正为 ofor (j=i+l;j10u-H-)if(aiMin改正为。if(iMin=i)改正为。 iTemp=a;aiMin=a;改正为。 aiMin=iTemp;fdr(i=O; i10; i-H-) printfC%4d”, a):4 .源程序为求平均值。#includevoid main(void)int i, sum;改正为。 float avg;int sc10,*p=sc;for (i=0, i(float exp , x , t;int i, n;scanf(t4%f,%d”,&x,&n);t=0;改
24、正为 oexp=1.0;fbr(i=l ; i=n; i-H-)ifit1 e-6) loop;改正为ot+=x/i;改正%oexp*=t;改正为。primfTn%15.6f exp);)五.编程题(每题6分,共30分)1 .根据以下程序框架,编写子函数,实现交换两个整型变量x和y的值。#includevoid swap (int *, int *);void main (void)(int x, y;scanf(d,%d,&x,&y);swap(&x,&y);printf%d,%d”, x, y);)void swap()2 .设某班人数36人,参加C语言考试,用一维数组score36存放考
25、试成绩,已给出一部分程序,完善以下程序,使其实现统计并输出不及格人数及百分比。#includevoid main (void)int i;float scoer36, precent;int count=0;for (i=0; i36; i+)scanf(4%f&score);:3 .完善以下程序使其实现由键盘任意输入一串字符,统计其中大写字母个数iA、小写字母个数ia、其他字符个数iothero#include#includevoid main (void)char str 80;int i, iA=0, ia=0, iother=0;4 .完善以下程序使其实现求方阵主和辅对角线元素之和及其
26、转置矩阵,设方阵用二维数组a表示,转置矩阵用t表示,si和s2表示主和辅对角线元素之和。#includevoid main(void)int a33=1,3,5,7,9,11,13,15,11;int i, j, si, s2;intt33;printfT%d,%d,n,,,sl, s2);fbr(i=O; i3; i+)for(j=0;j10&.&.a15d)!(a=154 .若t为double类型,表达式t=l、t5,t的值应是0 a)lb)6.0c)2.0d)1.05,若有以下说明和语句:int,a=5,a,此处表达式a的值是()a)7b)6c)5d)4答案:daadc项选择
27、题1 .请选出可用作c语言用户标识符的一组标识符()a)void,define,wordb)a3_b3,_123,if c)fbr,abc,cased)2a,do,sizeof2 .c语言中最简单的数字类型包括()a)整型、实型、逻辑型b)整型、实型、字符型c)整型、字符型、逻辑型d)整型、实型、逻辑型、字符型3 .C语言提供的合法的数据类型关键字是()a)doubleb)shortc)integerd)char4 .c语言中合法的字符常量是()a)084b)x43c)abd)“0”5 .若已定义x和y为double型,则表达式:x=l,y=x3/2的值是0a)lb)2c)2.0d)2.5答案
28、:bbbbc1 .规定一个工人工作时间一月160h,每小时工资5元,加班的话,每小时增加4元,请编程计算此工人一个月的工资,工作时间由键盘输入。main()|int t,salary;system(nclsH);printf(nPlease input the time:nM);if(t=160)salary=t*5; elsesalary=160*5+(t-160)*9;printffThe salary is:%dnn,salary);2 .输入30个整数,统计出其中正整数个数,负整数个数及。的个数,并分别求出所有负整数与所有正整数的和,最后求出全部数字绝对值之和。#include mat
29、h.h main()int a30,p=0,n=0,z=0,sum=0,i,sumn=0,sump=0; system(nclsM);printfif11 Please intput 30 numbers:。); fbr(i=0;i30;i-H-) scanf(H%d,&ai);fbr(i=0;i0) p=p+;sump=sump+ai; else ifi(ai0) n=n+;sumn=sumn+ai;elseZ=Z-JFj fbr(i=0;i30;i+) sum=sum+fabs(ai); printffThe plus number and the addition is:%d,%dnH,
30、p,sump); printffThe nagative number and the addition is:%d,%dnH,n,sumn); printffThe zero number is:%dnH,z);printf(nThe sum of the absolute value is:%dnn,sum);3 .s=a+a*a+a*a*a+.+a*a*.*a(n 个 a),k=sqrt(s);t=1-1/2+1/3-1/4+.+1/k,a 和 n 值由键盘输入,求 t 值。#include math.h” main()(int k,s=0,n,i,a j=1,q=1;float t=0
31、; system(MclsH); printffPlease input the value of a and n:nH); scanfC%d%dn,&a,&n);fbr(i=O;i j=a*j; s=s-fj;) k=sqrt(s); fbr(i=l;i=k;i+)( t=t+q*(1.0/i);q=-q;)printffThe value of s is:%dn,s);printffThe value ofk is:%dnH,k); printffthe value of t is:%fnM,t);4.n!, sum=n!+(n+ l)!+(n+2)!+.+m!,n,m 值由键盘输入,要求
32、调用函数。调用函数:fac(int n)|int i,su=l;fbr(i=l;i=n;i+)su=su*i;retum(su);)main()(int m,n,i;long int sum=0;system(MclsH);printf(nPlease input the value of n and m:nH);scanfi(%d%dn,&n,&m);fbr(i=0;iave)k+;)fbr(i=O;ifor(i=ljif(ai-lt=a|j-l;aj-l =aj;aj=t;)printf(students above the average score and the average sc
33、ore:%d,%. lfn,k,ave);printffThe score from up to down is:nH);fbr(i=O;iprintf(M%.lftH,ai);)学号:姓名:分数:一、选择题(1-14题,每题1分;5-36题,每题2分。共58分)D(l)若有说明:intn=2,*p=&n,*q=p;,则以下非法的赋值语句是A) p=q;B)*p=*q; C) n=*q; D) p=n;D(2)设a和b均为double型变量,且a=7.5、b=2.5,则表达式(int) a+b/b的值是A)7.500000 B)7C)5.500000 D)8.000000A(3)已知i、j、k为int型变量,若从键盘输入:123回