c语言求最大公约数dowhile怎么写?附完整示例
时间:2026-08-19 | 作者:public.com?id=1540526&& | 阅读:0用do while在C语言里求最大公约数,关键是先执行一次取余,再用余数是否为0决定是否继续。本文用欧几里得算法说明思路、代码写法、输入输出处理和结果验证方法。
什么情况下适合用do while求最大公约数
求最大公约数最常用的方法是欧几里得算法,也就是反复用较大的数除以较小的数,直到余数变成0。最后一个非0除数,就是两个整数的最大公约数。
do while适合这类至少要先执行一次的循环。因为无论输入的两个数是多少,都需要先做一次取余运算,再判断是否继续,所以它比先判断条件的while更贴合这道题的执行顺序。
dowhile实现思路
写这类题时,先读入两个整数,再把它们处理成便于计算的正数。这样既能兼容用户输入负数,也能减少后面判断分支。
循环部分只保留三个核心动作:先求余数,再让被除数和除数后移,最后根据新除数是否为0决定是否继续。思路清楚后,代码通常不会出错。
- 输入两个整数a和b。
- 若a或b为负数,先转成正数再参与计算。
- 执行r = a % b。
- 令a = b,
b = r。 - 当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值与输入校验,代码就会更完整、也更容易通过测试。
来源:整理自互联网
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- c语言求最大公约数:3种常用写法与完整示例
- 时间:2026-08-19
-
- c语言求最大公约数的原理:辗转相除法怎么写
- 时间:2026-08-19
-
- 「c语言程序设计求最大公约数」3种常用方法与代码示例
- 时间:2026-08-13
-
- c语言求最大公约数怎么求
- 时间:2026-08-13
-
- c语言求最大公约数的程序怎么写?附完整示例
- 时间:2026-08-13
-
- c语言求最大公约数流程图怎么画?欧几里得算法步骤详解
- 时间:2026-08-13
-
- c语言求最大公约数方法怎么写?3种常用思路与示例
- 时间:2026-08-13
-
- c语言求最大公约数辗转相除法怎么写?完整思路与示例代码
- 时间:2026-08-13
精选合集
更多大家都在玩
大家都在看
更多-
- 鼠标宏制作完成后一键启用方法
- 时间:2026-08-19
-
- 虎牌电饭煲快煮模式设置详细步骤与方法
- 时间:2026-08-19
-
- 联想笔记本忘记开机密码的简单取消方法
- 时间:2026-08-19
-
- 滚筒洗衣机被锁住用钥匙解锁的正确方法
- 时间:2026-08-19
-
- 神舟笔记本设置U盘启动后不识别如何解决
- 时间:2026-08-19
-
- 如何将虚拟内存设置到第二块硬盘
- 时间:2026-08-19
-
- 三星灵动视角是否影响拍照效果?一文详解
- 时间:2026-08-19
-
- vivo浏览器安装文件夹位置在哪
- 时间:2026-08-19