簡體   English   中英

如何在 C 中正確平均這些數字?

[英]How can I average these numbers correctly in C?

我寫了一些從另一個文件中讀取數字的代碼,它應該輸入文件中的數字和 output 的平均值。 我輸入的數字是(1,2,3,4,5,6,7,8,9,10)。 但它給我的平均值是 2,4,6,8.10。

我該如何糾正?

代碼:

#include <stdio.h>
#include <stdlib.h>

int main(){
  FILE *myFile;
  myFile = fopen("numbers.txt", "r");
  int numberArray[10];
  int i;
  int sum = 0;
  int n = 0;
  int avg = 0;

  if (myFile == NULL){
    printf("Error Reading File\n");
    exit (0);
  }

  for (i = 0; i < 10; i++){
    fscanf(myFile, "%d,", &numberArray[i] );
  }
  for (i = 0; i < 10; i++){
    sum += n;
    i++;
    avg = (sum / i);
    printf("Average is: %d\n\n", numberArray[i]);
  }

  fclose(myFile);
  return 0;
}

“...我輸入的數字是 (1,2,3,4,5,6,7,8,9,10) 而不是平均值,它給了我 2,4,6,8.10。我該如何糾正這個……”

只關注最后一個循環,需要考慮的幾個項目將解決這個問題,以及其他一些:

根據分子和除數的值,由於 integer 除法舍入誤差,平均值可能不完全正確。 如果這對您來說是個問題,第一個代碼片段會解決它。 如果不是,則以下代碼段僅處理跳過的數組元素...

如前所述,原始帖子中的以下代碼段將i遞增兩次,一次在for()循環中,然后在i++語句中。 以下地址中的每一個,也更正了賦值語句,所有這些都帶有注釋......

float sum = 0.0;//to avoid integer division rounding error, use a floating point type
float ave = 0.0;

for (i = 0; i < 10; i++){
    //sum += n;//n does not represent the values strore
    sum += (float)numberArray[i];
    //i++;//not needed, i is incremented in for loop
    avg = (sum/i);
    printf("Average is: %f\n\n", ave);
    //                   ^ changed from d to f, 
    //                     and numberArray[i] to ave
}

請注意,如果integer 除法的效果對於您的目的是可以接受的,則使用以下命令:

int sum = 0;
int ave = 0;

for (i = 0; i < 10; i++){
    sum += numberArray[i];
    avg = (sum/i);
    printf("Average is: %d\n\n", ave);
}

並且,如果只需要輸出最終結果(而不是所有中間值),請將最后兩個語句移到 for 循環之后:

for (i = 0; i < 10; i++){
    sum += numberArray[i];
}
avg = (sum/i);
printf("Average is: %d\n\n", ave);

“是否可以將給定的平均值放回文件中?”

原語句: myFile = fopen("numbers.txt", "r"); 以只讀方式打開文件。 但是將得到的平均值放回文件中需要重新打開append的文件並使用fputs()

...
    fclose(myFile);
    //add the following...
    char sAve[20] = {0};
    myFile = fopen("numbers.txt", "a");
    if(myFile)
    {
          sprintf(sAve, "\nAverage is: %f0.6", ave)
          fputs(sAve, myFile);
          fclose(myFile);
    }
    return 0;
}

在這個 for 循環中,您將 i 遞增兩次,一次在 for() 語句中,一次在 i++ 中。

for (i = 0; i < 10; i++){

sum += n;

i++;

avg = (sum/ i);

printf("Average is: %d\n\n", numberArray[i]);

}

如果我理解正確,應該刪除第二個增量。 此外,您的預期 output 我也不太清楚。 如果這不能解決問題,也許可以指定您的問題。

如果您只想要所有數字的平均值,請先將它們加在一起:

for(i=0; i<10; i++){
sum+=numberArray[i];
}

然后除以元素個數

avg = sum/10;

然后你可以打印出平均值:

printf("平均值為:%d\n", avg);

我認為這就是您的代碼打算做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM