問題描述 統(tǒng)計成績:給出 n 個學(xué)生的考試成績表,每條信息由姓名和分?jǐn)?shù)組成,試設(shè) 計一個算法: 1.按分?jǐn)?shù)高低次序,打印出每個學(xué)生在考試中獲得的名次,分?jǐn)?shù)相同的為同 一名次; 2.按名次列出每個學(xué)生的姓名與分?jǐn)?shù)。 輸入要求 輸入 n+1 行,前 n 行是 n 個學(xué)生的信息(姓名,成績),每個學(xué)生信息占一行, 姓名、成績用空格分隔,成績之后沒有空格。最后,第 n+1 行是輸入結(jié)束標(biāo)志:00(空 格分隔的二個 0)。其中,姓名為字符串類型,成績?yōu)楦↑c數(shù)類型。
輸出要求 總計 n 行,每行是一個學(xué)生的信息(名次、姓名、成績),名次、姓名、成績 用空格分隔。其中,成績輸出保留兩位小數(shù)。
輸入樣例
張三 80.00
李四 96.00
王五 90.00
鄭六 78.00
田七 85.00?
李明 90.00
0 0
輸出樣例
1 李四 96.00
2 王五 90.00
2 李明 90.00
3 田七 85.00
4 張三 80.00
5 鄭六 78.0
代碼實現(xiàn):文章來源:http://www.zghlxwxcb.cn/news/detail-758929.html
#include <stdio.h>
#include <string.h>
#define MaxE 15
typedef struct student //學(xué)生信息定義
{
char name[8]; //學(xué)生姓名
float score; //學(xué)生成績
}Stu;
int Read(Stu* a){
int cunt;
float s;
char n[8];
for(int i=1;i<MaxE;i++){
scanf("%s %f",n,&s);
if(n[0]=='0'&&s==0)return i;
strcpy(a[i].name,n);
a[i].score = s;
}
}
void Cal(Stu *a,int n){
int tmp=-1;
Stu turn,store;
for(int i=2;i<n;i++){ //插入排序
tmp = -1;
for(int j=i-1;j>=0;j--){
if(a[j].score>a[i].score){ //應(yīng)該將
tmp = j+1;
}else if(j==0){
tmp = 1;
}
strcpy(store.name,a[i].name);
store.score = a[i].score;
if(tmp!=-1){
for(int k=i;k>tmp;k--){
turn.score = a[k].score;
strcpy(turn.name,a[k].name);
a[k].score = a[k-1].score;
strcpy(a[k].name,a[k-1].name);
a[k-1].score = turn.score;
strcpy(a[k-1].name,turn.name);
}
strcpy(a[tmp].name,store.name);
a[tmp].score = store.score;
break;
}
}
}
}
void show(Stu *a,int n){
int cunt;
for(int i=1;i<n;i++){
if(i==1)cunt = 1;
else{
if(a[i].score<a[i-1].score)cunt++;
}
printf("%d %s %.2f\n",cunt,a[i].name,a[i].score);
}
}
int main(){
Stu a[MaxE];
int n = Read(a);
Cal(a,n);
show(a,n);
return 0;
}
到此,數(shù)據(jù)結(jié)構(gòu)實驗專欄已全部更新完成,后續(xù)時間我將把精力放在C++題庫專欄,盡快將其全部完成。文章來源地址http://www.zghlxwxcb.cn/news/detail-758929.html
到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)實驗任務(wù)八:排序算法的實現(xiàn)與分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!