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

已知在文件IN42.DAT中存有N个实数(N<200),函数ReadDat()读取这N个实数并存入数组xx中。请编制程序

题目

已知在文件IN42.DAT中存有N个实数(N<200),函数ReadDat()读取这N个实数并存入数组xx中。请编制程序CalValue(),其功能要求:

(1)求出这N个实数的平均值aver。

(2)分别求出这N个实数的整数部分值之和sumint及其小数部分之和sumdec,最后调用函数WriteDat()把所求的结果输出到文件OUT42.DAT中。

注意;部分源程序已给出。

请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。

试题程序:

include<stdio.h>

include<conio.h>

define MAXNUM 200

float xx[MAXNUM];

int N=0;

double aver=0.0;

double sumint=0.0;

double sumdec=0.0;

int ReadDat( );

void WriteDat( );

void CalValue

{

}

void main( )

{

clrscr( );

if(ReadDat( ))

{

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

return;

}

CalValue ( );

printf ("文件IN42.DAT中共有实数%d个\n", N);

printf ("平均值=%.21f\n", aver);

printf ("整数部分=%.21f\n", sumint);

printf ("小数部分之和=%.21f\n", sumdec);

WriteDat( );

}

int ReadDat()

{

FILE *fp;

int j;

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

return 1;

while(!feof(fp))

{

fscanf (fp, "%f", &xx [N] );

if (xx[N] >0.001) N++;

}

fclose(fp);

return 0;

}

void WriteDat()

{

FILE *fp;

fp=fopen("OUT42.DAT","w");

fprintf(fP,"%d\n%.21f\n%.21f\n%.21f\n",N,aver,sumint,sumdec);

fclose(fp);

}

参考答案
正确答案:void CalValue( ) { int i; double xsum=0; for(i=0;iN;i++) { sumint=sumint+(int)xx[i]; /*求整数部分之和*/ x=xx[i]-(int)xx[i]; /*求每个数的小数部分*/ sumdec=sumdec+x; /*求小数部分之和*/ sum=sum+xx[i]; /*求N个数之和*/ } aver=sum/N; /*求N个数的平均数*/ }
void CalValue( ) { int i; double x,sum=0; for(i=0;iN;i++) { sumint=sumint+(int)xx[i]; /*求整数部分之和*/ x=xx[i]-(int)xx[i]; /*求每个数的小数部分*/ sumdec=sumdec+x; /*求小数部分之和*/ sum=sum+xx[i]; /*求N个数之和*/ } aver=sum/N; /*求N个数的平均数*/ } 解析:本题考查的知识点如下:
(1)循环结构的使用。
(2)强制类型转换。
将一个实数的整数部分和小数部分分开,这里使用的方法是强制类型转换法。强制类型转换是按照要求将表达式的值转换成指定的类型。将一个实数强制转换成整型数之后,其小数部分被去掉(不是四舍五入,而是直接删除)。对数组中的200个实数求和及平均值,可以使用循环结构。