我正在尝试编写一个程序,该程序采用用户输入的文本文件并返回最大数、最小数、数字的平均值和数字的标准偏差。我们输入的文本文件格式如下(第一个数字是“N”,或数字总数,第二行是所有数字的列表):
5
4.34 23.4 18.92 -78.3 17.9
到目前为止,这是我的代码
int main(int argc, char*argv[])
{
double average, num = 0, min = 0, max = 0, sum = 0, N, std_dev, sum_sqs;
FILE * pFile;
pFile = fopen("argv[1]", "r");
fscanf(pFile, "%lf", &N);
while(!feof(pFile))
{
fscanf(pFile, "%d", &num);
if (num < min)
min = num;
if (num > max)
max = num;
sum += num;
sum_sqs += (num*num);
}
average = sum/N;
std_dev = sqrt((sum_sqs/N)-(average*average));
printf("Smallest: %.2lf\n", min);
printf("Largest: %.2lf\n", max);
printf("Average: %.2lf\n)", average);
printf("Standard deviation: %.3lf\n", std_dev);
return(0);
}
目前,编译器不允许我通过关于未定义的 sqrt 引用的错误,我无法弄清楚出了什么问题。提前感谢所有花时间回复的人!我真的很感激任何帮助,我仍然掌握 C 的窍门。如果我的代码没有按照我的意图做,请不要犹豫,纠正我!
将混乱的部分更新到下面。尽管哈哈 pFile = fopen(argv[1], "r"); 仍然不确定我到底在做什么 fscanf(pFile, "%lf", &N);
if (fscanf(pFile, "%lf", &N) == 1)
{
for (int i = 0; i < N; i++)
{
if (fscanf(pFile, "%lf", &num) == 1)
if (num < min)
min = num;
if (num > max)
max = num;
sum += num;
sum_sqs += (num*num);
}
average = sum/N;
std_dev = sqrt((sum_sqs/N)-(average*average));