C/C++基礎入門系列
寫在前面的話
C++學了一段時間了,現在在整理筆記,作爲備份和分享,會一點點的連載上來,如果此時的你在看這篇文章,而且想學C/C++,本篇系列文章或許能幫助你打基礎,爲了方便大家,代碼我也直接碼在上面了,如果複製粘貼都懶得做的話,過段時間我會把整理好的代碼打包傳到下載裏面。
目錄
第一部分 HelloWorld的起點
第二部分 初探數據類型(一)
第三部分 初探數據類型(二)
第四部分 認識運算符(一)
第五部分 認識運算符(二)
第六部分 理清思路,寫好邏輯結構(一)
第七部分 理清思路,寫好邏輯結構(二)
第八部分 理清思路,寫好邏輯結構(三)
第九部分 數據處理神器之數組(一)
第十部分 數據處理神器之數組(二)
第十一部分 寫好函數,學會功能複用(一)
第十二部分 寫好函數,學會功能複用(二)
第十部分 數據處理神器之數組(二)
5.2.3 冒泡排序
作用: 最常用的排序算法,對數組內的元素進行排序
- 比較相鄰元素,如果第一個比第二個大,就交換他們兩個
- 對每一對相鄰元素做同樣的工作,執行完畢後,找到一個最大值。
- 重複以上步驟,每次比較數-1,知道不需要比較。
示例: 將數組{4, 2, 8, 0, 5, 7, 8, 9, 6, 3, 1, 10, 12 }升序排列
#include<iostream>
using namespace std;
int main() {
int arr[] = { 4, 2, 8, 0, 5, 7, 8, 9, 6, 3, 1, 10, 12 };
for (int i = 0; i <= sizeof(arr) / sizeof(arr[0]) - 1; i++) {
cout << arr[i] << " ";
}
//// 外層次數 = 元素個數 - 1
//for (int i = 0; i < 13 - 1; i++) {
// // 內層次數 = 元素個數 - 當前輪數 - 1
// for (int j = 0; j < 13 - 1 - i; j++) {
// if (arr[j] > arr[j + 1]) {
// int temp = arr[j];
// arr[j] = arr[j + 1];
// arr[j + 1] = temp;
// }
// }
//}
for (int i = 0; i <= sizeof(arr) / sizeof(arr[0])-2; i++) {
for (int j = 0; j <= sizeof(arr) / sizeof(arr[0]) - 2 - i; j++) {
if (arr[j] > arr[j + 1]) { // 判斷大小,大的靠前
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
cout << endl;
for (int i = 0; i <= sizeof(arr) / sizeof(arr[0]) - 1; i++) {
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
5.3 二維數組
二維數組就是在一維數組基礎上,再增加加一個維度
5.3.1 二維數組的定義
二維數組有四種定義方式:
數據類型 數組名[行數][列數];
數據類型 數組名[行數][列數] = {{數據1, 數據2, ...},{數據3, 數據4, ...}, ..., {...}};
數據類型 數組名[行數][列數] = {數據1, 數據2, 數據3, 數據4, ...};
數據類型 數組名[][列數] = {數據1, 數據2, 數據3, 數據4, ...};
建議:以上四種定義方式,使用第二種更直觀,可提高代碼的可讀性
示例:
#include<iostream>
using namespace std;
int main() {
// 定義1
/*int arr[2][3];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;*/
// 定義2(推薦)
/*int arr[2][3] = {
{1, 2, 3},
{4, 5, 6}
};*/
// 定義3
//int arr[2][3] = { 1, 2, 3, 4, 5, 6 };
// 定義4
int arr[][3] = { 1, 2, 3, 4, 5, 6 };
// 輸出1
/*cout << arr[0][0] << endl;
cout << arr[0][1] << endl;
cout << arr[0][2] << endl;
cout << arr[1][0] << endl;
cout << arr[1][1] << endl;
cout << arr[1][2] << endl;
*/
// 輸出2
/*for (int i = 0; i <= 1; i++) {
for(int j = 0; j <= 2; j++){
cout << arr[i][j] << endl;
}
}*/
// 輸出3
for (int i = 0; i <= 1; i++) {
for (int j = 0; j <= 2; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
system("pause");
return 0;
}
5.3.2 二維數組數組名
- 查看二維數組佔用內存空間
- 獲取二維數組首地址
示例:
#include<iostream>
using namespace std;
int main() {
int arr[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
// 查看內存大小
cout << "二維數組佔用空間:" << sizeof(arr) << endl;
cout << "第一行佔用空間:" << sizeof(arr[0]) << endl;
cout << "第一個元素佔用空間:" << sizeof(arr[0][0]) << endl;
cout << "二維數組行數:" << sizeof(arr) / sizeof(arr[0]) << endl;
cout << "二維數組列數:" << sizeof(arr[0])/sizeof(arr[0][0]) << endl;
// 查看首地址
cout << "二維數組首地址:" << (int)arr << endl;
cout << "第二行首地址:" << (int)arr[1] << endl;
cout << "第二行第二列元素地址:" << (int)&arr[1][1] << endl;
system("pause");
return 0;
}
5.3.3 二維數組應用案例
考試成績統計:
案例描述:有三名同學(張三、李四、王五),在一次考試中成績分別如下,請分別輸出三名同學的成績和總成績
姓名 | 語文 | 數學 | 英語 |
---|---|---|---|
張三 | 100 | 100 | 100 |
李四 | 90 | 80 | 97 |
王五 | 80 | 70 | 60 |
示例:
#include<iostream>
#include<string>
using namespace std;
int main() {
int score[3][3] = {
{100, 100, 100},
{90, 80, 97},
{80, 70, 60}
};
string name[3] = { "張三", "李四", "王五" };
cout << "姓名\t語文\t數學\t英語\t總成績" << endl;
for (int i = 0; i <= 2; i++){
cout << name[i] << "\t";
for (int j = 0; j <= 2; j++) {
cout << score[i][j] << "\t";
}
cout << score[i][0] + score[i][1] + score[i][2] << endl;
}
system("pause");
return 0;
}