阅读量:1
一、思维导图
二、课后习题
代码
#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; }