42、请编制程序,从文件in.dat中读取200个整数至数组xx中,不计数组xx中值最大和最
小的数(若有重复值,则都不计),再求出最大数max及最大数的个数cnt1、最小数min
及最小数的个数cnt2和所剩下200-cnt1-cnt2个数的算求平均值pj (保留2位小数)。
结果max,cnt1,min,cnt2,pj输出到out.dat中。
部分程序、读数据函数read_dat(int xx[200])及输出格式已给出。
#include<conio.h>
#include<stdio.h>
#define N 200

void read_dat(int xx[N])
{
int i,j;
FILE *fp;

fp=fopen("in.dat","r");
for(i=0;i<20;i++)
{for(j=0;j<10;j++)
{fscanf(fp,"%d,",&xx[i*10+j]);
printf("%d ",xx[i*10+j]);
}
printf("\n");
}
fclose(fp);
}

void main()
{
int cnt1,cnt2,xx[N],max,min;
float pj;
FILE *fw;

clrscr();
fw=fopen("out.dat","w");
read_dat(xx);


printf("\n\nmax=%d,cnt1=%d,min=%d,cnt2=%d,pj=%6.2f\n",
max,cnt1,min,cnt2,pj);
fprintf(fw,"%d\n%d\n%d\n%d\n%6.2f\n",max,cnt1,min,cnt2,pj);
fclose(fw);
}

/* 注:该题是要在主函数中加程序行,注意本题要求去除最大和最小数后再求出去掉后
的最大数max和最小数min及相应的个数。因此程序中出现的max0和min0,用来标识所有
数中的最大数和最小数,后而求出次大数和次小数。在求max0和min0时一定要给max和m
in赋一个与max0和min0不同的数(该题用esle max=min=xx[i]),否则会出错。对于一个
浮点数要对其保留2位小数时,要将其乘100后转换成整数,最后再将其转换成浮点数然
后除100即可。*/
void main()
{
int cnt1,cnt2,xx[N],max,min;
float pj;
FILE *fw;
int i,max0,min0;

clrscr();
fw=fopen("out.dat","w");
read_dat(xx);

max0=min0=xx[0];
pj=0;
cnt1=cnt2=0;
for(i=1;i<N;i++)
{if(max0<xx[i]) max0=xx[i];
else if(min0>xx[i]) min0=xx[i];
else max=min=xx[i];
}
for(i=0;i<N;i++)
{if(max<xx[i]&&xx[i]<max0) max=xx[i];
if(min>xx[i]&&xx[i]>min0) min=xx[i];
}
for(i=0;i<N;i++)
if(xx[i]==max) cnt1++;
else if(xx[i]==min) cnt2++;
else pj+=xx[i];
pj=(float)((int)pj*100/(200-cnt1-cnt2))/100;

printf("\n\nmax=%d,cnt1=%d,min=%d,cnt2=%d,pj=%6.2f\n",
max,cnt1,min,cnt2,pj);
fprintf(fw,"%d\n%d\n%d\n%d\n%6.2f\n",max,cnt1,min,cnt2,pj);
fclose(fw);
}

返回南开百题目录

www.163164.cn 联系QQ:3149886