已知在文件IN42.DAT中存有N个实数(N<200),函数ReadDat()读取这N个实数并存入数组xx中。请编制程序CalValue(),其功能要求: (1)求出这N个实数的平均值aver。 (2)分别求出这N个实数的整数部分值之和sumi

admin2009-02-19  35

问题 已知在文件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 x,sum=0; for(i=0;i<N;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个实数求和及平均值,可以使用循环结构。
转载请注明原文地址:https://kaotiyun.com/show/FESZ777K
0

随机试题
最新回复(0)