《C语言程序设计第四版第七章答案-谭浩强(共10页).docx》由会员分享,可在线阅读,更多相关《C语言程序设计第四版第七章答案-谭浩强(共10页).docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上第七章函数 7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 maxyueshu(m,n) int m,n; int i=1,t; for(;i=m&i=n) j=m; else j=n; for(;!(j%m=0&j%n=0);j+); return j; main() int a,b,max,min; printf(enter two number is: ); scanf(%d,%d,&a,&b); max=maxyueshu(a,b); min=minbeishu(a,b); printf(max
2、=%d,min=%dn,max,min); 7.2求方程 的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。 #includemath.h float yishigen(m,n,k) float m,n,k; float x1,x2; x1=(-n+sqrt(k)/(2*m); x2=(-n-sqrt(k)/(2*m); printf(two shigen is x1=%.3f and x2=%.3fn,x1,x2); float denggen(m,n) float m,n; float x; x=-n/(2*m); printf(d
3、enggen is x=%.3fn,x); float xugen(m,n,k) float m,n,k; float x,y; x=-n/(2*m); y=sqrt(-k)/(2*m); printf(two xugen is x1=%.3f+%.3fi and x2=%.3f-%.3fin,x,y,x,y); main() float a,b,c,q; printf(input a b c is ); scanf(%f,%f,%f,&a,&b,&c); printf(n); q=b*b-4*a*c; if(q0) yishigen(a,b,q); else if(q=0) denggen(
4、a,b); else xugen(a,b,q); 7.3写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 psushu(m) int m; int i=2,t; for(;i=m;i+) if(m%i=0&im) break; if(m-i=0) t=1; else t=0; return m; main() int a,s; printf(enter sushu is n); scanf(%d,&a); s=psushu(a); if(s=1) printf(a is sushun); else printf(s is not sushun); 7.4写一个函数,使给定的一
5、个二维数组()转置,即行列互换。 int zhuangzhi(b) int b33; int i,j,t; for(i=0;i=i&j3-i;j+) t=bij;bij=bji;bji=t; main() int a33;int i,j; for(i=0;i3;i+) for(j=0;j3;j+) scanf(%d,&aij); for(i=0;i3;i+) for(j=0;j3;j+) printf( %d,aij); printf(n); zhuangzhi(a); for(i=0;i3;i+) for(j=0;j-1;i+,j-) str1i=str2j; 7.6写一函数,将两个字符串连
6、接。 lianjie(a,b) char a100,b100; strcat(a,b); main() char str1100,str2100; gets(str1);gets(str2); lianjie(str1,str2); puts(str1); 8.7写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。 fuzhi(a,b) char a100,b100; int i,j=0; for(i=0;ai!=0;i+) if(ai=97|ai=101|ai=105|ai=111|ai=117|ai=65| ai=69|ai=73|ai=85) bj=ai;j+; main()
7、 char str1100,str2100; gets(str1); fuzhi(str1,str2); puts(str2); 7.8写一函数,输入一个四位数字,要求输出这四个数字字符,但每两个数字间空格。如输入1990,应输出1_9_9_0。 char f(b) char b4; int i=0; for(;i=65&str0i=97&str0i=48&str0i=57) b1+; else if(str0i=32) b2+; else b3+; main() char str1100;static int i,a4; gets(str1); tongji(str1,a); printf(
8、zimu Shuzi Kongge Qitan); for(i=0;i=97&str1i=65&str1i=t) strcpy(word0,word1); main() char str0100,longword15; gets(str0); cechang(str0,longword); puts(longword); 7.11写一函数用起泡法对输入的个字符按由小到大的顺序排列。 int paixu(x) int x; int i,j,t; for(j=1;j10;j+) for(i=0;ixi+1) t=xi+1;xi+1=xi;xi=t; main() int y10;int i; fo
9、r(i=0;i10;i+) scanf(%d,&yi); paixu(y); for(i=0;i10;i+) printf(%5d,yi); printf(n); 7.12用牛顿迭代法求根。方程为: ,系数a,b,c,d由主函数输入。求X在1附近的一个实根。求出后由主函数输出。 double qigen(s,t,u,v) int s,t,u,v; double x,y;x=1; doy=s*x*x*x+t*x*x+u*x+v; x=x-y/(3*s*x*x+2*t*x+u); while(y!=0); return x; main() int a,b,c,d;double x; scanf(%
10、d,%d,%d,%d,&a,&b,&c,&d); x=qigen(a,b,c,d); printf(x=%.3fn,x); 7.13用递归方法求n阶勒让德多项式的值递归公式为 float p(x0,n) int n;float x0; float y; if(n=0|n=1) if(n=1) y=x0;else y=1; else y=(2*n-1)*x0*p(x0,n-1)-(n-1)*p(x0,n-2)/n; return(y); main() float x,y0;int a,i; scanf(%f,%d,&x,&a); y0=p(x,a); printf(y0=%.3fn,y0); 7
11、.14输入10个学生5门课的成绩,分别用函数求:每个学生平均分;每门课的平均分;找出最高分所对应的学生和课程;求平均分方差:=SXi2/n-(SXi/n)2,为一学生的平均分 float x110,x25; float pp(),cc(),find(),xx(); main() char name1020,class520;float score105,o,k=0,max5;int a5,i,j; for(i=0;i10;i+) gets(namei); for(j=0;j5;j+) gets(classj); for(i=0;i10;i+) for(j=0;j5;j+) scanf(%f,&
12、scoreij); pp(score); cc(score); find(score,max,a); o=xx(k); for(i=0;i10;i+) puts(namei); printf(%.3fn,x1i); for(j=0;j5;j+) puts(classj);printf(%.3fn,x2j); for(j=0;j5;j+) printf(%.3f n,maxj); puts(nameaj); puts(classj); printf(o=%.3fn,o); float pp(f) float f105; float sum=0;int i,j; for(i=0,sum=0;i10
13、;i+) for(j=0;j5;j+) sum=sum+fij; x1i=sum/5; float cc(y) float y105; float sum=0;int i,j; for(j=0;j5;j+) for(i=0;i10;i+) sum=sum+yij; x1j=sum/10; float find(z,s,t) float z105,s5;int t5; int i,j; for(j=0,sj=z0j;j5;j+) for(i=0;i10;i+) if(sjzij) sj=zij;tj=i; float xx(q) float q; float f=0,e=0;int i; for
14、(i=0;i10;i+) e=x1i*x1i+e; f=f+x1i; q=e/10-(f/10)*(f/10); return(q); 7.15写几个函数:输个职工的姓名和职工号;按职工号由小到大顺序排序,姓名顺序也随之调整;要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。 #define N 10 find(a,b) int a,b; int i,j,s,t,cN2; for(i=0;iN;i+) ci1=ai;ci1=i; for(i=0;iN;i+) for(j=0;jci+10) t=ci0;ci0=ci+10;ci+10=t; s=ci1;c
15、i1=ci+11;ci+11=s; for(i=0;iN;i+) bi=ci1; return; lookfor(h,k) int h,k; int i,j; for(i=0;iN;i+) if(hi-k=0) j=i; return j; main() int numberN,xN,i,j,u,p;char nameN20; for(i=0;iN;i+) gets(namei); scanf(%d,&numberi); scanf(%d,&p); find(number,x); u=lookfor(number,p); for(i=0;i-1;i+) if if(48=shui=57) su
16、m=sum+(shui-48)*pow(16,(i-1); else if(65=shui=90) sum=sum+(shui-55)*pow(16,(i-1); else if(97=shui0.1;j+,b/=10); pf(a,j-1); for(i=0,k=j-1;i-1;i-,j+) xi=(int)(unsigned long)(m/pow(10,j)%10)+48; return; main() unsigned long a,b;int j,i; scanf(%ld,&a); for(j=0,b=a;b0.1;j+,b/=10); pf(a,j); puts(x);printf
17、(%dn,j); 或 #includemath.h int x10;unsigned long m; pf(n) int n; int y; if(n=0) y=m%10;x0=y; else y=(unsigned long)(m-pf(n-1)/pow(10,n)%10;xn=y; return(y); main() unsigned long a;int i,j,k;char c11; scanf(%ld,&m); for(j=0,a=m;a0.1;j+,a/=10); pf(j-1); for(i=0,k=j-1;ij;i+,k-) ci=xk+48;c10=0; puts(c); 7
18、.18给出年、月、日,计算该日是该年的第几天。 int find(x,y,z) int x,y,z; int i,t,s,days=0; if(x%4=0) t=1; else t=0; for(i=1;iy;i+) if(i=2) s=2-t; else s=0; days=days+30+i%2-s; days=days+z; return(days); main() int year,month,date,day; scanf(%d %d %d,&year,&month,&date); day=find(year,month,date); printf(THE DATE IS THE %dth DAYSn,day); 专心-专注-专业