《C程序设计》谭浩强第四版第8章课后答案清华大学出版社

C语言答案 时间:2017-04-17 我要投稿
【www.sundxs.com - C语言答案】

  第四版《C程序设计》第8章课后答案大家核对了吗?为此学生范文网小编为大家推荐了《C程序设计》课后答案和下载地址,希望能帮到大家。

  《C程序设计》第四版第8章课后答案下载地址

  《C程序设计》第四版第8章课后答案.doc

  《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);

  }


猜你感兴趣:

1.C++面向对象程序设计(谭浩强版)课后题答案详解

2.C程序设计第三版 (谭浩强) 课后答案

3.

4.《C程序设计》谭浩强 第四版第9章课后答案 清华大学出版社

5.C语言程序设计 贾宗璞 许合利著 课后答案 中国矿业大学出版社

热门文章