如何优化三数找最大值的C语言程序?仅用条件语句简化代码
简化三数最大值判断的C语言代码
首先纠正你原代码里的关键错误:多处条件判断中误用了位与运算符&,这会导致逻辑错误,正确的逻辑与应该用&&。
下面是两种仅用条件语句实现的简化方案,兼顾可读性和简洁性:
方案一:区分唯一最大值与多个相等最大值
#include <stdio.h> int main() { float a, b, c; printf("请输入三个数:\na: "); scanf("%f", &a); printf("b: "); scanf("%f", &b); printf("c: "); scanf("%f", &c); if (a == b && b == c) { printf("三个数相等\n"); } else if (a >= b && a >= c) { printf("%.2f 是最大值%s\n", a, (a == b || a == c) ? "(存在相等的最大值)" : ""); } else if (b >= a && b >= c) { printf("%.2f 是最大值%s\n", b, (b == a || b == c) ? "(存在相等的最大值)" : ""); } else { printf("%.2f 是最大值%s\n", c, (c == a || c == b) ? "(存在相等的最大值)" : ""); } return 0; }
优化点
- 先处理最特殊的全相等场景,减少后续分支判断的复杂度
- 用
>=直接覆盖“最大值与其他数相等”的情况,无需单独写分支 - 用三元运算符简化相等最大值的提示输出,代码更紧凑
- 输入提示更直观,输出用
%.2f控制小数精度,提升可读性 - 修复了原代码中
&的误用问题
方案二:仅输出最大值(不区分是否有相等值)
如果不需要区分最大值是否唯一,代码可以更简洁:
#include <stdio.h> int main() { float a, b, c; printf("请输入三个数:\na: "); scanf("%f", &a); printf("b: "); scanf("%f", &b); printf("c: "); scanf("%f", &c); float max; // 先比较a和b,取较大值 if (a >= b) { max = a; } else { max = b; } // 再将较大值和c比较,得到最终最大值 if (c >= max) { max = c; } if (a == b && b == c) { printf("三个数相等\n"); } else { printf("最大值是:%.2f\n", max); } return 0; }
优化点
- 通过两次简单的条件判断逐步筛选出最大值,逻辑清晰易懂
- 单独处理全相等的特殊场景,避免输出冗余信息
- 代码行数大幅减少,可读性显著提升
内容的提问来源于stack exchange,提问作者heisenberg
相关产品推荐
相关产品推荐

