arrays - 如何在 C 中正确平均这些数字?
问题描述
我写了一些从另一个文件中读取数字的代码,它应该从文件中输入数字并输出平均值。我输入的数字是(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。我该如何纠正这个……”
只关注最后一个循环,需要考虑的几个项目将解决这个问题,以及其他一些:
根据分子和除数的值,由于整数除法舍入误差,平均值可能不完全正确。 如果这对您来说是个问题,第一个代码片段会解决它。如果不是,则以下代码段仅处理跳过的数组元素...
如前所述,原始帖子中的以下代码段递增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
}
请注意,如果您可以接受整数除法的效果,请使用以下命令:
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");
以只读方式打开文件。但是将得到的平均值放回文件中需要重新打开文件以进行追加并使用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;
}
推荐阅读
- list - f# 连接对象列表
- pytorch - torch.cuda.is_available() 在 AWS 'ml.p2.xlarge' GPU 端点中为 False
- python - 变量不会将自身添加到先前的数量
- java - JPA EntityManager 和查询方法组合 No property found for type
- swiftui - 将 ScrollView 位置重置到页面顶部
- python - Python Pandas SQL/ 使用列名元组通过 pd.read_sql 和 sql 数据库中的参数读取它
- mysql - 如何将文本框绑定到绑定到 DataTable 的 DataGrid 的 SelectedItem
- xcode - 为什么会出现“将 app_id 作为 gadapplicationidentifier 写入密钥”提示?
- reactjs - uniform1i 切换到错误的纹理单元
- google-cloud-platform - 谷歌云平台权限错误:为什么错误消息没有说明哪个帐户/服务帐户正在尝试该操作?