You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)存在两个问题:

  1. 当国家总人口小于10万时,population / 100000结果为0,会触发除零错误
  2. 两次整数除法会导致结果精度损失严重,调整为(long long)cases * 100000 / population先乘后除可以避免上述问题

内容的提问来源于stack exchange,提问作者Hello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:54:06