代码运行结果一直出错,求指正
#include
int da(int m, int n);
int xiao(int m, int n);
int main()
{
int m, n;
scanf_s("m=%d n=%d", &m, &n);
printf("最大公约数=%d\n最小公倍数=%d", da(m,n), xiao(m,n));
return 0;
}
int da(int m, int n)
{
int const sb = m < n ? m : n;
for (int i = sb;i > 0; i--)
{
if (m % i == 0 && n % i == 0)
{ return i; break; }
}
}
int xiao(int m, int n)
{
int const ikun = m > n ? m : n;
int j;
for (j = ikun; j > 0; j++)
{
if (j % m == 0 && j % n == 0)
{
break;
}
}
return j;
}
scanf_s函数的格式控制字符串应该使用空格分隔输入项,而不是逗号。
函数da()和xiao()在某些情况下可能不返回值,这会导致编译器报错。应该在函数结尾处加上return语句来返回函数值。
函数xiao()中的循环条件有误,应该是j++而不是++j,否则循环会无限进行下去。此外,循环条件也需要修正为j <= m * n,否则在m、n较大的情况下可能导致无法找到最小公倍数。
把你的代码修改一下:
#include <stdio.h>
int da(int m, int n);
int xiao(int m, int n);
int main()
{
int m, n;
scanf_s("m=%d n=%d", &m, &n);
printf("最大公约数=%d\n最小公倍数=%d", da(m, n), xiao(m, n));
return 0;
}
int da(int m, int n)
{
int const sb = m < n ? m : n;
for (int i = sb; i > 0; i--)
{
if (m % i == 0 && n % i == 0)
{
return i;
}
}
return 0;
}
int xiao(int m, int n)
{
int const ikun = m > n ? m : n;
for (int j = ikun; j <= m * n; j++)
{
if (j % m == 0 && j % n == 0)
{
return j;
}
}
return 0;
}
修改后的代码在我的本地环境中可以正确编译和运行,输出结果也与预期一致。
#include <stdio.h>
int da(int m, int n);
int xiao(int m, int n);
int main()
{
int m, n;
scanf_s("m=%d n=%d", &m, &n);
printf("最大公约数=%d\n最小公倍数=%d", da(m,n), xiao(m,n));
return 0;
}
int da(int m, int n)
{
int i,p;
for (i = m;i > 0; i--)
{
if (m % i == 0 && n % i == 0)
{
p=i;
break;
}
}
return p;
}
int xiao(int m, int n)
{
int j,q;
for (j = m; j > 0; j++)
{
if (j % m == 0 && j % n == 0)
{
q=j;
break;
}
}
return q;
}
出错提示是啥 你这个输入的时候要这样输入 m=2 n=4这样或者你把scanf("m=%d n=%d", &m, &n);改成scanf("%d%d", &m, &n);这样就直接输入数字2 4