⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5_bt.c

📁 BT教师的BT课程的BT成绩算法 输入学生各种成绩
💻 C
字号:
/**
 * 上机作业5:BT教师的BT课程的BT成绩算法
 * http://cms.hit.edu.cn/mod/assignment/view.php?id=1063
 *
 * 输入学生各种成绩,按BT算法统计,并按格式输出
 *
 * Copyright: Public domain
 * Author: Sunner Sun
 * Organization: 哈尔滨工业大学(Harbin Institute of Technology)
 * Date: 2006-11-08-11.47
 */

#include <stdio.h>
#include <assert.h>
#include <math.h>

#define LAB_QUOTA   0.5
#define FORUM_QUOTA 0.05
#define FINAL_QUOTA 0.45

#define HEADER_FORMAT "%-12s%-12s%-12s%-12s%-12s%s\n"
#define TABLE_FORMAT  "%-12d%-12d%-12d%-12d%-12d%c\n"
#define AVE_FORMAT    "%-12s%-12.2f%-12.2f%-12.2f%-12.2f%c\n"
#define SEPERATE_LINE "-----------------------------------------------------------------\n"

double Average(int amount);
char Grade(int score);

int main()
{
    unsigned int students_amount;    /* 学生总数 */
    int labs_amount, posts_amount;
    unsigned int id;                 /* 学号     */
    int lab_score, forum_score, final_score, total_score;
    double ave_lab_score, ave_forum_score, ave_final_score, ave_total_score;
    int i;

    ave_lab_score = ave_forum_score = ave_final_score = ave_total_score = 0.0;

    /* 打印表头 */
    printf(HEADER_FORMAT, "ID", "LAB", "FORUM", "FINAL", "TOTAL", "GRADE");
    printf(SEPERATE_LINE);

    /* 开始统计 */
    scanf("%u", &students_amount);
    scanf("%d", &labs_amount);

    for(i = 0; i < students_amount; i++)
    {
        /* 读和统计一名学生的成绩 */
        scanf("%u", &id);

        lab_score = ceil(Average(labs_amount) * LAB_QUOTA);
        assert(lab_score >= 0 && lab_score <= (100 * LAB_QUOTA));

        scanf("%d", &posts_amount);
        forum_score = ceil(Average(posts_amount));
        assert(forum_score >= 0 && forum_score <= (100 * FORUM_QUOTA));

        scanf("%d", &final_score);
        final_score = ceil(final_score * FINAL_QUOTA);
        assert(final_score >= 0 && final_score <= (100 * FINAL_QUOTA));

        total_score = lab_score + forum_score + final_score;

        /* 打印该名学生成绩 */
        printf(TABLE_FORMAT, id, lab_score, forum_score, final_score, total_score, Grade(total_score));

        /* 总成绩统计 */
        ave_lab_score   += (double)lab_score / students_amount;
        ave_forum_score += (double)forum_score / students_amount;
        ave_final_score += (double)final_score / students_amount;
        ave_total_score += (double)total_score / students_amount;
    }

    /* 打印平均分 */
    printf(SEPERATE_LINE);
    printf(AVE_FORMAT, "Average:", ave_lab_score, ave_forum_score,
           ave_final_score, ave_total_score, Grade(ave_total_score));

    return 0;
}

/**
 * 从标准输入读amount个浮点数,计算它们的平均数
 *
 * @param amount 读数个数
 * @return 平均数
 */
double Average(int amount)
{
    int i;
    double average = 0.0;
    double number;

    for (i=0; i<amount; i++)
    {
        scanf("%lf", &number);
        average += number / amount;
    }

    return average;
}

/**
 * 评定给定分数的等级
 *
 * @param score 分数
 * @return 等级(A,B,C,D,E)
 */
char Grade(int score)
{
    char grade;

    if (score >= 90)    {    	grade = 'A';    }    else if (score >= 80)    {    	grade = 'B';    }    else if (score >= 70)
    {
    	grade = 'C';
    }
    else if (score >= 60)
    {
    	grade = 'D';
    }
    else    {    	grade = 'E';    }

	return grade;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -