《浙工大C语言课本习题答案》_第1页
《浙工大C语言课本习题答案》_第2页
《浙工大C语言课本习题答案》_第3页
《浙工大C语言课本习题答案》_第4页
《浙工大C语言课本习题答案》_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c程序设计习题参考答案习 题 一2习 题 二3习 题 三5习 题 四8习 题 五14习 题 六17习 题 七20习 题 八26习 题 九33习 题 十35习 题 十一3640习 题 一1. 填空题 计算机程序设计语言按其发展可分为三类,即 机器语言 、汇编语言和 高级语言 。 c程序是由 函数 构成的,一个c程序中至少包含 1个main函数。因此, 函数是c程序的基本单位。 c程序注释是由 /* 和 */ 所界定的文字信息组成的。 函数体一般包括 函数首行 和 函数体 。 在任何c程序中都必须且只能有一个主函数, 主函数名必须为 main 。2. 判断下列各个叙述的正确与否 c程序的执行总是从

2、该程序的main函数开始,在main函数最后结束【】 c程序的注释部分可以出现在程序中任何位置,它对程序的编译和运行不起任何作用,但可以增加程序的可读性【】 由“/*”与“*/”界定的注释必须在同一行【】 通过了编译、连接的程序就是正确的程序【】 有计算结果输出的程序一定是正确的程序【】 编译错误是语法错误,运行结果错误是逻辑错误【】 编译时在信息窗口出现包含“error”的信息,说明程序存在警告性错误【】 源程序每次修改后,都必须重新编译、连接【】3. 简答题 算法的含义、特点是什么?解答:算法是解题方法的精确描述。有穷性、确定性、有多或零个输入、有1或多个输出、有效性。 写出一个c程序的基

3、本结构。由编译预处理命令、注释、1个main和若干个自定义函数构成,函数格式如下: 函数类型 函数名(类型标识符 形参,类型标识符 形参,.) 类型声明语句; 执行语句部分; 写出在你使用的计算机系统上,进入c环境以及运行、调试程序的简要步骤。 输入x后计算其正弦值的源程序如下。编译信息是否表示有致命性错误?应如何修改? 解答:致命性错误为第6行函数sin未声明,应加入编译预处理命令 #include 4. 编程题 请上机调试、运行本章课本上c语言程序例题46(注释部分可以不必输) 仿照例6编程,输入两个变量后,输出其中较大的值。 #include void main() int a, b;

4、printf(请输入a,b的值:n); scanf(%d%d,&a,&b) ; if(ab) printf(%dn,a); else printf(%dn,b); 仿照例题编程,输入圆柱体的半径和高,计算并输出圆柱体的体积。 #include void main() float r, h, v; printf(请输入半径、高的值:n); scanf(%f%f,&r,&h); v=r*r*3.141593*h; printf(%fn,v); 习 题 二1. 将下列程序上机运行,写出你所使用的c语言处理系统中short、int以及long类型数据的字长和数值范围。 #include void ma

