位置:首页 > 其他编程语言 > c语言求最大公约数dowhile怎么写?附完整示例

c语言求最大公约数dowhile怎么写?附完整示例

时间:2026-08-19  |  作者:public.com?id=1540526&&  |  阅读:0

用do while在C语言里求最大公约数,关键是先执行一次取余,再用余数是否为0决定是否继续。本文用欧几里得算法说明思路、代码写法、输入输出处理和结果验证方法。

什么情况下适合用do while求最大公约数

求最大公约数最常用的方法是欧几里得算法,也就是反复用较大的数除以较小的数,直到余数变成0。最后一个非0除数,就是两个整数的最大公约数。

do while适合这类至少要先执行一次的循环。因为无论输入的两个数是多少,都需要先做一次取余运算,再判断是否继续,所以它比先判断条件的while更贴合这道题的执行顺序。

dowhile实现思路

写这类题时,先读入两个整数,再把它们处理成便于计算的正数。这样既能兼容用户输入负数,也能减少后面判断分支。

循环部分只保留三个核心动作:先求余数,再让被除数和除数后移,最后根据新除数是否为0决定是否继续。思路清楚后,代码通常不会出错。

  1. 输入两个整数a和b。
  2. 若a或b为负数,先转成正数再参与计算。
  3. 执行r = a % b。
  4. 令a = b,b = r
  5. 当b不等于0时继续循环,循环结束后a就是最大公约数。

完整示例代码

下面这段代码直接使用do while实现最大公约数计算,并补上了输入校验与特殊情况处理。对于常见的课堂作业、练习题和机试题,这种写法已经足够直接。

如果两个数同时为0,最大公约数没有实际意义,因此示例中单独给出提示后结束程序。这样比直接进入取余更安全。

  • 完整示例

    #include 
    #include 
    
    int main(void)
    {
        int a, b, r;
    
        printf("请输入两个整数:");
        if (scanf("%d%d", &a, &b) != 2) {
            printf("输入格式错误n");
            return 1;
        }
    
        a = abs(a);
        b = abs(b);
    
        if (a == 0 && b == 0) {
            printf("0和0不存在最大公约数n");
            return 0;
        }
    
        if (b == 0) {
            printf("最大公约数是:%dn", a);
            return 0;
        }
    
        do {
            r = a % b;
            a = b;
            b = r;
        } while (b != 0);
    
        printf("最大公约数是:%dn", a);
        return 0;
    }
  • 编译命令:cc -std=c11 gcd_dowhile.c -o gcd_dowhile
  • 运行命令:./gcd_dowhile

调试时要注意的几个问题

这道题的错误大多不是算法本身有问题,而是边界处理没写完整。尤其是输入0、负数,或者把a和b更新顺序写反,都会让结果不对。

验证时可以先用容易心算的数据测试,比如12和18、24和36、17和19。前两组能验证一般情况,后一组能验证互质整数是否返回1。

  • 不要在b为0时直接做a % b,否则会出现除零错误。
  • 更新顺序不能颠倒,必须先保存余数,再让a和b后移。
  • 若题目允许负数输入,计算前最好先转成正数。
  • 两个数同时为0时要单独处理,不能当成普通情况直接计算。

如果题目明确要求用do while,按欧几里得算法去写最稳妥。先理清取余、赋值和结束条件这三个步骤,再补上0值与输入校验,代码就会更完整、也更容易通过测试。

来源:整理自互联网
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多