题目为:随机生成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;
}
你的代码有几个问题:
fopen(filename, "w")
和fopen(filename, "r")
。fgetc
函数来读取文件,但是fgetc
函数返回的是字符,不是整数。因此,你需要将每个字符转换为整数,然后加到s
变量中。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中。
通过对代码进行以上修改,就可以正确计算平均值并打印输出了。
【相关推荐】