C语言程序设计第四版第七章答案谭浩强.docx
- 文档编号:15802852
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:17
- 大小:18.55KB
C语言程序设计第四版第七章答案谭浩强.docx
《C语言程序设计第四版第七章答案谭浩强.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第四版第七章答案谭浩强.docx(17页珍藏版)》请在冰点文库上搜索。
C语言程序设计第四版第七章答案谭浩强
第七章 函数
7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
maxyueshu(m,n)
intm,n;
{inti=1,t;
for(;i<=m&&i<=n;i++)
{if(m%i==0&&n%i==0)
t=i;
}
return(t);
}
minbeishu(m,n)
intm,n;
{intj;
if(m>=n)j=m;
elsej=n;
for(;!
(j%m==0&&j%n==0);j++);
returnj;
}
main()
{inta,b,max,min;
printf("entertwonumberis:
");
scanf("%d,%d",&a,&b);
max=maxyueshu(a,b);
min=minbeishu(a,b);
printf("max=%d,min=%d\n",max,min);
}
7.2求方程的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。
从主函数输入a、b、c的值。
#include"math.h"
floatyishigen(m,n,k)
floatm,n,k;
{floatx1,x2;
x1=(-n+sqrt(k))/(2*m);
x2=(-n-sqrt(k))/(2*m);
printf("twoshigenisx1=%.3fandx2=%.3f\n",x1,x2);
}
floatdenggen(m,n)
floatm,n;
{floatx;
x=-n/(2*m);
printf("denggenisx=%.3f\n",x);
}
floatxugen(m,n,k)
floatm,n,k;
{floatx,y;
x=-n/(2*m);
y=sqrt(-k)/(2*m);
printf("twoxugenisx1=%.3f+%.3fiandx2=%.3f-%.3fi\n",x,y,x,y);
}
main()
{floata,b,c,q;
printf("inputabcis");
scanf("%f,%f,%f",&a,&b,&c);
printf("\n");
q=b*b-4*a*c;
if(q>0)yishigen(a,b,q);
elseif(q==0)denggen(a,b);
elsexugen(a,b,q);
}
7.3写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。
psushu(m)
intm;
{inti=2,t;
for(;i<=m;i++)
if(m%i==0&&i if(m-i==0)t=1; elset=0; returnm; } main() {inta,s; printf("entersushuis\n"); scanf("%d",&a); s=psushu(a); if(s==1)printf("aissushu\n"); elseprintf("sisnotsushu\n"); } 7.4写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 intzhuangzhi(b) intb[3][3]; {inti,j,t; for(i=0;i<3;i++) for(j=0;j>=i&&j<3-i;j++) {t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;} } main() {inta[3][3];inti,j; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%d",a[i][j]); printf("\n");} zhuangzhi(a); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%d",a[i][j]); printf("\n");} } 7.5写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。 main() {charstr0[100]; gets(str0); fanxu(str0); puts(str0); } fanxu(str1) charstr1[100]; {inti,t,j; charstr2[100];strcpy(str2,str1); t=strlen(str1); for(i=0,j=t-1;j>-1;i++,j--) str1[i]=str2[j]; } 7.6写一函数,将两个字符串连接。 lianjie(a,b) chara[100],b[100]; {strcat(a,b); } main() {charstr1[100],str2[100]; gets(str1);gets(str2); lianjie(str1,str2); puts(str1); } 8.7写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。 fuzhi(a,b) chara[100],b[100]; {inti,j=0; for(i=0;a[i]! =’\0’;i++) if(a[i]==97||a[i]==101||a[i]==105||a[i]==111||a[i]==117||a[i]==65|| a[i]==69||a[i]==73||a[i]==85){b[j]=a[i];j++;} } main() {charstr1[100],str2[100]; gets(str1); fuzhi(str1,str2); puts(str2); } 7.8写一函数,输入一个四位数字,要求输出这四个数字字符,但每两个数字间空格。 如输入1990,应输出"1_9_9_0"。 charf(b) charb[4]; {inti=0; for(;i<4;i++) {printf(""); printf("%c",b[i]);} printf("\n"); } main() {inta,u,v,w,t;charc[4]; scanf("%4d",&a); u=a*0.001;v=0.01*(a-1000*u);w=(a-1000*u-100*v)*0.1;t=a-1000*u-100*v-10*w; c[0]=u+48; c[1]=v+48; c[2]=w+48; c[3]=t+48; f(c); } 7.9编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 chartongji(str0,b) charstr0[100]; intb[4]; {inti; for(i=0;str0[i]! =’\0’;i++) {if(str0[i]>=65&&str0[i]<=90||str0[i]>=97&&str0[i]<=122)b[0]++; elseif(str0[i]>=48&&str0[i]<=57)b[1]++; elseif(str0[i]==32)b[2]++; elseb[3]++;} } main() {charstr1[100];staticinti,a[4]; gets(str1); tongji(str1,a); printf("zimuShuziKonggeQita\n"); for(i=0;i<4;i++) printf("%-8d",a[i]);printf("\n"); } 7.10写一函数,输入一行字符,将此字符串中最长的单词输出。 cechang(str1,word0) charstr1[100],word0[15]; {inti=0,j=0,t=0; staticcharword1[15]; for(;str1[i]! =’\0’;i++) {if(! (str1[i]>=97&&str1[i]<=122||str1[i]>=65&&str1[i]<=90)) {t=j;j=0;continue;} word1[j]=str1[i];j++; if(j>=t)strcpy(word0,word1);} } main() {charstr0[100],longword[15]; gets(str0); cechang(str0,longword); puts(longword); } 7.11写一函数用起泡法对输入的个字符按由小到大的顺序排列。 intpaixu(x) intx[]; {inti,j,t; for(j=1;j<10;j++) for(i=0;i<=9-j;i++) if(x[i]>x[i+1]){t=x[i+1];x[i+1]=x[i];x[i]=t;} } main() {inty[10];inti; for(i=0;i<10;i++) scanf("%d",&y[i]); paixu(y); for(i=0;i<10;i++) printf("%5d",y[i]); printf("\n"); } 7.12用牛顿迭代法求根。 方程为: ,系数a,b,c,d由主函数输入。 求X在1附近的一个实根。 求出后由主函数输出。 doubleqigen(s,t,u,v) ints,t,u,v; {doublex,y;x=1; do{y=s*x*x*x+t*x*x+u*x+v; x=x-y/(3*s*x*x+2*t*x+u);} while(y! =0); returnx; } main() {inta,b,c,d;doublex; scanf("%d,%d,%d,%d",&a,&b,&c,&d); x=qigen(a,b,c,d); printf("x=%.3f\n",x); } 7.13用递归方法求n阶勒让德多项式的值递归公式为 floatp(x0,n) intn;floatx0; {floaty; if(n==0||n==1)if(n==1)y=x0;elsey=1; elsey=((2*n-1)*x0*p(x0,n-1)-(n-1)*p(x0,n-2))/n; return(y); } main() {floatx,y0;inta,i; scanf("%f,%d",&x,&a); y0=p(x,a); printf("y0=%.3f\n",y0); } 7.14输入10个学生5门课的成绩,分别用函数求: ①每个学生平均分;②每门课的平均分;③找出最高分所对应的学生和课程;④求平均分方差: δ=[SXi^2]/n-(SXi/n)^2,为一学生的平均分 floatx1[10],x2[5]; floatpp(),cc(),find(),xx(); main() {charname[10][20],class[5][20];floatscore[10][5],o,k=0,max[5];inta[5],i,j; for(i=0;i<10;i++) gets(name[i]); for(j=0;j<5;j++)gets(class[j]); for(i=0;i<10;i++) for(j=0;j<5;j++) scanf("%f",&score[i][j]); pp(score); cc(score); find(score,max,a); o=xx(k); for(i=0;i<10;i++) {puts(name[i]); printf("%.3f\n",x1[i]);} for(j=0;j<5;j++) {puts(class[j]);printf("%.3f\n",x2[j]);} for(j=0;j<5;j++){printf("%.3f\n",max[j]); puts(name[a[j]]); puts(class[j]);} printf("o=%.3f\n",o); } floatpp(f) floatf[10][5]; {floatsum=0;inti,j; for(i=0,sum=0;i<10;i++) {for(j=0;j<5;j++) sum=sum+f[i][j]; x1[i]=sum/5;} } floatcc(y) floaty[10][5]; {floatsum=0;inti,j; for(j=0;j<5;j++) {for(i=0;i<10;i++) sum=sum+y[i][j]; x1[j]=sum/10;} } floatfind(z,s,t) floatz[10][5],s[5];intt[5]; {inti,j; for(j=0,s[j]=z[0][j];j<5;j++) for(i=0;i<10;i++) if(s[j] } floatxx(q) floatq; {floatf=0,e=0;inti; for(i=0;i<10;i++) {e=x1[i]*x1[i]+e; f=f+x1[i];} q=e/10-(f/10)*(f/10); return(q); } 7.15写几个函数: ①输个职工的姓名和职工号;②按职工号由小到大顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。 #defineN10 find(a,b) inta[],b[]; {inti,j,s,t,c[N][2]; for(i=0;i {c[i][1]=a[i];c[i][1]=i;} for(i=0;i for(j=0;j if(c[i][0]>c[i+1][0]) {t=c[i][0];c[i][0]=c[i+1][0];c[i+1][0]=t; s=c[i][1];c[i][1]=c[i+1][1];c[i+1][1]=s;} for(i=0;i b[i]=c[i][1]; return; } lookfor(h,k) inth[],k; {inti,j; for(i=0;i if(h[i]-k==0)j=i; returnj; } main() {intnumber[N],x[N],i,j,u,p;charname[N][20]; for(i=0;i {gets(name[i]); scanf("%d",&number[i]);} scanf("%d",&p); find(number,x); u=lookfor(number,p); for(i=0;i {printf("%d",number[i]); puts(name[x[i]]);} puts(name[x[u]]); } 7.16写一函数,输入一个十六进制数,输出相应的十进制数。 #include"math.h" intx; ff(shu) charshu[]; {inti=strlen(shu)-1,sum=0; for(;i>-1;i++) {if{if(48<=shu[i]<=57)sum=sum+(shu[i]-48)*pow(16,(i-1)); elseif(65<=shu[i]<=90)sum=sum+(shu[i]-55)*pow(16,(i-1)); elseif(97<=shu[i]<=102)sum=sum+(shu[i]-87)*pow(16,(i-1)); x=1;} elsex=0; returnx; } main() {charshufu[100];ints; gets(shufu);s=ff(shufu); if(x)printf("s(D)=%d\n",s); elseprintf("Thenumberisnotox\n"); } 7.17用递归法将一个整数n转换成字符串。 例如,输入486,应输出字符串"486"。 n的位数不确定,可以是任意位数的整数。 #include"math.h" intx[10]; pf(m,n) unsignedlongm;intn; {inty; if(n==0){y=(int)(m%10);x[0]=y;} else{y=(unsignedlong)((m-pf(m,n-1))/pow(10,n))%10;x[n]=y;} return(y); } main() {unsignedlonga,b;inti,j,k;charc[11]; scanf("%ld",&a); for(j=0,b=a;b>0.1;j++,b/=10); pf(a,j-1); for(i=0,k=j-1;i c[i]=x[k]+48;c[10]=’\0’; puts(c);} 或 #include"math.h" charx[11]; pf(m,o) unsignedlongm;into; {intj,i; for(i=o-1,j=0;i>-1;i--,j++) x[i]=(int)((unsignedlong)(m/pow(10,j))%10)+48; return; } main() {unsignedlonga,b;intj,i; scanf("%ld",&a); for(j=0,b=a;b>0.1;j++,b/=10); pf(a,j); puts(x);printf("%d\n",j);} 或 #include"math.h" intx[10];unsignedlongm; pf(n) intn; {inty; if(n==0){y=m%10;x[0]=y;} else{y=(unsignedlong)((m-pf(n-1))/pow(10,n))%10;x[n]=y;} return(y); } main() {unsignedlonga;inti,j,k;charc[11]; scanf("%ld",&m); for(j=0,a=m;a>0.1;j++,a/=10); pf(j-1); for(i=0,k=j-1;i c[i]=x[k]+48;c[10]=’\0’; puts(c);} 7.18给出年、月、日,计算该日是该年的第几天。 intfind(x,y,z) intx,y,z; {inti,t,s,days=0; if(x%4==0)t=1; elset=0; for(i=1;i {if(i==2)s=2-t; elses=0; days=days+30+i%2-s; } days=days+z; return(days); } main() {intyear,month,date,day; scanf("%d%d%d",&year,&month,&date); day=find(year,month,date); printf("THEDATEISTHE%dthDAYS\n",day); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第四 第七 答案 谭浩强