利用结构体实现某班学生学号姓名的学号成绩学分等的统计,并能实现排序和查找某一学生的功能。
`
```csharp
#include <stdio.h>
#include <string.h>
typedef struct stu{
char a[20];//学号
char name[10];//姓名
int math;
int cl;//c语言
int sports;
int english;
int phical;
float scoreall; //总分
float scoreav; //平均分
float getscore; //存储学分
} STU;
STU *p;
float score[5] = {5, 3.5 , 2 , 3 , 2};
void getsoc(int n){//成绩录入
int i = 0;
for(i = 0 ; i<n ; i++){
printf("输入学号 姓名:");
scanf("%s %s", (p+i)->a, (p+i)->name);
printf("输入数学 c语言 体育 英语 近代史成绩:\n");
scanf("%d",&p[i].math);
scanf("%d",&p[i].cl);
scanf("%d",&p[i].sports );
scanf("%d",&p[i].english);
scanf("%d",&p[i].phical);
printf("%s %s\n", (p+i)->a, (p+i)->name);
p[i].scoreall = (float)(p[i].math + p[i].cl + p[i].sports + p[i].english + p[i].phical);
p[i].scoreav = p[i].scoreall/5;
p[i].getscore = 0;
if(p[i].math >= 60)
p[i].getscore += score[0];
if(p[i].cl >= 60)
p[i].getscore += score[1];
if(p[i].sports >= 60)
p[i].getscore += score[2];
if(p[i].english >= 60)
p[i].getscore += score[3];
if(p[i].phical >= 60)
p[i].getscore += score[4];
printf("总分%5.2f 均分%5.2f 学分%5.2f\n", p[i].scoreall , p[i].scoreav ,p[i].getscore);
}
}
void print2(int i){//打印某一学生信息
printf("%d\n",i+1);
printf("%s %s\n", (p+i)->a, (p+i)->name);
printf("%3d %3d %3d %3d %3d \n", p[i].math, p[i].cl, p[i].sports , p[i].english , p[i].phical);
printf("总分%5.2f 均分%5.2f 学分%5.2f\n", p[i].scoreall , p[i].scoreav ,p[i].getscore);
printf("\n");
}
void print1(int n){//按学分排序
int i = 0 , j = 0;
STU temp = p[0];
for(i = 0 ; i<n ; i++){
for(j = 0 ; j<n-1 ; j++){//冒泡排序
if(p[j].getscore>p[j+1].getscore){
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
}
void findst(int n){
int i = 0;
char numb[20];
scanf("%s",numb);
for(i=0 ; i<n ; i++){
if(strcmp(numb,p[i].a) == 0){
print2(i);
break;
}
}
if(i == n){
printf("未查询到该学生信息\n");
}
}
int main()
{
int n , m;
int i = 0;
printf("请输入要录入的学生人数");
scanf("%d",&n);
STU st[n];
p = st;
getsoc(n);
print1(n);
for(;;){
printf("情选择菜单 1--查询 , 2--按学分打印所有学生信息\n");
scanf("%d" ,&m);
switch(m){
case 1: findst(n); break ;
case 2: for(i = 0 ; i<n ; i++) print2(i);
break;
}
}
return 0;
}
更好的方法其实可以使用动态链表统计学生信息,方便学生信息的增删改查,对上述代码块稍作改进即可。