0716作业+思维导图

一、作业

代码:

#include<stdio.h>
#define MAX 20

//结构体输入学生信息
struct Stu 
{
    int stu_num;
    char name[MAX];
    char xingbie[MAX];
    int score;
};

//菜单函数
void me_nu(void)
{
    printf("\t\t======1:学生信息录入\n");
    printf("\t\t======2:学生信息输出\n");
    printf("\t\t======3:成绩最好和最差的学生信息\n");
    printf("\t\t======4:所有学生总成绩和平均成绩\n");
    printf("\t\t======5:按成绩降序排序\n");
    printf("\t\t======6:查找学生\n");
    printf("\t\t======0:退出\n");
}

//学生人数以及学生信息录入函数
void student_1(struct Stu *stu_dent,int num)
{
    
    for(int i=0;i<num;i++)
    {
       printf("请输入第%d名学生的学号\n",i+1);
        scanf("%d",&stu_dent[i].stu_num);
        printf("请输入第%d名学生的姓名\n",i+1);
        scanf("%s",stu_dent[i].name);
        printf("请输入第%d名学生的性别\n",i+1);
        scanf("%s",stu_dent[i].xingbie);
        printf("请输入第%d名学生的成绩\n",i+1);
        scanf("%d",&stu_dent[i].score);
    }
}

//学生信息输出
void student_2(const struct Stu *stu_dent,const int num)
{
   printf("学生信息如下:\n");
   printf("学号\t姓名\t性别\t成绩\n");
   for(int i=0;i<num;i++)
   {
       printf("%d\t%s\t%s\t%d\n",stu_dent[i].stu_num,stu_dent[i].name,stu_dent[i].xingbie,stu_dent[i].score);
   }
}


//成绩最好和最差的学生成绩
int student_3(const struct Stu *stu_dent,const int num)
{
    struct Stu best;//存放成绩最好的学生信息
    struct Stu worst;//存放成绩最差的学生信息
    best = stu_dent[0];
    worst = stu_dent[0];
    //将第一位学生当做最值
    for(int i=0;i<num;i++)
    {
        
        if(best.score<stu_dent[i].score)
        {
            best = stu_dent[i];
        }
    }
     for(int i=0;i<num;i++)
    {
         if(worst.score>stu_dent[i].score)
        {
            worst = stu_dent[i];
        }
    }
     printf("成绩最好的学生信息为:%d\t%s\t%s\t%d\n",best.stu_num,best.name,best.xingbie,best.score);
     printf("成绩最差的学生信息为:%d\t%s\t%s\t%d\n",worst.stu_num,worst.name,worst.xingbie,worst.score);
}

//所有学生的总成绩和平均成绩
void student_4(const struct Stu *stu_dent,const int num)
{
    int sum = 0;//总成绩
    double avg = 0;//平均成绩
    for(int i=0;i<num;i++)
    {
        sum += stu_dent[i].score;//求出成绩总和
    }
    avg = sum/num;//球出去平均值
    //输出
    printf("所有学生的总成绩为:%d\n",sum);
    printf("所有学生的平均成绩为:%.2lf\n",avg);
}

//按成绩降序排序
void student_5(struct Stu *stu_dent,const int num)
{
    for(int i = 1;i<num;i++)
    {
        for(int j=0;j<num-i;j++)
        {
            if(stu_dent[j].score<stu_dent[j+1].score)
        {
           //交换三部曲
           struct Stu temp = stu_dent[j];
           stu_dent[j] = stu_dent[j+1];
           stu_dent[j+1] = temp;
        }
        }
    }
    printf("排序后的结果为:\n");
    printf("学号\t姓名\t性别\t成绩\n");
    for(int i=0;i<num;i++)
{
   //输出排序后的成绩
    printf("%d\t%s\t%s\t%d\n",stu_dent[i].stu_num,stu_dent[i].name,stu_dent[i].xingbie,stu_dent[i].score);
}
}

//查找学生
void student_6(const struct Stu *stu_dent,const int num)
{
    char ming[MAX];
    printf("请输入要查找的学生姓名:");
    scanf("%s",ming);
    int res = 0;
    for(int i = 0;i<num;i++)
    {
        if(strcmp(ming,stu_dent[i].name)==0)//查找该学生
        {
            res = 1;
        }
    }
      if(res==1)
        {
            printf("该学生是这个班的\n");
        }
        else if(res == 0)
        {
            printf("该学生不是这个班的\n");
        }

}

int main(int argc,char const *argv)
{
    struct Stu stu_dent[MAX];//定义一个学生数组
    static int num=0;//本系统内需录入的学生个数
    memset(stu_dent,0,sizeof(stu_dent));//初始化数组
    int menu = 0;//定义菜单元素
    printf("请输入学生数量:\n");
    scanf("%d",&num);


    //使用菜单函数
    while(1)
    {
        me_nu();
        printf("请输入:");
        scanf("%d",&menu);
        getchar();
    

    
    //菜单
    switch(menu)
    {
        case 1:
        {
           student_1(stu_dent,num);
        }
        break;
         case 2:
        {
            student_2(stu_dent,num);
        }
        break;
           case 3:
        {
            student_3(stu_dent,num);
        }
        break;
        case 4:
        {
            student_4(stu_dent,num);
        }
        break;
        case 5:
        {
            student_5(stu_dent,num);
        }
        break;
         case 6:
        {
            student_6(stu_dent,num);
        }
        break;
         case 0:
        {
            goto END;
        }
        default:
        printf("您输入的内容有误,请重新输入\n");
    }
    }
    END:
    return 0;

}

运行截图:

待解决问题:学生数量必须提前输入不能在函数中输入

二、思维导图

1.指针(函数指针数组,二级指针,万能指针)

2.结构体

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值