第17週項目6-学生成績各種統計並べ替えフィルタリング


問題およびコード:
/* 
*Copyright (c)2014,               
*All rights reserved. 
*    :grades.cpp 
*      :    
*    :2014 12 21  
*     :v1.0 
* 
*    :            。
*    : 。
*    :              。
*/
/*
*Copyright (c)2014,              
*All rights reserved.
*    :grades.cpp
*      :   
*    :2014 12 21 
*     :v1.0
*
*    :            。
*    : 。
*    :              。
*/
/*
*Copyright (c)2014,              
*All rights reserved.
*    :grades.cpp
*      :   
*    :2014 12 21 
*     :v1.0
*
*    :            。
*    : 。
*    :              。
*/
#include <iostream>
#include <cstring>
using namespace std;
struct Student
{
    char num[13];
    char name[10];
    int cpp;
    int math;
    int english;
    int grade;
    double average;
};
void calculate(Student s[],int n);  //       ,   s   ,  n   
void sort1(Student [],int);      //       
void sort2(Student [],int);      //       
void output(Student [],int);     //     
void outputExcellent(Student [],int);  //     :   285,     90
int main()
{
    Student stu[]= {{"201152501104","Tom",65,69 ,68 },
        {"201152501114","Jeery",94 ,89 ,63 },
        {"201152501138","Speike",67 ,62 ,84 },
        {"201152501204","Tyke",100 ,95 ,91 },
        {"201152501202","Tuffy",59 ,80 ,55 },
        {"201152501115","Butch",100 ,99 ,89 },
        {"201152501201","Light",95 ,92 ,99 },
        {"201152501145","Topsy",88 ,56 ,67 },
        {"201152501203","Droopy",62 ,62 ,95 },
        {"201152501140","Drupa",80 ,60 ,86 },
        {"201152501205","Buzz",73 ,90 ,94}
    };
    int stuNum=sizeof(stu)/sizeof(stu[0]);  // sizeof           
    //          
    calculate(stu,stuNum);
    cout<<"      :"<<endl;
    output(stu,stuNum);
    cout<<"     :"<<endl;
    outputExcellent(stu,stuNum);
    //          
    sort1(stu,stuNum);
    cout<<"        :"<<endl;
    output(stu,stuNum);
    //          
    sort2(stu,stuNum);
    cout<<"        :"<<endl;
    output(stu,stuNum);
    return 0;
}
void calculate(Student s[],int n)  //       ,   s   ,  n   
{
    int i;
    for(i=0; i<n; ++i)
    {
        s[i].grade=s[i].cpp+s[i].math+s[i].english;
        s[i].average=s[i].grade/3;
    }
}
void sort1(Student s[],int n)   //       
{
    int i,j;
    Student t;
    for(j=0; j<n-2; j++)
        for(i=0; i<n-j-1; i++)
            if (s[i].grade<s[i+1].grade)
            {
                t=s[i];
                s[i]=s[i+1];
                s[i+1]=t;
            }
}
void sort2(Student s[],int n)     //       
{
    int i,j;
    Student t;
    for(j=0; j<n-2; j++)
        for(i=0; i<n-j-1; i++)
            if (strcmp(s[i].num,s[i+1].num)>0)
            {
                t=s[i];
                s[i]=s[i+1];
                s[i+1]=t;
            }
}
void output(Student s[],int n)   //     
{
    int i;
    cout<<"  "<<'\t'<<'\t'<<"  "<<'\t'<<"  "<<'\t'<<"  "<<'\t'<<endl;
    for(i=0; i<n; ++i)
    {
        cout<<s[i].num<<'\t'<<s[i].name<<'\t'<<s[i].grade<<'\t'<<s[i].average;
        cout<<endl;
    }
}
void outputExcellent(Student s[],int n)  //     :   285,     90
{
    int i,j;
    cout<<"  "<<'\t'<<'\t'<<"  "<<'\t'<<"  "<<'\t'<<"  "<<'\t'<<endl;
    for(i=0; i<n; ++i)
    {
        if((s[i].grade>285)&&(s[i].cpp>=90)&&(s[i].math>=90)&&(s[i].english>=90))
        {
            for(j=0; j<n; ++j)
            {
                cout<<s[j].num<<'\t'<<s[j].name<<'\t'<<s[j].grade<<'\t'<<s[j].average;
                cout<<endl;
            }
        }
    }
}

実行結果:
知識ポイントのまとめ:
学生成績各種統計ソートフィルタ.
学習の心得:
交換するときは構造体を直接交換できますよ~~