已知在IN.DAT中存有若干个(个数<200)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求:1.求出这文件中共有多少个正整数tofNum;2求这些正整数右移1位二进制位后,产生的新数是奇数的数的个数totCnt,以及满足此条件的这些正整数(右移前的值)的算术平均值cotPjz。最后main()函数调用函数WriteDat()把所求的结果输出到文件OUT.DAT中。
注意:部分源程序存放在PROG1.C中。请勿改动数据文件IN.DAT中的任何数据,主函数main()、读函数ReadDat1()和输出函数WriteDat()的内容。
[试题程序]
#include
#define MAXNUM 200
int XX[MAXNUM];
int totNum=0;/*文件INDAT中共有多少个正整数*/
int totCnt=0;/*符合条件的正整数的个数*/
double totPjz=0.0;/*平均值*/
int ReadDat(void);
void WriteDat(void);
void CalValue(void)
void main()
int i;
for(i=0;i<MAXNUM;i++) XX[i]=0;
if (ReadDat())
printf(“数据文件IN.DAT不能打开!\007\n”);
return;
CalValue();
printf(“文件IN.DAT中共有正整数=%d个\n”,totNum);
printf(“符合条件的正整数的个数=%d个\n”,totCnt);
printf(“平均值=%.2lf\n”,totpjz);
WriteDat();
int ReadDat(void)
FILE *fp;
int i=0;
if((fp=fopen("in.dat","r")==NULL)
return 1;
while(!feof(fp))
fscanf(fp,"%d,",&xx[i++]);
fclose(fp);
return 0;
void WriteDat(void)
FILE *fp;
fp=fopen(¨out.dat","W");
fprintf(fP,"%d\n%d\n%.2lf\n",totNum,totCnt,totPjz);
fclose(fp);
参考答案:void CalValue(void)
{int i; /*定义变量*/
for(i=0;i<MAXNUM;i++) /*统计个数*/
if(xx[i]>0)
{ totNum++;
if((xx[i]>>1)%2==1)
{ totCnt++;
totpjz+=xx[i];
}
totPjz/=totCnt; /*求平均值*/
}
解析: 本题要求统计已知正整数的个数,并求按判断条件进行筛选后的平均值。依据题意,应先依次取得每个已知正整数,统计正整数的个数并根据题目中给出的判断条件(右移一位二进制位后,产生的新数是奇数,即(xx[i]>>1)%2==1)筛选后统计求和,最后根据符合条件的数的个数与总和求平均值。