C语言实现歌手大奖赛计分程序

C语言实现歌手大奖赛计分程序

程序实现功能

本程序主要实现歌手大奖赛计分功能,包括对选手的评分以及最终的排名输出。

实现思路

程序主要分为以下几个步骤进行实现:

  • 获取选手总数
  • 获取评委人数
  • 获取选手分数
  • 对选手的得分进行排序
  • 最终输出选手排名

具体实现步骤

获取选手总数以及评委人数

可以使用scanf函数来获取用户输入的选手总数以及评委人数。

int singer_num, judge_num;
scanf("%d %d", &singer_num, &judge_num);

获取选手分数

可以使用双重循环来获取每个选手的分数,外循环遍历选手,内循环遍历每个评委。

int score[singer_num][judge_num];
for (int i = 0; i < singer_num; i++) {
    for (int j = 0; j < judge_num; j++) {
        scanf("%d", &score[i][j]);
    }
}

对选手的得分进行排序

可以使用冒泡排序对每个选手的分数进行排序。外循环遍历每个选手,内循环遍历每个评委,对每个选手的分数求平均值,并将平均值和选手编号保存到一个结构体数组中。最后对结构体数组按照平均值进行排序。

typedef struct {
    int num;
    double avg_score;
} Singer;

Singer singers[singer_num];
for (int i = 0; i < singer_num; i++) {
    double total_score = 0;
    for (int j = 0; j < judge_num; j++) {
        total_score += score[i][j];
    }
    singers[i].num = i + 1;
    singers[i].avg_score = total_score / judge_num;
}

for (int i = 0; i < singer_num; i++) {
    for (int j = 0; j < singer_num - i - 1; j++) {
        if (singers[j].avg_score < singers[j + 1].avg_score) {
            Singer tmp = singers[j];
            singers[j] = singers[j + 1];
            singers[j + 1] = tmp;
        }
    }
}

最终输出选手排名

可以使用循环遍历结构体数组,输出每个选手的排名以及平均分数。可以使用printf函数输出。

for (int i = 0; i < singer_num; i++) {
    printf("%d %.2lf\n", singers[i].num, singers[i].avg_score);
}

示例说明

示例一

输入:

3 5
88 99 60 70 95
90 80 85 75 90
88 70 85 90 90

输出:

2 86.00
1 82.40
3 84.60

示例二

输入:

4 6
90 80 70 60 50 40
80 70 60 50 40 30
90 80 70 60 50 40
80 70 60 50 40 30

输出:

1 68.33
3 68.33
2 65.00
4 58.33

完整代码

#include <stdio.h>

typedef struct {
    int num;
    double avg_score;
} Singer;

int main()
{
    int singer_num, judge_num;
    scanf("%d %d", &singer_num, &judge_num);

    int score[singer_num][judge_num];
    for (int i = 0; i < singer_num; i++) {
        for (int j = 0; j < judge_num; j++) {
            scanf("%d", &score[i][j]);
        }
    }

    Singer singers[singer_num];
    for (int i = 0; i < singer_num; i++) {
        double total_score = 0;
        for (int j = 0; j < judge_num; j++) {
            total_score += score[i][j];
        }
        singers[i].num = i + 1;
        singers[i].avg_score = total_score / judge_num;
    }

    for (int i = 0; i < singer_num; i++) {
        for (int j = 0; j < singer_num - i - 1; j++) {
            if (singers[j].avg_score < singers[j + 1].avg_score) {
                Singer tmp = singers[j];
                singers[j] = singers[j + 1];
                singers[j + 1] = tmp;
            }
        }
    }

    for (int i = 0; i < singer_num; i++) {
        printf("%d %.2lf\n", singers[i].num, singers[i].avg_score);
    }

    return 0;
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现歌手大奖赛计分程序 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言模拟实现简单扫雷游戏

    C语言模拟实现简单扫雷游戏攻略 背景知识 扫雷游戏是一款经典的单机游戏,由微软公司开发并受全球玩家喜爱。扫雷游戏的核心玩法是在矩阵区域内,通过翻开若干个格子来避免让地雷引爆,同时探索出所有非地雷格子并标记出所有已知的地雷格子。本攻略将通过C语言模拟实现简单的扫雷游戏,以帮助初学者巩固自己的C语言编程能力。 实现步骤 设计游戏地图:将游戏区域按照网格形式划分为…

    C 2023年5月24日
    00
  • C++预定义的流对象基本示例详解

    C++预定义的流对象基本示例详解 在C++中,预定义了一些输入/输出流对象,它们可以方便地进行标准输入输出操作,可以大大简化我们的代码编写。本文将详细讲解C++预定义流对象的使用。 cin和cout cin和cout是C++中最常用的输入/输出流对象,它们分别用于输入数据和输出数据。下面是cin和cout的使用示例: #include <iostrea…

    C 2023年5月22日
    00
  • OpenGL 图像 lookup 色彩调整

    零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES 特效 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES …

    C语言 2023年4月18日
    00
  • c语言获取当前工作路径的实现代码(windows/linux)

    要获取当前工作路径,我们需要用到C语言中的系统调用。在Windows和Linux操作系统下,这个调用名字可能不同,但是其功能是相同的,都是获取当前工作路径。下面分别介绍在Windows和Linux操作系统下,如何使用C语言获取当前工作路径。 在Windows操作系统下获取当前工作路径 在Windows操作系统下获取当前工作路径需要使用Windows API中…

    C 2023年5月24日
    00
  • C++ 中的Lambda表达式写法

    当我们需要在C++中写一些短的、临时的函数时,常常使用Lambda表达式。Lambda表达式可以看作是一个匿名函数,它可以在任意处声明和定义,并且不会产生额外的开销。本文将详细讲解如何在C++中使用Lambda表达式。 基本语法 Lambda表达式的语法如下: [capture clause] (parameters) -> return_type {…

    C 2023年5月22日
    00
  • VC++实现文件与应用程序关联的方法(注册表修改)

    在VC++中,我们可以实现文件与应用程序的关联,使得用户在打开这类文件时,默认使用该应用程序打开。这个过程需要通过修改注册表来实现,下面就是详细的攻略: 第一步:创建应用程序 首先,我们需要创建一个VC++的应用程序。创建好应用程序后,将其编译生成.exe程序。 第二步:修改注册表 在开始修改注册表之前,请先备份你的注册表。这是个安全建议。下面是修改的过程:…

    C 2023年5月23日
    00
  • C++图文并茂分析讲解模板

    C++图文并茂分析讲解模板——完整攻略 前言 在C++编程学习的过程中,我们经常需要使用模板(Template)这一特性来提高代码的复用性和灵活性。但是,模板语言主要由大量的符号和语法组成,使用起来难度较大。本文将从图文并茂的角度出发,详细讲解C++模板的使用方法和技巧,旨在帮助C++编程初学者快速理解和掌握模板的相关知识和技能。 1. 什么是C++模板 C…

    C 2023年5月23日
    00
  • C语言实现学生成绩管理系统项目

    C语言实现学生成绩管理系统项目攻略 1. 需求分析 在开发学生成绩管理系统前,我们需要对系统的功能需求进行分析。在此项目中,我们需要实现以下功能: 添加学生信息 删除学生信息 修改学生信息 查询学生信息 展示所有学生信息 2. 数据结构设计 在此项目中,我们需要定义一个结构体来存储学生的信息,该结构体包含以下信息: struct Student { int …

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部