一、思维导图
二、课后习题
代码
#include<myhead.h>
#define MAX_SIZE 100
//定义结构体类型
struct Stu
{
char name[20]; //学生名
char id[10]; //学号
char sex[10]; //性别
double score; //成绩
};
//定义一个学生信息数组
struct Stu student[MAX_SIZE];
int size = 0; //数组实际使用个数
//录入学生信息
void Enter_stu()
{
//初始化数组
memset(student,0,sizeof(student));
printf("请输入学生个数:");
scanf("%d",&size);
getchar();
//循环输入学生数组信息
for(int i=0;i<size;i++)
{
printf("请输入第%d个学生的名称:",i+1);
scanf("%s",student[i].name);
getchar();
printf("请输入第%d个学生的学号:",i+1);
scanf("%s",student[i].id);
getchar();
printf("请输入第%d个学生的性别:",i+1);
scanf("%s",student[i].sex);
getchar();
printf("请输入第%d个学生的成绩:",i+1);
scanf("%lf",&student[i].score);
printf("\n");
}
}
//输出学生信息
void Print_stu()
{
printf("**********学生信息如下*********\n");
printf("姓名\t学号\t性别\t成绩\n\n");
for(int i=0;i<size;i++)
{
printf("%s\t%s\t%s\t%lf\n",\
student[i].name,student[i].id,student[i].sex,student[i].score);
}
printf("\n");
}
//求最值成绩学生信息
void Best_stu()
{
//求出成绩最高和最低学生信息
struct Stu stu_maxscore; //存放最高成绩学生的信息
struct Stu stu_minscore; //存放最低成绩学生的信息
double max_score = 0; //存放最高成绩学生的成绩
double min_score = 0; //存放最低成绩学生的成绩
//将第一个学生当做最值
stu_maxscore = student[0];
stu_minscore = student[0];
max_score = student[0].score;
min_score = student[0].score;
for(int i=0;i<size;i++)
{
//跟任意一个学生的成绩进行比较
if(student[i].score > max_score)
{
//刷新最高成绩学生信息
max_score = student[i].score;
stu_maxscore = student[i];
}
if(student[i].score < min_score)
{
//刷新最低成绩学生信息
min_score = student[i].score;
stu_minscore = student[i];
}
}
printf("************成绩最值学生信息************\n");
printf("成绩最高学生信息:\n");
printf("姓名\t学号\t性别\t成绩\n\n");
printf("%s\t%s\t%s\t%lf\n\n",\
stu_maxscore.name,stu_maxscore.id,stu_maxscore.sex,stu_maxscore.score);
printf("成绩最低学生信息:\n");
printf("姓名\t学号\t性别\t成绩\n\n");
printf("%s\t%s\t%s\t%lf\n\n",\
stu_minscore.name,stu_minscore.id,stu_minscore.sex,stu_minscore.score);
}
//学生总成绩和平均成绩
void Sum_stu()
{
//输出学生总成绩和平均成绩
double sum = 0; //定义学生总成绩
double avg = 0; //定义学生平均成绩
for(int i=0;i<size;i++)
{
sum += student[i].score;
}
//求平均值
avg = sum/size;
printf("*********学生成绩总和以及平均值**********\n");
printf("学生成绩总和:%lf\n",sum);
printf("学生成绩总和均值:%lf\n\n",avg);
}
//按学生成绩对学生信息进行排序
void Sort_score(int flag)
{
printf("************对学生成绩进行排序***********\n");
//降序排序
if(flag ==0) //标志位判断升降序排序
{
for(int i=1;i<size;i++)
{
for(int j=0;j<size-i;j++)
{
if(student[j].score < student[j+1].score)
{
struct Stu temp = student[j];
student[j] = student[j+1];
student[j+1] = temp;
}
}
}
printf("学生信息按成绩降序排序成功\n\n");
}
//升序排序
else if(flag ==1)
{
for(int i=1;i<size;i++)
{
for(int j=0;j<size-i;j++)
{
if(student[j].score > student[j+1].score)
{
struct Stu temp = student[j];
student[j] = student[j+1];
student[j+1] = temp;
}
}
}
printf("学生信息按成绩升序排序成功\n\n");
}
}
//查找学生姓名是否存在
Find_stu(char name[20])
{
printf("*********查找学生是否存在**********\n");
int i = 0;
for(i=0;i<size;i++)
{
if(strcmp(name,student[i].name) == 0)
{
//查找成功,输出学生信息
printf("姓名\t学号\t性别\t成绩\n\n");
printf("%s\t%s\t%s\t%lf\n",\
student[i].name,student[i].id,student[i].sex,student[i].score);
break;
}
}
if(i >= size)
{
printf("未找到该学生\n");
}
}
int main(int argc, const char *argv[])
{
printf("\t\t************学生信息管理系统************\n");
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");
//菜单
int menu =0;
int flag = 0; //定义升降序标志位
char name[20]; //定义字符数组接收学生姓名
do
{
printf("请输入选项>>>");
scanf("%d",&menu);
getchar();
//多分支选择执行对应功能
switch(menu)
{
case 1://录入学生信息
//调用信息录入函数
Enter_stu();
break;
case 2://查看学生信息
Print_stu();
break;
case 3://求成绩最高的学生信息
Best_stu();
break;
case 4://学生总成绩和平均值
Sum_stu();
break;
case 5://按成绩对学生升序排序
printf("升序排序请输入1,降序排序请输入0:");
scanf("%d",&flag);
Sort_score(flag);
break;
case 6://查找学生信息是否存在
printf("请输入需要查找的学生姓名:");
scanf("%s",name);
Find_stu(name);
break;
case 0://退出
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while(menu !=0);
return 0;
}
效果图