C语言程序设计课后各章节习题答案.docx_第1页
C语言程序设计课后各章节习题答案.docx_第2页
C语言程序设计课后各章节习题答案.docx_第3页
C语言程序设计课后各章节习题答案.docx_第4页
C语言程序设计课后各章节习题答案.docx_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

第三章8 输入一个非负数,计算以这个数为半径的圆周长和面积。答 #define PI 3.1415926main() float r,l,area; scanf(%f,&r); l=2*PI*r; area=PI*r*r; printf(l=%ftarea=%fn,l,area);9 输入任意一个3位数,将其各位数字反序输出(例如输入123,输出321)。答 main() int x,y; printf(Input number:); scanf(%d,&x); y=100*(x%10)+10*(x/10%10)+x/100; printf(%d-%dn,x,y);10 输入任意大小的3个整数,判断其中是否有两个奇数一个偶数。若是则输出YES,不是则输 出NOT(要求用条件表达式进行判断,不使用if语句)。答 main() int x,y,z,oddcount=0; printf(Input x,y,z:); scanf(%d,%d,%d,&x,&y,&z); x%2=1?oddcount+:0; y%2=1?oddcount+:0; z%2=1?oddcount+:0; oddcount=2?printf(YES):printf(NOT);11 求前驱字符和后继字符。输入一个字符,找出它的前驱字符和后继字符,并按ASCII码值,按从大到小的顺序输出这3个字符及其对应的ASCII码值。答 main() char c; printf(Input character:); scanf(%c,&c); printf(%c-%dn,c-1,c-1); printf(%c-%dn,c,c); printf(%c-%dn,c+1,c+1); getch(); 12 输入三角形的边长,求三角形面积(面积sqrt(s(s-a)(s-b)(s-c),s=(a+b+c)/2)。答 includemath.h main() float a,b,c,s,area; int ok=0; printf(Input a,b,c:); scanf(%f,%f,%f,&a,&b,&c); a+bc?ok+:0; a+cb?ok+:0; b+ca?ok+:0; ok=3?(s=(a+b+c)/2,area=sqrt(s*(s-a)*(s-b)*(s-c),printf(area=%f,area):printf(error); getch();第四章7 。输入两个字符,若这两个字符的序号(ASCII码)之差为偶数,则输出它们的后继字符,否则输出它们的前驱字符。答 main() char a,b; printf(Input two chatacter a,b:); scanf(%c,%c,&a,&b); if(a-b)/2=0) printf(%c,%c,a+1,b+1); else printf(%c,%c,a-1,b-1); getch();8.输入整数 a 和 b ,如果 a 能被 b 整除,就输出算式和商,否则输出算式、整数商和余数。答 main() int a,b; printf(Input two integer numbers a,b:); scanf(%d,%d,&a,&b); if(ab&a/b=0) printf(%d/%d=%d,a,b,a/b); else printf(%d/%d=%d.%d,a,b,a/b,a%b); getch();9 输入某个点 A 的平面坐标 (x,y),判断(输出)A点是在圆内、圆外还是在圆周上,其中圆心坐标为 (2,2),半径为 1。答 includemath.hmain() float x,y,d; printf(Input x,y:); scanf(%f,%f,&x,&y); d=sqrt(x-2)*(x-2)+(y-2)*(y-2); if(d1)printf(outside); else if(d0)。if(a30) m=1;else if(a40) m=2;else if(a50) m=3;else if(a60) m=4;else m=5答 switch(a/10) case 0: case 1: case 2: case 3:m=1;break; case 4:m=2;break; case 5:m=3;break; case 6:m=4;break; default:m=5;12 有一函数 x-1 -5x0y= x x=0 x+1 0x-5&x0&x-5&x0&x8)y=x+1; printf(y=%dn,y); getch(); 使用多分析语句程序如下:main() int x,y; printf(Input x:); scanf(%d,&x); switch(x) case -4: case -3: case -2: case -1: y=x-1; break; case 0: y=0; break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: y=x+1; break; printf(y=%dn,y); getch();第五章习题答案1输入 n 个整数,求这 n 个数之中的偶数平均值,并输出。答 main() int n,i,x,sum=0,count=0; printf(Input n:); scanf(%d,&n); for(i=0;i=a&ch=A&ch=0&ch=a&ch=A&ch=Z)printf(%c,ch+32); getch();5 设某县2000年工业总产值为200亿元,如果该县预计平均年工业总产值增长率为4.5%,那么多少年后该县年工业总产值将超500亿元。答 main() float x=200; int n=0; do x*=(1+0.045); n+; while(x500); printf(n=%d,n); getch();6 输出1999中能被3整除,而且至少有一位数字是5的所有数字。答 main() int x,y,flag; for(x=1;x1000;x+) flag=0; y=x; if(y%3=0) while(y/10!=0)/*余数为0说明该数能够被3整除*/ if(y%10=5)flag=1;/*依个位、十位、百位顺序判断是否余数为5*/ y/=10; if(flag=1)printf(%dt,x); getch();7 求爱因斯坦数学题。有一条长阶,若每步跨2阶,则最后剩1阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶每步跨6阶,则最后剩5阶每步跨7阶,最后正好1阶。答 main() int x=0,flag=0; while(1) x+; if(x%2=1) if(x%3=2) if(x%5=4) if(x%6=5) if(x%7=0) printf(%d,x); break; getch();8 输入一个3位数,判断是否是一个“水仙花数”。水仙花数是指3位数的各位数字的立方和等于这个3位数本身。例如,1531*1*1+5*5*5+3*3*3答 main() int x,a,b,c; printf(Input number:); scanf(%d,&x); a=x/100;/*变量a中记录x的百倍数字*/ b=x/10%10;/*变量b中记录x的十位数字*/ c=x%10; /*变量c中记录x的个位数字*/ if(a*a*a+b*b*b+c*c*c=x) printf(%d=%d*%d*%d+%d*%d*%d+%d*%d*%dn,x,a,a,a,b,b,b,c,c,c); printf(YES); else printf(NOT); getch();9 计算斐波那契分数序列前n项之和(n是某个常数,波那契分数序列为2/1,3/2,5/3,8/5,.)。答 main() int i,n=10; float f1=1,f2=2,f,sum=0; for(i=0;in;i+) sum+=f2/f1; f=f1+f2; f1=f2; f2=f; printf(total=%dnsum=%f,n,sum); getch();10 输入一个正整数,各输出n行的正(倒)三角形宝塔图案。答 main() int n,i,j; printf(Input n:); scanf(%d,&n); for(i=0;in;i+) for(j=i+1;jn;j+)printf( ); for(j=0;j2*i+1;j+)printf(*); printf(n); for(i=0;in-1;i+) for(j=0;ji+1;j+)printf( ); for(j=2*i-1;jn+1;j+)printf(*); printf(n); getch();11 输出九九乘法表。答 main() int i,j; for(i=1;i=9;i+) for(j=1;j=0&ch=9) x=10*x+ch-0; y=10*y; if(x!=0&10*xy)f=0; continue; else if(x!=0) if(f=1) x=-x; nsum+=x; ncnt+; else psum+=x; pcnt+; printf(%dn,x); f=0;x=0;y=1; continue; if(x!=0) if(f=1) x=-x; nsum+=x; ncnt+; else psum+=x; pcnt+; printf(%dn,x); printf(n-n); printf(Plus:n); printf(Count=%dn,pcnt); printf(Average=%fn,psum/pcnt); printf(-n); printf(Negative:n); printf(Count=%dn,pcnt); printf(Average=%fn,nsum/ncnt); getch();13 一个整数等于该数所有因子之和,则称该数是一个完数。例如,6和28都是完数。因为61+2+3,281+2+4+7+14。输出3位数中所有的完数。答 main() int k1, k2, k3, k4, k5, k6, k7, k8, k9, k10; int i,a,n,s; for (a = 100; a = 999; a+) n = 0; s = a; for (i = 1; i 1) printf(%d,%d, k1, k2); if (n 2) printf(,%d, k3); if (n 3) printf(,%d, k4); if (n 4) printf(,%d, k5); if (n 5) printf(,%d, k6); if (n 6) printf(,%d, k7); if (n 7) printf(,%d, k8); if (n 8) printf(,%d, k9); if (n 9) printf(,%d, k10); printf(n); getch();14 编写程序按下列公式计算e的值(精度为1e-6)。e=1+1/1!+1/2!+1/3!.+1/n!答 main() int i; double e=0,t=1; for(i=1;t0.000001;i+)e+=t;t/=i; printf(e=%fn,e); getch();15 用二分法求方程2x3-4x2+3x=0在(-10,10)附近的根(二分法:先找到a、b,使f(a)、f(b)异号,说明在区间(a,b)内一定有零点,然后求f(a+b)/2,现在假设f(a)0,ab,如果f(a+b)2=0,该点就是零点,如果f(a+b)/20,则在区间(a+b)/2,b)内有零点,按上述方法再求该区间中点的函数值,通过每次把f(x)的零点所有小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,该值即是方程的根)。答 i ncludemath.hmain() double x,fx,fa,fb,a=-10,b=10,z=0.0001; fa=2*a*a*a-4*a*a+3*a; fb=2*b*b*b-4*b*b+3*b; if(fa*fb0) do x=(a+b)/2; fx=2*x*x*x-4*x*x+3*x; if(fxz); printf(The root is:%lfn,x); getch(); 第六章习题答案1 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。答 main() unsigned int m,n,p,q; for(;) printf(m,n=);scanf(%d,%d,&m,&n); if(m1|nn)i=m;m=n;n=i; for(i=m;i0;i-)if(m%i=0&n%i=0)return(i);int funq(int m,int n) int i; if(mn)i=m;m=n;n=i; for(i=m;i47&c=A&c=a&c=A&ch=a&ch47&ch58)return 2; return 3;3 按照第5章第8题的要求编写判断水仙花数的函数,从主函数输入正整数n,在主函数中调用判断水仙花数的函数,找出n以内所有的水仙花数。【输入一个3位数,判断是否是一个“水仙花数”。水仙花数是指3位数的各位数字的立方和等于这个3位数本身。例如,1531*1*1+5*5*5+3*3*3】答 main() int x,i,f; printf(Input number:); scanf(%d,&x); for(i=0;i=x;i+) f=0; f=fun(i); if(f=1)printf(%dt,i); getch();int fun(int x) int a,b,c; a=x/100; b=x/10%10; c=x%10; if(a*a*a+b*b*b+c*c*c=x)return 1; else return 0;4 定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。答 #define f(a,b) (a=a+b,b=a-b,a=a-b)main() int x,y; printf(Input x,y:); scanf(%d,%d,&x,&y); printf(%d,%d,x,y); f(x,y); printf(%d,%dn,x,y); getch();5 已知二阶Fibonacci数列: 0 若n=0Fib(n)= 1 若n=1 Fib(n-1)+Fib(n-2) 其它情况定义递归函数求Fib(n)。答 main() int i,n; printf(Input n:); scanf(%d,&n); for(i=0;i=n;i+) printf(%dt,fib(i); getch();int fib(int n) if(n=0)return 0; else if(n=1)return 1; else return (fib(n-1)+fib(n-2);6 定义函数求F=(n+m)!+n!,m、n均为任意正整数。要求使用递归调用。答 long int f(int x);main() int i,m,n; long int sum; printf(Input m,n:); scanf(%d,%d,&m,&n); sum=f(n+m)+f(n); printf(%ld,sum); getch();long int f(int x) int i,j; if(x=0|x=1)return 1; else return(x*f(x-1);7 定义一个函数完成第5章第11题的功能。【输出九九乘法表。】答 main() fun(); getch();fun() int i,j; for(i=1;i=9;i+) for(j=1;j=i;j+) printf(%d*%d=%-3d,j,i,i*j); printf(n); 8 如果有两个数,每一个数的所有约数(除了它本身以外)的和正好等于对方,则称这两个数为互满数,求出30000以内所有的互满数,并显示输出,求一个数它的所有约数(除了它本身以处)的和,用函数实现。答 main() int x,y; for(x=1;x30000;x+) for(y=1;yx;y+) if(facsum(x)=y&facsum(y)=x)printf(%d,%d)t,x,y); getch();facsum(int n) int i,sum=0; for(i=1;in;i+) if(n%i=0)sum+=i; return sum;第七章5 编写程序,输入一组整数,将它们排序后由小到大输出。【提示】假设为具有 10 个元素的正整数数组;外层循环从数组的第一个元素开始选取;内层循环从外层循环选定的元素下一个元素开始选取,依次与外层循环选定的元素进行比较,将小者放入外层循环选定的元素中。答 #define N 10main() int a,i,j,t; for(i=0;iN;i+) printf(nInput a%d:,i); scanf(%d,&a); for(i=0;iN;i+) for(j=i+1;ja) t=a;a=a;a=t; printf(%dt,a); 6 从键盘输入一个44整数矩阵,以主对角线()为对称轴,将左下角元素中较大元素代替右上角对应元素,将右上角(含对角线元素)输出。【提示】a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 a30 a31 a32 a33答 #define M 4main() int a; int i,j,k,t; printf(Input integer number:n); for(i=0;iM;i+) /*用两层循环为二维数组元素赋值*/ for(j=0;jM;j+) printf(a%d%d=,i,j); scanf(%d,&a); for(i=0;iM;i+) /*用两层循环将数组以矩阵形式在屏幕输出*/ for(j=0;jM;j+) printf(%dt,a); printf(n); printf(-n); /*分隔线*/ for(i=0;iM;i+) /*选定矩阵待处理的当前行*/ for(j=0;ja) t=a;a=a;a=t; for(j=i;jM;j+) /*将函对角线的右上角元素输出*/ /*本循环为将第 i 行第 i 列开始的右侧元素输出*/ printf(%dt,a); printf(n); for(k=0;ki+1;k+)printf(t); getch();【运行结果】a00=1a01=2a02=3a03=4a10=5a11=6a12=7a13=8a20=9a21=10a22=11a23=12a30=13a31=14a32=15a33=161 2 3 45 6 7 89 10 11 1213 14 15 16-1 5 9 13 6 10 14 11 15 167 通过键盘给 34 的二维数组输入数据,然后分别按行和按列输出数组元素。答 #define M 3#define N 4main() int a,i,j; printf(Input integer number:n); for(i=0;iM;i+) for(j=0;jN;j+) printf(a%d%d=,i,j); scanf(%d,&a); printf(nOut by row:n); for(i=0;iM;i+) for(j=0;jN;j+) printf(%d ,a); printf(nOut by collum:n); for(i=0;iN;i+) for(j=0;jM;j+) printf(%d ,a); getch();【运行结果】Input integer number:a00=1a01=2a02=3a03=4a10=5a11=6a12=7a13=8a20=9a21=10a22=11a23=12Out by row:1 2 3 4 5 6 7 8 9 10 11 12Out by collum:1 5 9 2 6 10 3 7 11 4 8 128 编写程序,将两个字符串连接起来,不要使用 strcat 函数。答 i ncludestring.hmain

温馨提示

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

评论

0/150

提交评论