C++實用主義速成Part.1(大霧,請謹慎對待)
C++實用主義速成(大霧,請謹慎對待)
Licenced under CC-BY-NC-SA lecence.
編寫 NaragNova , 轉載請註明出處。
請注意,本文很少涉及一些在實踐中可能涉及到的知識。如果你是想要認真學習程式設計的話,請務必配合其他有關C++基礎的教程食用本文, 以防出現底層實現不清導致無法debug的尷尬情況,以及其他優化或者他人程式碼採用特殊語法無法讀懂的情況。
序言
近幾天突然發現其實如果砍掉那些繁瑣的基礎,其實大學裡一個學期學到的C語言知識只要一個月就差不多可以完全掌握。
如果再砍掉那些底層一點的東西,只需要實用的話,一個小時基本可以大概掌握了(?)
在進行下一部分之前,請先預習前導的部分內容,或C++程式設計中的部分 “常識” 。
1. 在每一條語句結束的時候需要加一個分號,雖然沒有硬性規定每一行只能寫一條語句,但是請在保持程式碼整潔的基礎上儘量做到一行寫一條語句。請記住,每一個分號才代表一條語句結束。
1 // 這樣看起來很整潔: 2 #include<iostream> 3 4 int main() 5 { 6 int i = 10; 7 int j = 20; 8 int c = i + j; 9 10 return 0; 11 } 12 13 // 相信這樣沒人看0x0 14程式碼的整潔的重要性#include<iostream> 15 int main() 16 {int i = 10;int j = 20;int c = i + j;return 0;}
2. 計算機中的字元本質上是儲存了一些數字的組合,在顯示的時候會去對應的表中查詢,將其顯示到螢幕上。(例如ASCII碼, 具體可以參考百度百科的ASCII碼部分,連結如下。)編碼不用特意去記,只要上網查詢就可以了。
Part 1. 變數
這是C++裡的變數型別(可能有遺忘,歡迎大牛指出改正)
對於一般的程式而言,常用的資料型別已經足夠處理大部分的問題。
常用的變數型別有:
關鍵字 | 來源英文單詞 | 型別的解釋 |
int | Integer | 整形(整數型別) |
char | Character | 字元型 |
bool | Bool | 布林型別變數 |
float | Float | 浮點型別變數,也叫實型,用於儲存帶有小數的資料。 |
wchar_t | 寬字元型別 |
相對不大常用的變數型別有 :
關鍵字 | 來源英文單詞 | 型別的解釋 |
short | short | 短整型,相對int型別儲存的資料上限、下限要小。 |
long | long | 長整型,相對int型別能夠儲存的資料更大,但是在某些環境下,long等同於int。 |
long long | 長整型,相對int型別能夠儲存的資料更大,是c++中儲存整型資料的上限。 | |
double | double | 雙精度浮點數,可以儲存精度更高的實數 |
在解決大部分問題的時候,只需要掌握常用的型別就可以了。下面為變數定義的舉例:
1 // 定義方法: 變數型別關鍵字 + 分隔符 + 變數名 2 // 分隔符有: 空格 製表符(tab鍵), 插入分隔符數量多少不影響語句的正確執行。 3 // C++中,任何變數的名字不能與關鍵字重合,否則會出現錯誤導致程式不能正常執行。 4 // 變數名的命名規範為: 5 // 1) 變數名的第一個字不能是數字; 6 // 2) 變數名可以用大寫,小寫的英文字元與數字、下劃線的各種排列組合 7 // 3) C++對大小寫敏感,大小寫不同的變數名視作不同的變數。 8 // 4) 變數名中間不能加分隔符。 9 // 另外, 變數可以在定義時賦予初始值。 10 11 12 // 舉例: 13 int a; 14 float _b; 15 char Character; 16 double db = 1.2345;
請注意,變數存在“作用域”的概念,同一個變數只在其作用域中可以被檢視到,離開作用域即被銷燬。
作用域是程式的一個區域,一般來說有三個地方可以定義變數:
-
在函式或一個程式碼塊內部宣告的變數,稱為區域性變數。
-
在函式引數的定義中宣告的變數,稱為形式引數。
-
在所有函式外部宣告的變數,稱為全域性變數。
陣列 array
由於有些時候需要定義大量的變數, 逐個定義已經滿足不了人們的需求了,就出現了陣列。
這裡舉個例子: 某班有60個人, 需要儲存所有人的成績。
如果一個個定義變數, 60人還不多, 如果改為全省的, 全國的,那肯定是不現實的。由此,就誕生了神奇的陣列:
// 陣列的定義很簡單,固定為 [資料型別] [陣列名][[陣列長度]]; 陣列名是自己起的,只要不重複就行。 //例如要定義一個有10個整數的陣列,就可以: int array[10];
// 同理,定義20個浮點數的陣列可以寫成:
float array[20];
定義好了,那怎麼用呢?
這個也很簡單,類似數學中有 ai 一樣, 陣列也有個東西叫 "下標" 。用的時候只需要 陣列名[下標] 就可以引用到陣列中對應下標的變量了。
// 陣列引用 int arr[5] = {1, 3, 6, 8, 10}; arr[0] = 2; //對 arr 的第 0 個元素賦值為 2 , 此時 arr 的值為: {2, 3, 6, 8, 10} // 請注意, 陣列下標從零開始。
Part2. 語句
曾經有人論證過,只需要迴圈、分支就能做解決所有的問題,但是你得給個演算法。
在不考慮演算法的情況下,只需要大致知道迴圈、分支語句就可以完成所有的程式設計。
順序結構
順序結構是最簡單的, 顧名思義就是從上往下一條條執行語句。此處不過多贅述。
1 // 例如求幾個數的平均數可以這麼寫: 2 3 int x = 1, y = 2, z = 3; // 一行中使用逗號分隔來建立多個變數 4 int average = x; 5 average = average + y; 6 average = average + z; 7 average = average / 3; // 此處就得到了三個數的平均數
分支結構
分支結構就是常見的 if 由於switch語句可以由多條 if 替代, 此處就只講述 if 了。
if 語句的格式如下:
1 if ( 條件語句 ) // 條件語句可以是任何有值的語句, 比如賦值、 比較、 函式呼叫等 2 { 3 // 這裡是如果條件為真要執行的程式碼段 4 } 5 else 6 { 7 // 否則執行這裡的程式碼段 8 } 9 10 // 舉例:如果 x > y 就讓 x + 1, 否則 y + 1: 11 if (x > y) 12 { 13 x = x + 1; 14 } 15 else 16 { 17 y = y + 1; 18 }
需要注意的是, if語句的使用過程中容易出現邏輯錯誤, 需要在設計分支的時候謹慎使用, 避免一些邏輯上的失誤。
迴圈結構
迴圈主要有 while, for, do while 三種, 由於實際使用中較少使用 do while 迴圈而 while 迴圈經常被 for 迴圈代替, 此處只詳細講述 for 迴圈, 並略過 do while 迴圈。
迴圈中最重要的語句就是 [迴圈控制條件] 了, 在滿足這個條件的情況下迴圈才會繼續執行。
for 迴圈
[初始化條件] :在迴圈執行前執行, 一般用於初始化一些變數。
// for 迴圈的格式為: for ( [初始化條件] ; [迴圈控制條件] ; [每次迴圈結束後處理語句] ) { // 這裡是迴圈體, 每次迴圈都走一遍 } // 舉例如下:例如要求某個陣列中10個元素的和: int array[10] = { 1, 2, 4, 6, 10, 23, 65, 44, 2, 1}; // 假設這就是那個陣列 int sum = 0; // 用這個變數來存放和 for(int i = 0; i < 10; i++) // 定義控制變數 i 的初值為0, 在滿足 i < 10 的時候繼續迴圈 // 每次迴圈結束 i 自增1 // ++為自增運算子, i++ 等價於 i = i + 1 // 不建議新手使用自增運算子,因為這個東西不理解的情況下很玄學。 // 如果非要使用的話請務必在單獨的語句中使用。
// 感興趣的話可以百度查詢
{ sum = sum + array[i]; }
while迴圈
// while迴圈的定義如下: while ( [迴圈控制條件] ) { // 此處是迴圈體 } // 舉例:求 1~10 的和 int i = 1; int sum = 0; while( i <= 10) { sum = sum + i; i = i + 1; }
這次就先說這些叭 0.0
以上皆是個人見解, 如有錯誤還請指正。