Part6 數組、指針與字符串 6.1 數組的定義與初始化
1 數組的定義與使用
數組是具有一定順序關系的若幹相同類型變量的集合體,組成數組的變量稱為該數組的元素。
使用數組元素必須先聲明,後使用。
一般只能逐個引用數組元素,而不能一次引用整個數組
//6-1數組 #include<iostream> using namespace std; int main(){ int a[10],b[10]; for(int i = 0;i < 10; i++){ a[i] = i*2 - 1; b[10 - i - 1] = a[i]; } for(int i = 0;i < 10; i++){ cout<< "a[" << i << "] = " << a[i] << " "; cout << "b[" << i << "] = " << b[i] << endl; } return 0; }
2 數組的存儲與初始化
一維數組的存儲:
數組元素在內存中順次存放,它們的地址是連續的。元素間物理地址上的相鄰,對應著邏輯次序上的相鄰。
數組名是數組首元素的內存地址。數組名是一個常量,不能被賦值。
一維數組的初始化:
1 列出全部元素的初始值
例如:static int a[10]={0,1,2,3,4,5,6,7,8,9};
2 可以只給一部分元素賦初值
例如:static int a[10]={0,1,2,3,4};
3 在對全部數組元素賦初值時,可以不指定數組長度
例如:static int a[]={0,1,2,3,4,5,6,7,8,9};
二維數組的存儲:
按行存放,每一行可以看做一個一維數組
二維數組的初始化:
1 將所有初值寫在一個{}內,按順序初始化
例如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
2 分行列出二維數組元素的初值
例如:static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
3 可以只對部分元素初始化
例如:static int a[3][4]={{1},{0,6},{0,0,11}};
4 列出全部初始值時,第1維下標個數可以省略
例如:static int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
或:static int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
註意:
1 如果不作任何初始化,內部auto型數組中會存在垃圾數據,static數組中的數據默認初始化為0;
2 如果只對部分元素初始化,剩下的未顯式初始化的元素,將自動被初始化為零;
//6-2求Fibonacci數列的前20項 #include<iostream> using namespace std; int main(){ int f[20] = {1,1}; for(int i = 2; i < 20; i++){ f[i] = f[i-2] + f[i-1]; } for(int i = 0; i < 20; i++){ if(i%5 == 0) cout << endl; //每行輸出5個 cout.width(12);//設置輸出寬度為12 cout << f[i]; } return 0; }
//6-3循環從鍵盤讀入若幹組選擇題答案,計算並輸出每組答案的正確率,直到輸入ctrl+z為止。 //每組連續輸入5個答案,每個答案可以是‘a‘..‘d‘。 #include<iostream> using namespace std; int main(){ const char key[] = {‘a‘,‘c‘,‘b‘,‘a‘,‘d‘}; const int NUM_QUES = 5; char c; int ques = 0, numCorrect = 0; cout << "Enter the " << NUM_QUES << " question tests:" << endl; while(cin.get(c)){ if(c != ‘\n‘){ if(c == key[ques]){ numCorrect++;cout << " "; }else cout << "*"; ques++; }else{ cout << " Score " << static_cast<float>(numCorrect)/NUM_QUES*100 << "%"; ques = 0; numCorrect = 0; cout << endl; } } return 0; }
Part6 數組、指針與字符串 6.1 數組的定義與初始化