鱼C论坛

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

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

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

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

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

x
  1. #include<stdio.h>
  2. #include<math.h>
  3. int ff ( int n , int m )
  4. {
  5.      int i , j , y=0;
  6.      for( i = n ; i > 0 ; i--)
  7.      if(n%i==0&&m%i==0) break;
  8.      
  9.          for( j = m ; j > 0 ; j++ )
  10.          if(j%m==0&&j%n==0){y=j; break; }
  11.          
  12.          printf("最大公约数为%d,最小公倍数为%d   ",i,y);
  13. }  

  14. int main()
  15. {
  16.     int n , m , t=0 ;
  17.     printf("输出两个自然数:");
  18.         scanf("%d%d",&n,&m);
  19.        
  20.         if(n>m)
  21.         {t=n;n=m;m=t;}

  22.     printf("%d",ff(n,m));         
  23.    
  24. }
复制代码


为什么结果是这样呀
  1. 输出两个自然数:4 6
  2. 最大公约数为2,最小公倍数为12   31
复制代码
最佳答案
2021-11-18 15:44:17
  1. #include<stdio.h>
  2. #include<math.h>

  3. void ff ( int n , int m )
  4. {
  5.      int i , j , y = 0;

  6.      for( i = n ; i > 0 ; i--)
  7.          if (n % i == 0 &&  m % i == 0) break;

  8.     for ( j = m ; j > 0 ; j++ )
  9.         if (j % m == 0 && j % n == 0) {
  10.             y = j;
  11.             break;
  12.         }

  13.     printf("最大公约数为: %d 最小公倍数为: %d", i, y);
  14. }  

  15. int main()
  16. {
  17.     int n , m , temp = 0 ;

  18.     printf("输出两个自然数:");

  19.     scanf("%d%d", &n, &m);
  20.         
  21.     if (n > m) {
  22.         // 交换 n 和 m 的值
  23.         temp = n; n = m; m = temp;
  24.     }

  25.     ff(n, m);

  26.     return 0;
  27. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-11-18 15:06:58 | 显示全部楼层
多了个32????
小甲鱼最新课程 -> https://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 )。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-18 15:44:17 | 显示全部楼层    本楼为最佳答案   
  1. #include<stdio.h>
  2. #include<math.h>

  3. void ff ( int n , int m )
  4. {
  5.      int i , j , y = 0;

  6.      for( i = n ; i > 0 ; i--)
  7.          if (n % i == 0 &&  m % i == 0) break;

  8.     for ( j = m ; j > 0 ; j++ )
  9.         if (j % m == 0 && j % n == 0) {
  10.             y = j;
  11.             break;
  12.         }

  13.     printf("最大公约数为: %d 最小公倍数为: %d", i, y);
  14. }  

  15. int main()
  16. {
  17.     int n , m , temp = 0 ;

  18.     printf("输出两个自然数:");

  19.     scanf("%d%d", &n, &m);
  20.         
  21.     if (n > m) {
  22.         // 交换 n 和 m 的值
  23.         temp = n; n = m; m = temp;
  24.     }

  25.     ff(n, m);

  26.     return 0;
  27. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 13:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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