Онлайн компилятор C

#include <stdio.h> int nod(int a, int b){ int c, result; c=a%b; while(c>=0){ c=a%b; result=b; a=b; b=c; } return result; } int main() { int x, y; scanf("%d%d", &x, &y); printf("%d", nod(x, y)); return 0; }
这段代码试图用辗转相除法(欧几里得算法)求两个数的最大公约数,但逻辑有错误。

- 循环条件 `c>=0` 会导致死循环,因为余数 `c` 始终非负,且循环内没有正确更新 `c` 的初始值。
- 变量 `result` 的赋值时机不对,应该在循环结束后返回正确的 `b` 值。

提示:
- 思考循环何时应该结束:当余数为0时,除数就是最大公约数。检查你的循环条件和变量更新顺序。
- 注意在循环开始前,`c` 的初始值是什么?循环内第一次计算 `c=a%b` 时,`a` 和 `b` 的值是否合理?