C语言如何将for循环多个值传入函数比较,解决仅获取最新值问题
问题原因
你现有代码的核心问题是biggest函数内定义的int biggest=0属于局部自动变量,每次调用该函数时都会重新初始化赋值为0,函数运行结束后变量就会被销毁,无法存储前几次循环传入的平均值,自然没法完成多轮数值的对比。
可行实现方案
这里提供两种符合作业要求的实现思路:
方案1:用静态变量存储历史最大值(逐次传入对比)
静态变量只会在第一次调用函数时初始化,后续调用会保留上一次的存储值,刚好适配你逐次传入平均值的场景:
#include <stdio.h> // 函数提前声明 int biggest(int average); int main() { int cases, population; for (int i=1; i<=5; i++) { printf("Input total number of COVID cases for country %d: ", i); scanf("%d", &cases); printf("Input total population for country %d: ", i); scanf("%d", &population); // 调整计算顺序避免整数除法精度损失和除零问题 int average = (long long)cases * 100000 / population; int max_val = biggest(average); // 循环结束后打印最终最大值 if (i == 5) { printf("Biggest value of cases per 100k population is %d\n", max_val); } } return 0; } int biggest(int average) { // 静态变量仅第一次调用时初始化,后续保留历史值 static int max_val = -1; if (average > max_val) { max_val = average; } return max_val; }
方案2:先收集所有平均值再传入函数计算(更规范的封装逻辑)
这种方案把「求最大值」的逻辑完全封装在函数内,函数职责更清晰,更符合作业要求的函数实现规范:
#include <stdio.h> // 函数接收平均值数组和数组长度,返回最大值 int find_max(int arr[], int len); int main() { int cases, population; int averages[5]; // 存储5个国家的平均值 for (int i=0; i<5; i++) { printf("Input total number of COVID cases for country %d: ", i+1); scanf("%d", &cases); printf("Input total population for country %d: ", i+1); scanf("%d", &population); averages[i] = (long long)cases * 100000 / population; } int max_val = find_max(averages, 5); printf("Biggest value of cases per 100k population is %d\n", max_val); return 0; } int find_max(int arr[], int len) { int max_val = arr[0]; for (int i=1; i<len; i++) { if (arr[i] > max_val) { max_val = arr[i]; } } return max_val; }
注意事项
原有计算逻辑cases / (population / 100000)存在两个问题:
- 当国家总人口小于10万时,
population / 100000结果为0,会触发除零错误 - 两次整数除法会导致结果精度损失严重,调整为
(long long)cases * 100000 / population先乘后除可以避免上述问题
内容的提问来源于stack exchange,提问作者Hello
相关产品推荐
相关产品推荐

