鱼C论坛

 找回密码
 立即注册
查看: 1441|回复: 8

[已解决]求帮忙看一下最大公约数

[复制链接]
发表于 2019-11-3 23:55:16 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
int main()
{
        int m,n,t,i,a;
        printf("输入两个整数m,n:");
        scanf("%d %d",&m,&n);
        
        while(i!=0)
        {
                m%n==i;
                t=n;
                a=i;
                n=a;
                m=t;
                
        }  
        printf("最大公约数为:%d",t);
        return 0;
 } 
指点一下为啥while死循环了 运行的时候输入完数字就没反应了 谢谢!

最佳答案
2019-11-4 00:19:44
本帖最后由 jackz007 于 2019-11-4 01:58 编辑

      循环变量 i 没有赋初值,而且,在整个循环过程中,i 的值始终没给改变,如何能不死循环?
      试试我修改的代码:
#include <stdio.h>
int main(void)
{
        int m , n , t                                               ;
        printf("输入两个整数 m , n : ")                             ;
        scanf("%d%d", & m , & n)                                    ;
        if(m > 0 && n > 0) for(; n > 0 ; t = m % n , m = n , n = t) ;
        else m = 0                                                  ;
        if (m > 1) printf("最大公约数为 : %d\n" , m)                ;
        else printf("m , n 没有最大公约数\n")                       ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-4 00:19:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-11-4 01:58 编辑

      循环变量 i 没有赋初值,而且,在整个循环过程中,i 的值始终没给改变,如何能不死循环?
      试试我修改的代码:
#include <stdio.h>
int main(void)
{
        int m , n , t                                               ;
        printf("输入两个整数 m , n : ")                             ;
        scanf("%d%d", & m , & n)                                    ;
        if(m > 0 && n > 0) for(; n > 0 ; t = m % n , m = n , n = t) ;
        else m = 0                                                  ;
        if (m > 1) printf("最大公约数为 : %d\n" , m)                ;
        else printf("m , n 没有最大公约数\n")                       ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-11-4 00:51:51 | 显示全部楼层
本帖最后由 bin554385863 于 2019-11-4 03:51 编辑

#include <stdio.h>
int main()
{
        int m,n,t,i,a;
        printf("输入两个整数m,n:");
        scanf("%d %d",&m,&n);
        
        while(i!=0)——>i没有初始化,当然会陷入死循环
        {
                m%n==i;
                t=n;
                a=i;
                n=a;
                m=t;
#include <stdio.h>
int main(int argc, char const *argv[])
{
    int m = 1, n = 1, res = 0, count = 0;
    printf("请输入计算的次数\n");
    scanf("%d", &count);
    while (count != 0)
    {
        printf("请输入要计算的两个数\n");
        scanf("%d%d", &m, &n);
        if ((n && m) != 0)
        {
            int t = m < n ? m : n; //最大公约数必然小于较小的数
            for (size_t i = t; i >= 1; i--)
            {
                if ((m % i == 0) && (n % i == 0))
                {
                    res = i;
                    break;
                }
            }
        }
        else
        {
            printf("无效数字0, 请重新输入\n\n");
            continue;
        }  
        printf("[%d]和[%d]的最大公约数是(%d)\n\n", m, n, res);
        count--;
        res = 0;
    }
    return 0;
}
---------------------------------------------------------------------------------------------------
PS E:\Users\admin\Documents\VScode> & 'c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-ouganha0.xjx' '--stdout=Microsoft-MIEngine-Out-3d2cknc2.gdv' '--stderr=Microsoft-MIEngine-Error-o4fgkqzu.uva' '--pid=Microsoft-MIEngine-Pid-pnioebrm.avr' '--dbgExe=D:\MinGW\bin\gdb.exe' '--interpreter=mi'
请输入计算的次数
3
请输入要计算的两个数
32 0
无效数字0, 请重新输入

请输入要计算的两个数
23 25
[23]和[25]的最大公约数是(1)

请输入要计算的两个数
120 564
[120]和[564]的最大公约数是(12)

请输入要计算的两个数
999 555
[999]和[555]的最大公约数是(111)


PS E:\Users\admin\Documents\VScode>

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
段软w + 3 + 3 + 3 谢谢!!好厉害

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-11-4 09:20:06 | 显示全部楼层
jackz007 发表于 2019-11-4 00:19
循环变量 i 没有赋初值,而且,在整个循环过程中,i 的值始终没给改变,如何能不死循环?
      试 ...

谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-4 09:34:22 | 显示全部楼层
c语言种,定义变量不赋初始值,系统会给一个默认值(内存空间地址),你可以debuger看一下,对你理解有一定帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-4 12:29:39 | 显示全部楼层
heboy18 发表于 2019-11-4 09:34
c语言种,定义变量不赋初始值,系统会给一个默认值(内存空间地址),你可以debuger看一下,对你理解有一定 ...

“系统会给一个默认值”

这句应该改成这样比较合适
系统会给一个随机值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2019-11-5 11:02:34 | 显示全部楼层
人造人 发表于 2019-11-4 12:29
“系统会给一个默认值”

这句应该改成这样比较合适

表达错误,谢谢指正
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-5 12:44:33 | 显示全部楼层
heboy18 发表于 2019-11-4 09:34
c语言种,定义变量不赋初始值,系统会给一个默认值(内存空间地址),你可以debuger看一下,对你理解有一定 ...

好的 谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-5 12:45:05 | 显示全部楼层
人造人 发表于 2019-11-4 12:29
“系统会给一个默认值”

这句应该改成这样比较合适

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-4 19:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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