Struct
struct Student_PersonalData {
char name[4];
int age;
char address[30];
} SP_Data;
來看一個簡單的例子
#include<bits/stdc++.h>
using namespace std;
struct Coordinate{
int x,y;
};
int main(){
Coordinate bat;
Coordinate ball;
cout << "請輸入球棒所在(X,Y)" << endl ;
cin >> bat.x >> bat.y ;
cout << "請輸入球所在(X,Y)" << endl ;
cin >> ball.x >> ball.y ;
cout << endl;
cout << "球棒在(" << bat.x << ',' << bat.y << ")" << endl ;
cout << "球在(" << ball.x << ',' << ball.y << ")" << endl ;
cout << endl;
return 0;
}
假如我們規定 x 座標是整數,y座標是小數呢
#include <bits/stdc++.h>
using namespace std;
typedef int x_cord;
typedef float y_cord;
struct Coordinate{
x_cord x;
y_cord y;
};
typedef Coordinate cord;
int main(){
cord bat;
Coordinate ball;
cout << "請輸入球棒所在(X,Y)" << endl ;
cin >> bat.x >> bat.y ;
cout << "請輸入球所在(X,Y)" << endl ;
cin >> ball.x >> ball.y ;
cout << endl;
cout << "球棒在(" << bat.x << ',' << bat.y << ")" << endl ;
cout << "球在(" << ball.x << ',' << ball.y << ")" << endl ;
cout << endl;
return 0;
}
更進階一點,假如你是位老師,你有N個學生,這學期共考M次考試,你要怎麼把成績記錄下來?
#include <bits/stdc++.h>
using namespace std;
struct Student{
int scores[10];
}student[505];
int N, M;
int main(){
// N個學生,M次考試
cin >> N >> M;
for ( int i = 0 ; i < N ; i++ )
for ( int j = 0 ; j < M ; j++ )
cin >> student[i].scores[j];
return 0;
}
都存下來了,那就排序一下,回顧一下上面提到的題目
輸入
4 <- 學生人數(列)
5 <- 考試次數(欄)
9 1 2 4 3 <- 第1位學生第一次考 9 分,第二次 1 分
4 5 6 3 2 <- 第2位學生的成績,以此類推
5 7 3 2 1
4 5 8 9 2
輸出
4 5 6 3 2 <- 第一次成績最小的最前面
4 5 8 9 2
5 7 3 2 1
9 1 2 4 3
如果學生第1次成績一樣,就比較第2次成績,以此類推
程式碼
#include <bits/stdc++.h>
using namespace std;
int N, M;
struct Student{
int scores[205];
}student[10005];
bool isBigger( int i , int j ){
for ( int k = 0 ; k < M ; k++ )
if ( student[i].scores[k] != student[j].scores[k] )
return student[i].scores[k] > student[j].scores[k];
return false;
}
int main(){
// N位學生,M次考試
cin >> N >> M;
// 輸入所有學生的成績
for ( int i = 0 ; i < N ; i++ )
for ( int j = 0 ; j < M ; j++ )
cin >> student[i].scores[j];
// selection sort
for ( int i = 0 ; i < N ; i++ ){
// 最小的那個數字的index存到minPtr裡面
int minPtr = i;
for ( int j = i+1 ; j < N ; j++ ){
if ( isBigger( minPtr, j ) ){
minPtr = j;
}
}
swap( student[i], student[minPtr] );
}
// 列出成績
for ( int i = 0 ; i < N ; i++ ){
for ( int j = 0 ; j < M ; j++ )
cout << student[i].scores[j] << " ";
cout << endl;
}
return 0;
}
更精簡版,不自己寫Selection Sort,用內建的sort來排序
#include <bits/stdc++.h>
using namespace std;
int N, M;
struct Student{
int scores[205];
}student[10005];
bool isBigger( Student A , Student B ){
for ( int k = 0 ; k < M ; k++ )
if ( A.scores[k] != B.scores[k] )
return A.scores[k] > B.scores[k];
return false;
}
bool cmp( Student A, Student B ){
return !isBigger( A , B );
}
int main(){
// N位學生,M次考試
cin >> N >> M;
// 輸入所有學生的成績
for ( int i = 0 ; i < N ; i++ )
for ( int j = 0 ; j < M ; j++ )
cin >> student[i].scores[j];
sort( student, student+N , cmp );
// 列出成績
for ( int i = 0 ; i < N ; i++ ){
for ( int j = 0 ; j < M ; j++ )
cout << student[i].scores[j] << " ";
cout << endl;
}
return 0;
}