5、in() printf(short类型数据的字长为:%dn,sizeof(short); printf(int类型数据的字长为:%dn,sizeof(int); printf(long类型数据的字长为:%dn,sizeof(long); 解答:vc+环境下,分别为2、4、42. 仿照题1编程,测试float、double类型数据的字长。 #include void main() printf(float类型数据的字长为:%dn,sizeof(float); printf(double类型数据的字长为:%dn,sizeof(double); 3. 判断下列各个叙述的正确与否。 c的long类型数

6、据可以表示任何整数【】 任何变量都必须要声明其类型【】 c的任何类型数据在计算机内都是以二进制形式存储的【】 scanf函数中的格式符“%d”不能用于输入实型数据【】 格式符中指定宽度时,从缓冲区中读入的字符数完全取决于所指定的宽度【】 按格式符“%d”输出float类型变量时,截断小数位取整后输出【】 按格式符“%6.3f”输出i(i=123.45)时,输出结果为 23.450【】 scanf函数中的格式符“%f”能用于输入double类型数据【】4. 指出下列各项中那些是c的常量,对合法的c常量请同时指出其类型。10,150 007 -0x3d 1e0 e1 o7o8x xo 1.52e0

7、.5 sin(3) 0xf16 x 0071.414e+2 2.54 a解:007整型,-0x3d整型,1e0实型,x字符型,0xf16整型,x字符串 007字符型,1.414e+2实型,2.54实型,字符型,a字符型5. 指出下列各项中那些是c的标识符(可作变量名)。x_1 x_2 high printf 3ds i/je2 -e2 count int number $23 next_解:x_1、x_2、high、e2、count、int、number、next_6. 根据条件,写出下列各题的输出结果。 int i=234,j=567; 函数printf(%d%dn,i,j) 的输出结果是

8、234567 。 int i=234; float x=-513.624; 函数printf(i=%5d x=%7.4fn,i,x) 的输出结果是 i= 234 x=-513.6240 。 float alfa=60,pi=3.1415926535626; 函数printf(sin(%3.0f*%f/180)n,alfa,pi) 的输出结果是 sin( 60*3.141592/180) 。 char ch=$,float x=153.45; 函数printf(%c%-8.2fn,ch,x) 的输出结果是 $153.45 n 。 int d=27; 函数printf(%-5d,%-5o,%-5x

9、n,d,d,d)的输出结果是 27 ,34 ,1b。 float x1=13.24,x2=-78.32; 函数printf(x(%d)=%.2f x(%d)=%.2fn,1,x1,2,x2) 的输出结果是 x(1)=13.24 x(2)=-78.32 7. 根据下列条件写出变量i1(int类型)、c1(char类型)、f1(float类型)、d1(double类型)的当前值。 执行scanf(%d%c%f%lf,&i1,&c1,&f1,&d1)时输入52$9.17 3.1415926535 后。 i1为52,c1为$,f1为9.17,d1为3.1415926535 执行scanf(%d$%c%

10、f%lf,&i1,&c1,&f1,&d1)时输入52$9.17 3.1415926535 后。 i1为52,c1为9,f1为0.17,d1为3下列源程序输入x、y后,输出x的y次方。运行时无编译、连接错误,但输入不同格式的两组数据输出结果却不同,哪一组是对的?请说明原因。解答:第1组输入数据错误,因为格式串中有“,”所以键盘输入数据x、y之间也一定以逗号为间隔符。9. 写出下列程序运行时输入 3 4 5 的输出结果。 #include #include 输出结果:边长为3.00,4.00,5.00的三角形面积为6.00 void main() float a1,a2,

11、a3,s,d; scanf(%f%f%f,&a1,&a2,&a3); s=(a1+a2+a3)/2; s=sqrt(s*(s-a1)*(s-a2)*(s-a3); printf(边长为%.2f,%.2f,%.2f的三角形面积为:%-10.3fn,a1,a2,a3,s); 10. 编程题 编程,用getchar函数接收2个字符,用putchar函数输出这2个字符。解答: #include void main() char x; x=getchar(); putchar(x); x=getchar(); putchar(x); 编程,用scanf函数输入1个10进制整数、1个单精度浮点数、1个双精

12、度浮点数,并通过printf函数把输入的3个数分别输出。解答: #include void main() int k; float x; double d; scanf(%d%f%lf,&k,&x,&d); printf(%d,%f,%fn,k,x,d); 编程,输入1个整数,然后分别以8进制、10进制、16进制形式输出该数。解答: #include void main() int x; scanf(%d,&x); printf(%d,%o,%xn,x,x,x); 习 题 三1. 根据下列数学式,写出c的算术表达式。解答:-(a*a+pow(b,3)*pow(y,4) (sqrt(2)+100

13、)/(atan(x)+3.141593) (5+b)/(a+6)/(b+5)-c*d)2. 按照要求写出下列c的表达式。 数学式 (x+1)e2x所对应的c算术表达式。 将double类型变量x的整数部分与y的小数部分相加的算术表达式。 将非零实型变量x四舍五入到小数点后2位的算术表达式。 为变量s赋值:取变量x 的符号,取变量y的绝对值。 条件“-5x3”所对应的c逻辑表达式。 a、b是字符变量,已知a的值为大写字母、b的值为小写字母,写出判断a、b是否为同一字母的逻辑表达式 int类型变量a、b均为两位正整数,写出判断a的个位数等于b的十位数、且b的个位数等于a的十位数的逻辑表达式。 计算

14、变量a、b中较小值的条件表达式。 判断变量ch 是英文字母的表达式; 若字符变量ch的值为大写字母,则重新赋值为对应的小写字母。解答: (x+1)*exp(2*x) (int)x+y-(int)y (int)(x*100+fabs(x)/x*0.5)/100.0 s= fabs(y)*x/fabs(x) -5=x & x=3 b-a=a-a a%10=b/10 & b%10=a/10 ab? a:b isalpha(ch) ch=isupper(ch)?ch:ch+a-a3. 声明“int k=12;float x=9.5;double d=2.7;char zf=b;”,写出下列表达式值。

15、(int)x%k*d k+5.6xd zf=b zf=b解答: 24.3, 1, 1, 0, b, 14. 填空题 声明“float x=2.5,y=4.7; int a=7;”,表达式x+a%3*(int)(x+y)%2/4值为 2.5 。 设整型变量a、b值分别为10与20,计算c=(a%2=0)?a:b后,c的值为 10 。 设整型变量d的值为7,表达式“3d5”的值为 1 (3d为1、1=a & ch=z )ch=ch-32; 下列程序的输出结果是 (0.00,0.5) 。 #include void main( ) int y; double d=3.4, x; x=(y=d/2.0

16、)/2; printf( (%0.2f, %d) , x, y); 判断a、b是否绝对值相等而符号相反的逻辑表达式为 a=-b 。 判断变量a、b中必有且只有一个为0的逻辑表达式为 a*b=0 & a+b!=0 。 c初值为3,计算赋值表达式“a=5+(c+=6)”后表达式值、a、c的值依次为 14、14、9 。 求解赋值表达式“a=(b=10)%(c=6)”后,表达式值、a、b、c的值依次为 4、4、10、6。 求解逗号表达式“x=a=3,6*a”后,表达式值、x、a的值依次为 18、18、3 。 若a=13、b=25、c=-17,表达式“(y=(ab)?a:b)=a&s=z)?s-32:s

