本系列資料由"韜略宏智" 授權發布,任何網站不得轉載,否則追究法律責任。
第9題:
已知在文件in9.dat中存在若干個(<200)四位數字的正整數,函數readDat()讀取這若干個正整數并存入數組xx中。請編制函數CalValue(),其功能要求:(1)求出這個文件中共有多少個正整數totNum;(2)求這些數右移1位后,產生的新數是偶數的數的個數totCnt,以及滿足此條件的這些數(右移前的值)的算術平均值totPjz,最后調用函數writeDat()把所求的結果輸出到文件out9.dat中。
部分程序已經給出。
請勿改動主函數main()、讀函數readDat()和寫函數writeDat()的內容。
#include
#include
#define MAXNUM 200
int xx[MAXNUM];
int totNum=0;
int totCnt=0;
double totPjz=0.0;
int readDat(void);
void writeDat(void);
void CalValue(void)
{
}
void main()
{
int i;
clrscr();
for(i=0;iif(readDat())
{
printf("數據文件in9.dat不能打開!\007\n");
return;
}
CalValue();
printf("文件in9.dat中共有正整數=%d個
【答案】
void Compute(void)
{
int i,yy[MAX];
for(i=0;i<1000;i++)
if(xx[i]%2)
{ odd++;
ave1+=xx[i];
}
else
{
even++;
ave2+=xx[i];
yy[even-1]=xx[i];
}
ave1/=odd;
ave2/=even;
for(i=0;i<even;i++)
totfc+=(yy[i]-ave2)*(yy[i]-ave2)/even;
}
【解析】
考點:(1)在給定的數據范圍內,統計偶數和奇數的平均值;
(2)求方差。
本題的解題思路是:逐個判斷數組xx中的元素的奇偶性,并分別統計出個數且累加到不同的變量中,從而求出平均值。判斷奇偶性可以通過判斷xx[i]%2的值來實現,若為1則是奇數,若為0則為偶數。統計個數可以通過設置一個記錄變量,每當條件成立時變量值加1來實現。方差的公式已經給出只需轉換相應的C語言表達式即可。
程序的流程是:首先調用ReadDat()函數將數據讀入xx數據中,然后通過Compute()函數對數據進行處理后,由WriteDat()函數將數據寫回文件中去,本題要求寫出ReadDat()函數,考生可以不把此函數作為重點,在三級的上機考試當中,大多數的程序流程是:先從系統中讀取一個文件,并存放在指定一個位置,然后要求考生編寫程序處理這些數據,由于我們不知道系統中文件的內容和格式,故多數情況下不要求考生編寫。對此感興趣的考生可以分析一下ReadDat()函數,其中feof()函數的功能是判斷文件指示器是否已達到了文件的結尾。
在Compute()函數中,首先進入一個for循環(i=1000結束),其內嵌if語句的功能是判斷a[i]的奇偶性,如果xx數組中的元素不能夠被2整除,即為奇數時,odd加1,且把xx[i]累加到avel中,如果數組中的元素能夠被2整除,即為偶數時,even加1,且把xx[i]累加到ave2中,并把xx[i]順序存入數組yy中,然后通過“/=”將得出奇數的平均值avel和偶數的平均值ave2。最后一個for循環的功能是求方差totfc,關于求方差的公式在題目中已經給出,這里只需轉換成相應的C語言表達式而已,函數結束。