C语言编程 求两个数的最大公约数和最小公倍数,要求用函数实现

C语言课老师出的考试样题,,急求,各位神仙大人帮帮忙,编个,小弟在此谢过,,题目可能不详细,麻烦了

#include<stdio.h>
#include<math.h>
int fun_y(int,int);
int fun_b(int,int);
main()
{
int a,b,gy,gb;
printf("输入两个整数:\n");
scanf("%d%d",&a,&b);
gy=fun_y(a,b);
gb=fun_b(a,b);
printf("最大公约数是:%d\n最小公倍数是:%d\n",gy,gb);
}
int fun_y(int x,int y)
{
int z,i;
if(x>y)
z=sqrt(y);
else
z=sqrt(x);
for(i=z;i>=1;i--)
{
if(x%i==0&&y%i==0)
break;
}
return i;
}
int fun_b(int x,int y)
{
int z,i;
z=x*y;
for(i=x;i<=z;i++)
{
if(i%x==0&&i%y==0)
break;
}
return i;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-25
#include<stdio.h>
void main()
{
int a,b,num1,num2,temp; //定义变量
scanf("%d%d",&num1,&num2); //输入两个数,附值给num1,num2
if(num1<num2)
{
temp=num1;num1=num2;num2=temp;
} //确保num1>=num2
a=num1;b=num2;
while(b!=0)
{
temp=a%b;
a=b;
b=temp;
} //这个循环是算公约数的一种方法,叫连续整数检测法
printf("最大公约数是%d\n",a);
printf("最大公倍数是%d\n",num1*num2/a); //num1*num2/a是一个欧几里得公式
}

你用数字带进去试试,一下就明白了
第2个回答  2010-12-25
#include <stdio.h>

//求a和b最大公约数:
int yue(int a,int b)
{
int k=1;
int t=a>b?b:a;//a大取b,否则取a
for(int i=1;i<=t;i++)
{
if((a%i==0)&&(b%i==0)) k=i;
else continue;
}
return k;//返回最大公约数
}

//求a和b的最小公倍数,参数c传递的是a和b的最大公约数
int bei(int a,int b,int c)
{
return (a*b)/c;
}
void main()
{
int a,b;

printf("请按从大到小的顺序输入2个要求值的数\n");
scanf("%d%d",&a,&b);
printf("两个数的最大公约数是%d\n",yue(a,b));
printf("两个数的最小公倍数是%d\n",bei(a,b,yue(a,b)));
}
第3个回答  2011-01-03
/*最大公约数和最小公倍数*/
#include <stdio.h>
void main()
{
int a,b,a1,b1,c,y,x;
printf("请输入两个数:");
scanf("%d %d",&a,&b);//
if(a<b)
{
c=a;
a=b;
b=c;
}
a1=a;
b1=b;//如果下面直接用a、b则会造成循环结束后a,b的值会改变,导致最后(a*b)/y结果出错
while(b1!=0)
{
x=a1%b1;
a1=b1;
b1=x;
}
y=a1;
printf("最大公约数为%d\n",y);
printf("最大公倍数%d\n",(a*b)/y);
}
第4个回答  2010-12-31
#include<stdio.h>
#include<math.h>
void g(a,b)
{
int c,e;
for(c=1;c<=(a<b?a:b);c++)
if(a%c==0&&b%c==0)//都能被整除,则存储到e;
e=c;
printf("最大公约数为:%d\n",e);
}
void f(a,b)
{
int d;
for(d=(a>b?a:b);d<=a*b;d++)
if(d%a==0&&d%b==0)//都能被整除,则输出;
{
printf("最小公倍数为:%d\n",d);
return;
}
}
void main()
{
int a,b;
printf("请输入两个整数:\n");
scanf("%d,%d",&a,&b);
g(a,b);
f(a,b);
}
相似回答