您好,欢迎访问三七文档
第6章[习题6-1]更正下面函数中的错误。(1)返回求x和y平方和的函数。(2)返回求x和y为直角边的斜边的函数。sum_of_sq(x,y)hypot(doublex,doubley){{doublex,y;h=sqrt(x*x+y*y);return(x*x+y*y);return(h);}}解:/*c6_1(1).c*//*c6_1(2).c*/(1)(2)doublesum_of_sq(doublex,doubley)doublehypot(doublex,doubley){{return(x*x+y*y);doubleh;}h=sqrt(x*x+y*y);return(h);}[习题6-2]下面函数的功能是什么?(1)itoa(intn,chars[])(2)inthtod(charhex[]){{inti,dec=0;staticinti=0,j=0;for(i=0;hex[i]!='\0';i++)intc;{if(hex[i]='0'&&hex[i]='9')if(n!=0)dec=dec*16+hex[i]-'0';{if(hex[i]='A'&&hex[i]='F')j++;dec=dec*16+hex[i]-'A'+10;c=n%10+'0';if(hex[i]='a'&&hex[i]='f')itoa(n/10,s);dec=dec*16+hex[i]-'a'+10;s[i++]=c;}}return(dec);else}{(3)voidstod(intn)if(j==0)s[j++]='0';{inti;s[j]='0';if(n0)i=j=0;{putchar('-');n=-n;}}if((i=n/10)!=0)stod(i);}putchar(n%10+'0');}答案:(略)[习题6-3]编写已知三角形三边求面积的函数,对于给定的三个量(正值),按两边之和大于第三边的规定,判别其能否构成三角形,若能构成三角形,输出对应的三角形面积。要求主函数输入10组三角形三边,输出其构成三角形的情况。/*c6_3.c*/#includestdio.h#includemath.hdoubles(doublea,doubleb,doublec){doubles,ss;if(a+bc||a+cb||b+ca){printf(ErrorData);return-1;}s=(a+b+c)/2;ss=sqrt(s*(s-a)*(s-b)*(s-c));printf(S=%lf,ss);returnss;}voidmain(){inti;doublea,b,c;for(i=0;i10;i++){scanf(%lf%lf%lf,&a,&b,&c);s(a,b,c);}}[习题6-4]分别编写求圆面积和圆周长的函数,另编写一主函数调用之,要求主函数能输入多个圆半径,且显示相应的圆面积和周长。答案:(略)[习题6-5]设有两个一维数组a[100],b[100],试编写程序分别将它们按升序排序,再将a、b两数组合并存入c数组。使得c数组也按升序排序。若a、b有相等的元素,则把a数组的相等元素优先存入c数组中(其中c数组为c[200])。/*c6_5.c*/#includestdio.h#includemath.hvoidsort(inta[],intsize){inti,j,k,min;for(i=0;isize-1;i++){min=i;for(j=i+1;jsize;j++)if(a[min]a[j])min=j;k=a[i];a[i]=a[min];a[min]=k;}}voidmain(){inta[100],b[100],c[200];inti,ia,ib,ic;for(i=0;i100;i++){a[i]=2*i+1;b[i]=2*i+2;}sort(a,100);sort(b,100);ia=0;ib=0;ic=0;for(;;){if(a[ia]b[ib])c[ic++]=a[ia++];elseif(a[ia]b[ib])c[ic++]=b[ib++];else{c[ic++]=a[ia++];ib++;}if(ia==100){for(;ib100;ib++)c[ic++]=b[ib];break;}if(ib==100){for(;ia100;ia++)c[ic++]=a[ia];break;}}for(i=0;iic;i++)printf(%4d,c[i]);}[习题6-6]编写一程序,把M×N矩阵a的元素逐列按降序排列。假设M、N不超过10,分别编写求一维数组元素值最大和元素值最小的函数,主函数中初始化一个二维数组a[10][10],调用定义的两函数输出每行、每列的最大值和最小值。/*c6_6.c*/#includestdio.hinttest(intt){inti;for(i=2;i=t/2;i++)if(t%i==0)return0;return1;}voidmain(){intn;scanf(%d,&n);printf(result=%d,test(n));}[习题6-7]编写一判别素数的函数,在主函数中输入一个整数,输出该数是否为素数的信息。/*c6_7.c*/num(x)intx;{inti,l;for(i=2;ix;i++){if(x%i)l=1;elsel=0;}return(l);}#include“stdio.hmain(){inta,l;printf(Inputavalueofa:);scanf(%d,&a);num(a);if(l)printf(Itisaprime.);elseprintf(Itisnotaprime.);}[习题6-8]编写程序,实现由主函数输入m、n,按下述公式计算并输出nmC的值。)!nm(!n!mCnm/*c6_8.c*/#includestdio.hintfunc(intn){inti,s=1;for(i=1;i=n;i++){s=s*i;}returns;}voidmain(){intm,n;scanf(%d%d,&m,&n);printf(%d,func(m)/(func(n)*func(m-n)));}[习题6-9]编写一个将两个字符串连接起来函数(即实现strcat函数的功能),两个字符串由主函数输入,连接后的字符串也由主函数输出。/*c6_9.c*/#includestdio.hintstrcat1(char*s1,char*s2){intt;while(*s1)s1++;while(*s2){*s1=*s2;s1++;s2++;}*s2=’\0’;}voidmain(){char*s1=Test1;char*s2=Test2;strcat1(char*s1,char*s2)printf(%s,s1);}/*puts(s1);*/[习题6-10]编写一个实现strcmp函数功能的函数,并试用主函数调用之。/*c6_10.c*/#includestdio.hintstrcmp(char*s1,char*s2){intt;while((t=(*s1-*s2))==0){s1++;s2++;if(*s1==0)break;}returnt;}voidmain(){char*s1=Test1;char*s2=Test2;printf(strcmp%s,%s=%d,s1,s2,strcmp(s1,s2));}[习题6-11]编写一个实现strcpy函数功能的函数,并试用主函数调用。答案:(略)[习题6-12]编写一个实现strlen函数功能的函数,并试用主函数调用之。/*c6_12.c*/#includestdio.hintstrlen(char*s){intt=0;while(*(s+t))t++;returnt;}voidmain(){char*s1=Test1;printf(strlen%s=%d,s1,strlen(s1));}[习题6-13]编写一函数,调用6.11题的函数,将字符数组char1[10]的前5个字符复制到字符数组char2[10]中。主函数实现字符数组char1[10]的初始化,并输出复制后的字符数组ch2[10]的内容。答案:(略)[习题6-14]编写一函数实现用弦截法求方程x3-3x2+3x-9=0的近似根。主函数完成各系数值的输入及所求得的根值的输出。/*c6_14.c*/#includestdio.h#includemath.hfloatf(floatx){floaty;y=((x-3.0)*x+3.0)*x-9.0;return(y);}floatxpoint(floatx1,floatx2){floatx;x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));return(x);}floatroot(floatx1,floatx2){floatx,y,y1;y1=f(x1);do{x=xpoint(x1,x2);y=f(x);if(y*y0){y1=y;x1=x;}elsex2=x;}while(fabs(y)0.0001);return(x);}voidmain(){floatx1,x2,f1,f2,x;do{printf(\nInputX1,X2:);scanf(%f,%f,&x1,&x2);f1=f(x1);f2=f(x2);}while(f1*f2=0);x=root(x1,x2);printf(Rootis%f,x);}[习题6-15]编写一函数实现用牛顿迭代法求方程ax3+bx2+cx+d=0在x=1附近的一个实根。主函数完成各系数值的输入及所求得的根值的输出。迭代公式:f(xn)xn+1=xn----------f’(xn)|xn+1-xn|1e-5/*c6_15.c*/#includemath.hfloatroot(a,b,c,d)floata,b,c,d;{floatx=1,x1,f,f1;do{x1=x;f=((a*x1+b)*x1+c)*x1+d;f1=(3*a*x1+2*b)*x1+c;x=x1-f/f1;}while(fabs(x-x1)=0.00001);return(x);}main(){floata,b,c,d;printf(Entervaluestoa,b,c,d\n);scanf(%f%f%f%f,&a,&b,&c,&d);printf(\nx=%8.4f\n,root(a,b,c,d));}[习题6-16]编写程序完成用递归方法求n阶勒让德多项式的值。递归公式为:1n=0Hn(x)=xn=1(2n-1)·x·Hn-1(x)-(n-1)·Hn-2(x)/nn1/*c6_16.c*/#includestdio.hdoublefunc(intn,doublex){switch(n){case0:return1;case1:returnx;default:return(2*n-1)*x*func(n-1,x)-(n-1)*func(n-2,x)/n;}}voidmain(){doublex=0.1;intn=5;printf(%lf,func(n,x));}[习题6-17]编写计算最小公倍数的函数,试由主函数输入两个正整数a和b调用它。计算最小公倍数的公式为:lcm(u,v)=u*v/gcd(u,v)(u,v≥0)其中,gcd(u,v)是u、v的最大公约数。lcm(u,v)是u、v的最小公倍数。/*c6_17.c*/intgetgcd(intm,intn){inttemp;while(m!=n){if(mn)temp=m,m=n,n=temp;m=m-n;}return(m);}intgetlcm(intm,intn){return(m*n/getlcm(m,n));}#includestdio.hmain(){intm,n,t;pri
本文标题:C语言答案第6章
链接地址:https://www.777doc.com/doc-2908403 .html