C语言练习(23)
求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数,用另一函数根据求出的最大公约数求最小公倍数。
①不用全局变量,分别用两个函数求最大公约数和最小公倍数。两个整数在主函数中输入,并传送给函数f1,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数f2,以求出最小公倍数,返回到主函数输出最大公约数和最小公倍数。
②用全局变量的方法,分别用两个函数求s最大公约数和最小公倍数,但其值不由函数带回。将最大公约数和最小公倍数都设为全局变量,在主函数中输出它们的值。
分别用以上两种方法编程并运行,分析对比。
不使用全局变量的方法:
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
#include <stdio.h>
int main() {
int num1, num2;
printf("请输入两个整数:");
scanf_s("%d %d", &num1, &num2);
int gcd_result = gcd(num1, num2);
int lcm_result = lcm(num1, num2);
printf("最大公约数是:%d\n", gcd_result);
printf("最小公倍数是:%d\n", lcm_result);
return 0;
}
使用全局变量的方法:
int gcd_result;
int lcm_result;
void find_gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
gcd_result = a;
}
void find_lcm(int a, int b) {
lcm_result = a * b / gcd_result;
}
#include <stdio.h>
int gcd_result;
int lcm_result;
int main() {
int num1, num2;
printf("请输入两个整数:");
scanf_s("%d %d", &num1, &num2);
find_gcd(num1, num2);
find_lcm(num1, num2);
printf("最大公约数是:%d\n", gcd_result);
printf("最小公倍数是:%d\n", lcm_result);
return 0;
}