Онлайн компилятор 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--; } } int main() { printf("%d", nod(3, 4)); return 0; }
这段代码定义了一个计算最大公约数(НОД)的函数 `nod`,并在 `main` 中测试它。函数从两个数中较小的那个开始向下循环,找到第一个能同时整除两个数的数作为结果。但代码存在一个问题:函数没有返回值。

- 函数 `nod` 中声明了 `nod` 变量并赋值,但函数末尾没有 `return` 语句。C语言要求非 `void` 函数必须返回一个值,否则行为未定义。你需要确保函数返回计算出的最大公约数。

- 变量 `c` 的初始赋值有些冗余:先设为1,后面又改为 `min`。可以直接用 `min` 初始化循环变量,去掉不必要的 `c = 1`。