[英]Text file with C in terminal
因此,我從文件中讀取的雙精度值計算了平均值和標准差。
我的文件數據每行有1個數字:文件中的我的數據如下
1個
2
3
4
5
6
7
8
9
10
我的代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(){
FILE *inputfile;
char name[100];
printf("Enter the file you want to use to calculate standard deviation:\n ");
gets(name);
inputfile = fopen(name, "r");
if (inputfile == NULL)
{
printf("Failed to open text file.\n");
exit(1);
}
double i;
double j=1;
double average;
double stdish=0;
double stdreal=0;
double x=0;
double sum=0;
double stdfinal;
while(fscanf(inputfile, "%lf", &i) != EOF){
x=x+1;
sum = sum + i;
j =pow(i,2);
stdreal +=j;
}
average = sum/x;
stdish = (stdreal/x)-(pow(average,2));
stdfinal = sqrt(stdish);
printf("The average is %.4lf\n", average);
printf("The standard deviation is %.4lf\n", stdfinal);
return 0;
}
我的標准偏差不正確,我不確定為什么。 在我的程序中,我使用fopen從輸入文件中獲取文本。 另外,我試圖做到這一點,以便我從終端而不是在實際程序本身中輸入文本文件。 怎么做?
首先,您需要找出平均值(均值),然后遍歷循環以找出方差。 SQRT(方差)將為您提供標准偏差。
double CalculateMean()
{
double sum = 0;
for(int i = 0; i < max; i++)
sum += value[i];
return (sum / max);
}
double CalculateVariane()
{
mean = CalculateMean();
double temp = 0;
for(int i = 0; i < max; i++)
{
temp += (value[i] - mean) * (value[i] - mean) ;
}
return temp / max;
}
參考: http : //www.softwareandfinance.com/CPP/MeanVarianceStdDevi.html
將main
聲明為int main(int argc, char *argv[])
或int main(int argc, char **argv)
。 他們是同一回事。 在此版本中, argc
是命令行參數的數目(+1是因為程序名稱是參數0)。 argv
是char *
s的數組,每個數組都是一個命令行參數。
您可以執行以下操作:
int main(int argc, char *argv[])
{
FILE *inputfile;
char name[100];
if(argc == 1) {
printf("Enter the file you want to use to calculate standard deviation:\n ");
gets(name);
} else {
strcpy(name, argv[1]);
}
inputfile = fopen(name, "r");
if (inputfile == NULL)
{
printf("Failed to open text file.\n");
exit(1);
}
double i;
double j=1;
double average;
double stdish=0;
double stdreal=0;
double x=0;
double sum=0;
double stdfinal;
while(fscanf(inputfile, "%lf", &i) != EOF){
x=x+1;
sum = sum + i;
j =pow(i,2);
stdreal +=j;
}
average = sum/x;
stdish = (stdreal/x)-(pow(average,2));
stdfinal = sqrt(stdish);
printf("The average is %.4lf\n", average);
printf("The standard deviation is %.4lf\n", stdfinal);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.