7.3编程实现10个学生的成绩管理系统,学生信息包括:学生学号、姓名和3门课程的成绩及平均成绩。要求如下: (1)在主函数中编写一个提示菜单,根据输入菜单的编号调用相应函数。(2)(3)(4)

7.3编程实现10个学生的成绩管理系统,学生信息包括:学生学号、姓名和3门课程的成绩及平均成绩。要求如下:

(1)在主函数中编写一个提示菜单,根据输入菜单的编号调用相应函数。 (2)用input函数来输入数据 (3)用aver函数求各学生的平均成绩。 (4)用sort函数实现按学生平均成绩排序。 (5)用print函数来输出所有学生的信息

不知道是我理解错了,还是这个题目有问题,主函数使用菜单调用函数,是可以这样写没错,但是,这整个程序都是连接起来的,就比方说,你不输入学生信息,怎么求平均分数呢,不输入,哪里来的输出呢。那这样的话,这个菜单根本就没啥用处啊,只能从2开始输入

#include<stdio.h>
struct CLASS
{
    int g1 ;
    int g2 ;
    int g3 ;
    int a ;
} ;
struct CLASS grades ;
struct STUDENT
{
    int num ;
    char name[20] ;
    struct CLASS grades ;
} ;
struct STUDENT str[10] ;
void print ( struct STUDENT str[] )/*输出所有学生的信息*/
{
    for ( int i = 0  ; i < 10 ; i ++ )
    {
        printf("%d\t%s\t%d\t%d\t%d\t%d\n",str[i].num , str[i].name , str[i].grades.g1 , str[i].grades.g2 , str[i].grades.g3 , str[i].grades.a ) ;
    }
}
void sort ( struct STUDENT str[] )/*用平均成绩排序*/
{
    struct STUDENT max ;
    for ( int i = 0 ; i < 9 ; i ++ )
    {
        for ( int j = i + 1 ; j < 10 ; j ++ )
        {
            if ( str[i].grades.a < str[j].grades.a )
            {
                max = str[j] ;
                str[j] = str[i] ;
                str[i] = max ;
            }
        }
    }
    print ( str ) ;
}
void aver ( struct CLASS grades )/*求平均分数*/
{
    for ( int i = 0 ; i < 10 ; i ++ )
    {
        str[i].grades.a = ( str[i].grades.g1 + str[i].grades.g2 + str[i].grades.g3 ) / 3 ;
    }
    sort ( str ) ;
}
void input ( struct STUDENT str[] )/*输入数据*/
{
    for ( int i = 0 ; i < 10 ; i ++ )
    {
        scanf("%d %s %d %d %d",&str[i].num , str[i].name , &str[i].grades.g1 , &str[i].grades.g2 , &str[i].grades.g3 ) ;
    }
    aver ( grades ) ;
}
int main ()
{
    int a ;
    printf("请输入你想调用函数的序号:") ;
    scanf("%d",&a);
    switch ( a )
    {
        case 2 :
            input ( str ) ;
            break ;
        case 3 :
            aver ( grades ) ;
            break ;
        case 4 :
            sort ( str ) ;
            break ;
        case 5 :
            print ( str ) ;
            break ;
    }
    return 0;
}

//输入:

2
1 q 1 1 1
2 w 2 2 2
3 e 3 3 3
4 r 4 4 4
5 t 5 5 5
6 y 6 6 6
7 u 7 7 7
8 i 8 8 8
9 o 9 9 9
10 p 10 10 10

//输出:

10	p	10	10	10	10
9	o	9	9	9	9
8	i	8	8	8	8
7	u	7	7	7	7
6	y	6	6	6	6
5	t	5	5	5	5
4	r	4	4	4	4
3	e	3	3	3	3
2	w	2	2	2	2
1	q	1	1	1	1
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值