第17周上機實踐項目6――學生成績統計(4)
來源:程序員人生 發布時間:2015-01-05 08:34:19 閱讀次數:2763次
問題及代碼
/*
* Copyright (c) 2014, 煙臺大學計算機學院
* All rights reserved.
* 文件名稱:test.cpp
* 作 者:辛彬
* 完成日期:2015年 1 月 2 日
* 版 本 號:v1.0
*
* 問題描寫: 使用相同的結構體類型,在main函數中已對結構體數組進行了初始化,請完成相干函數的定義,實現main函數中要求的功能。。
* 輸入描寫:沒有輸入。
* 程序輸出:很多東西。。。;
*/
#include <iostream>
#include <cstring>
using namespace std;
struct Student //同項目1
{
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)
{
for(int 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;
}
}
void sort1(Student s[],int n)
{
Student t;
int i,j;
for(i=0; i<n⑴; i++)
for(j=0; j<n-i⑴; j++)
{
if(s[j].grade<s[j+1].grade)
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
}
}
void sort2(Student s[],int n)
{
Student t;
int i,j;
for(i=0; i<n⑴; i++)
for(j=0; j<n-i⑴; j++)
{
if(strcmp(s[j].num,s[j+1].num)>0)
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
}
}
void output(Student s[],int n)
{
cout<<"學號 姓名 C++ 高數 英語 總分 均分"<<endl;
for(int i=0;i<n;i++)
cout<<s[i].num<<' '<<s[i].name<<' '<<s[i].cpp<<' '<<s[i].math<<' '<<s[i].english<<' '<<s[i].grade<<' '<<s[i].average<<endl;
}
void outputExcellent(Student s[],int n)
{
for(int 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<<endl;
}
}
運行結果:
學習感悟:1、對全部結構體的交換,可以再定義1個結構體,如student t,在如代碼所示交換
2、數組表示的字符串的操作,相干函數也能夠#include <cstring>
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