首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

PAT 基礎級 1004 成績排名:查找最高分與最低分學生信息

     編輯:關於C語言

題目描述

讀入 N 名學生的姓名、學號、成績,輸出成績最高和最低的學生姓名與學號。

解題思路

  • 定義結構體 Student 包含姓名、學號、成績
  • 初始化 max_stu.score = -1,min_stu.score = 101(題目分數範圍 0-100)
  • 單次遍歷讀入數據,即時更新最高分和最低分記錄
  • 最後輸出兩名學生的姓名和學號

優化版 C 代碼

#include <stdio.h>
#include <string.h>

struct Student {
    char name[11];
    char id[11];
    int score;
};

int main(void) {
    int n;
    scanf("%d", &n);
    
    struct Student max_stu = {"", "", -1};
    struct Student min_stu = {"", "", 101};
    struct Student tmp;

    for (int i = 0; i < n; i++) {
        scanf("%s %s %d", tmp.name, tmp.id, &tmp.score);
        
        if (tmp.score > max_stu.score) max_stu = tmp; // 結構體整體賦值
        if (tmp.score < min_stu.score) min_stu = tmp;
    }

    printf("%s %s\n", max_stu.name, max_stu.id);
    printf("%s %s\n", min_stu.name, min_stu.id);
    return 0;
}

關鍵點解析

  1. 結構體整體賦值:C 語言支持同類型結構體直接賦值(max_stu = tmp),自動複製所有成員,比逐字符複製更簡潔高效。
  2. 初始值設置:利用題目分數範圍 [0,100] 設置哨兵值,避免額外判斷首個學生邏輯。
  3. 單次遍歷:時間複雜度 O(N),空間複雜度 O(1),無需存儲所有學生數據。

常見錯誤

  • 使用 scanf("%s", name) 時未限制長度,可能溢出(建議 %10s)
  • 未處理成績相同的情況:題目未規定並列處理規則,直接覆蓋即可(保留首個或末個均可 AC)
  • 定義過大的學生數組(如 stu[100])浪費空間,本題無需存儲所有數據
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved