Online Compiler C

#include <stdio.h> int f(int x) { int num=0; if(x<-2){ num=4; } if(x>=-2 && x<=2){ num=x*x; } if(x>2){ num=x*x+4*x+5; } return num; } int main() { int answer=0,n,save_n=0; while(scanf("%d",&n)==1){ answer=f(n); save_n=answer; if(answer<save_n){ answer=save_n; } } printf("%d",answer); return 0; }
这段代码定义了一个分段函数 f(x),然后在 main 函数中从标准输入读取整数,对每个数调用 f 计算,并试图找出所有结果中的最大值。但代码中存在逻辑错误,导致无法正确找出最大值。

- 在 main 函数的循环中,每次读取 n 后,将 f(n) 的结果赋给 answer,然后又赋给 save_n。接着判断 if(answer < save_n),但此时 answer 和 save_n 是同一个值,这个条件永远不成立,所以实际上没有进行任何比较。你需要一个变量来保存当前遇到的最大值,并在每次计算后与这个最大值比较更新。

- 另外,变量 save_n 的初始值没有意义,因为它在循环中每次都被重新赋值。你应该用一个变量(比如 max)来记录最大值,并初始化为一个很小的数(比如 -2147483648),然后在循环中每次计算 f(n) 后,如果结果大于 max,就更新 max。