《C语言程序设计》课后习题答案第八章.doc
文本预览下载声明
8.1 编写两个函数,分别求两个证书的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果,两个整数由键盘输入。
void main()
{ int Mgy(int x,int y);
int Mgb(int z);
int a,b,mgy,mgb;
printf(请输入两个数:\n);
scanf(%d,%d,a,b);
mgy=Mgy(a,b);
mgb=Mgb(a,b,mgy);
printf(两个数的最大公约数为%d,最小公倍数为%d\n,mgy,mgb);}
int Mgy(int x,int y)
{int r,temp;
if(xy)
{ temp=x;
x=y;
y=temp;}
while(x%y!=0)
{ r=x%y;
x=y;
y=r;}
return y;}
int Mgb(int x,int y,int z)
{ return (x*y/z);}
8.2 求方程ax2+bx+c=0的根,用三个函数分别求当b2-4ac大于零、等于零和小于零时的根,并输出结果。从主函数输入a,b,c的值。
#includemath.h
float temp,k,x1,x2;
void main()
{ void Lzero(float a,float b,float c);
void Szero(float a,float b,float c);
void Ezero(float a,float b,float c);
float l,m,n;
printf(请输入三个数:\n);
scanf(%f,%f,%f,l,m,n);
printf(方程的根为:\n);
temp=m*m-4*l*n;
k=sqrt(temp);
if(temp0)
{ Szero(l,m,n); printf(x1=%f+%fi,x2=%f-%fi\n,x1,x2,x1,x2);}
else if(temp==0)
{ Ezero(l,m,n);
printf(x1=%5.2f,x2=%5.2f\n,x1,x1);}
else { Lzero(l,m,n);
printf(x1=%5.2f,x2=%5.2f\n,x1,x2);}
}
void Lzero(float a,float b,float c)
{ x1=(-b+k)/(2*a);
x2=(-b-k)/(2*a);}
void Szero(float a,float b,float c)
{ x1=-b/(2*a);
x2=sqrt(-temp)/(2*a); }
void Ezero(float a,float b,float c)
{ x1=(-b+k)/(2*a);}
8.3编写一个判素数的函数,在主函数输入一个整数,输出是否是素数的信息。
#includemath.h
void main()
{ int Isprime(int a);
int m,temp=0;
printf(请输入一个数:\n);
scanf(%d,m);
temp=Isprime(m);
if(temp==0) printf(%d不是素数。\n,m);
else printf(%d是素数。\n,m);}
int Isprime(int a)
{ int i,k,flag;
if(a==0||a==1) flag=0;
else{ k=sqrt(a);
for(i=2;i=k;i++)
if(a%i==0) flag=0; }
return flag; }
8.4编写一个函数,使给定的一个二维数组(3x3)转置,即行列互换。
#define N 3
int a[N][N];
void main()
{ void exchange(int a[][3]);
int i,j;
printf(请输入一个数组:\n);
for(i=0;iN;i++)
for(j=0;jN;j++)
scanf(%d,a[i][j]);
printf(\n原始数组:\n);
for(i=0;iN;i++)
{ for(j=0;jN;j++)
printf(%3d,a[i][j]);
printf(\n);}
exchange(a);
printf(交换后的数组:\n);
for(i=0;iN;i++)
{
for(j=0;jN;j++)
printf(%3d,a[i][j]);
printf(\n);
}
}
void exchange(int
显示全部