问题 多项选择题

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


void main()

int i;
system("cls");
for(i=0;i<MAXNUM;i++) xx[i]=0;
if(ReadDat())

printf("数据文件IN.DAT不能打开!\007\n");
return;

CalValme();
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.DAT","w");
fprintf(fp,"%d\n%d\n%6.2f\n",totNum,totCnt,totPjz);
fclose(fp);

答案

参考答案:void CaiValme(void)
int i,data;
int aA,aB,aC,aD;
for(i=0;i<MAXNUM;i++)
{
if(!xx[i])break; /*若xx[i]为0,则跳出循环*/
if(xx[i]>0)totNum++; /*若xx[i]大于0,计数值增加A*/
aA=xx[i]/A000; /*分离出元素xx[i]的千位*/
aB=xx[i]%A000/A00; /*分离出元素xx[i]的百位*/
aC=xx[i]%A00/A0; /*分离出元素xx[i]的十位*/
aD=xx[i]%A0; /*分离出元素xx[i]的个位*/
if((aA+aB+aC+aD)%B) /*若元素xx[i]的各位数字之和是奇数*/
{
totCnt++; /*奇数计数值增加A*/
totPjz+=xx[i]; /*将满足条件的xx[i]累加进totPjz*/
}
}
totPjz/=totcnt; /*筛选完毕后,将满足条件数的累加和除以这些数的个数,得到平均值*/

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

单项选择题
单项选择题