如何修改现有C语言程序 使其输出输入自然数的最大值与次大值
实现方案
你可以在原有代码基础上增加次大值的存储和更新逻辑即可,以下是修改后的完整代码:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <limits.h> // 引入头文件使用INT_MIN标准常量 int main(void) { int i = 0, num, max_place = -1; int max = INT_MIN; int second_max = INT_MIN; // 新增次大值存储变量 printf("Start enter numbers, bruh (please end input with 0):\n"); scanf("%d", &num); while (num != 0) { if (num > max) { // 新数比最大值大,原最大值降级为次大值,更新最大值 second_max = max; max = num; max_place = i; } else if (num > second_max && num < max) { // 新数介于次大值和最大值之间,仅更新次大值 // 如果需要把和最大值相等的数也算作次大值,可以把上面的<max改成<=max second_max = num; } i++; scanf("%d", &num); } if (max_place == -1) { printf("Numbers were not entered"); } else { printf("\nMax number was on %d place, value: %d, bruh", max_place + 1, max); if (second_max == INT_MIN) { printf("\nNo valid second largest number (only 1 number entered)"); } else { printf("\nSecond largest number value: %d", second_max); } } return 0; }
关键逻辑说明
- 数值更新规则:
- 新输入值大于当前最大值时,原最大值自动变为次大值,新值作为新的最大值
- 新输入值小于最大值但大于当前次大值时,直接更新次大值
- 如果需求允许将和最大值相等的重复值算作次大值,只需要把
else if判断里的num < max条件改为num <= max即可
- 边界处理:
- 仅输入1个有效自然数时,会提示不存在次大值
- 用标准库的
INT_MIN替代手写魔数,兼容性更强
内容的提问来源于stack exchange,提问作者KoraOnEarth
相关产品推荐
相关产品推荐