17、;”后字符变量s的值为 d 。5. 写出下列程序的输出结果。程序 #include void main() unsigned k,n; scanf(%u,&n); k=n%10*10+n/10; printf(n=%d k=%dn,n,k); 运行时输入数据为:69 72 输出结果为: n=69 k=96 程序 #include void main() int x=40,y=4,z=4; x=y=z; printf(%d %d %dn,x,y,z); x=x=(y=z); printf(%d %d %dn,x,y,z); 输出结果为: 1 4 4 0 4 4 程序 #include void

18、main() int x,y,z; x=y=2; z=3; y=x+-1; printf(%dt%dt%dt,x,y,z); y=-z+1; printf(%dt%dt%dn,x,y,z); x=y=z=0; +x&+y|+z; printf(%dt%dt%dt,x,y,z); -x&+y&+z; printf(%dt%dt%dn,x,y,z); 输出结果为: 3 1 3 3 3 2 1 1 0 0 1 0 6. 编程,输入长方形的长和宽,求长方形的面积和周长并输出。解答: #include void main() float a,b,x,y; scanf(%f%f,&a,&b); x=a*b

19、; y=2*(a+b); printf(面积=%.4f 周长=%.4fn,x,y); 7. 编程,输入3个字符后,按各字符ascii码从小到大的顺序输出这些字符。解答: #include void main() char a,b,c,x,y,z; scanf(%c%c%c,&a,&b,&c); x=(x=ab?a:b)b?a:b)c?z:c; y=a+b+c-x-z; printf(%c %c %cn,x,y,z); 8. 编程,输入3个整数,要求按绝对值从小到大输出它们的值。解答: #include #include /也可以用题7的做法 void main() int x,y,z,a; s

