/*【問題描述】 從標準輸入連續(xù)讀入n(n<10)個學生的學號(不超過int類型表示范圍)、姓名(由不超過10個英文字母組成)以及數(shù)學、英語、語文三門課的成績,計算個人的平均成績,并且按個人的總成績由高到低排序(如果總成績相同,按學號由低到高排序,但前面的排序序號不變,即兩人排名相同),將排名結果在屏幕上顯示出來(要求同一列右對齊,其中排名占4個字符、學號占10個字符,姓名占10個字符,數(shù)學、英語、語文各占5個字符)。如輸入的學生人數(shù)n大于等于10,則打印輸出“Please input 1-9.“, 然后,退出程序。 【輸入形式】 從控制臺輸入一個小于10的正整數(shù),表示學生人數(shù);然后分行輸入學號、姓名以及數(shù)學、英語、語文三門課的成績,中間用空格分隔。 【輸出形式】 1、控制臺輸出排序結果,要求輸出:排名結果、學號、姓名、數(shù)學成績、英語成績、語文成績。 2、要求同一列右對齊,其中排名占4個字符、學號占10個字符,姓名占10個字符,數(shù)學、英語、語文各占5個字符。 3、如兩人成績相同,總成績相同,按學號由低到高排序輸出,但前面的排序序號不變,即兩人排名相同。 【樣例輸入1】 8 39060415?zf 98 88 85 39060427?lzw 87 92 88 39060413?wr? 95 86 90 39060412?wp 95 85 91 39060405?syj 78 82 69 39060425?yef 85 78 93 39060419?sw 75 89 88 39060421?rr 89 88 75*/ 【樣例輸出1】 ?? 1? 39060412??????? wp?? 95?? 85?? 91 ?? 1? 39060413??????? wr?? 95?? 86?? 90 ?? 1? 39060415??????? zf?? 98?? 88?? 85 ???4? 39060427?????? lzw?? 87?? 92?? 88 ???5? 39060425?????? yef?? 85?? 78?? 93 ???6? 39060419??????? sw?? 75?? 89?? 88 ???6? 39060421??????? rr?? 89?? 88?? 75 ???8? 39060405?????? syj?? 78?? 82?? 69#include?"stdafx.h"#include?<stdlib.h>#include?<stdio.h>#include?<string.h>
typedef?struct?stuInf?{?int?stuID;?char?stuName[10];?int?stuMath;?int?stuEng;?int?stuChi;?int?markAll=stuMath+stuEng+stuChi;};
void?stuArrSort(stuInf?*pStu,?int?size);//進行排序void?stuArrRakOut(stuInf?*pStu,?int?size);//進行排名并輸出
void?stuArrSort(stuInf?*pStu,?int?size)?{?/*根據(jù)總分排序*/?int?i,?j;?for?(i?=?0;?i?<?size?-?1;?i++)?{??for?(j?=?i?+?1;?j?<?size;?j++)?{???if?((pStu+i)->markAll?<?(pStu+j)->markAll){????stuInf?tmp?=?*(pStu?+?i);????*(pStu?+?i)?=?*(pStu?+?j);????*(pStu?+?j)?=?tmp;???}????}?}
?/*根據(jù)學號排序*/?for?(i?=?0;?i?<?size?-?1;?i++)?{??for?(j?=?i?+?1;?j?<?size;?j++)?{???if?((pStu?+?i)->markAll?==?(pStu?+?j)->markAll)?{????if?((pStu?+?i)->stuID?>?(pStu?+?j)->stuID)?{?????stuInf?tmp?=?*(pStu?+?i);?????*(pStu?+?i)?=?*(pStu?+?j);?????*(pStu?+?j)?=?tmp;????}???}???else?{????continue;???}??}?}}
void?stuArrRakOut(stuInf?*pStu,?int?size)?{?int?i,rak=1;?printf("%d?%d?%s?%d?%d?%d\n",?rak,?(pStu?+?0)->stuID,(pStu?+?0)->stuName,(pStu+0)->stuMath,(pStu+0)->stuEng,(pStu+0)->stuChi);?for?(i?=?1;?i?<?size;?i++)?{??if?((pStu?+?i)->markAll?==?(pStu?+?(i-1))->markAll)?{???printf("%d?%d?%s?%d?%d?%d\n",?rak,?(pStu?+?i)->stuID,?(pStu?+?i)->stuName,?(pStu?+?i)->stuMath,?(pStu?+?i)->stuEng,?(pStu?+?i)->stuChi);??}??else?{???rak=i;???printf("%d?%d?%s?%d?%d?%d\n",?rak,?(pStu?+?i)->stuID,?(pStu?+?i)->stuName,?(pStu?+?i)->stuMath,?(pStu?+?i)->stuEng,?(pStu?+?i)->stuChi);??}?}}
int?main(){?int?iniNum;?scanf_s("%d",?&iniNum);
?if?(iniNum?<?1?||?iniNum>9)?{??printf("Please?input?num?1-9.?\n");?}?else?{
??stuInf?*stuArr?=?(stuInf*)malloc(sizeof(stuInf)*iniNum);
??int?i;??for?(i?=?0;?i?<?iniNum;?i++)?{???scanf_s("%d?%s?%d?%d?%d",?&((stuArr?+?i)->stuID),?((stuArr?+?i)->stuName),10,?&((stuArr?+?i)->stuMath),?&((stuArr?+?i)->stuEng),?&((stuArr+i)->stuChi));??}
??stuArrSort(stuArr,?iniNum);??stuArrRakOut(stuArr,?iniNum);
??free(stuArr);
?}
?system("pause");?return?0;}
- 3 回答
- 0 關注
- 3041 瀏覽
添加回答
舉報
0/150
提交
取消