下面程序的功能是计算两个正整数的最小公倍数,请改正其中的错误。 #include <stdio.h> int MinCommonMultiple(int a, int b) main() { int a, b, x; printf("Input a,b:"); scanf("%d,%d",a,b); x=MinCommonMultiple(int a,int b); printf("MinCommonMultiple = %d\n", x); } int MinCommonMultiple(int a, int b); { int i; for (i=1; i<a*b; i++) { if (i%a==0 || i%b==0) return i; } }
时间: 2023-06-27 11:04:59 浏览: 122
下面是修改后的程序:
```
#include <stdio.h>
int MinCommonMultiple(int a, int b) {
int i;
for (i=a; i<=a*b; i++) {
if (i%a==0 && i%b==0)
return i;
}
}
int main() {
int a, b, x;
printf("Input a,b:");
scanf("%d,%d",&a,&b);
x=MinCommonMultiple(a,b);
printf("MinCommonMultiple = %d\n", x);
return 0;
}
```
修改说明:
1. `MinCommonMultiple` 函数的定义和声明中不能有 `;`,应该去掉。
2. 在 `MinCommonMultiple` 函数中,应该用 `&&` 来判断是否同时是 `a` 和 `b` 的倍数。
3. 在 `scanf` 函数中,`%d,%d` 表示输入两个数字之间用 `,` 隔开,应该加上 `&` 表示输入的是变量的地址。
4. `main` 函数的返回值应该是 `int` 类型,需要加上 `return 0;`。
相关问题
8 、设计函数,输入两个正整数m和n,求其最大公约数和最小公倍数。(程序运行时,输入两个整数15和20) #include <stdio.h> #include <stdlib.h> int main() { int p,r,n,m,t; printf("输入两个正整数:"); scanf("%d%d",&n,&m); if(n<m) { t=n; n=m; m=t; } p=n*m; while(m!=0) { r=n%m; n=m; m=r; } printf("它们的最大公约数为:%d\n",n); printf("它们的最小公倍数为:%d\n",p/n); return 0; }
这是一个 C 语言程序,它通过输入两个正整数 m 和 n,求出它们的最大公约数和最小公倍数。在这个程序中,我们使用辗转相除法来求最大公约数,使用两数相乘除以最大公约数来求最小公倍数。以下是这个程序的代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, m, p, r, t;
printf("输入两个正整数:");
scanf("%d%d", &n, &m);
if(n < m) { // 确保 n > m
t = n;
n = m;
m = t;
}
p = n * m;
while(m != 0) { // 辗转相除法求最大公约数
r = n % m;
n = m;
m = r;
}
printf("它们的最大公约数为:%d\n", n);
printf("它们的最小公倍数为:%d\n", p / n); // 两数相乘除以最大公约数
return 0;
}
```
当输入 15 和 20 时,程序会输出:
```
输入两个正整数:15 20
它们的最大公约数为:5
它们的最小公倍数为:60
```
设计一个函数MinCommonMultiple,其功能是计算两个正整数的最小公倍数。 注意: (1)请将修改正确后的完整源程序拷贝粘贴到答题区内。 (2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。 (3)当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。 #include <stdio.h> int MinCommonMultiple(int a,int b) main() { int a,b,x; printf("Input a,b:"); scanf("%d,%d",a,b); x = MinCommonMultiple(a,b); printf("MinCommonMultiple = %d\n", x); } int MinCommonMultiple(int a,int b); { int i; for(i=1; i<a*b; i++) { if(i%a == 0 || i%b == 0) return i; } }
修改后的程序如下:
```
#include <stdio.h>
int MinCommonMultiple(int a, int b); // 去掉分号
int main() {
int a, b, x;
printf("Input a,b:");
scanf("%d,%d", &a, &b); // 加上 & 符号
x = MinCommonMultiple(a, b);
printf("MinCommonMultiple = %d\n", x);
return 0; // 缺少返回值
}
int MinCommonMultiple(int a, int b) { // 去掉分号和多余的花括号
int i;
for(i = 1; i <= a * b; i++) { // 修改循环条件
if(i % a == 0 && i % b == 0) { // 修改判断条件
return i;
}
}
}
```
修改说明:
1. 第 3 行去掉 `;`,因为该行是函数声明语句,不应该以分号结束。
2. 第 5 行加上 `&` 符号,因为 `scanf` 函数需要获取变量的地址。
3. 第 8 行添加返回值 `0`,因为 `main` 函数声明为 `int` 类型,需要返回一个整型值。
4. 第 10 行去掉分号和多余的花括号,因为这里是函数定义语句,应该以花括号开始。
5. 第 12 行修改循环条件为 `i <= a * b`,因为最小公倍数不会超过两个数的积。
6. 第 13 行修改判断条件为 `i % a == 0 && i % b == 0`,因为最小公倍数应该同时满足两个数的倍数。