20、canf(%d%d%d,&x,&y,&z); if(fabs(x)fabs(y) a=x;x=y;y=a; if(fabs(x)fabs(z) a=x;x=z;z=a; if(fabs(y)fabs(z) a=y;y=z;z=a; printf(%dt%dt%dn,x,y,z); 9. 编程,输入3个数,计算这三个数的平均值,并求出与平均值最接近的值。解答: #include #include void main() float a,b,c,v,x; scanf(%f%f%f,&a,&b,&c); v=(a+b+c)/3; x=a; if(fabs(b-v)fabs(x-v) x=b; if(

21、fabs(c-v)fabs(x-v) x=c; printf(%fn,x); 10. 编程,输入1个3位正整数,输出其个位、十位、百位反序的数(如123反序数为321)。解答: #include void main() int n,m; scanf(%d,&n); m=n%10*100+n%100/10*10+n/100; printf(%dt%dn,n,m); 习 题 四1. 填空题 求1至100的和,写作 for(s=0,i=1; i=100 ;+i) s+=i; 执行程序段“y=1;x=5; while(x-); y+;”后,y的值为 2 。 顺序输出26个大写英文字母的循环结构,写作

22、for( ch=a;ch=z;ch+ ) putchar(ch); 输入若干个以问号结束的字符,同时输出这串字符(不包括问号),写作 while( (ch=getchar() !=?) putchar(ch); 循环程序段“k=5; for(;k0;k-);”执行后,k的值为 5 。2. 改写下列程序段,去掉continue语句,使结构更为合理。 while(a) 解答: while(a) if(!b) c; if(b) continue; c; do 解答: while(a) b; c; if(!a) continue; else b; c; while(a);3. 写出下列程序的输出结果程

23、序 #include void main() char x; int n=0,k=0; while(x=getchar()!=.) switch(x) case t: k+; break; case h: if(k=1) k+; break; case e: if(k=2) k+; break; default: k=0; if(k=3) n+; printf(%dn,n); 运行时输入:a the asdftheth e there. 输出结果: 3 程序 #include 输出结果: a #include bbb void main() ccccc char a,b,x; int i; d

24、dddddd while(!isupper(x=getchar(); eeeeeeeee for(a=a;a=x;a+) for(b=a;ba+x-a;b+) putchar( ); for(i=1;i=2*(a-a)+1;i+) putchar(a); putchar(n) 运行时输入:35dffe 4. 程序填空题,根据下列各题题意,将程序补充完整。 下列程序在输入m后求n使 n!m(n+1)!(例如输入726,应输出n=6) #include void main() int m,n,jc=1 ; scanf( %d,&m ); for(n=2;jc=m;n+) jc=jc*n; prin

25、tf(n=%dn, n-2 ); 下列程序输出6至10000之间的亲密数对。【说明】若a、b是亲密数对,则a的因子和等于b、b的因子和等于a且a不等于b。 #include void main() int a,b,c,i; for(a=6;a=10000;a+) b=1; for(i=2;i=a/2;i+) if( a%i=0 ) b+=i; c=1 ; for(i=2;i=b/2;i+) if(b%i=0) c+=i; if( c=a &a!=b) printf(%d %dn,a,b); 5根据下列各小题题意编程。 编程,输入x后按下式计算y值并输出。解答: #include #includ

26、e void main() float x,y; scanf(%f,&x); if(x=0 & x=1) y=x+sin(x); else y=x+sin(x); printf(%fn,y); 输入一个百分制的成绩t后,按下式输出它的等级,要求分别写作if结构和switch结构。等级为:90100为a,8089为b,7079为c,6069为d,059为e。解答: #include void main() int t; char x; scanf(%d,&t); if(t=90) x=a; switch(int)t/10) else if(t=80) x=b; case 9: case 10:

27、x=a; break; else if(t=70) x=c; case 8: x=b; break; else if(t=60) x=d; case 7: x=c; break; else x=e; case 6: x=d; break; printf(%cn,x); default: x=e; break; 输入10个学生的成绩,输出最低分数和最高分数。解答: #include void main() int x,max=0,min=101,i; for(i=1;imax) max=x; if(xmin) min=x; printf(%fn,y); 按公式 1+1/1!+1/2!+1/3!+

28、.+1/n!+. 计算e的值,要求误差小于给定的。解答: #include void main() float s=2,eps,t=1; int i=2; scanf(%f,&eps); while(t=eps) t/=i+; s+=t; printf(%fn,s); 统计输入的若干个数中负数、零及正数的个数(输入z控制循环结束)。解答: #include void main() float x; int zs=0,lin=0,fs=0; while(scanf(%f,&x)!=eof) if(x0) zs+; else if(x0) fs+; else lin+; printf(正数%d个,

29、零%d个,负数%d个n,zs,lin,fs); 输入k,利用下列迭代公式计算k1/3的近似值,要求计算结果具14位有效位数。解答: #include #include void main() int k; double x,x0; scanf(%d,&k); x=1; while(1) x0=x; x=x0+(k/(x0*x0)-x0)/3; if(fabs(x-x0)1e-14) printf(k=%d,x=%.14fn,k,x) ; break ; 编程,输入n后,计算下列表达式的值。解答: #include #include void main() int i,n; float y=0;

30、 scanf(%d,&n) ; for(i=n;i=1;i-) y=sqrt(i+y); printf(%fn, y) ; 编程,输入x、n后,计算下列表达式的值。解答: #include void main() float x,y,a; int i,n; scanf(%f%d,&x,&n); y=0; for(i=0; i=n; i+) scanf(%f,&a); y=y*x+a; printf(y=%.6fn,y); 当x为-2、-1.5、.、1.5、2时,求f(x)=x2-3.14x-6所取最大值、最小值。解答: #include void main() float x,y,max,mi

31、n; x=-2; max=min=x*x-3.14159*x-6; for(x=-1.5; xmax) max=y; else if(ymin) min=y; printf(max=%f,min=%fn,max,min); 编程,输入两个正整数x和y,求它们的最大公约数和最小公倍数。解答: #include void main() int x,y,a; scanf(%d%d,&x,&y); a=x; while(a%y!=0) a+=x; printf(最小公倍数%d,最大公约数%dn,a,x*y/a); 编程,输出15000之间的同构数(就是出现在其平方数右边的那些数,如 5、6、25均为同

32、构数)。解答: #include #include void main() int k,kk,n; for(k=1;k=5000;k+) n=log10(k)+1; if(k*k-k)%(int)pow(10,n)=0) printf(%d,%dn,k,k*k); 参照例25编程,输出下列形式的九九乘法表。解答: #include void main() int i,j; printf( ); for(i=1;i10;i+) printf(%d) ,i); putchar(n); for(i=1;i10;i+) printf(%d),i); for(j=1;j10;j+) printf(%4d

33、,i*j); putchar(n); 当n取值在-3940范围内时,判断表达式 n2+n+41 的值是否都是素数。解答: #include #include void main() int i,j,y; for(i=-39;i=40;i+) y=i*i+i+41; for(j=3;j=sqrt(y);j+=2) if(y%j=0) break; if(j=sqrt(y) printf(结论不成立!n); else printf(%dt%dn,i,y); 参照例24题编程,用梯形公式求下列定积分。解答: #include #include void main() float a,b,h,s; i

34、nt i,n; scanf(%f%f%f,&a,&b,&n); h=(b-a)/n; x=a; s=0.5*(sqrt(1+a*a*a)+sqrt(1+b*b*b); for(i=1;in;i+) x=x+h; s+=sqrt(1+x*x*x); printf(%.10fn,s*h) ; 用区间对分法求 x2+xsinx-5=0 在区间0,5内的一个实根(设=10-5)。【说明】在a,b区间连续的函数f(x),若满足条件f(a)f(b)0,则必有ab使得f()=0。求f(x)=0在a,b内一个实根的区间对分法基本步骤如下: c(a+b)/2; |f(c)|或 |b-a|则输出c作为近似解并终止

35、程序执行; 如果f(a)f(c)0则 bc 否则 ac,再次执行第步。解答: #include #include void main() float a,b,c; a=0; b=5; do c=(a+b)/2; if(a*a+a*sin(a)-5)*(c*c+c*sin(c)-5)=1e-5 & fabs(b-a)=1e-5); printf(%fn,c); 习 题 五1判断下列各个叙述的正确与否。 函数的类型标识符缺省类型为void【】 函数中不可以没有return语句【】 传值调用的形参只有在被调用时才被创建(分配存储单元)【】 传值调用时,实参不限于变量名,而可以是表达式【】 被定义为前

36、向调用的函数,不必再声明其函数原型【】 函数f可以用f(f(x)形式调用,f是递归函数【】2写出下列程序的输出结果。程序 #include void prn(int a,int b,int c,int max,int min) max=(max=ab?a:b)c?max:c; min=(min=ab?a:b)c?min:c; printf(max=%d min=%dn,max,min); void main() int x,y; x=y=0; prn(19,23,-4,x,y); printf(max=%d min=%dn,x,y); 输出结果为 max=23 min=-4 max=0 min

37、=0 程序 #include int f(int m,int n) if(m%n=0) return n; else return f(n,m%n); void main() printf(%dn,f(840,48); 输出结果为 24 程序 #include int f1(int,int),f11(int); void f2(int); void main() int i,j; for(i=0;i5;i+) f2(5-i)*3); for(j=0;j=i;j+) printf(%3d,f1(i,j); putchar(n); int f1(int m,int n) return f11(m)

38、/f11(n)/f11(m-n); int f11(int k) if(k=1) return 1; return k*f11(k-1); void f2(int n) for(int i=1;i=n;i+) putchar( ); 输出结果为 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 3根据下列各题题意填空,将程序补充完整。 输入若干个正整数,判断每个数从高位到低位各位数字是否按值从小到大排列。 #include int fun1(int); void main() int n; while(scanf(%d,&n),n0) if(fun1(n) printf(%d中各位数

39、字按从小到大排列n,n); int fun1( int m ) int k; k=m%10; while(m) if( m/10%10k) return 0; else m=m/10 ; k=m%10; return 1; 函数f10_2可以显示形参变量所对应的二进制形式。下列程序的两行显示结果分别为“1011”、“100011”。 #include void f10_2(int n) if( n=0 ) return;else f10_2( n/2 ); printf(%d,n%2); void main() f10_2(11);putchar(n); f10_2(35);putchar(n); 4根据下列各小题题意编程。 编制函数,返回三个变量中的最大值。解答: float f(float a,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论