# 陣列
簡單的說,就是用來處理同類型的連續資料用的好東西
# 一維陣列
# 定義方法
| <資料型態> <標識符>[大小(陣列元素個數)]; |
| |
| double length[30],widtch[30]; |
| const int N = 100,M=20; |
| int score[N*M]; |
# 初始化方法
| <資料型態> <陣列名>[<常數表達式>] = {<表達式1>,<表達式2>,...}; |
| |
| int score[] = {98,100,80,90,98}; |
| double average[10] = {21.0, 20.3, 7.5+3, a*b}; |
# 使用方法
| |
| |
| int length[10],width[10]; |
| |
| |
| length[0] = 1; |
| |
| |
| int sum = length[0]*2; |
| |
| |
| cin>>length[0]; |
| |
| |
| cout<<length[0]; |
| |
| |
| |
| cin>>length; |
| |
| |
| cout<<length[10]; |
| |
| |
| width = length; |
| |
| |
| cout<<length; |
# 字元陣列、字元串
| |
| char chr[] = {'H','e','l','l','o'}; |
| int a = sizeof(chr); |
| |
| |
| |
| char chr[] = "Hello"; |
| int b = sizeof(chr); |
| |
# 例子:單字字母轉小寫成大寫
寫個程式讓電腦可以輸入一個 (全小寫的) 單字,將其全轉成大寫並輸出
| #include <iostream> |
| using namespace std; |
| int main() |
| { |
| char str[10]; |
| int i=0; |
| cin>>str; |
| while(str[i]!='\0') |
| { |
| str[i]=str[i]-32; |
| i++; |
| } |
| cout<<str<<endl; |
| return 0; |
| } |
# 二維陣列
二維陣列的概念就像是一個二維的表格,由行標和列標指明陣列的元素在表格中的位置
在內存中,按照一維陣列來存放,即按行順序在內存中分配儲存單位
# 定義方法
| <資料型態> <陣列名>[<常數表達式1>][<常數表達式2>]; |
| |
| |
| |
| int score[60][3]; |
| const int N = 10,M = 6; |
| double point[N][M]; |
行標列標是不能用變數的喔,必須是常數表達式才行,這種定義方式又稱為靜態定義。
# 初始化方法
| <資料型態> <陣列名>[<行數>][<列數>] = {<表達是1>,<表達是2>,...}; |
| |
| |
| |
| int A[3][3]={1,2,3,4,5,6,7,8,9}; |
| |
| |
| int A[][3]={1,2,3,4,5,6,7,8,9}; |
| |
| |
| int A[3][3]={ {1,2,3},{4,5,6},{7,8,9} }; |
| |
| |
| |
| int B[3][3]={1,2,3}; |
| |
| |
| int B[3][3]={ {1,2},{4,5},{7,8} }; |
# 使用方法
| int A[2][3]; |
| A[0][0] = 2; |
| A[1][2] = 1; |
# 延伸問題;一、二維陣列對應關係
如果使用一維的陣列 a[M*N]
和二維陣列 b[M][N]
表示同一個矩陣,
則 b[i][j]
與 a 中的那個下標的元素對應呢?
a 陣列元素
b 陣列元素
b[0][0] == a[0]
b[0][1] == a[1]
b[0][2] == a[2]
b[1][0] == a[3]
b[1][1] == a[4]
b[1][2] == a[5]
可以看出就是 => b[i][j]=a[i*N+j]
(這種方法好像跟 Hash 有點關係)
| #include <iostream> |
| using namespace std; |
| int main() |
| { |
| const int m=2,n=3; |
| int a[m*n],b[m][n]; |
| int i,j; |
| int x=1; |
| for(i=0;i<6;i++,x++) |
| a[i]=x; |
| x=1; |
| for(i=0;i<2;i++){ |
| for(j=0;j<3;j++,x++){ |
| b[i][j]=x; |
| cout<<a[i*n+j]<<"\t"<<b[i][j]<<endl; |
| } |
| } |
| return 0; |
| } |
# 多維陣列
| int A[5][4][3]; |
| double B[3][3][3]; |
# 結構
可以用來表示某事物的多個特徵,並保證多個陣列之間的關係。
# 結構類型
# 定義方法
| struct <結構體名> |
| { |
| <類型名1> <成員名表1>; |
| <類型名1> <成員名表2>; |
| <類型名2> <成員名表3>; |
| ........ |
| }; |
| struct Date{ |
| int year,month,day; |
| }; |
同一結構的元素不能同名,但可以與結構外的其他變數同名
# 結構變數
定義好結構變數後,就可以宣告該結構的變數。
# 宣告方式
# 宣告時機
| struct Date{int year,month,day;} today; |
| |
| struct {int year,month,day;} today; |
# 初始化方法
| struct <結構名> <變數1> = {<數據列表>}, <變數2> = {<數據列表>}; |
| struct Date today ={2020,10,1},yesterday={2020,9,30}; |
| |
| |
# 使用方法
使用成員運算子 (分量運算子) .
| today.year=2020; |
| today.month=10; |
| today.day=1; |
# 結構陣列
以一維陣列為例
# 定義方法
| struct <結構名> <結構陣列名>[<陣列大小=元素個數>]; |
# 初始化方法
| struct <結構名> <結構陣列名>[<陣列大小>] = {<結構類型值列表>}; |
| struct Date dates[30] = { {2020,9,30},{2020,10,1},{2020,10,2} }; |
| |
| |
| struct Date dates[] = { {2020,9,30},{2020,10,1},{2020,10,2} }; |
| |
# 使用方法
| today[i].year=2020; |
| today[i].month=10; |
| today[i].day=1; |
# 例子:簡易通訊錄
按照通訊錄格式紀錄 3 位聯絡人信息並輸出信息
通訊錄內容要求:
| #include <iostream> |
| using namespace std; |
| int main() |
| { |
| |
| struct telelist { |
| char[8] name; |
| char sex; |
| char[12] phone1; |
| char[12] phone2; |
| } list[3]; |
| int i; |
| for(i=0;i<=2;i++) { |
| cin>>list[i].name>>list1[i].sex>>list[i].phone1>>list[i].phone2; |
| } |
| for(i=0;i<=2;i++) { |
| cout<<list[i].name<<"/"<<list[i].sex<<"/"<<list[i].phone1<<"/"<<list[i].phone2<<endl; |
| } |
| return 0; |
| } |
# 枚舉
可以檢查變數取值的合法性
# 枚舉類型
# 定義方法
| enum Week {Sun, Mon, Tes, Wed, Thu, Fri, Sat}; |
| |
| |
| enum Coin {PENNY=1, NICKEL=5, DIME=10, QUARTER=25, HALF_DOLLAR=50, DOLLAR=100}; |
| |
| enum Color {red, yellow, blue=1, white, black}; |
| |
| |
枚舉常數是以標識符形式表示的整數型數,而不是字元串或字面常數
# 枚舉變數
# 宣告時機
| enum Color background, foreground; |
| enum Week {Sun=7, Mon=1, Tes, Wed, Thu, Fri, Sat} begin, end; |
# 使用方法
不同類型的枚舉變數不能相互賦值
| |
| enum Week {Sun=7,Mon=1,Tes,Wed,Thu,Fri,Sat} begin, end; |
| |
| |
| |
| cin>>begin; |
| |
| |
| begin=1; |
| |
| |
| |
| begin=Mon; |
| end=Sun; |
| |
| |
| begin= end; |
| |
| |
| begin=(Week)1; |
| |
| |
| int a=begin; |
| |
| |
| int b=Sun; |
| |
| |
| cout<<begin; |
| |
| |
| cout<<end-begin; |
# 例子:三色球組合
口袋中有紅、黃、藍 3 種顏色的小球各一個,從中取出兩個,顯示各種可能的組合。
| #include <iostream> |
| using namespace std; |
| int main() |
| { |
| enum color{red,yellow,blue}; |
| int temp,i,j; |
| for(i=red;i<=yellow;i++) |
| { |
| for(j=i+1;j<=blue;j++) |
| { |
| for(int t=0;t<2;t++) |
| { |
| switch(t) |
| { |
| case 0: temp=i; break; |
| case 1: temp=j; break; |
| } |
| switch((enum color)temp) |
| { |
| case red: cout<<"red"<<"\t"; break; |
| case yellow: cout<<"yellow"<<"\t"; break; |
| case blue: cout<<"blue"<<"\t"; break; |
| } |
| } |
| cout<<"\n"; |
| } |
| } |
| return 0; |
| } |