1. 程式人生 > >第十七週專案六——學生成績統計(4)

第十七週專案六——學生成績統計(4)

問題及程式碼:

/*
* Copyright (c) 2014, 煙臺大學計算機學院
* All rights reserved.
* 檔名稱:Project4.cpp
* 作    者:陳旭
* 完成日期:2014年12月23日
* 版 本 號:v1.0
*
* 問題描述:輸出N名學生的資訊學號,姓名,總分和均分
* 輸入描述:略
* 程式輸出:略
*/

#include <iostream>
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","Lightning",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)  //計算總分和均分
{
    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.0;
    }
    return ;
}

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;
            }
    }
    return;
}


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(s[i].num<s[i+1].num)
            {
                t=s[i];
                s[i]=s[i+1];
                s[i+1]=t;
            }
    }
    return ;
}

void output(Student s[],int n)  //輸出成績單
{
    int i;
    for(i=0; i<n; i++)
    {
        cout<<s[i].num<<", "<<s[i].name<<", ";
        cout<<s[i].cpp<<", "<<s[i].math<<", "<<s[i].english<<", ";
        cout<<s[i].grade<<", "<<s[i].average<<endl;
    }
    cout<<endl;
    return;
}

void outputExcellent(Student s[],int n)   //輸出優秀者
{
    int i;
    for(i=0; i<n; i++)
        if(s[i].grade>=285&&s[i].cpp>=90&&s[i].math>=90&&s[i].english>=90)
        {
            cout<<s[i].num<<", "<<s[i].name<<", ";
            cout<<s[i].cpp<<", "<<s[i].math<<", "<<s[i].english<<", ";
            cout<<s[i].grade<<", "<<s[i].average<<endl;
        }
    cout<<endl;
    return;
}

執行結果:

知識點總結:

    通過這個程式的編寫,讓我們更加清楚結構體陣列的運用。

學習心得:

    漸漸的開始明白其執行原理什麼的。