《c三套题附答案.doc》由会员分享,可在线阅读,更多相关《c三套题附答案.doc(14页珍藏版)》请在三一办公上搜索。
1、C语言程序设计习题集 习题一一、 语言基础(共20分,每题2分) (一)设x为一数字字符,则其所对应的十进制数值为 。 A)x B)x-0 C)*x D)&x (二)说明语句char s=t,使s包含了几个字符? 。 A)1 B)2 C)3 D)说明有错 (三)设a=6,b=4,则表达式b*=a+3的值为 。 A)3 B)18 C)27 D)36 (四)若给定表达式(m)?a+:a-,则其中表达式m和 等价。 A)m=0 B)m!=0 C)m=0 D)m=1 (五)设有说明语句int a10,则数组a包括了 个数组元素。 A)1 B)9 C)10 D)20 (六)以下函数test返回值类型为
2、。 test(int x) printf(“%fn”,(float)x); A)int B)float C)void D)不确定或错误 (七)C语言规定,main函数的参数 。 A)只能有0个 B)只能有0个或一个 C)只能有0个或2个 D)可有任意个 (八)设x为整型变量,p基类型为整型的指针变量,则正确的赋值表达式是 。 A)p=&x B)p=x C)*p=&x D)*p=*x (九)Turbo C中,int型数据在存储器中占二个字节,则以下类型数据在存储器中占的字节数为: 。 struct test int x; float y; char z; ; A)2 B)3 C)6 D)7 (十
3、)rewind()函数的作用是 。 A)重新打开文件 B)使文件位置指针重新回到文件的开始 C)使文件位置指针重新回到文件的末 D)返回文件长度值 二、阅读下列程序,写出运行结果(共18分,每题3分) 程序1 #include void main( ) int a=1,b=4,c=2; 运行结果: 1 a=(a+b)/c; printf(“%d n”,-a); 程序2 void main ( ) char c1=67; /*A的ASCII码值为65 */ if (A =c1 & c1=Z) 运行结果: 67,D printf(“%d,%c”,c1,c1+1); else printf(“%c”
4、,c1); 程序3 viod main ( ) int a=0, n=5; 运行结果: 1,5,4,3,2,0 for ( ; ; ) a+; n-; printf(“%d,”,a); a=n; if (n=0) break; printf(“%d”,a); 程序4 main ( ) int i, j; 运行结果: 1,2,4,8,16,32,64,128,256,512 static int a10=1,1,1,1,1,1,1,1,1,1; for (i=0;i10;i+) for (j=0;ji;j+) ai=ai+aj; for (i=0;i10;i+) printf(“%d,”,ai)
5、; 程序5 int k=2; f (int m) 运行结果: 6,8 m+=k;k+=m; 5,9 printf(“%d,%d n”,m,k+); main ( ) int i=4; for (i+); printf(“%d,%d n”,i,k); 程序6 void main ( ) static int a10,i; 运行结果: 1 3 5 7 9 for (i=0;i10;i+) ai=i+1; for (i=0;i10;i=i+2) printf(“%d”,*(a+i); 三、阅读分析下列程序,在 处填上适当的内容使程序(或函数)完整(共21分,每空3分) (一) 以下程序输出所有大写字
6、母和其对应的ASCII码值。 void main ( ) int ch; for (ch=A;ch=Z;ch+) printf(“字母%c的ASCII码值是:%dn”,ch, 1 ); 答案: ch (二)以下函数的功能是将一个字符串S的内容颠倒过来。 void reserve( 2 ) 答案: char s int i, j, k; for (i=0,j=strlen(s)-1; 3 ;i+,j-) 答案: ij k=si; si=sj; sj=k; (三)由键盘输入三个数a,b,c,计算以这三个数为边长的三角形面积。 #include void main ( ) float a, b, c
7、, s, s1; scanf(“%f%f%f”, 4 ); 答案: &a,&b,&c if (a+b)c & (a+c) b & (b+c) a) s=(a+b+c)/2; s1=s*(s-a)*(s-b)*(s-c); s= 5 ; 答案: sqrt(s1) printf(“n 三角形面积为:%f n”,s); else printf(“ n 不是三角!n”); (四)从键盘输入一个字符串,把它输出到文件中,文件名由键盘输入。 #include void main ( ) FILE *fp; char ch, *fn; scanf(“%s”,fn); if (fp=fopen(fn, 6 )
8、=NULL) 答案: “w” printf(“打开文件出错 n”); exit(1); while (ch=getchar( )!=EOF) fputc( 7 ); 答案: ch,fp putchar (ch); fclose (fp); 四、编程题(共21分) 1. 从键盘输入3个整数,输出其中最大数。(5分) main ( ) int i=0, x, mx=-32768; while ( i+mx) mx=x; printf (“n %d n”,mx); 2. 编写一函数uf(s),将字符串s中的第一个和最后一个字母改写成大写字母(如原来不是字母或已是大写字母,则不变)。(5分) #inc
9、lude uf (char *s) int i; i=strlen(s); if (i=0) return; if (s0 = a & s0 = a & si-1 = z) si-1 +=A a; main ( ) char s =”asdfgh”; uf (s); printf(“ n%sn”,s); 3. 从键盘输入10个浮点数,输出其平均值及所有低于平均值的数。(5分) #include main ( ) float a10, ave=0; int i; for (i=0; i10;i+) scanf(“%f”,&ai); ave +=ai; ave /=10; for (i=0;i10
10、;i+) if (aiy? 10:11y+?a:z (三)若所有变量都已正确定义为int型则执行下列程序段后x 的值为 79 。x=80;a=10b=16;y=9;z=0;if (ab) if(b!=15) if(!y) x=81;else if(!z) x=79; (四)i,j为int型的变量,则下面程序中的循环体的执行次数为 5 。i=1;j=0; while(i+jj j=j+2);else i=i+2; (五)若有数组a10,类型为int型,元素及值如下所示:数组元素:a0a1a2a3a4a5a6a7a8a9元素中的值:9 4 8 3 2 6 7 0 1 5则*(a+a9 )的值为 6
11、 。 (六)以下函数调用语句中实参的个数为 3 .Sub (x1,x2) ,(x3,x4,x5),x6) (七)若有以下函数定义: int (*hs ) () /*函数体*/则函数hs返回的值是 整形 。(八)某C编译程序规定,int型数据存储占个字节,float型数据存储占个字节,char型数据存储占个字节,现有记录描述如下:struct stuunion char bj5; int bh2; class; char xm8;float cj;xs;则sizseof(xs)的值为 17 。(九)设有以下定义:define a 6 #define b a+4 则执行语句c=b*10(c为int
12、型数据)后,c的值为 46 。(十)在C中,文件指针变量的类型只能是 FILE 。 二、阅读下列程序,写出运行结果(共分,每题分) 程序1#include main() int i; 运行结果:i= 18,J=29.44 float j; i=18; j=29.4361; printf(“i=%4d,j=%2.2f”,i,j ); 程序2 main() int k=10; char c=b; do swith(c+) 运行结果:12 case a:k+; case b:k-; case c:k+=3;break; case d:k=k%4; while(c!=c); printf(“%dn”,
13、k );程序3main() char a=”computer”; char t; int i,j=0; 运行结果:utrpomec for(i=0;I8;I+) for(j=i+1;j8;j+) if(aiaj) t=ai; ai=aj; aj=t; printf(“%s”,a);程序main() char *p,s=”abcdefg”; for(p=s;*p!=0); 运行结果:abcdefg printf(“%sn”,p); p+; if(*p!=0) p+; else break; 5、以下程序的输出结果为_hello wellcom_。main( ) char s140= hello,
14、s220= wellcom;int i=0,j=0; while(s1i!=0) i+; while(s2j!=0) s1i+=s2j+;s1i=0; printf(%sn,s1); 6、#include main()int i, j, x = 0;for (i=0; i2; i+)x+;for (j=0; jy &xz ) return(x);else if (y=x &yz) return(y) ;else return(z);main()int a,b,c,I=1,j,s; scanf(“%d%d%d”,&a,&b,&c);s= max(a,b,c) ;while(1)j=s*i; if
15、( (j%a=0)&(j%b=0)&(j%c=0) ) break; i+;prinf(“%d”,j); 2. 下面程序是判断输入的字符是否中心对称,(如”xyzzyx”和”xyzyx”都中心对称#include main()char s100,*p1,p2; int n;gets(s);n=strlen(s);p1=s;p2= s+n-1 ;while(p1p2)if (*p1!=*p2)break;elsep1+; p2- ;if (p1p2) printf(“NOn”);elseprintf(“YESN”);3. 结构数组中有4人的姓名和年龄,以下程序输入四人中年龄最大的人的姓名和年龄。
16、#define NULL 0static struct nodechar name20;int age;person =“lihong”,18, “wangjun”,19, “zhangwei”,20, “zhaofeng”,19;main()struct node * p,* q; int old=0; q=NULL;p=person;for(; p!=NULL ;p+)if(oldage) q=p; old=p-age ; printf(“%s,%dn”,q-name,q-age); 四、编程题(共22分) 1 有36块砖,共36人搬,成年男子一次搬4块砖,成年女子一次搬3块砖,儿童两人抬
17、1块砖,恰好一次全部搬完,编程求出成年男子 成年女子和儿童各有多少人。(6分)main() int men,women,child; for(men=0;men9;men+) for(womem=0;women12;women+) child=36-men-women; if(men*4+women*3+child/2.0)=36) printf(“%d,%d,%dn”,men,women,child); 2 非波那契数的递归如下:除X0和X1外,序列中某个元素的值是其前两个元素的和,编写程序输入序号n,求它的非波那契数Xn。 long fib(int y) if(y=0) return(0)
18、; else if(y=1) return(1); else return(fib(y-1)+fib(y-2); main() int n; long k; scanf(“%d”,&n); k=fib(n); printf(“k=%dn”,k); 3用循环语句编程将二维数组a34的第一行和第三行对调(如下图),并输出数组。(8分) main() int i,j,t; int a34=2,3,4,5,3,8,10,2,7,9,3,1; for (i=0;i4;i+) t=a0i; a0i=a2i; a2i=t; for (i=0;i3;i+) for (j=0;j7) if (b8) if (c
19、9) x=2 ;else x = 3; 后 x 的值是 C 。 4. A)0 B)2 C)1 D)3 (五)有如下程序 main () int x=23; do printf(“%d”,x - -); while (! x); 该程序的执行结果是 B 。 5. A)321 B)23 C)不输出任何内容 D)陷入死循环 (六)定义一个具有8个元素的整型数组,应当使用语句 A 。 6. A) int a8; B) int a2,4; C) int a ; D) int * a8; (七)设int x =4,2,3,1,q,*p=&x1;则执行语句 q (* p)+ +后,变量q的值为 A 。 7.
20、 A)4 B)3 C)2 D)1 (八)函数调用时,下列说法中不正确的是 B 。 8. A) 实际参数和形式参数可以同名 B) 若用值传递方式,则形式参数不予分配存储单元 C) 主调函数和被调函数可以不在同一个文件中 D) 函数间传递数据可以使用全局变量 (九)下列数据类型中不属于构造类型的是 D 。 9. A)数组型 B)结构型 C)公用型 D)枚举型 (十)存储整型数据7856时,在二进制文件和文本文件中占用的字节数分别是 B 。 10.A)3,2 B)2,5 C)5,5 D)5,2 二、阅读下列程序,写出运行结果(共20分,每题4分) 【程序1】 include main() int x
21、 = 1,a = 0,b = 0; 运行结果: a=1,b=1 switch(x) case 0; b + +; case 1; a + +; case 2; a + +;b + +; printf (“a = % d ,b = % d n”,a,b); 【程序2】 space (int m) while (m - -) printf (“%c”,32); 运行结果: * main() * int i ,j;printf (“n”); * * * for (i=5;i=1;i - -) * * * * * * space (i); printf (“*”); for (j=3;j=2*(i/5
22、)+2;j - -) space (4-i);printf(“*”); printf (“n”); 【程序3】 long ff(int n) 运行结果:6 if (n3) return (ff(n-1)+ff(n-2); else return (3); main () printf (“%dn”,ff(4); 【程序4】 main () 运行结果4 0 0 -4 -3: int i, a5; for(i=0;i2)%5; for (i=4;i=0;i- -) printf (“%3d”,ai); 【程序5】 #include 运行结果:13 union pw int i; char ch2;
23、 a; main () a.ch0=13; a.ch1=0; printf (“%dn”,a.i); 6、以下程序的输出结果为_ x=37_。#define A 3#define B(a) (A+1)*amain() int x; x=3*A+B(7);printf(x=%dn,x); 7#includevoid Fun(int *y) printf(*y = %dn, *y);*y += 20; printf(*y = %dn, *y);main()int x = 10;printf(x = %dn, x);Fun(&x);printf(x = %dn, x); 程序运行结果是: x=10
24、*y=10 *y=30 X=30三、阅读下列程序,在 处填上适当的内容使其完整。(共20分,每空2分) (一)下面程序用于计算n!的值。 main () int i,s,n; s = 1; printf (“enter n:”); scanf(“%d”,&n); for (i=1;i = n;i + +) ( s=s*i ); printf (“s=%d”,s); (二)从键盘上输入一行字符(不多于40个,以回车换行符作为输入结束标记),将其中的大写字母改为小写字母,其它字符不变,然后逆向输出。 main () char a40; int n = 0; do scanf (“%c”,&an);
25、 if( (A=an)&(an = 0) printf(“%c”,an-); (四)从终端读入的文本(用作为文本结束标志)复制到一个名字C.DAT的新文件中。 include FILE * fp; main () char ch; if(fp= pa+10 )= =NULL) exit(0); while (ch=getchar()! = ) fpute ( *p= =x ); fclose(fp); 四、编程题(共20分) 1编写一程序,从键盘输入10个实数,计算并输出算术平均数。(7分) main() int i; float ave=0,a10; for(i=0;i10;i+) scanf(“%f”,&ai); for(i=0;i10;i+) ave+=ai; printf(“%10.4fn”,ave/10); 2.求两个整数m和n最大公约数。(6分) #include main() int m,n,a,b,r; scanf(“%d,%d”,&m,&n); a=m; b=n; do r=a%d; a=b; b=r; while (r!=0) printf(“%d,%d is %dn”,m,n,a);