练习:
#include <stdio.h>
#include <string.h>
char name[100][100]={""};
int score[100]={0}; //定义存储学生信息的数组
int num=0; //定义学生个数的变量
void info_in();
void info_out();
void info_max();
void info_sort(); //函数声明
int main(int argc, char const *argv[])
{
int menu=0;
while (1)
{
printf("————————————————————————————————————————————\n");
printf("\t<<<<<<学生管理系统>>>>>>\n");
printf("\t******1>>信息录入******\n");
printf("\t******2>>查看信息******\n");
printf("\t******3>>最好成绩******\n");
printf("\t******4>>信息排序******\n");
printf("\t******0>>退出系统******\n");
printf("————————————————————————————————————————————\n");
printf(">>> ");
scanf("%d",&menu);
getchar();
switch (menu)
{
case 1:
info_in();
break;
case 2:
info_out();
break;
case 3:
info_max();
break;
case 4:
info_sort();
break;
case 0:
exit(0);
default:
printf("错误输入\n");
}
}
return 0;
}
void info_in() //录入函数
{
printf("输入学生个数:");
scanf("%d",&num);
for (int i = 0; i < num; i++)
{
printf("输入第%d个学生的姓名:",i+1);
scanf("%s",name[i]);
printf("输入第%d个学生的成绩:",i+1);
scanf("%d",&score[i]);
}
}
void info_out() //查看函数
{
printf("学生信息:\n");
for (int i = 0; i < num; i++)
{
printf("%s\t",name[i]);
printf("%d\n",score[i]);
}
}
void info_max() //最大函数
{
int maxi=0;
for (int i = 0; i < num; i++)
{
if(score[maxi]<score[i])
{
maxi=i;
}
}
printf("学习最好的同学是:%s ,成绩:%d\n",name[maxi],score[maxi]);
}
void info_sort() //排序函数
{
int flag1=0,flag2=0;
char temp1[100]={""};
int temp2=0;
printf("按姓名(0)/成绩(1)进行升序(0)/降序(1)排序:");
scanf("%d %d",&flag1,&flag2);
for(int i = 1; i < num; i++)
{
for (int j = 0; j < num-i; j++)
{
if(flag1==0)//按姓名
{
int a=strcmp(name[j],name[j+1]);
if(flag2==0)//升序
{
if (a>0)
{
strcpy(temp1,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],temp1);
temp2=score[j];
score[j]=score[j+1];
score[j+1]=temp2;
}
}
else if(flag2==1)//降序
{
if (a<0)
{
strcpy(temp1,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],temp1);
temp2=score[j];
score[j]=score[j+1];
score[j+1]=temp2;
}
}
}
else if(flag1==1)//按成绩
{
if(flag2==0)//升序
{
if (score[j]>score[j+1])
{
strcpy(temp1,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],temp1);
temp2=score[j];
score[j]=score[j+1];
score[j+1]=temp2;
}
}
else if(flag2==1)//降序
{
if (score[j]<score[j+1])
{
strcpy(temp1,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],temp1);
temp2=score[j];
score[j]=score[j+1];
score[j+1]=temp2;
}
}
}
}
}
printf("排序后的结果为:\n");
for (int i = 0; i < num; i++)
{
printf("%s\t",name[i]);
printf("%d\n",score[i]);
}
}
按姓名升序排序
按姓名降序排序
按成绩升序排序
按成绩降序排序