第十七週專案六——學生成績統計(4)
阿新 • • 發佈:2019-02-16
問題及程式碼:
/* * 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; }
執行結果:
知識點總結:
通過這個程式的編寫,讓我們更加清楚結構體陣列的運用。
學習心得:
漸漸的開始明白其執行原理什麼的。