编写程序,在主函数中输入两个正整数 a,b,调用两个函数 fun1() 和 fun2(),分别求 a 和 b 的最大公约数和最小公倍数,在主函数中输出结果。
时间: 2023-05-15 15:00:19 浏览: 474
程序改错.doc
回答1:
好的,以下是程序代码:
#include <stdio.h>
int fun1(int a, int b) // 求最大公约数
{
int r;
while (b != )
{
r = a % b;
a = b;
b = r;
}
return a;
}
int fun2(int a, int b) // 求最小公倍数
{
int m = a * b / fun1(a, b);
return m;
}
int main()
{
int a, b;
printf("请输入两个正整数:");
scanf("%d%d", &a, &b);
printf("%d和%d的最大公约数为:%d\n", a, b, fun1(a, b));
printf("%d和%d的最小公倍数为:%d\n", a, b, fun2(a, b));
return ;
}
回答2:
编写程序分为以下几个步骤:
1. 编写求最大公约数的函数fun1()。
最大公约数是两个数的公共因数中最大的值,可以通过辗转相除法来求解。假设两个正整数a,b(a>b),则首先用a对b取余,得到r,则a和b的最大公约数是b和r的最大公约数。采用递归的方式,直到r=0,此时b就是a和b最大公约数。编写程序如下:
int fun1(int a, int b)
{
int r = a % b;
if (r == 0) return b;
return fun1(b, r);
}
2. 编写求最小公倍数的函数fun2()。
最小公倍数是两个数的公共倍数中最小的值,可以通过最大公约数来求解公式:a*b/gcd(a,b),其中gcd(a,b)为a和b的最大公约数。编写程序如下:
int fun2(int a, int b)
{
int gcd = fun1(a, b);
return a * b / gcd;
}
3. 在主函数中调用fun1()和fun2()函数,并输出结果。
在主函数中输入两个正整数a,b,然后分别调用fun1()和fun2()函数,求出a和b的最大公约数和最小公倍数,并输出结果。编写程序如下:
int main()
{
int a, b;
cout << "请输入两个正整数:";
cin >> a >> b;
int gcd = fun1(a, b);
int lcm = fun2(a, b);
cout << "最大公约数:" << gcd << endl;
cout << "最小公倍数:" << lcm << endl;
return 0;
}
以上是一个简单的求解最大公约数和最小公倍数的程序,利用递归和数学公式的方法,可以求解多组数据,并且代码简洁易懂,可读性强。
回答3:
编写一个程序,主要功能是输入两个正整数a和b,并调用两个函数fun1()和fun2(),来求出a和b的最大公约数和最小公倍数,并在主函数中输出结果。
首先,我们需要知道最大公约数(Greatest Common Divisor)表示几个正整数共有约数中最大的一个,最小公倍数(Least Common Multiple)表示能够整除这几个数字的最小正整数。
我们可以使用辗转相除法来计算最大公约数,这个方法也叫欧几里得算法,可以用递归的方式实现。我们定义一个函数fun1(),传递参数a和b,通过递归不断将b赋值给a,将a%b(a除以b的余数)赋值给b,直到b等于0,此时a即为最大公约数,返回a的值即可。
代码如下:
```
int fun1(int a, int b){
if(b == 0){
return a;
}
return fun1(b, a%b);
}
```
而最小公倍数可以通过最大公约数计算得出,用两个数的乘积除以它们的最大公约数即可。我们定义一个函数fun2(),传递参数a和b,调用fun1()函数计算出最大公约数gcd,然后返回a和b的乘积除以最大公约数gcd的值即可。
代码如下:
```
int fun2(int a, int b){
int lcm = a * b / fun1(a, b);
return lcm;
}
```
最后,在主函数中定义两个变量a和b,输入这两个正整数,分别调用fun1()和fun2()函数,将最大公约数和最小公倍数结果输出即可。完整代码如下:
```
#include <stdio.h>
int fun1(int a, int b){
if(b == 0){
return a;
}
return fun1(b, a%b);
}
int fun2(int a, int b){
int lcm = a * b / fun1(a, b);
return lcm;
}
int main(){
int a, b;
printf("请输入两个正整数:\n");
scanf("%d %d", &a, &b);
int gcd = fun1(a, b);
int lcm = fun2(a, b);
printf("%d和%d的最大公约数为:%d\n", a, b, gcd);
printf("%d和%d的最小公倍数为:%d\n", a, b, lcm);
return 0;
}
```
阅读全文