1. 程式人生 > >PAT 乙等 1004 C語言

PAT 乙等 1004 C語言

1004. 成績排名 (20)

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

輸入格式:每個測試輸入包含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

思路:這個題如果會使用stdlib.h裡的qsort函式,做起來方便加快捷,如果不熟悉該函式的朋友請移步我C語言專欄下檢視。簡單來說就是將每一位同學的資訊存入結構體,按成績遞減排序,最後輸出最大和最小同學的資訊即可。

一、起始變數

1.學生的數量N

2.學生結構體陣列(關於結構體陣列的使用同樣在C語言專欄下有寫,不熟悉的童鞋可以去看哦)


二、運算

1.迴圈N次將資訊輸入到學生結構提陣列中。

2.將結構體陣列遞減排序。

3.輸出第0個學生結構體的名字學號和最後一個結構體的名字和學號

三、程式碼

#include "stdio.h"
#include "stdlib.h"
typedef struct{
	char name[11];
	char id[11];
	int score;
}student;
int cmp(const void * a,const void * b);
int main()
{
	int N = 0;
	scanf("%d",&N);
	student * students = (student *)malloc(N * sizeof(student));//一維學生陣列指標 
	int i = 0;
	
	for( i = 0 ; i < N ; i++)
	{
		scanf("%s %s %d",students[i].name,students[i].id,&students[i].score);
	}
	qsort(students,N,sizeof(students[0]),cmp);
	printf("%s %s\n",students[0].name,students[0].id);	
	printf("%s %s\n",students[N - 1].name,students[N - 1].id);
	return 0;
}

int cmp(const void * a,const void * b)
{
	return ((student *)b)->score - ((student *)a)->score;
}