问题 问答题

已知在文件in.dat中存有若干个(小于200)的4位数字的正整数,函数ReadDat()读取若干个正整数并存人数组xx中。请编制函数CalValue(),其功能要求:(1)求出这文件中共有多少个正整数totNum;(2)求这些数中的各位数字之和是奇数的数的个数totCnt,以及满足此条件的这些数的算术平均值totPjz,最后调用函数writeDat(),把所求的结果输出到文件out.dat中。
注意:部分源程序已经给出。
请勿改动主函数main()、读函数ReadDat()和写函数writeDAq、()的内容。
[试题源程序]
#include<stdio.h>
#include<conio.h>
#define MAXNUM 200
int xx[MASNUM];
int totNum=0;
int totCnt=0;
double totPjz=0.0:
int ReadDat(void):
void writeDat(void);
void CalValue(void)


void main()

int i;
system("cls");
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("平均值:%2f\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.DAY","w");
fprintf(fp,"%d\n%d\n%6.2f\n",totNum,totCnt,totPjz);
felose(fp);

答案

参考答案:void CalValue(void)
{
int i,data;
int al,a2,a3,a4;
for(i=0:i<MAXNUM;i++)
{
if(!xx[i])break; /*若xx[i]为0,则跳出循环*/
if(xx[i]>0)totNum++; /*若xx[i]大于0,计数值增1*/
a1=xx[i]/1000; /*分离出元素xx[i]的千位*/
a2=xx[1]%1000/100; /*分离出元素xx[i]的百位*/
a3=xx[i]%100/10; /*分离出元素xx[i]的十位*/
a4=xx[i]%10; /*分离出元素xx[i]的个位*/
if((al+a2+a3+a4)%2) /*若元素xx[i]的各位数字之和是奇数*/
{
totCnt++; /*奇数计数值增1*/
totPjz+=xx[i]; /*将满足条件的xx[i]累加进totPjz*/
}
}
totPjz/=totCnt; /*筛选完毕后,将满足条件数的累加和除以这些数的个数得平均值*/
}

解析: 本题主要考查的是奇偶数问题,同时考查了数位分解。首先用for循环遍历数组xx,对于某xx[i]来说,如果为0则跳出循环,如果大于0则计数值totNum增1,使用Y0和/分离出xx[i]的各个位数a1,a2,a3,a4,然后判断各个位数之和是不是奇数,如果是那么totCnt自动增1,并且将该数累加到totPjz中用于求出平均值,当所有元素遍历完后只要totPjz除以个数totCnt就能得到满足条件的数的平均值。

问答题
材料分析题