📄 5_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 + -