问题:在“创新企业”评选结果的二进制文件中(result.dat)存放100家创新企业的基本信息,这些情况由以下结构体来描述:
struct Firm
{
char FirmName[100];//企业名称
int FirmScore[10]; //十位评委对企业的创新效果打分
}
请编程实现如下的功能:
1)打开该二进制文件,将数据内容读入到一个结构体数组中。(5分)
2)根据评委的打分输出总分数第一名的企业名称。(5分)
3)根据评委的打分输出平均分数第一名的企业名称。(5分)
4)输出平均分在90分以上以及80-89分的企业的个数。(5分)
注意:在计算平均的过程中需要去掉一个最高分,去掉一个最低分。
题目分析:
该题目涉及结构体类型以及文件的操作
1.定义一个可容纳100家企业信息的结构体数组;
struct Firm
{
char Firm_name[NAME];
int Firm_score[SCORE];
}firm[SIZE];
2.打开已读取的方式打开存放100家企业信息评估的文件result.dat
3.将文件中的信息打印显示在屏幕上。
int main()
{
int i,j;
int count=0,sum=0,tip=0;
int it=0,count1=0,sum1=0,average=0;
FILE *fp;
if((fp=fopen("F:\\CL\\result.dat","rb"))==NULL)
{
printf_s("cannot open the file\n");
exit(0);
}
for(i=0;i<SIZE;i++)
{
fread(&firm[i],sizeof(struct Firm),1,fp);
printf_s("%s:",firm[i].Firm_name);
for(j=0;j<10;j++)
{
printf_s("%d ",firm[i].Firm_score[j] );
}
printf_s("\n");
}
for(i=0;i<SIZE;i++)
{
fread(&firm[i],sizeof(struct Firm),1,fp);
for(j=0;j<10;j++)
{
sum+=firm[i].Firm_score[j];
}
if(sum>count)
{
count=sum;
tip=i;
}
}
printf_s("%s",firm[tip].Firm_name);
}
4.设置循环计算每家企业的总评分并进行比较,找出评分最高的企业。
5.遍历数组找出最高评分和最低评分,在计算平均分时不计入。
6.输出平均分数在90以上企业名称,并统计80-89之间的企业数量。
for(i=0;i<SIZE;i++)
{
fread(&firm[i],sizeof(struct Firm),1,fp);
int max=firm[i].Firm_score[0],min=firm[i].Firm_score[0];
for(j=0;j<10;j++)
{
if(firm[i].Firm_score[j]>max)
{
max=firm[i].Firm_score[j];
}
if(firm[i].Firm_score[j]<min)
{
min=firm[i].Firm_score[j];
}
sum1+=firm[i].Firm_score[j];
}
average=(sum1-min-max)/8;
int account=0;
if(average>count1)
{
count1=average;
it=i;
}
if(average>=80&&average<=89)
{
account++;
}
if(average>90)
{
printf_s("%s",firm[i].Firm_name );
}
}
printf_s("the average is first: %s\n",firm[it].Firm_name);
printf_s("the 80_89 have :%d",count1);
具体代码如下:
//author:二十八画
#include
#include
#include
#include
#define _CRT_SECURE_NO_WARNINGS
#define SIZE 100
#define NAME 100
#define SCORE 10
struct Firm
{
char Firm_name[NAME];
int Firm_score[SCORE];
}firm[SIZE];
int main()
{
int i,j;
int count=0,sum=0,tip=0;
int it=0,count1=0,sum1=0,average=0;
FILE *fp;
if((fp=fopen("F:\\CL\\result.dat","rb"))==NULL)
{
printf_s("cannot open the file\n");
exit(0);
}
for(i=0;i<SIZE;i++)
{
fread(&firm[i],sizeof(struct Firm),1,fp);
printf_s("%s:",firm[i].Firm_name);
for(j=0;j<10;j++)
{
printf_s("%d ",firm[i].Firm_score[j] );
}
printf_s("\n");
}
for(i=0;i<SIZE;i++)
{
fread(&firm[i],sizeof(struct Firm),1,fp);
for(j=0;j<10;j++)
{
sum+=firm[i].Firm_score[j];
}
if(sum>count)
{
count=sum;
tip=i;
}
}
printf_s("%s",firm[tip].Firm_name);
for(i=0;i<SIZE;i++)
{
fread(&firm[i],sizeof(struct Firm),1,fp);
int max=firm[i].Firm_score[0],min=firm[i].Firm_score[0];
for(j=0;j<10;j++)
{
if(firm[i].Firm_score[j]>max)
{
max=firm[i].Firm_score[j];
}
if(firm[i].Firm_score[j]<min)
{
min=firm[i].Firm_score[j];
}
sum1+=firm[i].Firm_score[j];
}
average=(sum1-min-max)/8;
int account=0;
if(average>count1)
{
count1=average;
it=i;
}
if(average>=80&&average<=89)
{
account++;
}
if(average>90)
{
printf_s("%s",firm[i].Firm_name );
}
}
printf_s("the average is first: %s\n",firm[it].Firm_name);
printf_s("the 80_89 have :%d",count1);
fclose(fp);
return 0;
}
以上代码仅供参考,如有错误欢迎评论留言,一起交流共同解决。