9月计算机三级网络技术上机模拟题及答案
已知在文件IN100.DAT中存有N个实数(N<200),函数ReadDat( )读取这N个实数并存入数组xx中。请编制程序CalValue( ),其功能要求:
(1)求出这N个实数的平均值aver。
(2)分别求出这N个实数的整数部分值之和sumint及其小数部分之和sumdec,最后调用函数WriteDat( )把所求的结果输出到文件OUT100.DAT中。
注意:部分源程序已给出。
请勿改动主函数main( )、读函数ReadDat( )和写函数WriteDat( )的内容。
试题程序:
#include
#include
#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( )
{
system("CLS");
if(ReadDat( ))
{
printf("数据文件IN100.DAT不能打开!\007\n");
return;
}
CalValue ( );
printf("文件IN100.DAT中共有实数%d个\n",N);
printf("平均值=%.2lf\n",aver);
printf("整数部分之和=%.2lf\n",sumint);
printf("小数部分之和=%.2lf\n",sumdec);
WriteDat( );
}
int ReadDat()
{
FILE *fp;
if((fp=fopen( "in100.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("OUT100.DAT","w");
fprintf(fp,"%d\n%.2lf\n%.2lf\n%.2lf\n",N,aver,sumint,sumdec);
fclose(fp);
}
【参考答案】
void CalValue( )
{
int i; /*定义循环控制变量*/
double sum=0.0; /*定义存储所有数的'和值的变量*/
for(i=0;i {
sumint+=(int)xx[i]; /*求整数部分之和*/
sumdec+=(xx[i]-(int)xx[i]); /*求小数部分之和*/
sum=sum+xx[i]; /*求N个数之和*/
}
aver=sum/N; /*求N个数的平均数*/
}
【解析】要将一个实数的整数部分和小数部分分开,这里使用的方法是强制类型转换法。强制类型转换是按照要求将表达式的值转换成指定的类型。将一个实数强制转换成整型数之后,其小数部分被去掉(不是四舍五入,而是直接删除)。用该实数减去转换后的整数,就得到了小数部分的值。
在本题中,通过一个for循环分别计算整数和小数部分的累加和,以及这N个实数的和。最后求出这N个实数的平均值。
【9月计算机三级网络技术上机模拟题及答案】相关文章:
计算机三级网络技术模拟题及答案10-01