在线编译器 C

#include <stdio.h> int nod(int a, int b) { int c = 1, 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)`。函数从两个数中较小的数开始向下遍历,找到第一个能同时整除两个数的数作为结果。

- 变量 `c` 的初始赋值 `c = 1` 是多余的,因为后面立即被 `c = min` 覆盖了。可以简化初始化。
- 函数中声明了 `int nod` 但没有初始化,如果循环从未执行(例如当 `min` 为0时),函数会返回未定义的值。考虑循环条件 `c > 0` 在 `min` 为0时不会进入,导致 `nod` 未赋值。