鱼C论坛

 找回密码
 立即注册
查看: 1503|回复: 3

[已解决]找错:用函数:输入两个正整数m和n,求其最大公约数和最小....

[复制链接]
发表于 2021-11-18 15:06:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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
最佳答案
2021-11-18 15:44:17
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-11-18 15:06:58 | 显示全部楼层
多了个32????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-18 15:40:29 | 显示全部楼层
多余的 31 是由于 printf("%d",ff(n,m)); 语句造成的,期望打印调用 ff 函数后返回的值。

函数定义 int ff ( int n , int m ) 说明函数 ff 的返回值是 int 类型的,但 ff 函数没有给出返回值。

在这种情况下,其行为是不可知的? 在您程序中的返回值是一个无意义的数字。

如果没有返回值可以使用 void 类型定义函数 void ff ff ( int n , int m )。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-18 15:44:17 | 显示全部楼层    本楼为最佳答案   
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 01:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表