网站首页 语言 会计 电脑 医学 资格证 职场 文艺体育 范文

9月计算机三级网络技术上机模拟题及答案

栏目: 计算机三级 / 发布于: / 人气:1.11W

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

9月计算机三级网络技术上机模拟题及答案

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

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

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

请勿改动主函数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("数据文件不能打开!07n");

return;

}

CalValue ( );

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

printf("平均值=%.2lfn",aver);

printf("整数部分之和=%.2lfn",sumint);

printf("小数部分之和=%.2lfn",sumdec);

WriteDat( );

}

int ReadDat()

{

FILE *fp;

if((fp=fopen( "","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("","w");

fprintf(fp,"%dn%.2lfn%.2lfn%.2lfn",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个实数的平均值。