早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->计算机三级 -->

已知在文件IN.dat中存有若干个(少于200个)四位数字的正整数,函数ReadDat()读取这若干个正整数并

题目

已知在文件IN.dat中存有若干个(少于200个)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组number中。请编写函数CalValue(),其功能要求是:①求出文件中共有的正整数个数totNum;②求这些数右移1位后,产生的新数是奇数的数的个数totCnt以及满足此条件的这些数(右移前的值)的算术平均值totAve。最后调用函数writeDat()把所求的结果输出到OUT.dat文件中。

注意:部分源程序已经给出。请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。

include <stdio.h>

include <conio. h>

define MAXNUM 200

int number [MAXNUM];

int totNum = 0; /* 文件IN.dst 中共有的正整数个数*/

int totCnt = 0; /* 符合条件的正整数的个数*/

double totAve = 0.0; /* 平均值 */

int ReadDat (void);

void writeDat(void);

void CalValue(void)

{

}

void main ()

{ int i;

for (i=0; i<MAXNUM; i++)

number [i] = 0;

if (ReadDat())

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

return;

}

CalValue ();

printf(" 文件 IN.dst 中共有的正整数个数=%d个\n", totNum);

printf (" 符合条件的正整数的个数 =%d个\n", totCnt);

printf("平均值=%.2f\n", totAve);

writeDat ();

}

int ReadDat (void)

{ FILE *fp;

int i = 0;

if ((fp = fopen("IN.dat", "r")) == NULL)

return 1;

while (!feof(fp))

fscanf(fp, "%d,", &number [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, totAve);

fclose (fp);

}

参考答案
正确答案:void CalValue(void) { int i data; for (i=0; iMAXNUM; i++) { if (!number[i]) break; if (number[i] > 0) totNum++; data = number[i]>>1; if (data%2) { totCnt++; totAve += number[i]; } } totAve /= totCnt; } [解题思路] 在for循环语句中自变量i从0递增到MAXNUM对数组number中的每个数进行判断如果number[i]的值大于0说明number[i]的值为正整数统计正整数个数的变量totNum加1;然后number[i]右移1位得到data的值;再对data的值除2求余数如果其值为1则统计变量totCnt加1同时把number[i]的值加到totAve上得到这些数的和。退出循环后用totAve的值除以totCnt就得到了这些数的算术平均值totAve。
void CalValue(void) { int i, data; for (i=0; iMAXNUM; i++) { if (!number[i]) break; if (number[i] > 0) totNum++; data = number[i]>>1; if (data%2) { totCnt++; totAve += number[i]; } } totAve /= totCnt; } [解题思路] 在for循环语句中,自变量i从0递增到MAXNUM对数组number中的每个数进行判断,如果number[i]的值大于0,说明number[i]的值为正整数,统计正整数个数的变量totNum加1;然后number[i]右移1位得到data的值;再对data的值除2求余数,如果其值为1,则统计变量totCnt加1,同时把number[i]的值加到totAve上,得到这些数的和。退出循环后,用totAve的值除以totCnt,就得到了这些数的算术平均值totAve。