在线编译器 C

#include <stdio.h> int nod(int a, int b) { int c, max, min; if (a < b) min = a; else min = b; c = min; while (c > 0) { if (a % c == 0 && b % c == 0) { max = c; break; } c--; } return max; } int main() { printf("%d", nod(3, 4)); return 0; }
这段代码定义了一个计算两个整数最大公约数的函数 `nod`,并在 `main` 中测试了 `nod(3, 4)`。函数从两个数中较小的数开始向下遍历,找到第一个能同时整除两个数的数作为最大公约数。

- 变量 `max` 在函数中可能未被初始化就返回。如果循环从未进入(比如 `c` 初始为0),或者循环内 `break` 从未执行,`max` 将包含不确定的值。检查当 `a` 或 `b` 为0时的情况。
- 函数逻辑可以简化:不需要同时记录 `min` 和 `c`,直接使用 `min` 作为循环变量即可。思考如何用更少的变量实现相同功能。