| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 414 人关注过本帖
标题:请教c语言编程题
只看楼主 加入收藏
dt千寻
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-5-29
结帖率:0
收藏
已结贴  问题点数:10 回复次数:3 
请教c语言编程题


 有10个歌手和5个裁判,设计一程序,可以输入10个歌手的姓名,5个裁判可以对10个歌手进行打分,计算各个歌手的最终得分(算法为去掉最低分和最高分再求平均值),并按得分的高低排序显示。

  【要求】

(1)  采用结构体实现

(2)  采用结构化程序设计思想编程

(3)裁判对10个歌手的打分一个是通过文件的形式,将成绩保存在文件中,另一个是通过键盘输入的方式输入

(4)10个歌手的成绩要保存在文件中

(我的程序功能有点问题,望改正,另求不同方法编程)


#include<stdio.h> // 当歌手人数固定时,采用结构体数组形式处理
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define M 10  
#define N 5
struct singer
{
    char name[30];
    int rank,score[5];
    float avg;
} s[M];
int flag=0;
int append()  // 利用键盘输入歌手信息
{
    int i,j;
    for(i=0; i<M; i++)
    {
        printf("请输入第 %d 个歌手的姓名:",i+1);
        scanf("%s",s[i].name);
        printf("\n");
    }
    for(i=0; i<M; i++)
    {
        printf("请输入裁判给第 %d 个歌手 %s 打的 5 个演唱分数:(分数之间用空格分隔)\n",i+1,s[i].name);
        for(j=0; j<N; j++)
            scanf("%d",&s[i].score[j]);
    }
    printf("\n");
    return 1;
}
int load() // 从事先已经建好的文件中读入歌手信息
{
    FILE *fp;
    int i,j=0;
    fp=fopen("c:\\score.txt","r");
    for(i=0; i<M; i++)
        fscanf(fp,"%s%d%d%d%d%d",s[i].name,&s[i].score[j],&s[i].score[j+1],&s[i].score[j+2],&s[i].score[j+3],&s[i].score[j+4]);
    printf("%d 位歌手的信息读入完毕,随意按一键\n",M);
    getchar(); getchar();
    fclose(fp);
    return 1;
}
void list() // 显示歌手信息
{
    int i,j=0;
    if(flag==0)
    {
        printf("\n歌手信息为空,请利用键盘输入或文件读入!\n\n");
        printf("按任意键返回");
        getchar(); getchar();
        return;
    }
    for(i=0; i<M; i++)
    {
        printf("第 %d 个歌手的姓名是:%s\n",i+1,s[i].name);
        for(j=0; j<N; j++)
            printf("裁判 %d:%d 分  ",j+1,s[i].score[j]);
        printf("\n\n");
    }
    printf("按任意键返回!!!");
    getchar(); getchar();
}
void sort()  // 计算歌手得分、排序
{
    int i,j,k,t;
 float t1;
 char xm[30];
    if(flag==0)
    {
        printf("\n歌手信息为空,请利用键盘输入或文件读入!\n\n");
        printf("按任意键返回");
        getchar(); getchar();
        return;
    }
    for(i=0; i<M; i++)
        for(j=0; j<N-1; j++)
            for(k=j+1; k<N; k++)
                if(s[i].score[j]<s[i].score[k])
                {
                    t=s[i].score[j]; s[i].score[j]=s[i].score[k]; s[i].score[k]=t;
                }
    for(i=0; i<M; i++)
    {
        s[i].avg=0;
        for(j=1; j<N-1; j++)
            s[i].avg+=s[i].score[j];
        s[i].avg=s[i].avg/(N-2);
    }
    for(i=0; i<M-1; i++)
        for(j=i+1; j<M; j++)  
            if(s[i].avg<s[j].avg)
            {
                strcpy(xm,s[i].name); strcpy(s[i].name,s[j].name); strcpy(s[j].name,xm);
                t1=s[i].avg; s[i].avg=s[j].avg; s[j].avg=t1;
                t=s[i].score[0]; s[i].score[0]=s[j].score[0]; s[j].score[0]=t;
                t=s[i].score[1]; s[i].score[1]=s[j].score[1]; s[j].score[1]=t;
                t=s[i].score[2]; s[i].score[2]=s[j].score[2]; s[j].score[2]=t;
                t=s[i].score[3]; s[i].score[3]=s[j].score[3]; s[j].score[3]=t;
                t=s[i].score[4]; s[i].score[4]=s[j].score[4]; s[j].score[4]=t;
            }
    for(i=0; i<M; i++)
        s[i].rank=i+1; // 预先录入歌手的名次,后面对得分相同者再作处理
    for(i=1; i<M; i++)
    {
        if(fabs(s[i].avg-s[i-1].avg)<1e-5)
            s[i].rank=s[i-1].rank;
    }
    printf("\n歌手分数计算结果及最终名次如下:\n\n");
    for(i=0; i<M; i++)
        printf("获得第 %d 名的歌手姓名是:%s,最后得分:%.2f\n\n",s[i].rank,s[i].name,s[i].avg);
    printf("按任意键返回 ");
    getchar(); getchar();
}
void save() // 保存歌手信息及计算结果
{
    FILE *fp;
    int i,j;
    if(flag==0)
    {
        printf("\n歌手信息为空,请利用键盘输入或文件读入!\n\n");
        printf("按任意键返回");
        getchar(); getchar();
        return;
    }
    fp=fopen("c:\\backup1.txt","w");
    for(i=0; i<M; i++)
    {
        fprintf(fp,"第 %d 个歌手的姓名是:%s\n",i+1,s[i].name);
        for(j=0; j<N; j++)
            fprintf(fp,"裁判 %d:%d 分  ",j+1,s[i].score[j]);
        fprintf(fp,"\n\n");
    }
    printf("\n%d为歌手的信息已经全部保存\n",M);
    getchar(); getchar();
    fclose(fp);
}

void main()
{
 int choice;
    while(1)
    {
        do
        {
           system("cls");
            printf("**********************主菜单*********************\n\n");
            printf("\t1、键盘输入歌手的姓名及裁判打分信息\n\n");
            printf("\t2、文件载入歌手的姓名及裁判打分信息\n\n");
            printf("\t3、显示歌手的姓名及裁判打分信息\n\n");
            printf("\t4、计算歌手的最终得分并排序\n\n");
            printf("\t5、保存歌手的姓名及裁判打分信息\n\n");
            printf("\t6、退出\n\n");
            printf("**************************************************\n\n");
            printf("请您选择:");
            scanf("%d",&choice);
        } while(choice<1 || choice>7);
        printf("\n");
        switch(choice)
        {
            case 1: system("cls");
                    flag=append();
                    break;
            case 2: system("cls");
                    flag=load();
                    break;
            case 3: system("cls");
                    list();
                    break;
            case 4: system("cls");
                    sort();
                    break;
            case 5: system("cls");
                    save();
                    break;
            
            case 6: system("cls");
                    printf("\n再见!欢迎下次继续使用!\n\n");
                    return;
        }
    }
    return;
}
  

搜索更多相关主题的帖子: 结构体 平均值 c语言 姓名 
2011-05-29 17:37
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:5 
又是你们老师出的作业吗?

My life is brilliant
2011-05-29 18:36
dt千寻
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-5-29
收藏
得分:0 
恩,思考题。帮下忙啊!!!!!
2011-05-30 19:42
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:5 
哪里有问题?都不说。。。。汗。。。。。。。。。。。。。。
程序的写法XX种,思考用接口写或是链表写。

我们都在路上。。。。。
2011-05-31 11:46
快速回复:请教c语言编程题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048086 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved