编写该程序的整体思路:分别定义最大公约数函数和最小公倍数函数,然后再main函数里面调用它。C语言实现代码如下:
#include<stdio.h>
#include<math.h>
int fun_gy(int,int); //声明最大公约数函数
int fun_gb(int,int); //声明最小公倍数函数
main()
{
int a,b,gy,gb;
printf("输入两个整数:\n");
scanf("%d%d",&a,&b);
gy=fun_gy(a,b); //调用最大公约数函数
gb=fun_gb(a,b); //调用最小公倍数函数
printf("最大公约数是:%d\n最小公倍数是:%d\n",gy,gb);
}
int fun_gy(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_gb(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;
}程序运行结果:
扩展资料:
这里涉及到了最大公约数和最小公倍数的计算方法:
我们知道两个整数的最小公倍数等于他们的乘积除以他们的最大公约数。所以关键还是最大公约数的计算。
辗转相除法(求最大公约数):
假设求a,b的最大公约数,则:
(1)a除以b取余得c,若c=0,则b即为两数的最大公约数,输出,结束。
(2)若c != 0,则将b赋给a,c赋给b再返回上一步操作,继续执行。
例如,求30和98的最大公约数,过程如下:
90%30 = 8;
30%8 = 6;
8%6 = 2;
6%2 = 0;
所以最大公约数为2。
#include <stdio.h>
void fun(int m,int n){
int a=m,b=n,r;
while(b) {r=a%b;a=b;b=r;}
printf("\n最大公约数%d\n最小公倍数%d\n",a,m*n/a);
}
//以上为求两个正整数最大公约数、最小公倍数的函数,以下为主函数
void main(){
int m,n;
scanf("%d%d",&m,&n);
fun(m,n);
}