1. 程式人生 > 實用技巧 >C++實用主義速成Part.1(大霧,請謹慎對待)

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碼部分,連結如下。)編碼不用特意去記,只要上網查詢就可以了。

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

以上皆是個人見解, 如有錯誤還請指正。