C语言程序设计第四版第七章答案 谭浩强

更新时间:2023-09-01 08:25:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第七章 用函数实现模块化程序设计

第七章 函数

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

}

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

}

7.3写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 psushu(m)

int m;

{int i=2,t;

for(;i<=m;i++)

if(m%i==0&&i<m) 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 sushu\n");

else printf("s is not sushu\n");

}

7.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");}

}

7.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];

}

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

}

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

}

7.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");

}

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

}

7.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");

}

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

}

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=%.3f\n",y0);

}

7.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]<z[i][j]) {s[j]=z[i][j];t[j]=i;}

}

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

}

7.15写几个函数:①输个职工的姓名和职工号;②按职工号由小到大顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。

第七章 用函数实现模块化程序设计

#define N 10

find(a,b)

int a[],b[];

{int i,j,s,t,c[N][2];

for(i=0;i<N;i++)

{c[i][1]=a[i];c[i][1]=i;}

for(i=0;i<N;i++)

for(j=0;j<N-i-1;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<N;i++)

b[i]=c[i][1];

return;

}

lookfor(h,k)

int h[],k;

{int i,j;

for(i=0;i<N;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<N;i++)

{gets(name[i]);

scanf("%d",&number[i]);}

scanf("%d",&p);

find(number,x);

u=lookfor(number,p);

for(i=0;i<N;i++)

{printf("%d",number[i]);

puts(name[x[i]]);}

puts(name[x[u]]);

}

7.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");

}

7.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<j;i++,k--)

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<j;i++,k--)

c[i]=x[k]+48;c[10]=’\0’;

puts(c);}

7.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<y;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); }

本文来源:https://www.bwwdw.com/article/59wi.html

Top