找错:用函数:输入两个正整数m和n,求其最大公约数和最小....
#include<stdio.h>#include<math.h>
int ff ( int n , int m )
{
int i , j , y=0;
for( i = n ; i > 0 ; i--)
if(n%i==0&&m%i==0) break;
for( j = m ; j > 0 ; j++ )
if(j%m==0&&j%n==0){y=j; break; }
printf("最大公约数为%d,最小公倍数为%d ",i,y);
}
int main()
{
int n , m , t=0 ;
printf("输出两个自然数:");
scanf("%d%d",&n,&m);
if(n>m)
{t=n;n=m;m=t;}
printf("%d",ff(n,m));
}
为什么结果是这样呀
输出两个自然数:4 6
最大公约数为2,最小公倍数为12 31 多了个32???? 多余的 31 是由于 printf("%d",ff(n,m)); 语句造成的,期望打印调用 ff 函数后返回的值。
函数定义 int ff ( int n , int m ) 说明函数 ff 的返回值是 int 类型的,但 ff 函数没有给出返回值。
在这种情况下,其行为是不可知的? 在您程序中的返回值是一个无意义的数字。
如果没有返回值可以使用 void 类型定义函数 void ff ff ( int n , int m )。 #include<stdio.h>
#include<math.h>
void ff ( int n , int m )
{
int i , j , y = 0;
for( i = n ; i > 0 ; i--)
if (n % i == 0 &&m % i == 0) break;
for ( j = m ; j > 0 ; j++ )
if (j % m == 0 && j % n == 0) {
y = j;
break;
}
printf("最大公约数为: %d 最小公倍数为: %d", i, y);
}
int main()
{
int n , m , temp = 0 ;
printf("输出两个自然数:");
scanf("%d%d", &n, &m);
if (n > m) {
// 交换 n 和 m 的值
temp = n; n = m; m = temp;
}
ff(n, m);
return 0;
}
页:
[1]