[英]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.