2016年中财考研编程题

问题:在“创新企业”评选结果的二进制文件中(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;
}

以上代码仅供参考,如有错误欢迎评论留言,一起交流共同解决。

你可能感兴趣的:(笔记,c语言)