題目83(無憂id 34 方差運算題)
請編制函數ReadDat()實現(xiàn)從文件IN.DAT中讀取1000個十進制整數到數組xx中;請編制函數Compute()分別計算出xx中奇數的個數odd,奇數的平均值ave1,偶數的平均值ave2以及所有奇數的方差totfc的值,最后調用函數WriteDat()把結果輸出到OUT.DAT文件中。
計算方差的公式如下:
N 2
totfc=1/N ∑ (xx[i]-ave1)
i=1
設N為奇數的個數,xx[i]為奇數,ave1為奇數的平均值。
原始數據文件存放的格式是:每行存放10個數,并用逗號隔開。(每個數均大于0且小于等于2000)
部分源程序存在文件prog1.c中。
請勿改動主函數main()和輸出數據函數writeDat()的內容。
#include
#include
#include
#define MAX 1000
int xx[MAX],odd=0,even=0;
double ave1=0.0,ave2=0.0,totfc=0.0;
void WriteDat(void);
int ReadDat(void)
{
int i;
FILE *fp;
if((fp=fopen("IN.DAT","r"))==NULL) return 1;
/*********編制函數ReadDat()的部分************/
for(i=0;i    {fscanf(fp,"%d,",&xx[i]);
if((i+1)%10==0)
fscanf(fp,"\n");
}
/*******************************************/
fclose(fp);
return 0;
}
void Compute(void)
{ int i,yy[MAX];
for(i=0;i    yy[i]=0;
for(i=0;i    if(xx[i]%2) { yy[odd++]=xx[i]; ave1+=xx[i];}
else { even++; ave2+=xx[i];}
if(odd==0) ave1=0;
else ave1/=odd;
if(even==0) ave2=0;
else ave2/=even;
for(i=0;i    totfc+=(yy[i]-ave1)*(yy[i]-ave1)/odd;
}
void main()
{
int i;
for(i=0;i    if(ReadDat()){
printf("數據文件IN.DAT不能打開!\007\n");
return;
}
Compute();
printf("ODD=%d\nAVE1=%f\nAVE2=%f\nTOTFC=%f\n",odd,ave1,ave2,totfc);
WriteDat();
}
void WriteDat(void)
{
FILE *fp;
int i;
fp=fopen("OUT.DAT","w");
fprintf(fp,"%d\n%f\n%f\n%f\n",odd,ave1,ave2,totfc);
fclose(fp);
}
    
   
                   
              請編制函數ReadDat()實現(xiàn)從文件IN.DAT中讀取1000個十進制整數到數組xx中;請編制函數Compute()分別計算出xx中奇數的個數odd,奇數的平均值ave1,偶數的平均值ave2以及所有奇數的方差totfc的值,最后調用函數WriteDat()把結果輸出到OUT.DAT文件中。
計算方差的公式如下:
N 2
totfc=1/N ∑ (xx[i]-ave1)
i=1
設N為奇數的個數,xx[i]為奇數,ave1為奇數的平均值。
原始數據文件存放的格式是:每行存放10個數,并用逗號隔開。(每個數均大于0且小于等于2000)
部分源程序存在文件prog1.c中。
請勿改動主函數main()和輸出數據函數writeDat()的內容。
#include
#include
#include
#define MAX 1000
int xx[MAX],odd=0,even=0;
double ave1=0.0,ave2=0.0,totfc=0.0;
void WriteDat(void);
int ReadDat(void)
{
int i;
FILE *fp;
if((fp=fopen("IN.DAT","r"))==NULL) return 1;
/*********編制函數ReadDat()的部分************/
for(i=0;i
if((i+1)%10==0)
fscanf(fp,"\n");
}
/*******************************************/
fclose(fp);
return 0;
}
void Compute(void)
{ int i,yy[MAX];
for(i=0;i
for(i=0;i
else { even++; ave2+=xx[i];}
if(odd==0) ave1=0;
else ave1/=odd;
if(even==0) ave2=0;
else ave2/=even;
for(i=0;i
}
void main()
{
int i;
for(i=0;i
printf("數據文件IN.DAT不能打開!\007\n");
return;
}
Compute();
printf("ODD=%d\nAVE1=%f\nAVE2=%f\nTOTFC=%f\n",odd,ave1,ave2,totfc);
WriteDat();
}
void WriteDat(void)
{
FILE *fp;
int i;
fp=fopen("OUT.DAT","w");
fprintf(fp,"%d\n%f\n%f\n%f\n",odd,ave1,ave2,totfc);
fclose(fp);
}

