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(x
{ 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的值。
#include
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(temp<0)
{ 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编写一个判素数的函数,在主函数输入一个整数,输出是否是素数的信息。
#include
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;i
for(j=0;j
scanf("%d",&a[i][j]);
printf("\n原始数组:\n");
for(i=0;i
{ for(j=0;j
printf("%3d",a[i][j]);
printf("\n");}
exchange(a);
printf("交换后的数组:\n");
for(i=0;i
{
for(j=0;j
prin