如何用循环实现输入多个数字后找出最大值的C语言程序?
解决思路:用单个变量跟踪最大值就行!
嘿,完全不用搞上千个变量来存所有数字——这太没必要了。你只需要两个变量:一个存当前输入的数字,另一个一直记录目前找到的最大值。每次输入新数字后,和这个最大值比一下,如果更大就更新它,根本不用保留所有输入的数字。
我给你修改一下代码,加上详细注释,你一看就懂:
#include <stdio.h> int main(void) { printf("...Find the highest number... (0 to exit)\n\n"); double current_num; // 存当前输入的数字 double max_num; // 跟踪当前的最大值 int is_first_input = 1; // 标记是否是第一个有效输入(避免初始值出错) while (1) { printf("Enter a number: "); scanf("%lf", ¤t_num); // 输入0就退出循环 if (current_num == 0) { break; } // 第一个有效数字直接作为初始最大值 if (is_first_input) { max_num = current_num; is_first_input = 0; // 标记不再是第一次输入 } else { // 新输入的数字比当前最大值大,就更新最大值 if (current_num > max_num) { max_num = current_num; } } } // 最后判断用户有没有输入过有效数字,避免输出奇怪的结果 if (!is_first_input) { printf("\nThe highest number you entered is: %.2lf\n", max_num); } else { printf("\nYou didn't enter any valid numbers!\n"); } return 0; }
关键细节说明:
- 为什么用
is_first_input?:如果直接把max_num初始化为0,那用户输入全是负数的时候,程序会错误地输出0作为最大值。用这个标记可以确保初始最大值是用户输入的第一个有效数字,不管正负都能正确工作。 - 内存效率:不管用户输入10个还是1000个数字,你只占用两个
double变量的内存,完全不会有内存压力。 - 边界处理:如果用户一开始就输入0,程序会提示“没有输入有效数字”,避免输出无意义的结果。
试一下这个代码,输入任意多数字(最后输0退出),它都会准确输出最大值!
内容的提问来源于stack exchange,提问作者icantprogram
相关产品推荐
相关产品推荐

