一、作业
代码:
#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;
}
运行截图:
待解决问题:学生数量必须提前输入不能在函数中输入