C语言结构体+数组实现学生学号成绩的统计、排序
#include <stdio.h>
#include <stdlib.h>
#define N 32
struct student
{
int num;
int sch;
}s[N]={{392,81},{304,80},{442,85},{517,90},{343,94},{403,85},{446,92}
,{506,78},{948,90},{314,66},{983,62},{534,67},{237,84},{322,30},{469,74}
,{539,92},{240,85},{460,80},{472,32},{522,74},{202,73},{465,48},{479,85}
,{826,75},{298,91},{361,40},{493,77},{530,31},{459,37},{377,92},{497,76},{482,76}};//定义全局变量结构体并初始化学号和成绩
void score()
{
int i,count1=0,count2=0,count3=0,count4=0,count5=0;
printf("90-100分:");
for(i=0;i<N;i++)
{
if(s[i].sch>=90&&s[i].sch<=100)//90-100区间的分数
{
count1++;
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}}
printf("90-100分区间人数为:%d\n\n",count1);
printf("80-89分:");
for(i=0;i<N;i++){
if(s[i].sch>=80&&s[i].sch<=89)//80-89
{
count2++;
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}}
printf("80-89分区间人数为:%d\n\n",count2);
printf("70-79分:");
for(i=0;i<N;i++){
if(s[i].sch>=70&&s[i].sch<=79)//70-79
{
count3++;
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}}
printf("70-79分区间人数为:%d\n\n",count3);
printf("60-69分:");
for(i=0;i<N;i++){
if(s[i].sch>=60&&s[i].sch<=69)//60-69
{
count4++;
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}}
printf("60-69分区间人数为:%d\n\n",count4);
printf("不及格:");
for(i=0;i<N;i++){
if(s[i].sch<60)//60-69
{
count5++;
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}}
printf("不及格人数为:%d\n\n",count5);
}
void AvgScore()//求平均分和总分
{
int i,num=0,avg;
for(i=0;i<N;i++)
{
num+=s[i].sch;
}
avg=num/N;
printf("全班平均成绩为:%d\n",avg);
printf("全班成绩总分为:%d\n\n",num);
}
void sort()//排序并统计前三名和后三名
{
int i,j,temp1,temp2;
printf("成绩从大到小排序:\n");
for (i = 0; i < N; i++)
{
for (j = 0; j < N - 1; j++)
if (s[j].sch <s[j+1].sch)
{
temp1 = s[j].sch;
s[j].sch = s[j+1].sch;
s[j+1].sch = temp1;
temp2 = s[j].num;
s[j].num = s[j+1].num;
s[j+1].num = temp2;
}
}
for(i=0;i<N;i++)//输出从大到小排序后的结果
{
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}
printf("\n");
printf("前三名学号和成绩:\n");
for(i=0;i<3;i++)
{
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}
printf("\n");
printf("后三名学号和成绩:\n");
for(i=N-1;i>N-4;i--)
{
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}
}
int main()
{
score();
AvgScore();
sort();
return 0;
#include <stdlib.h>
#define N 32
struct student
{
int num;
int sch;
}s[N]={{392,81},{304,80},{442,85},{517,90},{343,94},{403,85},{446,92}
,{506,78},{948,90},{314,66},{983,62},{534,67},{237,84},{322,30},{469,74}
,{539,92},{240,85},{460,80},{472,32},{522,74},{202,73},{465,48},{479,85}
,{826,75},{298,91},{361,40},{493,77},{530,31},{459,37},{377,92},{497,76},{482,76}};//定义全局变量结构体并初始化学号和成绩
void score()
{
int i,count1=0,count2=0,count3=0,count4=0,count5=0;
printf("90-100分:");
for(i=0;i<N;i++)
{
if(s[i].sch>=90&&s[i].sch<=100)//90-100区间的分数
{
count1++;
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}}
printf("90-100分区间人数为:%d\n\n",count1);
printf("80-89分:");
for(i=0;i<N;i++){
if(s[i].sch>=80&&s[i].sch<=89)//80-89
{
count2++;
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}}
printf("80-89分区间人数为:%d\n\n",count2);
printf("70-79分:");
for(i=0;i<N;i++){
if(s[i].sch>=70&&s[i].sch<=79)//70-79
{
count3++;
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}}
printf("70-79分区间人数为:%d\n\n",count3);
printf("60-69分:");
for(i=0;i<N;i++){
if(s[i].sch>=60&&s[i].sch<=69)//60-69
{
count4++;
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}}
printf("60-69分区间人数为:%d\n\n",count4);
printf("不及格:");
for(i=0;i<N;i++){
if(s[i].sch<60)//60-69
{
count5++;
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}}
printf("不及格人数为:%d\n\n",count5);
}
void AvgScore()//求平均分和总分
{
int i,num=0,avg;
for(i=0;i<N;i++)
{
num+=s[i].sch;
}
avg=num/N;
printf("全班平均成绩为:%d\n",avg);
printf("全班成绩总分为:%d\n\n",num);
}
void sort()//排序并统计前三名和后三名
{
int i,j,temp1,temp2;
printf("成绩从大到小排序:\n");
for (i = 0; i < N; i++)
{
for (j = 0; j < N - 1; j++)
if (s[j].sch <s[j+1].sch)
{
temp1 = s[j].sch;
s[j].sch = s[j+1].sch;
s[j+1].sch = temp1;
temp2 = s[j].num;
s[j].num = s[j+1].num;
s[j+1].num = temp2;
}
}
for(i=0;i<N;i++)//输出从大到小排序后的结果
{
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}
printf("\n");
printf("前三名学号和成绩:\n");
for(i=0;i<3;i++)
{
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}
printf("\n");
printf("后三名学号和成绩:\n");
for(i=N-1;i>N-4;i--)
{
printf("学号=%d,成绩=%d\n", s[i].num, s[i].sch);
}
}
int main()
{
score();
AvgScore();
sort();
return 0;
}
程序运行结果如下: