1、三级数据库技术-544 及答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.已知在文件 in.dat中存有 N个实数(N200),函数 ReadDat()是读取这 N个实数并存入数组 xx中。请编制函数 CalValue(),其功能要求:1.求出这 N个实数的平均值 aver;2.分别求出这 N个实数的整数部分值之和 sumint以及小数部分值之和 sumdec,最后调用函数 WriteDat()把所求的结果输出到文件out.dat中。 请勿改动主函数 main()、读函数 ReadDat()和输出函数 WriteDat()的内容。 #i
2、nclude stdio.h #define MAXNUM 200 float xxMAXNUM; int N=0; /文件 in.dat中共有多少个实数 double aver=0.0; /平均值 double sumint=0.0; /整数部分值之和 double sumdec=0.0; /小数部分值这和 int ReadDat (void); void WriteDat(void); void CalValue(void) void main() if (Readmat () printf(“数据文件 in.dat不能打开! 007n“); return; CalValue (); pr
3、intf (“文件 in.dat是共有实数%d 个n“, N); printf(“平均值=%.21fn“, aver); printf(“整数部分值之和=%.21fn“, sumint); printf(“小数部分值之和=%.21fn“, sumdec); WriteDat (); /*从文件 in.dat中读取 N个实数并存入数组 xx中*/ int ReadDat (void) FILE *fp; if(fp=fopen (“in.dat“, “r“) ) =NULL) return 1; /*当文件指针 fp没有到达文件的结尾时,从文件 in.dat中读取一个实数存入数组元素 xxN中*
4、/ while (!feof (fp) fscanf(fp, “%f,“, if(xxN0.001) N+; fclose (fp); return 0; /*把所求的结果输出到文件 out.dat中*/ void WriteDat(void) FILE *fp; fp=fopen(“out.dat“, “w“); /*把计算结果 N, aver, sumint, sumdec的值写入到文件 out.dat中*/ fprintf(fp, “%dn%.21fn%.21fn%.21f n“, N, aver, sumint, sumdec); fclose(fp); (分数:100.00)_三级数
5、据库技术-544 答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.已知在文件 in.dat中存有 N个实数(N200),函数 ReadDat()是读取这 N个实数并存入数组 xx中。请编制函数 CalValue(),其功能要求:1.求出这 N个实数的平均值 aver;2.分别求出这 N个实数的整数部分值之和 sumint以及小数部分值之和 sumdec,最后调用函数 WriteDat()把所求的结果输出到文件out.dat中。 请勿改动主函数 main()、读函数 ReadDat()和输出函数 WriteDat()的内容。 #inclu
6、de stdio.h #define MAXNUM 200 float xxMAXNUM; int N=0; /文件 in.dat中共有多少个实数 double aver=0.0; /平均值 double sumint=0.0; /整数部分值之和 double sumdec=0.0; /小数部分值这和 int ReadDat (void); void WriteDat(void); void CalValue(void) void main() if (Readmat () printf(“数据文件 in.dat不能打开! 007n“); return; CalValue (); printf
7、 (“文件 in.dat是共有实数%d 个n“, N); printf(“平均值=%.21fn“, aver); printf(“整数部分值之和=%.21fn“, sumint); printf(“小数部分值之和=%.21fn“, sumdec); WriteDat (); /*从文件 in.dat中读取 N个实数并存入数组 xx中*/ int ReadDat (void) FILE *fp; if(fp=fopen (“in.dat“, “r“) ) =NULL) return 1; /*当文件指针 fp没有到达文件的结尾时,从文件 in.dat中读取一个实数存入数组元素 xxN中*/ wh
8、ile (!feof (fp) fscanf(fp, “%f,“, if(xxN0.001) N+; fclose (fp); return 0; /*把所求的结果输出到文件 out.dat中*/ void WriteDat(void) FILE *fp; fp=fopen(“out.dat“, “w“); /*把计算结果 N, aver, sumint, sumdec的值写入到文件 out.dat中*/ fprintf(fp, “%dn%.21fn%.21fn%.21f n“, N, aver, sumint, sumdec); fclose(fp); (分数:100.00)_正确答案:()
9、解析:int j; long num; /*依次对数组 xx中的 N个实数进行处理*/ for(i=0; iN;i+) num=(long)xxi; /把实型数据 xxi转换成长整型数据,得到 xxi的整数部分的数赋给变量 num sumint+=num; /把 xxi的整数部分的数累加到变量 sumint /*实型数据 xxi减去其整数部分的数值,得到其小数部分的数值并累加到 sumdec*/ sumdec+=(xxi-num); aver+=xxi; /把实数 xxi累加到变量 aver aver/=N; /N个实数的和 aver除以其个数 N得到平均值,赋给变量 aver 解析 求实数的平均值 aver;求实数的整数部分之和及小数部分之和。 定义整型循环变量 i和长整型变量 num。 在 for循环语句中,循环变量 i从 0开始,依次递增直到其值等于或大于 N时,结束循环。在循环体中,把数组元素 xxi的数据类型通过强制数据类型转换成长整型数据所得的整数赋给变量 num,再把 num的值累加到变量 sumint,用数组元素 xxi的值减去 num的值就得到 xxi的小数部分,把这个值累加到变量 sumdec。把数组元素 xxi累加到变量 aver。 退出循环后,用变量 aver的值除 N就得到了这 N个实数的平均值,赋给变量 aver。