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
相关产品推荐
相关产品推荐

