C語言結構體+陣列實現學生學號成績的統計、排序
阿新 • • 發佈:2019-01-29
#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;
}
程式執行結果如下: