C语言程序优化:实现任意输入顺序的三数大小排序输出
解决C语言三数排序问题(不受输入顺序影响)
你的代码存在几个关键问题,导致只能处理特定顺序的输入:
- 变量初始化不合理:
highestNumber、middleNumber、lowestNumber初始为0,若输入全负数会完全失效 - 条件判断逻辑有漏洞:首次输入时
middleNumber和lowestNumber都是0,后续判断无法正确赋值 - 变量名拼写错误:
printf里的highiestNumber是笔误,应为highestNumber
下面提供两种可靠的修改方案:
方案1:数组存储后排序(简单直观)
把输入的三个数存入数组,通过简单排序后输出,逻辑清晰不易出错:
#include <stdio.h> int main() { int nums[3]; // 输入三个数(提示改为1、2、3,更符合用户习惯) for (int i = 0; i < 3; i++) { printf("Type the %d number: ", i + 1); scanf("%d", &nums[i]); } // 针对三个数的简化冒泡排序 int temp; if (nums[0] > nums[1]) { temp = nums[0]; nums[0] = nums[1]; nums[1] = temp; } if (nums[0] > nums[2]) { temp = nums[0]; nums[0] = nums[2]; nums[2] = temp; } if (nums[1] > nums[2]) { temp = nums[1]; nums[1] = nums[2]; nums[2] = temp; } // 输出排序后的结果 printf("The highest number is: %d, the middle number is: %d and the lowest number is %d.\n", nums[2], nums[1], nums[0]); return 0; }
方案2:动态维护三个值(无需数组)
每次输入后直接更新最大值、中间值、最小值,无需额外数组存储:
#include <stdio.h> int main() { int num, highest, middle, lowest; // 输入第一个数,初始化三个变量 printf("Type the 1st number: "); scanf("%d", &num); highest = middle = lowest = num; // 处理第二个数 printf("Type the 2nd number: "); scanf("%d", &num); if (num > highest) { lowest = middle; middle = highest; highest = num; } else if (num < lowest) { highest = middle; middle = lowest; lowest = num; } else { middle = num; } // 处理第三个数 printf("Type the 3rd number: "); scanf("%d", &num); if (num > highest) { lowest = middle; middle = highest; highest = num; } else if (num < lowest) { highest = middle; middle = lowest; lowest = num; } else { if (num > middle) { lowest = middle; middle = num; } else if (num < middle) { highest = middle; middle = num; } } printf("The highest number is: %d, the middle number is: %d and the lowest number is %d.\n", highest, middle, lowest); return 0; }
两种方案都能处理任意输入顺序的三个不同数字,完全满足需求。
内容的提问来源于stack exchange,提问作者user23711636
相关产品推荐
相关产品推荐

