一、思维导图
![]()
二、课后习题
![]()
#include<myhead.h> #define Max_Stu 100 //最大学生数 //函数声明 //学生信息录入函数 void Enter_stu(int *Num_Stu,char Stu_name[][50],int Stu_score[]); //查看学生信息 void Print_stu(int Num_Stu,char Stu_name[][50],int Stu_score[]); //求出成绩最好的学生的成绩 void Best_Stu(int Num_Stu,char Stu_name[][50],int Stu_score[]); //按姓名升序排序 void Sort_name(int Num_Stu,char Stu_name[][50],int Stu_score[]); //按成绩对学生升序排序 void Sort_score(int Num_Stu,char Stu_name[][50],int Stu_score[]); /**********************主函数*************************/ 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=======0、 退出 =======\n"); //定义二维字符数组存放学生姓名 //定义一维数组存放学生成绩 char Stu_name[Max_Stu][50]; int Stu_score[Max_Stu]; int Num_Stu= 0; //初始化录入学生人数 //菜单 int menu =0; do { printf("请输入选项>>>"); scanf("%d",&menu); getchar(); //多分支选择执行对应功能 switch(menu) { case 1://录入学生信息 //调用信息录入函数 Enter_stu(&Num_Stu,Stu_name,Stu_score); break; case 2://查看学生信息 Print_stu(Num_Stu,Stu_name,Stu_score); break; case 3://求成绩最高的学生信息 Best_Stu(Num_Stu,Stu_name,Stu_score); break; case 4://按姓名升序排序 Sort_name(Num_Stu,Stu_name,Stu_score); break; case 5://按成绩对学生升序排序 Sort_score(Num_Stu,Stu_name,Stu_score); case 0://退出 break; default: printf("输入错误,请重新输入\n"); break; } } while(menu !=0); return 0; } //学生信息录入函数 void Enter_stu(int* Num_Stu,char Stu_name[][50],int Stu_score[]) { //提示输入学生个数,作为参数传给录入函数 printf("请输入录入学生人数:"); int NUM = *Num_Stu; scanf("%d",Num_Stu); getchar(); //循环输入学生姓名和成绩 for(int i=NUM;i < *Num_Stu+NUM;i++) { printf("请输入第%d个学生姓名:",i+1); scanf("%s",Stu_name[i]); printf("请输入第%d个学生成绩:",i+1); scanf("%d",&Stu_score[i]); putchar(10); } *Num_Stu += NUM; printf("录入成功\n\n"); } //查看学生信息 void Print_stu(int Num_Stu,char Stu_name[][50],int Stu_score[]) { printf("学生信息如下:\n"); //循环打印学生信息 for(int i=0;i< Num_Stu;i++) { printf("姓名:%s,分数:%d\n",Stu_name[i],Stu_score[i]); } putchar(10); } //求出成绩最好的学生的成绩 void Best_Stu(int Num_Stu,char Stu_name[][50],int Stu_score[]) { int max_score = -1; //定义最大成绩容器 int index =-1; //记录学生数组下标 //循环比较学生成绩 for(int i=0;i<Num_Stu;i++) { if(Stu_score[i] > max_score) { max_score = Stu_score[i]; index = i; } } //判断是否有误 if(index != -1) printf("成绩最高的学生:姓名:%s,分数:%d\n",Stu_name[index],Stu_score[index]); else printf("没有学生信息记录\n"); putchar(10); } //按姓名升序排序 void Sort_name(int Num_Stu,char Stu_name[][50],int Stu_score[]) { //定义字符数组替换数组 //定义分数替换容器 char tempName[50]; int tempScore; //循环比较并排序 for(int i =0;i<Num_Stu-1;i++) { for(int j =0;j<Num_Stu -i-1;j++) { if(strcmp(Stu_name[j],Stu_name[j+1]) > 0) { //替换姓名位置 strcpy(tempName,Stu_name[j]); strcpy(Stu_name[j],Stu_name[j+1]); strcpy(Stu_name[j+1],tempName); //替换分数位置 tempScore = Stu_score[j]; Stu_score[j] = Stu_score[j+1]; Stu_score[j+1] = tempScore; } } } //打印排序后结果 printf("学生按姓名排序后的结果:\n"); for(int i=0;i<Num_Stu;i++) { printf("姓名:%s,分数:%d\n",Stu_name[i],Stu_score[i]); } putchar(10); } //按成绩对学生升序排序 void Sort_score(int Num_Stu,char Stu_name[][50],int Stu_score[]) { //定义字符数组替换数组 //定义分数替换容器 char tempName[50]; int tempScore; //循环比较并排序 for(int i =0;i<Num_Stu-1;i++) { for(int j =0;j<Num_Stu -i-1;j++) { if(Stu_score[j] > Stu_score[j+1]) { //替换姓名位置 strcpy(tempName,Stu_name[j]); strcpy(Stu_name[j],Stu_name[j+1]); strcpy(Stu_name[j+1],tempName); //替换分数位置 tempScore = Stu_score[j]; Stu_score[j] = Stu_score[j+1]; Stu_score[j+1] = tempScore; } } } //打印排序后结果 printf("学生按分数排序后的结果:\n"); for(int i=0;i<Num_Stu;i++) { printf("姓名:%s,分数:%d\n",Stu_name[i],Stu_score[i]); } putchar(10); }
![]()