1. 程式人生 > >PAT 1004(成績排名) C語言

PAT 1004(成績排名) C語言

PAT 1004(成績排名)–C語言解法

題目要求:

讀入 n(>0)名學生的姓名、學號、成績,分別輸出成績最高和成績最低學生的姓名和學號。

輸入格式:

每個測試輸入包含 1 個測試用例,格式為

第 1 行:正整數 n 第 2 行:第 1 個學生的姓名 學號 成績 第 3 行:第 2 個學生的姓名 學號 成績 … … … 第 n+1 行:第 n 個學生的姓名 學號 成績

其中姓名和學號均為不超過 10 個字元的字串,成績為 0 到 100 之間的一個整數,這裡保證在一組測試用例中沒有兩個學生的成績是相同的。

輸出格式:

對每個測試用例輸出 2 行,第 1 行是成績最高學生的姓名和學號,第 2 行是成績最低學生的姓名和學號,字串間有 1 空格

輸入樣例:

3 Joe Math990112 89 Mike CS991301 100 Mary EE990830 95

輸出樣例:

Mike CS991301 Joe Math990112

分析

1.每一條資料有三類資訊,可以定義結構體儲存資訊。

2.由於沒有給出具體資料量n的上限,可以一邊讀入一邊判斷。

程式碼

#include<stdio.h>
struct information{    //定義結構體變數
	char name[11];
	char number[11];  //注意!題目雖然說不超過10個字元,但定義是要留出一個存'\0'
	int score;     
};
int main
() { int n,i; struct information max,min,next; //分別儲存最高分,最低分,和新錄入資料 scanf("%d",&n); scanf("%s %s %d",next.name,next.number ,&next.score); max=min=next; //要先讀取一個數據,才可以進行下面的迴圈 for(i=1;i<=n-1;i++){ scanf("%s %s %d",next.name,next.number ,&next.score); if(next.score>max.score)
max=next; if(next.score<min.score) min=next; } printf("%s %s\n",max.name,max.number); printf("%s %s",min.name,min.number); return 0; }