评定等级成绩

学生结构体定义如下:

struct Student{
    char name[50];   //姓名
    int sid;   //学号
    int C;   //C语言成绩
    int English;   //英语成绩
    int math;   //数学成绩
    int grade;   //总评等级成绩
};

其中每一项的含义如以上代码中的注释所述。本题要求实现一个函数,按照以下规则计算学生的总评等级成绩:

(1)共有C语言、英语、数学三门成绩,每门成绩为百分制。单科成绩不低于60分为通过;

(2)总评等级成绩有5档,分数为54321,分别表示优秀良好中等及格未通过

(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;}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值