You need to enable JavaScript to run this app. C语言for循环无法正确统计数组温度分类值的问题求助
优惠活动
大模型
产品
解决方案
定价
更多

C语言for循环无法正确统计数组温度分类值的问题求助

导致你分类统计失效的具体问题及修正方案
  • 分类计数器未做初始化
    你定义的r1/r2/r3属于局部栈变量,按照C语言语法规则,这类变量不手动赋值的话,内存中存储的是之前程序运行残留的随机垃圾值,并不是你默认以为的从0开始计数。哪怕分类循环的逻辑完全正确,最终输出的统计结果也是毫无参考价值的乱值。修正方式为定义变量时直接赋予初始值:int r1 = 0, r2 = 0, r3 = 0;
  • 分类循环存在数组越界问题
    你的temp数组一共存储26个温度值,C语言数组下标从0开始计数,有效访问的下标范围是0~25。你写的循环条件是i <= 26,当循环跑到i=26时,会尝试读取数组边界外的内存值,将这个随机值纳入分类判断流程,自然会打乱最终的统计结果。把循环条件改成i < 26,就能刚好覆盖所有数组元素,不会越界。
  • 求平均逻辑的隐藏隐患(当前结果对纯属偶然)
    你定义的sum和avg同样是未初始化的局部浮点变量,现在算出的平均结果正确,只是栈内存残留值刚好没有干扰计算结果,后续换个编译环境或者代码改动后很可能出问题。另外你把avg = sum / i写在循环体内部,属于逻辑错位:应该等所有温度值累加完成得到总sum后,再统一除以总天数计算平均,现在的写法会在循环里反复做无意义的除法运算,最后只是碰巧因为循环结束时i的取值蒙对了结果。

修正后可正常运行的完整代码

// write program to process collection of daily high temps
#include <stdio.h>

int main (void)
{
    int temp[26] = {55, 62, 68, 74, 59, 45, 41, 58, 60, 67, 
                    65, 78, 82, 88, 91, 92, 90, 93, 87, 80, 
                    78, 79, 72, 68, 61, 59};

    int i;
    float sum = 0;
    float avg;
    int r1 = 0, r2 = 0, r3 = 0; // range 1, range 2, range 3

    // Loop to catagorize temperature values
    for(i = 0; i < 26; i++)
    {
        if (temp[i] <= 60)
        {
            r1++;
        }
        else if ((temp[i] > 60) && (temp[i] <= 84))
        {
            r2++;
        }
        else 
        {
            r3++;
        }   
    }

    printf("\nThe number of cold days are: %d", r1);
    printf("\nThe number of pleasant days are: %d", r2);
    printf("\nThe number of hot days are: %d", r3);

    // Loop to take the average temperature
    for (i = 0; i < 26; i++)
    {
        sum = sum + temp[i];
    }
    avg = sum / 26;

    printf("\nThe average temperature of the set is: %.2f\n", avg);

    return 0;
}

修正后程序运行输出:

  • 冷天(≤60°F):7天
  • 舒适天(60°F < 温度 ≤84°F):13天
  • 热天(>84°F):6天
  • 平均气温:约71.23°F

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 17:24:10