1、国家三级(数据库技术)机试模拟试卷 42及答案与解析 一、程序设计题 1 已知在文件 IN42.DAT中存有 N个实数 (N 200),函数 ReadDat()读取这 N个实数并存入数组 xx中。请编制程序 CalValue(),其功能要求: (1)求出这 N个实数的平均值 aver。 (2)分别求出这 N个实数的整数部分值之和 sumint及其小数部分之和 sumdec,最后调用函数 WriteDat()把所求的结果输出到文件 OUT42.DAT中。 注意:部分源程序已给出。 请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。 试题程序: #inc
2、lude stdio.h #include conio.h #define MAXNUM 200 float xxMAXNUM; 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不能打开! 007n“ return; CalValue ( ); printf (“文件 IN42. DAT中共有实数
3、 %d个 n“ ,N); printf (“平均值 =%. 21fn“, aver); printf (“整数部分之和 =%. 21fn“, sumint); printf (“小数部分之和 =%.21fn“, sumdec); WriteDat( ); int ReadDat ( ) FILE *fp; int j; if(fp=fopen(“in42.dat“,“r“)=NULL) return 1; while(!feof(fp) fscanf ( fp, “%f“, fclose(fp); return 0; void WriteDat() FILE *fp; fp=fopen(“OU
4、T42.DAT“,“w“); fprintf(fp,“%dn%.21fn%.21fn%.21fn“,N, aver,sumint,sumdec); fclose(fp); 国家三级(数据库技术)机试模拟试卷 42答案与解析 一、程序设计题 1 【正确答案】 void CalValue() int i; double x, sum=0; for(i=0; i N; i+) sumint=sumint+(int)xxi; /*求整数部分之和 */ x=xxi-(int)xxi; /*求每个数的小数部分 */ sumdec=sumdec+x; /*求小数部分之和 */ sum=sum+xxi; /*求 N个数之和 */ aver=sum/N; /*求 N个数的平均数 */ 【试题解析】 本题考查的知识点如下: (1)循环结构的使用。 (2)强制类型转换。 将一个实数的整数部分和小数部分分开,这里使用的方法是强制类型转换法。强制类型转换是按照要求将表达式的值转换成指定的类型。将一个实数强制转换成整型数之后,其小数部分被去掉 (不是四舍五入,而是直接删除 )。对数组中的 200个实数求和及平均值,可以使用循环结构。