C语言考试备考求助:多数组索引0元素平均值计算问题
问题分析与代码修正
核心问题
你的代码存在两个关键错误:
- 误解题目要求:题目说的是多个输入数组的每个数组的索引0元素,但你把所有输入数据存到了单个一维数组中,并且
avg_km函数只取了这个数组的第一个元素求平均,结果等同于直接返回该元素,完全不符合需求。 - 代码规范问题:
#define MAX放在函数内部是不规范的写法,宏定义属于预编译指令,应放在函数外部全局区域。
修正后的代码
#include <stdio.h> #define MAX 1000 // 计算数组中所有元素的平均值(此时数组存储的是各个输入数组的索引0元素) float avg_km(int arr[], int count) { if (count == 0) { return 0.0f; // 处理空输入,避免除以0 } int sum = 0; for (int i = 0; i < count; i++) { sum += arr[i]; } return (float)sum / count; } void test_worldcup() { int first_elements[MAX]; // 存储所有输入数组的索引0元素 int count = 0; int num; // 读取每行的第一个整数(即每个数组的索引0元素),跳过该行其余内容 while (scanf("%d", &num) == 1) { first_elements[count++] = num; // 清除当前行剩余的输入内容 while (getchar() != '\n' && !feof(stdin)); } float avg = avg_km(first_elements, count); printf("%.2f\n", avg); } int main() { test_worldcup(); return 0; }
修正说明
- 输入处理逻辑:
test_worldcup现在会读取每行的第一个整数(每个数组的索引0元素),跳过该行后续的所有内容,确保收集到的是每个独立数组的首元素。 avg_km函数简化:现在该函数接收存储所有首元素的数组和元素个数,直接计算平均值,逻辑清晰且符合题目要求。- 边界处理:增加了空输入的判断,避免出现除以0的运行时错误。
- 代码规范:把
MAX宏定义移到全局区域,符合C语言编码规范。
内容的提问来源于stack exchange,提问作者andre Sousa
相关产品推荐
相关产品推荐

