为什么计算平均值不成功?

题目为:随机生成10个整数,并将它们保存到一个文件中,再从文件中读取,最后计算均值并打印输出

#include<stdio.h>
#include<stdlib.h>
void generate(int a[])
{
    int i;
    for (i = 0; i < 10; i++)
    {
        a[i] = rand() % 1000;         //随机生成0~1000的数字; 
    }
}
double average(int a)
{
    return a / 10;
}
int main()
{
    FILE *fp;
    int a[10], i, s = 0, ch;
    char filename[10];
    printf("请输入文件名:");
    scanf("%s", filename);
    getchar(); 
    fp = fopen("filename", "w");
    if (fp == NULL)
    {
        printf("File cannot open!");
        return 0;
    } 
    printf("随机生成十个0~1000的整数。\n");
    printf("生成的数字为:\n"); 
    generate(a);
    for (i = 0; i < 10; i++)
    {
        fprintf(fp, "%d\t", a[i]);
        printf("%8d", a[i]);
        printf("\n");
    }
    fp = fopen("filename", "r");
    if (fp == NULL)
    {
        printf("File cannot open!");
        return 0;
    }
    while (ch = fgetc(fp) != EOF)
    {
        s = s + ch;
    }
    printf("平均值为:%lf", average(s));
    return 0;
}


















你的代码有几个问题:

  1. 当你试图打开文件时,你使用的是字符串"filename",而不是用户输入的文件名。你应该直接使用fopen(filename, "w")fopen(filename, "r")
  2. 你用fgetc函数来读取文件,但是fgetc函数返回的是字符,不是整数。因此,你需要将每个字符转换为整数,然后加到s变量中。
  3. 在计算平均值时,你直接将s除以10,这会导致结果不准确,因为s是字符类型的累加,不是整数类型的累加。你应该在加和之前将每个字符转换为整数。

下面是修改后的代码:

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

void generate(int a[])
{
    int i;
    for (i = 0; i < 10; i++)
    {
        a[i] = rand() % 1000;         //随机生成0~1000的数字; 
    }
}

double average(int a[])
{
    int sum = 0;
    for(int i = 0; i < 10; i++)
    {
        sum += a[i];
    }
    return (double)sum / 10;
}

int main()
{
    FILE *fp;
    int a[10], i, ch;
    char filename[10];
    printf("请输入文件名:");
    scanf("%s", filename);
    getchar(); 
    fp = fopen(filename, "w");
    if (fp == NULL)
    {
        printf("File cannot open!");
        return 0;
    } 
    printf("随机生成十个0~1000的整数。\n");
    printf("生成的数字为:\n"); 
    generate(a);
    for (i = 0; i < 10; i++)
    {
        fprintf(fp, "%d\t", a[i]);
        printf("%8d", a[i]);
        printf("\n");
    }
    fclose(fp);  //记得在写入文件后关闭文件
    fp = fopen(filename, "r");
    if (fp == NULL)
    {
        printf("File cannot open!");
        return 0;
    }
    int s = 0;
    while (ch = fgetc(fp) != EOF)
    {
        s = s + ch - '0';  //将字符转换为整数
    }
    printf("平均值为:%lf", average(a));  //修改此处,传入数组a而非s
    return 0;
}

这样修改后,程序应该能够正确地计算平均值并输出。

【以下回答由 GPT 生成】

问题出在average函数的参数上。在代码中,average函数的参数应该是一个数组,而不是一个整数。由于传递给average函数的是一个整数,所以在计算平均值的时候会出现错误。

为了修复这个问题,可以将average函数的参数改为数组,并且在函数中对数组进行遍历求和。下面是修改后的代码:

double average(int a[])
{
    int i;
    double sum = 0;
    for (i = 0; i < 10; i++)
    {
        sum += a[i];
    }
    return sum / 10;
}

此外,还需要修改main函数中计算平均值的部分。在这部分代码中,需要使用fscanf函数按照相同的顺序读取文件中的整数,并将它们存储到数组中。然后再调用average函数计算平均值。下面是修改后的代码:

fp = fopen(filename, "r");
if (fp == NULL)
{
    printf("无法打开文件!");
    return 0;
}

for (i = 0; i < 10; i++)
{
    fscanf(fp, "%d", &a[i]);
}

fclose(fp);

printf("平均值为:%lf", average(a));

其中,fscanf(fp, "%d", &a[i])用于读取文件中的整数,并将其存储到数组a中。

通过对代码进行以上修改,就可以正确计算平均值并打印输出了。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^