1. 程式人生 > >C語言結構體+陣列實現學生學號成績的統計、排序

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;

}

程式執行結果如下: