某班有 5 个学生,4 门课。分别编写三个函数实现下面三个要求

某班有 5 个学生,4 门课。分别编写四个函数实现下面四个要求:

(1) 求各门课程的平均分;返回到主程序的数组 course_avg 中。
(2) 对每个学生按平均分排序。返回到主程序的数组 stu_rank。
(3)找出有两门以上(含两门)不及格的学生,并输出其学号。返回到主程序的数组

fail_stu 中。

(4)找出四门课平均成绩在 85~90 分的学生,并输出其学号。返回到主程序的数组

fine_stu 中。

主程序输入 5 个学生的成绩,然后调用上述子函数输出结果。

这是我们软件测试课程的实验中要进行黑盒测试的代码,今天写了直接发上来,都是些基础知识,并不难

#include <iostream>
#include <algorithm>
#include <string>
#include <queue>
using namespace std;
int i;
typedef struct              //定义学生结构体
{
	string str;
	double courseA;
	double courseB;
	double courseC;
	double courseD;
    double avg;
}Student;

double sum[4]={0};          //用来保存四门课程的总分的数组
double course_avg[4]={0};   //用来保存四门课程的平均分的数组
Student stu_rank[5];        //用来保存学生排名的数组
queue<string> fail_stu;     //用来保存不及格学生学号的队列
queue<string> fine_stu;     //用来保存良好学生学号的队列

int cmp(Student a,Student b)//用来降序表示的bool函数
{
    return a.avg>b.avg;
}
void AvgCourse(Student*a)   //求各门课程的平均分
{
    for(i=0;i<5;i++)
    {
        sum[0]+=a[i].courseA;
        sum[1]+=a[i].courseB;
        sum[2]+=a[i].courseC;
        sum[3]+=a[i].courseD;
    }
    for(int i=0;i<4;i++)
    {
        course_avg[i]=sum[i]/5;
    }
}
void AvgStudent(Student*a)  //求每个学生的平均分
{
    for(i=0;i<5;i++)
    {
        a[i].avg=(a[i].courseA+a[i].courseB+a[i].courseC+a[i].courseD)/4;
    }
}
void Rank(Student*a)        //按照每个学生的平均分降序排序
{
    AvgStudent(a);
    sort(a,a+5,cmp);
    memcpy(stu_rank,a,sizeof(stu_rank));
}
void Fail(Student*a)
{
    for(i=0;i<5;i++)
    {
		int count = 0;
        if(a[i].courseA < 60)
            count++;
        if(a[i].courseB < 60)
            count++;
        if(a[i].courseC < 60)
            count++;
        if(a[i].courseD < 60)
            count++;
        if(count>=2)
            fail_stu.push(a[i].str);      
    }
}
void Fine(Student*a)
{
    for(i=0;i<5;i++)
    {
        if(85.0 <= a[i].avg && a[i].avg<= 90.0)
            fine_stu.push(a[i].str);      
    }
}

void main()
{
    Student a[5];
    cout<<"请依次输入学生的学号和四门课程的成绩"<<endl;
    for(i=0 ; i<5 ; i++)
    {
        cin>>a[i].str;
        cin>>a[i].courseA;
        cin>>a[i].courseB;
        cin>>a[i].courseC;
        cin>>a[i].courseD;
    }
	cout<<endl;

    AvgCourse(a);
    cout<<"各门课程的平均分为:"<<endl;
    for(int i=0; i<4 ;i++)
    {
        if(i==0)
            cout<<"courseA的平均分为:"<<course_avg[i]<<endl;
        if(i==1)
            cout<<"courseB的平均分为:"<<course_avg[i]<<endl;
        if(i==2)
            cout<<"courseC的平均分为:"<<course_avg[i]<<endl;
        if(i==3)
            cout<<"courseD的平均分为:"<<course_avg[i]<<endl;
    }
    cout<<endl;

    Rank(a);
    cout<<"学生按照平均分降序的排名为:"<<endl;
    for(i=0; i<5 ;i++)
    {
        cout<<"第"<<i+1<<"名的学号为:"<<stu_rank[i].str<<",平均分为:"<<stu_rank[i].avg<<endl;
    }
	cout<<endl;

    Fail(a);
    cout<<"有两门及以上课程不及格的学生的学号为:"<<endl;
	if(!fail_stu.empty())
	{
		while(!fail_stu.empty())
		{
			cout<<fail_stu.front()<<endl;
			fail_stu.pop();
		}
	}
	else
		cout<<"没有两门及以上课程不及格的学生"<<endl<<endl;

    Fine(a);
    cout<<"四门课的平均成绩在85~90分的学生的学号为:"<<endl;
	if(!fine_stu.empty())
	{
		while(!fine_stu.empty())
		{
			cout<<fine_stu.front()<<endl;
			fine_stu.pop();
		}
	}
	else 
		cout<<"没有学生四门课的平均成绩在85~90分"<<endl;
}

运行截图

在这里插入图片描述

代码还有许多需要改进的地方,耦合性太高了,希望大家自己试着改一下,我自己太懒了QAQ

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值