标题:各位大师,劳烦您帮我分析一下这个题,真心没有头绪啊!
只看楼主
jiekeVV
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-12-18
结帖率:100%
已结贴  问题点数:1 回复次数:2 
各位大师,劳烦您帮我分析一下这个题,真心没有头绪啊!
各位大师,劳烦您帮我分析一下这个题,真心没有头绪啊!
青年歌手参加歌曲大奖赛计分系统(N个选手,M个评委)
 分别用子函数实现输入、计算平均分(去掉一个最高分和一个最低分),排序(成绩由高到低),输出(前三名)
搜索更多相关主题的帖子: 大奖赛 歌曲 青年 
2015-01-08 15:01
yangcaifei
Rank: 4
来 自:陕西
等 级:业余侠客
威 望:2
帖 子:127
专家分:216
注 册:2014-11-3
得分:0 
怎么没有头绪呢,不是说了用函数实现吗
2015-01-08 17:56
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
得分:1 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#define N 9
#define M 7

double grade[M] = {0};
struct singer {
    int sn;
    double ave;
};
typedef struct singer SG, *PSG;
SG sg[N];
PSG psg = sg;

/*初始化结构体数组*/
void init(void){
    int i;
    for(i = 0; i < N; i++) {
        sg[i].sn = i + 1;
        sg[i].ave = 0.0;
    }
}

/*随机打分*/
void rate(void){
    int i = 0;
    srand((unsigned int)time(NULL));
    for(; i < M; i++){
        grade[i] = 1 + (10.0 * rand() / (RAND_MAX + 1.0));
        Sleep(100+i);
    }
}    

/*去除最高分最低分*/
void cut(void){
    double max = 0, min;
    int i = 0;
    for(; i < M; i++){
        if(grade[i] > max) {
            max = grade[i];
        }
    }
    for(min = max, i = 0; i < M; i++) {
        if(grade[i] < min) {
            min = grade[i];
        }
    }

    for(i = 0; i < M; i++){
        if(grade[i] == max) {
            grade[i] = 0;
            break;
        }
    }

    for(i = 0; i < M; i++){
        if(grade[i] == min) {
            grade[i] = 0;
            break;
        }
    }
}

/*求平均分*/
double calcAve(void){
    int i;
    double sum = 0;
    for(i = 0; i < M; i++) {
        sum += grade[i];
    }
    return (sum / M);
}

/*交换结构体数组元素值*/
void swap(PSG p, PSG q){
    int tsn;
    double tave;
    tsn = p->sn;
    p->sn = q->sn;
    q->sn = tsn;
    tave = p->ave;
    p->ave = q->ave;
    q->ave = tave;
}

/*对平均分排序并交换位置*/
void sort(void){
    int i, j;
    for(i = 0; i < N -1; i++) {
        for(j = i; j < N; j++) {
            if(sg[i].ave < sg[j].ave) {
                swap(sg + i, sg + j);
            }
        }
    }
}

/*打印输出排序好的选手序号与成绩*/
void display(void){
    int i;
    for(i = 0; i < N; i++) {
        printf("名次: %d\t选手序号: %d\t平均得分: %.2f\n",
                i + 1, sg[i].sn, sg[i].ave);
    }
}

int main(void){
    int i; 
    init(); 
    for(i = 0; i < N; i++) {
        rate();
        cut();
        sg[i].ave = calcAve();
    }
    sort();
    display();

    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2015-01-09 00:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-440863-1-1.html




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

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