学生结构体定义如下:
struct Student{
char name[50]; //姓名
int sid; //学号
int C; //C语言成绩
int English; //英语成绩
int math; //数学成绩
int grade; //总评等级成绩
};
其中每一项的含义如以上代码中的注释所述。本题要求实现一个函数,按照以下规则计算学生的总评等级成绩:
(1)共有C语言、英语、数学三门成绩,每门成绩为百分制。单科成绩不低于60分为通过;
(2)总评等级成绩有5档,分数为5
、4
、3
、2
、1
,分别表示优秀
、良好
、中等
、及格
、未通过
;
(3)C语言、英语、数学成绩中,有任何一门未通过(即低于60分
),则总评成绩为“未通过”;
(4)若三门单科成绩均通过,则根据三科平均成绩评定:
- C语言成绩
低于90分
的,不得评定为优秀,即无论平均分是多少,最高评为良好; - 平均成绩
超过90分
的,评定为优秀
(5分),但C语言成绩不符合要求的只能评为良好; - 平均成绩
超过80分
且不超过90分
的,评定为良好
(4分); - 平均成绩
超过70分
且不超过80分
的,评定为中等
(3分); - 平均成绩
超过60分
且不超过70分
的,评定为及格
(2分); - 平均成绩
不超过60分
的,评定为未通过
(1分)。
提示:仔细阅读评分规则,注意与平时常见规则的不同,例如平均分为80分的,等级是“中等”而不是“良好”。
函数接口定义:
int calScore(struct Student *stu);
其中stu
是传入的参数,指向要评定等级成绩的学生结构体变量。函数返回值为int
型。
函数要做到:
- 根据规则计算该学生的等级成绩,并写入该学生结构体的
grade
成员(数据项)中 - 若该学生总评成绩通过(2分至5分),则函数返回
1
;若总评成绩未通过(1分),则函数返回0
裁判测试程序样例:
此裁判测试程序仅为示例,实际的测试程序可能不同。
你所提交的代码将被嵌在裁判测试程序中(如最后一行注释所述),要严格按照题目要求编写函数,不要在函数中打印输出任何内容。
#include <stdio.h>
struct Student{
char name[50]; //姓名
int sid; //学号
int C; //C语言成绩
int English; //英语成绩
int math; //数学成绩
int grade; //总评等级成绩
};
int calScore(struct Student *stu);
int main(){
int n;
scanf("%d", &n);
struct Student stu;
int pass;
for(int i=0; i<n; i++){
scanf("%s%d%d%d%d", stu.name, &stu.sid, &stu.C,
&stu.English, &stu.math);
pass = calScore(&stu);
printf("(%d, %s) : %d(%d)\n", stu.sid, stu.name, stu.grade, pass);
}
return 0;
}
/** 你所提交的代码将被嵌在这里 **/
输入样例:
对于样例裁判程序的输入格式:(实际的输入格式可能随裁判程序的不同而变化)
4
zhangsan 1001 95 87 90
lisi 1002 79 80 81
wangwu 1003 85 99 99
zhaoliu 1004 58 90 92
输出样例:
对于样例裁判程序的输出格式:(实际的输出格式可能随裁判程序的不同而变化)
(1001, zhangsan) : 5(1)
(1002, lisi) : 3(1)
(1003, wangwu) : 4(1)
(1004, zhaoliu) : 1(0)
int calScore(struct Student *stu)
{
double a=0;
a=stu->C+stu->English+stu->math;
a=a/3.0;
if(stu->C<60||stu->English<60||stu->math<60)
{stu->grade=1;}
else
{
if(a<=60)
{stu->grade=1;}
if(a>60&&a<=70)
{stu->grade=2;}
if(a>70&&a<=80)
{stu->grade=3;}
if(a>80&&a<=90)
{stu->grade=4;}
if(a>90)
{
if(stu->C<90)
{stu->grade=4;}
else
{stu->grade=5;}
}
}
if(stu->grade==1)
{return 0;}
else
{return 1;}
}