题目:定义一个学生信息结构体,包含姓名,学号,语文成绩、数学成绩,和英语成绩,定义结构体数组存放不同学生的信息,可以在终端录入学生的信息,可以实现对于学生成绩的排序,排序可以按照语文、数学或者英语的任意一个,添加一个计算平均值和按照平均值排序以及删除指定学号的学生信息。
代码:
#include<stdio.h>
//定义的学生信息结构体
typedef struct student
{
int num;
char name[128];
float Chinese;
float math;
float English;
float average;
}STU;
int count=0;//记录学生的数量
void student_add(STU *stu);
void student_delete(STU *stu);
void student_sort_math(STU *stu);
void student_sort_chinese(STU *stu);
void student_sort_english(STU *stu);
void student_sort_average(STU *stu);
void student_display(STU *stu);
int main(int argc, char const *argv[])
{
//定义学生信息数组
STU stu[100];
//定义输入选择变量
int input;
while(1)
{
printf("--------功能选择----------------\n");
printf("--------1.添加学生信息----------\n");
printf("--------2.删除学生信息----------\n");
printf("--------3.以语文成绩进行排序----\n");
printf("--------4.以数学成绩进行排序----\n");
printf("--------5.以英语成绩进行排序----\n");
printf("--------6.以平均值成绩进行排序--\n");
printf("--------7.退出程序--------------\n");
printf("请输入要进行的操作>");
scanf("%d",&input);
switch(input)
{
case 1:
student_add(stu);
break;
case 2:
printf("请输入要删除的学生信息的学号;");
student_delete(stu);
student_display(stu);
break;
case 3:
student_sort_chinese(stu);
break;
case 4:
student_sort_math(stu);
break;
case 5:
student_sort_english(stu);
break;
case 6:
student_sort_average(stu);
break;
case 7:
printf("程序正常退出\n");
return 0;
break;
default:
printf("输入错误,请重新输入\n");
break;
}
//学生的遍历
student_display(stu);
}
return 0;
}
//添加学员信息
void student_add(STU *stu)
{
int a;
while(1)
{
printf("请输入要添加的学生学号>");
scanf("%d",&stu[count].num);
printf("请输入要添加的学生姓名>");
scanf("%s",stu[count].name);
printf("请输入要添加的学生语文成绩>");
scanf("%f",&stu[count].Chinese);
printf("请输入要添加的学生数学成绩>");
scanf("%f",&stu[count].math);
printf("请输入要添加的学生英语成绩>");
scanf("%f",&stu[count].English);
stu[count].average=(stu[count].Chinese+stu[count].math+stu[count].English)/3;
printf("得出三门平均值average为%f\n",stu[count].average);
count++;//学生数量+1
printf("学生信息录入完毕,请选择是否继续添加 1:添加 0:返回上一级菜单>");
scanf("%d",&a);
if(a!=1)
break;
}
}
//删除学员信息
void student_delete(STU *stu)
{
int a=0;
scanf("%d",&a);
for(int i=0;i<count;i++)
{
if(a==stu[i].num)
{
for(int j=1;j<count-i;j++)
{
stu[j]=stu[j+1];
}
}
}
count=count-1;
}
//以数学成绩进行排序
void student_sort_math(STU *stu)
{
int i, j;
STU tmp;
for(i = 0; i < count-1; i++)
{
for(j = 0; j < count-i-1; j++)
{
if(stu[j].math< stu[j+1].math)
{
tmp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = tmp;
}
}
}
}
//以语文成绩进行排序
void student_sort_chinese(STU *stu)
{
int i, j;
STU tmp;
for(i = 0; i < count-1; i++)
{
for(j = 0; j < count-i-1; j++)
{
if(stu[j].Chinese< stu[j+1].Chinese)
{
tmp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = tmp;
}
}
}
}
//以英语成绩进行排序
void student_sort_english(STU *stu)
{
int i, j;
STU tmp;
for(i = 0; i < count-1; i++)
{
for(j = 0; j < count-i-1; j++)
{
if(stu[j].English< stu[j+1].English)
{
tmp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = tmp;
}
}
}
}
//以三门科目的平均值排序
void student_sort_average(STU *stu)
{
int i, j;
STU tmp;
for(i = 0; i < count-1; i++)
{
for(j = 0; j < count-i-1; j++)
{
if(stu[j].average< stu[j+1].average)
{
tmp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = tmp;
}
}
}
}
//遍历学生信息
void student_display(STU *stu)
{
printf("总共%d个学员:\n",count);
for(int i=0;i<count;i++)
{
printf("num|%d 姓名|%s 语文成绩|%.2f 数学成绩|%.2f 英语成绩|%.2f 平均分|%.2f\n\n",stu[i].num,stu[i].name,stu[i].Chinese,stu[i].math,stu[i].English,stu[i].average);
}
}
效果: