成績指標

題目說明

一次考試中,於所有及格學生中獲取最低分數者最為幸運,反之,於所有不及格同學中,獲取最高分數者,可以說是最為不幸,而此二種分數,可以視為成績指標。

請你設計一支程式,讀入全班成績(人數不固定),請對所有分數進行排序,並分別找出不及格中最高分數,以及及格中最低分數。

當找不到最低及格分數,表示對於本次考試而言,這是一個不幸之班級,此時請你印出「worst case」;反之,當找不到最高不及格分數時,請你印出「best case」。

( 註:假設及格分數為 60 )。

輸出說明

輸出三行。

第一行由小而大印出所有成績,兩數字之間以一個空白間格,最後一個數字後無空白;
第二行印出最高不及格分數,如果全數及格時,於此行印出 best case ;
第三行印出最低及格分數,如果全數不及格時,於此行印出 worst case 。

解題過程

首先,先宣告一個變數儲存有幾個成績並且輸入

int num;
cin >> num;

接著,使用這個變數宣告一個一維陣列儲存成績,並且將成績輸入進去,在輸入成績時,要使用到for迴圈
並且找出最高不及格分及最低及格分
可以先宣告兩個變數 f uf 分別代表最高不及格分及最低及格分,先將 f 設為 -1 避免測資中的 0 分影響判斷,而 uf 設為 101 是避免 100 分影響判斷

int f=-1,uf=101;
int score[num];
for(int i = 0;i < num;i++){
cin >> score[i]; // 陣列第一個是 score[0]
if(score[i] < 60 && f < score[i]){
  f = score[i];
  }
if(score[i] >= 60 && uf > score[i]){
  uf = score[i];
  }
}

到這邊就完成基本的輸入了!!!
題目說第一行要將成績從小到大輸出,所以這邊用上sort函式幫助我們將陣列從小到大排序

sort(score,score+num);

排序完之後將排序好的陣列輸出出去

for(int i = 0;i < num;i++){
  cout << score[i] << " ";
}
cout << endl; // 第一行輸出完畢

最後,要判斷是否有最高不及格分或最低及格分的出現與否
在前面我們將 f 設為 -1,uf 設為 101 就可以在這邊用到了!
如果 f 是 -1 那麼代表沒有低於 60 分的
如果 uf 是 101 那麼代表沒有高於 60 分的
故這邊可以這樣寫

if(f == -1){
  cout << "best case" << endl;
}else{
  cout << f << " " << endl;
}
if(uf == 101){
  cout << "worst case" << endl;
}else{
  cout << uf << " " << endl;
}

到這邊程式就完成了,完整的程式碼如下

#include<iostream>
using namespace std;
int main(){
    int num;
    cin >> num;
    int score[num];
    int f = -1,uf = 101;
    for(int i = 0;i < num;i++){
      cin >> score[i];
      if(score[i] < 60 && f < score[i]){
        f = score[i];
      }
      if(score[i] >= 60 && uf > score[i]){
        uf = score[i];
      }
    }
    sort(score,score+n);
    for(int i = 0;i < n;i++){
      cout << score[i] << " ";
    }
    cout << endl;
    if(f == -1){
      cout << "best case" << endl;
    }else{
      cout << f << " " << endl;
    }
    if(uf == 101){
      cout << "worst case" << endl;
    }else{
      cout << uf << " " <<endl;
    }
}