資源簡介
設計內容:參加運動會有n個學校,學校編號為1……n。比賽分成m個男子項目,和w個女子項目。項目編號為男子1~m,女子m+1~m+w。不同的項目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些項目取前五名或前三名由學生自己設定。(m<=20,n<=20)
功能要求:
1) 可以輸入各個項目的前三名或前五名的成績;
2) 能統計各學校總分;
3) 可以按學校編號、學校總分、男女團體總分排序輸出;
4) 可以按學校編號查詢學校某個項目的情況;
5) 可以按項目編號查詢取得前三或前五名的學校。

代碼片段和文件信息
#include
#include
#include
#define?LT(ab)?((a)<(b))
#define?LIST_INIT_SIZE?100//線性表存儲空間的初始分配量?
#define?LISTINCREMENT?10//線性表存儲空間的分配增量
typedef?int?InfoType;?//?定義其它數據項的類型
typedef?int?KeyType;?//?定義關鍵字類型為整型
struct?RedType?//?記錄類型
?{
???KeyType?key;?//?關鍵字項
???InfoType?otherinfo;?//?其它數據項,具體類型在主程中定義
?};
typedef?struct
{
?int?schnum;//學校的編號
?int?mscore[20];//學校在各個男生項目的積分
?int?wscore[20];//學校在各個女生項目的積分
}school;//學校記錄類型
typedef?int?ElemType;
struct?SqList
?{
???ElemType?*elem;//?存儲空間基址
???int?length;?//?當前長度
???int?listsize;?//?當前分配的存儲容量(以sizeof(ElemType)為單位)
?};
struct?List
?{
???RedType?r[20];
???int?length;
?};
int?InitList(SqList?&L)?//?算法2.3
?{?//?操作結果:構造一個空的順序線性表
???L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
???if(!L.elem)
?????exit(-1);?//?存儲分配失敗
???L.length=0;?//?空表長度為0
???L.listsize=LIST_INIT_SIZE;?//?初始存儲容量
???return?1;
?}
int?ListInsert(SqList?&Lint?iElemType?e)?//?算法2.4
?{?//?初始條件:順序線性表L已存在,1≤i≤ListLength(L)+1
???//?操作結果:在L中第i個位置之前插入新的數據元素e,L的長度加1
???ElemType?*newbase*q*p;
???if(i<1||i>L.length+1)?//?i值不合法
?????return?0;
???if(L.length>=L.listsize)?//?當前存儲空間已滿增加分配
???{
?????if(!(newbase=(ElemType?*)realloc(L.elem(L.listsize+LISTINCREMENT)*sizeof(ElemType))))
???????exit(-1);?//?存儲分配失敗
?????L.elem=newbase;?//?新基址
?????L.listsize+=LISTINCREMENT;?//?增加存儲容量
???}
???q=L.elem+i-1;?//?q為插入位置
???for(p=L.elem+L.length-1;p>=q;--p)?//?插入位置及之后的元素右移
?????*(p+1)=*p;
???*q=e;?//?插入e
???++L.length;?//?表長增1
???return?1;
?}
void?InsertSort(List?&L)
?{?//?對順序表L作直接插入排序。算法10.1
???int?ij;
???for(i=2;i<=L.length;++i)
?????if?LT(L.r[i].keyL.r[i-1].key)?//?“<“需將L.r[i]插入有序子表
?????{
???????L.r[0]=L.r[i];?//?復制為哨兵
???????for(j=i-1;LT(L.r[0].keyL.r[j].key);--j)
?????????L.r[j+1]=L.r[j];?//?記錄后移
???????L.r[j+1]=L.r[0];?//?插入到正確位置
?????}
?}
void?print(List?L)
?{
???int?i;
???for(i=1;i<=L.length;i++)
?????printf(“(%d%d%d)\n“L.length-i+1L.r[i].otherinfoL.r[i].key);
???printf(“\n“);
?}
void?main()???//規定男生項目前三名分別積分5、3、2,女生項目前五名分別積分7、5、3、2、1
??????????????//規定沒有名次則積分為0?,不考慮并列的情況
??//請正確輸入各學校對應項目的積分?
{
??int?nmwij;
??school?a[20];
??int?summscore[20]sumwscore[20]sumscore[20];//定義存儲各個學校男團、女團、總分
??RedType?d[20];//定義排序所需的數組為RedType型
??SqList?LLmLw;//定義存放各個學校總分、男團、女團積分的順序線性表
??List?Lr;//定義積分排序所需的順序線性表
??InitList(L);//初始化各線性表
??InitList(Lm);
??InitList(Lw);
??cout<<“請輸入參加運動會的學校數目(5~20):“< ??cin>>n;
??while(n<5||n>20)
??{
??cout<<“輸入學校數目有誤,請重新輸入!“< ??cout<<“請輸入參加運動會的學校數目(5~20):“< ??cin>>n;
??}
??cout<<“請分別輸入男生、女生的項目數目(1~20):“< ??cin>>m>>w;
??cout<<“規定男生項目前三名分別積分5、3、2“< ??cout<<“女生項目前五名分別積分7、5、3、2、1“< ??cout<<“沒有名次則積分為0且本程序不涉及并列排名的情況!“< ??cout<<“請正確輸入各學校對應項目的積分!\n“< ??for(i=1;i<=n;i++)
??{
??a[i-1].schnum=i;//賦給學校對應的編號
??printf(“請輸入學校?%d?男生各個項目的成績:\n“i);
??for(j=1;j<=m;j++)//分別輸入對應學校的各個男生項目的積分情況
??cin>>a[i-1].mscore[j-1];
??
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????.CA....??????8779??2009-01-06?12:45??運動會分數統計.cpp
?????文件??????31232??2010-01-07?22:50??測試數據.doc
-----------?---------??----------?-----??----
????????????????40011????????????????????2
評論
共有 條評論