Online Compiler C

#include <stdio.h> int nod(int a, int b) { int c, nod, min; if (a < b) min = a; else min = b; c = min; while (c > 0) { if (a % c == 0 && b % c == 0) { nod = c; break; } c--; } return nod; } int main() { printf("%d", nod(3, 4)); return 0; }
这段代码定义了一个计算最大公约数(GCD)的函数 `nod`,并在 `main` 中测试了 `nod(3, 4)` 的结果。

代码逻辑是:从两个数中较小的那个开始向下遍历,找到第一个能同时整除 a 和 b 的数,将其作为最大公约数返回。

- 注意变量命名:函数名 `nod` 和内部变量 `nod` 同名,这会导致在函数内部赋值时,变量 `nod` 覆盖了函数名,虽然语法上可行,但容易混淆。建议给变量取不同的名字,比如 `result`。
- 检查 `main` 函数中测试的 `nod(3, 4)`:3 和 4 的最大公约数是 1,但你的代码中 `c` 从 `min=3` 开始,当 `c=3` 时 `4%3!=0`,`c=2` 时 `3%2!=0`,`c=1` 时条件成立,所以结果正确。但考虑一下如果输入的两个数中有一个是 0 的情况,你的循环会如何处理?