资源描述
第一章 习 题1.1选择题: 一个C程序的执行是(A)。A)从main()函数开始,直到main()函数结束B)从第一个函数开始,直到最后一个函数结束C)从第一个语句开始,直到最后一个语句结束D) 从main()函数开始,直到最后一个函数结束 计算机能直接执行的语言是( B)。A) 汇编语言 B)机器语言 C)高级语言 D) A和B 一个C程序是由( C)。A) 一个主程序和若干子程序组成B) 若干过程组成C) 一个或多个函数组成D) 若干子程序组成 下列说法正确的是(B )。A) C程序书写格式限制严格,一行内必须写一个语句B) C程序书写比较自由,一个语句可以分行写在多行上C) C程序书写格式限制严格,要求一行内必须写一个语句,并要求行号D) C程序中一个语句不可以分写在多行上1.2填空题: 构成语言程序的基本单位是函数。 语言源程序文件的后缀是.c,经过编译后,生成文件的后缀是,obj,经过连接后,生成文件的后缀是.exe。 在TURBO 环境中用RUN命令运行一个C程序时,所运行的程序的后缀是.exe 。 一个语言程序必须有而且只能有一个主函数,它的函数名为 main 。 一个函数有两部分组成,第一部分称为函数首部;第二部分称为函数体。 函数体由符号 开始,用符号 结束。函数体的前面是声明 部分,其后是执行 部分。1.3上机编辑、调试、运行下列程序,发现错误,并改正之。/*求1 + 2 + 3 + + 10的和*/#include void main() int s,n; sum = 0;n = 1; while(n 0)sum = sum + n; n = n + 1; printf(sum = %d n,sum);第二章 习 题2.1选择题 在以下标识符中,( B )是合法的用户标识符。 A) a#b B) getch C) void D) ab* 不合法的八进制数是(B)。 A) 0 B) 028 C) 077 D) 01 不合法的十六进制数是(A)。0xA) oxff B) 0Xabc C) 0x11 D) 0x19 以下选项中正确的整型常量是( B )。 A) 12. B) 20 C) 1,000 D) 4 5 6 以下选项中正确的实型常量是( D )。 A) 0 B) 3. 1415 C) 0.329102 D) .871 以下选项中不正确的实型常量是( B )。 A) 2.607E1 B) 0.8103e 3 C) 88.77 D) 871e2 以下变量x, y, z均为double类型且已正确赋值,不能正确表示数学式子的C语言表达式是 ( A )。A) x / y*z B) x*(1/(y*z) C) x / y*1 / z D) x / y / z 在C语言中,字符型数据在内存中以( C )的形式存放。 A) 原码 B) 补码 C) ASCII码 D) BCD码 sizeof(float)是( C )。 A) 一种函数调用 B) 一个不合法的表示形式 C) 一个整型表达式 D)一个实型表达式 表达式b =(241 & 15)&(Z | a)的值是( B )。 A) 0 B) 1 C) TRUE D) FALSE 若变量已正确定义并赋值,符合C语言语法的表达式是( B )。 A) a = a + 7; B) a = 7 + b + c,a + C) int(13.4 % 4) D)a = a + 7 = c + b 以下叙述中正确的是( A )。A)a是实型变量,C语言允许进行a = 10,因此可以这样说:实型变量中允许存放整型值B)在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式C)执行表达式a = b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值改变为0D)已有a = 3,b = 5。当执行了表达式a = b,b = a之后,已使a中的值为5,b中的值为32.2填空题 数学式子cos2x 写成C语言表达式是 cos(x)*cos(x)*(a+b)/(a-b) 。 a是整型变量,能将a清零的表达式是 a=0 ;能将a中的各二进制为均置成1的表达式是 a=-1 。 若a,b和c均是int型变量,则执行下面表达式后,a值为 6 ,b值为 4 ,c值为 2 。a =(b = 4)+(c = 2) 经过下述赋值后,变量x的数据类型是 int 。int x = 2;double y;y=(double)x; 若x和n均是整型变量,且x和n的初值均为5,则执行下面表达式后,x值为 10 ,n值为 6 。x += n + x=x+n+ 若有定义:int b = 7;float a = 2.5,c = 4.7;则下面表达式的值为 4.5 。a+(int)(b/3*(int)(a+c)/2)%4若有定义:int m=7,y=2;则执行下面表达式的值后,y值为 -24 。y += y=m*= y 表达式8 / 4*(int)2.5 /(int)(1.25*(3.7 + 2.3)的类型为 整型 。条件“1 x 3或x -1&x3)|(x-99) 。 若x和a均是整型变量,则执行表达式 后的x值为 12 ,执行表达式 后的x值为 4 。 x =(a = 4,6*2) x = a = 4,6*2 一个字节包含 8 个二进制位,在一个字节中能存放的最大(十进制)整数是 ,它的二进制数的形式是 ;最小(十进制)整数是 ,它的二进制数的形式是 。 当计算机用两个字节存放一个整数时,其中能存放的最大(十进制)整数是 ,它的二进制数的形式是 ;最小(十进制)整数是 ,它的二进制数的形式是 。2.3改错题 #include stdio.h; include 正确main(); (多分号) /*main function*/float r,s; /*r is radius, s is area of circular*/r = 5.0;s = 3.14159*r*r;printf(%fn,s); #include stdio.h (缺号) include 正确main(); /*main function*/ float a,b,c,v; /*a,b,c are sides,v is volume of cube*/a = 2.0;b = 3.0;c = 4.0;(缺 ;号)v = a*b*c;printf(%fn,v);(缺;号)第三章 习 题3.1 什么是C语言的基本执行单位?C语言的语句是如何分类的?3.2 C语言的流程控制语句有哪几种?3.3 结构程序设计的基本结构有哪几种?3.4 C语言的输入输出操作是由语句来实现的吗?3.5 顺序结构程序的特点是什么?3.6 输入下面的程序,观察运行结果。#include void main()float a1,a2;double b1,b2;a1=3141.59;a2=0.000001;b1=3141.59;b2=0.000001;printf(%f,%lfn,a1+a2,b1+b2);答案:3141.590089,3141.5900013.7 输入下面的程序,观察运行结果。#include void main() char ch;int k;ch=a;k=66;printf(%c,%d,%x,%o,%d,%c,ch,ch,ch,ch,k,k);答案:a,97,61,141,66,B3.8 输入下面的程序,观察运行结果。#include void main()float x;double y;x=123.45678;y=123.45678;printf(%4.2f,% 6.2en,x,y);答案:123.46,1.2e+023.9输入下面的程序,观察运行结果,并说明程序的功能(注意:运行时输入大写字母)。#include void main() char c1,c2;c1=getchar( );printf(%c,%dn,c1,c1);c2=c1+32;printf(%c,%dn,c2,c2);答案:A,65 a,97 该程序是将键盘输入的大写字母转换为对应的小写字母。3.10 编写程序:求三个正整数(小于32767)的算术平均值。void main()int a,b,c; float d; printf(n input a,b,c=); scanf(%d,%d,%d,&a,&b,&c); d=(a+b+c)/3.0; printf(nd=%f,d);3.11 编写程序:已知圆的半径,求圆的周长和面积(要求半径值由键盘接受)。void main()int r; float k,s; printf(n input r=); scanf(%d,&r); k=2*3.14159*r; s=3.14159*r*r; printf(nL=%fnS=%f,k,s);3.12 编写程序:计算a+b26的值,其中:a=4,b=3;a=5,b=2;a=2,b=8。void main() float a,b,h; printf(n input a,b=); scanf(%f,%f,&a,&b); h=a+b*b-6; printf(na=%f,b=%fnh=%f,a,b,h);第四章 习 题4.1 判断下列陈述的真假:在三种形式的if语句中,在if关键字之后均为表达式。 该表达式只能是逻辑表达式或关系表达式。False在if语句中,关键字之后的表达式必须用括号括起来,并随后跟分号(;)。False在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用 括起来组成一个复合语句。True条件运算符的结合方向是自右至左。Falseswitch语句中的case后面必须是整常量表达式,如整数常数、字符常量。True当switch的整类型表达式的结果值与某一个case块的整常量表达式的值相等时,将转至该case块,并且执行该case与下一个case之间的所有语句。False可以使用go out语句跳出switch语句。False else总是与它前面最近的if配对。True4. 阅读下面的程序,说明程序的运行结果。#include void main()int x=10,y=20,t;if(x!=y)t=x; x=y; y=t;printf(%d,%dn,x,y);答案:20,104. 输入下面的程序,观察运行结果并说明程序的功能。#include void main() int x = 20; if (x = 0)if (x 50)printf(x is okn); elseprintf(x is not okn); 答案: x is ok4.4 分别输入下面两个程序,观察运行结果,说明有何不同。程序段:#include void main() int x = 20; if (x = 0)if (x 50)printf(x is okn); elseprintf(x is not okn); 答案:什么也不输出程序段:#include void main() int x = 20; if (x = 0) if (x 50) printf(x is okn); elseprintf(x is not okn); 答案:x is not ok4.5 输入下面的程序,观察运行结果并说明程序的功能。#include void main() int x ,a;scanf(“%d”,&x);a=x%10; switch(a) case 0:case 2:case 4:case 6:case 8: priintf(“even!n”);break;default:printf(“odd!n”); 答案: 输入偶数,则输出even! 输入奇数,则输出odd!4.6 编写程序:从键盘输入三个正整数,按由大到小的顺序输出。#include void main() int a,b,c,t; printf(input a,b,c=:);scanf(%d%d%d,&a,&b,&c); if(ab) t=a;a=b;b=t; if(ac) t=a;a=c;c=t; if(bc) t=b;b=c;c=t; printf(%5d%5d%5d,a,b,c);4.7 编写程序:从键盘输入一个正整数,判断它是否既能被整除,又能被整除。方法1:#include void main() int k; scanf(%d,&k); if(k%3=0 & k%7=0) printf(nyes); else printf(n no);方法2:#includevoid main() int x; printf(please input x=);scanf(%d,&x); if(x%3=0) if(x%7=0) printf(3-yes 7-yes); else printf(3-yes 7- no); else if(x%7=0) printf(3-no 7-yes); else printf(3-no 7- no); 4.8 编写程序:求函数: X+5 (X=0)y= X5 (X0) 的值。#include void main() int x,y; printf(please input x=);scanf(%d,&x); if(x=0) y=x+5; else y=x-5; printf(y=%d,y);第五章 习 题5.1 试比较三种循环语句的异同。5.2 选择题: 下面关于for循环的正确描述是( D )。A) for循环只能循环次数已经确定的情况B) for循环是先执行循环体语句,后判断终止条件C) 在for循环中,不能用break语句跳出循环体D) 在for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 对for(表达式1;表达式3)可以理解为( B )。A) for(表达式1;0;表达式3)B) for(表达式1;1;表达式3)C) for(表达式1;表达式1;表达式3)D) for(表达式1;表达式3;表达式3) 若有“int m;”,则以下循环执行次数是( B )。for(m=2;m= =0; )A) 无限次B) 0次C) 1次D) 2次下面不是死循环的是( A )。A) for(y=0,x=1;x+y;x=i+) i=x;B) for( ; ; x=+1);C) while(1) x+;D) for(i=10; ;i) sum+=i;下面程序段的运行结果是( B )。for(i=0;i5;i+) if(i= =2) continue;printf(%d,i);A) 01B) 0134C) 01234D) 不打印下面程序段的运行结果是( B )。int k=10;while(k=0) k=k1;A) while循环执行10次B) 循环是无限循环C) 循环体语句一次也不执行D) 循环体语句执行一次执行语句“for(n=1;n+4; ) ;”后变量n的值是( C )。A) 3B) 4C) 5D) 不定以下正确的描述是( B )。A) continue语句的作用是结束整个循环的执行B) 只能在循环体内和switch语句体内使用break语句C) 在循环体内使用break语句和continue语句的作用相同D) 从多层循环嵌套中退出时,只能使用goto语句5.3 写出下列程序的运行结果main()int i=0,a=0;while(i20) for( ; ; )if(i%10= =0) break;else i;i+=11;a+=i;printf(%dn,a);答案:32 main() int i,j,b=0;for(i=0;i3;i+)for(j=0;j=i ) b+; printf(%dn,b);答案:35.4 下面程序的功能是从键盘输入10个无序的整数,去掉最大数和最小数,再求其平均值。请填空。main()int j,x,max,min,sum;fioat ave;printf(Enter 10 number:n);scanf(%d,&x);sum=max=min=x;for( j=2 ; jmax ) max=x;else if(xmin) min=x; sum=sum-max-min ;ave=sum/8.0;print(The average is %.2fn,ave);5.5 编程计算1100之间是7的倍数的数值之和。#includemain()int i,s=0; for(i=0;i=100;i+) if(i%7=0) s+=i; printf(ns=%d,s);5.6 编写程序,利用下面公式求的近似值:2/6=1/12+1/22+1/32+1/42+,直到某项绝对值不大于10-12为止。#include#includemain()long n=1; float x,sum=0; x=1.0/(n*n); while(x=1e-12) sum=sum+x; n+; x=1.0/(n*n); sum=sqrt(sum*6); printf(n PI=%f,n=%ld,sum,n-1);5.7 计算键盘输入的字符数。(提示:用getchar( ))方法1:#include#includemain()char c; int n=0; c=getchar(); while(c!=n) n+; c=getchar(); printf(n=%d,n);方法2:#includemain()char c; int chgs=0; printf(Enter one line char : n); while( c=getchar()!=n) chgs+; printf(chgs=%dn,chgs);5.8 用1元人民币兑换1分、2分、5分的硬币,编程计算共有多少种不同的兑换方法。方法1:#includemain()int x,y,z,he=0; for(x=1;x=20;x+) for(y=1;y0) he+; printf(nx=%dty=%dtz=%d,x,y,z); printf(nhe=%d,he); 结果:he=461方法2:#include#includemain() int g,k,s,fa=0; for(g=1;g=93;g+) for(k=1;k0) fa=fa+1; printf(nfa=%dn,fa);结果: fa=4615.9 编程求出1000以内的所有完全数。若一个数恰好等于它的因子之和(除自身外),则称该数为完全数,例如:6=1+2+3,故6是完全数。方法1:#include#define M 1000main()int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10; int i,a,n,s; for (a=2;a=M;a+) n=0; s=a; for (i=1;i1) printf(%d,%d,k1,k2); if(n2) printf(,%d,k3); if(n3) printf(,%d,k4); if(n4) printf(,%d,k5); if(n5) printf(,%d,k6); if(n6) printf(,%d,k7); if(n7) printf(,%d,k8); if(n8) printf(,%d,k9); if(n9) printf(,%d,k10); printf(n); 结果: 6 yes ,factors are 1,2,328 yes ,factors are 1,2,4,7,14,496 yes ,factors are 1,2,4,7,16,31,62,124,248,方法2:#includemain()int m,s,i; for (m=2;m=1000;m+) s=0; for (i=1;im;i+) if(m%i)=0) s=s+i; if (s=m) printf(%d yes , factors are ,m); for(i=1;im;i+) if(m%i=0) printf(%d,i); printf(n); 结果: 6 yes ,factors are 1,2,328 yes ,factors are 1,2,4,7,14,496 yes ,factors are 1,2,4,7,16,31,62,124,248,5.10 编程统计从键盘输入的字符中数字字符的个数,用换行符结束输入 循环。方法1:#include#includemain() char c; int n=0; c=getchar(); while(c!=n) if(c=0 & c=9) n+; c=getchar(); printf(n=%d,n);方法2:#includemain()char c;int digit=0; printf(Enter one line char : n); while( (c=getchar() != n) if (c=0&c=9)digit+; printf(szgs=%dn,digit);5.11 编程求(即求1!+2!+3!+20!)方法1:#include main() float sum=0,jc=1; int n; for(n=1;n=20;n+) jc=n*jc; sum=sum+jc; printf(sum=1!+2!+.20!=%fn,sum);方法2:#include main() float sum,jc; int m,i;sum=0;for(m=1;m=20;m=m+1) jc=1; for (i=1;i=m;i+) jc=jc*i; printf(jc=%fn,jc); sum=sum+jc; printf(sum=%en,sum); 5.12 编写程序,求出整数11000之间的所有同构数。所谓同构数是指此数的平方数的最后几位数与该数相等。例如,25的平方为625,376的平方为141376,所以25和376都是同构数。方法1:#includemain() long i; for(i=1;i=1000;i+) if(i*i%10=i | i*i%100=i | i*i%1000=i) printf(n%5d,i);方法2:m#includemain()long i,m,k,r,q; for(i=1;i=1000;i+) m=i;k=m*m; while(m!=0) r=m%10;q=k%10; if(r=q)m=m/10;k=k/10; else break; if(m=0) printf(%5d,%5d,i,i*i); 方法3:#includemain()long i,pf;printf(n);for(i=2;i=1000;i+) pf=i*i; if(i=pf%10 & i10) printf(ni=%ld,pf=%ld,i,pf); continue; if(i=pf%100 & i100) printf(ni=%ld,pf=%ld,i,pf); continue; if(i=pf%1000 & i1000) printf(ni=%ld,pf=%ld,i,pf);5.13 编程序,输入一个正整数,输出其素数因子的乘积。例如,输入60,输出: 60=2* 2* 3* 5方法1:#include#includemain()int k,i,j; scanf(%d,&k); printf(%d:,k); i=2; while(k!=0 & i=k) if(k%i=0) printf(%3d,i); k=k/i; i=2; else i+;方法2:#includemain()int i,x,k;scanf(%d,&x);k=x;printf(n%d=,x);while(x!=0) for(i=2;i=k;i+) if(x%i=0) break; x=x/i; if (ik) printf(%d*,i); else printf(b n);第六章 习 题6.1 选择题: 下列程序输出结果是(B)。main() int a10=1,2,3,4,5,6,7,8,9,10,i,k;for(i=0;i10;i+)ai=i;for(i=0,k=0;i4;i+) k+=ai+i;printf(n%d,k);A) 20 B) 12 C) 16 D) 18 下列程序输出结果是( A )。main()int n2=0,i,j,k=2;for(i=0;ik;i+)for(j=0;jk;j+)nj=nj+1;printf(%dn,n2);A) 不确定值 B) 3 C) 2 D) 1 下列程序的输出结果是( A )。main() int a33=1,2,3,4,5,6,i,j,s=0;for(i=1;i3;i+)for(j=0;j=i;j+)s+=aij;printf(n%d,s);A) 18 B) 19 C) 20 D) 21 下列程序输出结果是( C )。main()int a33=1,2,3,4,5,6,7,8,9,i;for(i=0;i3;i+)printf(%d,ai2-i);A) 1,5,9, B) 1,4,7, C) 3,5,7, D) 3,6,9, 当执行下面的程序时,如果输入ABC,则输出结果是(A )。#include #include main()char ss10= 12345;gets(ss);strcat(ss, 6789);printf(%s,ss);A)ABC6789 B)ABC67 C)12345ABC6 D)ABC456789 下列程序输出结果是( C )。main()char b=Hello,you;b5=0;printf(%s,b);A) Hello,you B) Hello, C) Hello D) Hello you6.2 输入10个浮点型数,求它们的和、平均值、最大值、最小值。方法1:#include main() float a10,sum=0,aver,max,min; int i=0; while(i10) scanf(%f,&ai); sum+=ai; i+; aver=sum/10.0; max=min=a0; i=0; while(imax) max=ai; else if(aimin) min=ai; i+; printf(nsum=%fnaver=%fnmax=%fnmin=%f,sum,aver,max,min);方法2:#include main()int i,maxi,mini; float x10,sum=0,ave,max,min; for(i=0;i10;i+) scanf(%f,&xi); sum+=xi; ave=sum/10; max=min=x0; maxi=mini=0; for(i=1;imax)max=xi;maxi=i; if(ximin)min=xi;mini=i; printf(sum=%fnave=%fnmax=%f,maxi=%dnmin=%f,mini=%dn,sum,ave,max,maxi,min,mini);6.3 求一个3*3的整型矩阵主对角线元素之和。main()int i,j,a33,sum=0; for(i=0;i3;i+) for(j=0;j3;j+) scanf(%d,&aij); for(i=0;i3;i+) printf(n); for(j=0;j3;j+) printf(%-4d,aij); for(i=0;i3;i+) sum+=aii; printf(nsum=%d,sum); *6.3 求一个3*3的整型矩阵付对角线元素之和。main()int i,j,a33=1,2,3,4,5,6,7,8,9,sum=0; for(i=0;i3;i+) printf(n); for(j=0;j3;j+) printf(%-4d,aij); for(i=0;i3;i+)for(j=0;j3;j+)if(i+j=2) sum+=aii; printf(nsum=%d,sum); 6.4 将一维实型数组元素进行排序。#includemain() float t,a10=12.4,3.44,4.88,5.9,6.88,77.90,65.88,4.8,0.7,6.7; int i,j,p; for(i=0;i10;i+) printf(%10.2f,ai); printf(n); for(i=0;i9;i+) p=i; for(j=i+1;jaj) p=j; if(p!=i) t=ap;ap=ai;ai=t; for(i=0;i10;i+) printf(%7.2f,ai);6.5 从键盘上输入一个字符和一个字符串,查找输入的字符是否在输入的字符串中,若不在则输出没有找到的信息,否则输出第一个与输入字符匹配的所在位置。#include#includemain() char a10,c; int flag=1,i,cor; printf(ninput a str :n); gets(a); printf(ninput a ch:n); c=getchar(); i=0; while(ai) if(c=ai) flag=0;cor=i;break; i+; if(flag=0) printf(nfind,No:%d,cor); else printf(n can not find);6.6 求两个矩阵的乘积,输出结果。#includemain() int a23=1,2,3,4,5,6,b32=1,2,1,2,1,2,c22; int i,j,k; for(i=0;i3;i+) for(j=0;j2;j+) cij=0; for(k=0;k3;k+) cij+=aik*bkj; for(i=0;i2;i+) printf(n); for(j=0;j2;j+) printf(%4d,cij); 6.7 已知整型数组array有10个元素,分别为2、4、6、8、10、1、3、5、7、9,编写程序将前5个元素与后5个元素交换,交换后的元素分别为1、3、5、7、9、2、4、6、8、10。#includemain() int a10=2,4,6,8,10,1,3,5,7,9,i,t; for(i=0;i5;i+) t=ai;ai=a5+i;a5+i=t; printf(n); for(i=0;i10;i+) printf(%-6d,ai);6.8 输入一个十进制数,转换成二进制数并输出。#include#includemain() long a100,k,s=0; int i,n=0; scanf(%ld,&k); while(k!=0) an=k%2; k=k/2; n+; for(i=n-1;i=0;i-) s+=ai*pow(10,i); printf(n%ld,s);方法2:#include#includemain()int i,s100,x,k=0; scanf(%d,&x); while(x0) sk=x%2; x=x/2; k+; for(i=k-1;i=0;i-) printf(%d,si);6.9 将字符串中的大写字母转换成小写字母,小写字母转换成大写字母,其它字符不转换。#include#includemain() char a80; int i=0; gets(a); while(ai!=0) if(ai=A & ai=a & ai=A&xi=a&xi=z) xi=xi-32; i+; printf(n%s,x);6.10 在不使用系统函数strcat的情况下,实现两个字符串连接。#include#includemain()char a80,b80; int n,i,j,m; printf(n input a str:); gets(a); printf(n input b str:); gets(b); n=strlen(a);m=strlen(b); i=0; while(bi!=0) ai+n=bi; i+; an+m=0; printf(n); puts(a);6.11 从字符串中删除所有指定字符。#include#includemain()char a80,c; int i,j,n; printf(input a str:); gets(a); printf(input a char:); c=getchar(); i=0; n=strlen(a); for(i=0,j=0;in;i+) if(ai!=c) aj+=ai; aj=0; printf(%s,a); 6.12 将字符串s1中的ASCII码为偶数且下标也为偶数的字符复制到字符数组s2中。#include#includemain()char s180,s280; int i,j; printf(input s1:); gets(s1); i=0;j=0; while(s1i!= 0) if(s1i%2=0 & i%2=0) s2j+=s1i;i+; s2j=0; printf(n%s,s2);6.13 有一行电文,已按下面规律译成密
展开阅读全文