第四版《C程序设计》第8章课后答案大家核对了吗?为此学生范文网小编为大家推荐了《C程序设计》课后答案和下载地址,希望能帮到大家。
《C程序设计》第四版第8章课后答案下载地址
《C程序设计》课后答案预览:第八章函数
1.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
maxyueshu(m,n)
int m,n;
{ int i=1,t;
for(;i<=m&&i<=n;i++)
{if(m%i==0&&n%i==0)
t=i;
}
return(t);
}
minbeishu(m,n)
int m,n;
{int j;
if(m>=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=%d,min=%d\n",max,min);
}
8.2求方程 的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。
#include"math.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=%.3f\n",x1,x2);
}
float denggen(m,n)
float m,n;
{float x;
x=-n/(2*m);
printf("denggen is x=%.3f\n",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-%.3fi\n",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(q>0) yishigen(a,b,q);
else if(q==0) denggen(a,b);
else xugen(a,b,q);
}
8.2写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。
psushu(m)
int m;
{int i=2,t;
for(;i<=m;i++)
if(m%i==0&&i
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 sushu\n");
else printf("s is not sushu\n");
}
8.4写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。
int zhuangzhi(b)
int b[3][3];
{int i,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()
{int a[3][3];int i,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");}
}
8.5写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。
main()
{char str0[100];
gets(str0);
fanxu(str0);
puts(str0);
}
fanxu(str1)
char str1[100];
{int i,t,j;
char str2[100];strcpy(str2,str1);
t=strlen(str1);
for(i=0,j=t-1;j>-1;i++,j--)
str1[i]=str2[j];
}
8.6写一函数,将两个字符串连接。
lianjie(a,b)
char a[100],b[100];
{strcat(a,b);
}
main()
{char str1[100],str2[100];
gets(str1);gets(str2);
lianjie(str1,str2);
puts(str1);
}
8.7写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。
fuzhi(a,b)
char a[100],b[100];
{int i,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()
{char str1[100],str2[100];
gets(str1);
fuzhi(str1,str2);
puts(str2);
}
8.8写一函数,输入一个四位数字,要求输出这四个数字字符,但每两个数字间空格。如输入1990,应输出"1_9_9_0"。
char f(b)
char b[4];
{int i=0;
for(;i<4;i++)
{printf(" ");
printf("%c",b[i]);}
printf("\n");
}
main()
{int a,u,v,w,t;char c[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);
}
8.9编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。
char tongji(str0,b)
char str0[100];
int b[4];
{int i;
for(i=0;str0[i]!=’\0’;i++)
{if(str0[i]>=65&&str0[i]<=90||str0[i]>=97&&str0[i]<=122) b[0]++;
else if(str0[i]>=48&&str0[i]<=57) b[1]++;
else if(str0[i]==32) b[2]++;
else b[3]++;}
}
main()
{char str1[100];static int i,a[4];
gets(str1);
tongji(str1,a);
printf("zimu Shuzi Kongge Qita\n");
for(i=0;i<4;i++)
printf("%-8d ",a[i]);printf("\n");
}
8.10写一函数,输入一行字符,将此字符串中最长的单词输出。
cechang(str1,word0)
char str1[100],word0[15];
{int i=0,j=0,t=0;
static char word1[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()
{char str0[100],longword[15];
gets(str0);
cechang(str0,longword);
puts(longword);
}
8.11写一函数用起泡法对输入的个字符按由小到大的顺序排列。
int paixu(x)
int x[];
{int i,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()
{int y[10];int i;
for(i=0;i<10;i++)
scanf("%d",&y[i]);
paixu(y);
for(i=0;i<10;i++)
printf("%5d",y[i]);
printf("\n");
}
8.12用牛顿迭代法求根。方程为: ,系数a,b,c,d由主函数输入。求X在1附近的一个实根。求出后由主函数输出。
double qigen(s,t,u,v)
int s,t,u,v;
{double x,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);
return x;
}
main()
{int a,b,c,d;double x;
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
x=qigen(a,b,c,d);
printf("x=%.3f\n",x);
}
8.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=%.3f\n",y0);
}
8.14输入10个学生5门课的成绩,分别用函数求:①每个学生平均分;②每门课的平均分;③找出最高分所对应的学生和课程;④求平均分方差:δ=[SXi^2]/n-(SXi/n)^2,为一学生的平均分
float x1[10],x2[5];
float pp(),cc(),find(),xx();
main()
{char name[10][20],class[5][20];float score[10][5],o,k=0,max[5];int a[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);
}
float pp(f)
float f[10][5];
{float sum=0;int i,j;
for(i=0,sum=0;i<10;i++)
{for(j=0;j<5;j++)
sum=sum+f[i][j];
x1[i]=sum/5;}
}
float cc(y)
float y[10][5];
{float sum=0;int i,j;
for(j=0;j<5;j++)
{for(i=0;i<10;i++)
sum=sum+y[i][j];
x1[j]=sum/10;}
}
float find(z,s,t)
float z[10][5],s[5];int t[5];
{int i,j;
for(j=0,s[j]=z[0][j];j<5;j++)
for(i=0;i<10;i++)
if(s[j]
}
float xx(q)
float q;
{float f=0,e=0;int i;
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);
}
8.15写几个函数:①输个职工的姓名和职工号;②按职工号由小到大顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。
#define N 10
find(a,b)
int a[],b[];
{int i,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)
int h[],k;
{int i,j;
for(i=0;i
if(h[i]-k==0) j=i;
return j;
}
main()
{int number[N],x[N],i,j,u,p;char name[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]]);
}
8.16写一函数,输入一个十六进制数,输出相应的十进制数。
#include"math.h"
int x;
ff(shu)
char shu[];
{int i=strlen(shu)-1,sum=0;
for(;i>-1;i++)
{if {if(48<=shu[i]<=57) sum=sum+(shu[i]-48)*pow(16,(i-1));
else if(65<=shu[i]<=90) sum=sum+(shu[i]-55)*pow(16,(i-1));
else if(97<=shu[i]<=102) sum=sum+(shu[i]-87)*pow(16,(i-1));
x=1;}
else x=0;
return x;
}
main()
{char shufu[100];int s;
gets(shufu);s=ff(shufu);
if(x) printf("s(D)=%d\n",s);
else printf("The number is not ox\n");
}
8.17用递归法将一个整数n转换成字符串。例如,输入486,应输出字符串"486"。n的位数不确定,可以是任意位数的整数。
#include"math.h"
int x[10];
pf(m,n)
unsigned long m;int n;
{int y;
if(n==0) {y=(int)(m%10);x[0]=y;}
else {y=(unsigned long)((m-pf(m,n-1))/pow(10,n))%10;x[n]=y;}
return(y);
}
main()
{unsigned long a,b;int i,j,k;char c[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"
char x[11];
pf(m,o)
unsigned long m;int o;
{int j,i;
for(i=o-1,j=0;i>-1;i--,j++)
x[i]=(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;b>0.1;j++,b/=10);
pf(a,j);
puts(x);printf("%d\n",j);}
或
#include"math.h"
int x[10];unsigned long m;
pf(n)
int n;
{int y;
if(n==0) {y=m%10;x[0]=y;}
else {y=(unsigned long)((m-pf(n-1))/pow(10,n))%10;x[n]=y;}
return(y);
}
main()
{unsigned long a;int i,j,k;char c[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);}
8.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;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 DAYS\n",day);
}
猜你感兴趣:
3.