如何找到两组数据的平均值?

如何找到两组数据的平均值?

问题描述:

第一组数据的平均值应该是:(80 + 70 + 65 + 89 + 90)/ 5和第二组(85 + 80 + 80 + 82 + 87)/ 5,但由于某种原因,我的代码是不工作。如何找到两组数据的平均值?

当我运行代码时,我得到17.0和219886384而不是78.8和82.8。

int main(void) 
{  
    int grades[2][5] = {{80, 70, 65, 89, 90}, {85, 80, 80, 82, 87}}; 
    float average; 
    int sum; 
    int i; 
    int j; 
    for(i = 0; i < 2; i++) 
    { 
     sum = 0; 
     for(j = 0; j < 5; j++); 
     { 
      sum += grades[i][j]; 
     } 
     average = sum/5; 
     printf("The average grade for %d is: %f\n", i, average); 
    } 
    return 0; 
} 
+0

请缩进代码! –

+8

只要从你的'for'中删除(; j = 0; j woz

A';'意思是for循环的结束 所以你的代码 'for(j = 0; j < 5; j ++);'等于j = 5;

数组索引超出界限!

由于@woz说,你的问题的一部分是,你永远从0循环运行sum += grades[i][j];〜4

另一个问题是sum5是类型int的,所以即使在你从内部循环中删除多余的分号,你仍然会有不正确的输出。而应该做的:average = sum/5.0f;

因此,你的代码应该是:

#include "stdio.h" 
int main(void) 
{  
    int grades[2][5] = {{80, 70, 65, 89, 90}, {85, 80, 80, 82, 87}}; 
    float average; 
    int sum; 
    int i; 
    int j; 
    for(i = 0; i < 2; i++) 
    { 
     sum = 0; 
     for(j = 0; j < 5; j++) // CHANGE 1: remove semicolon 
     { 
      sum += grades[i][j]; 
     } 
     average = sum/5.0f; // CHANGE 2: ensure that the result is a floating point number 
     printf("The average grade for %d is: %f\n", i, average); 
    } 
    return 0; 
} 

你可以运行它here

<script src="//repl.it/embed/JLAN/0.js"></script>

在未来,当你遇到你的预期与实际结果之间的这种差异,添加断点到您的代码,看看它实际上是在网上寻找解决方案之前做

你得到非常大的值的原因是紧跟着你的数组的内存中的整数(在假设的5位置用于计算“总和”和“平均值”)。 (见relevant SO post

使用整数算术计算平均值:sum/5。使用sum/5.0或将sum定义为浮点变量。

for语句中存在一个愚蠢的错误,for子句之后的额外分号是空语句,将for减少为空循环,后接单个块,该块访问超出数组末尾的条目。

for(j = 0; j < 5; j++); <--- spurious semicolon! 
    { 
     sum += grades[i][j]; 
    } 

如果你把左大括号放在同一行,被称为Kernighan和Ritchie风格,这样的错误会变得不太可能:

for (j = 0; j < 5; j++) { 
     sum += grades[i][j]; 
    } 

同样,如果您定义循环在for子句中的索引,这个错误变成了语法错误的循环索引是超出范围的块:

#include <stdio.h> 

int main(void) {  
    int grades[2][5] = {{80, 70, 65, 89, 90}, {85, 80, 80, 82, 87}}; 

    for (int i = 0; i < 2; i++) { 
     float average, sum = 0; 
     for (int j = 0; j < 5; j++) { 
      sum += grades[i][j]; 
     } 
     average = sum/5; 
     printf("The average grade for %d is: %f\n", i, average); 
    } 
    return 0; 
}