這是一篇樸實的入門教程,咳咳,好吧它並不準確,因為掌握了這裡面的所有內容也並不能算是c++入門了。
寫這個是因為感覺很多書裡一上來就有很多理論知識和專業術語,0基礎的童鞋看起來很費勁。所以我想寫個能幫助0基礎的童鞋能在讀教程的時候不那麼頭疼的……初級教程。這裡便是在簡要地介紹其中的**編寫部分。
我是覺得程式設計中的很多理論知識,如果自己不親自實踐的話是很難體會的,所以我想,把」怎麼做」暫時放在」是什麼」、」為什麼」之前,之後再理解」是什麼」、」為什麼」也是可行的吧。(當然也有必要的」是什麼」的環節)
這裡用到的術語如果看不懂也沒有關係,不用管它,它不會影響閱讀的。
可能會存在錯誤,懇請各位指正並多多包涵。有一些**寫的不是最佳方案,但是更易於理解。
順便注意,c系語言區分大小寫,以及字串的兩邊必須是英文引號,分號也必須打英文分號,其他有特殊意義的符號同理。
一、程式的控制流
1、 順序結構
在不存在其他控制語句(如if,goto,for,while,break,continue等)時,c++程式按照從上到下的語句依次執行(應該沒有採用別的順序的語言)。
練習1:實現乙個程式,在螢幕上輸出」hello world」。
實現**:
#include
int main()
具體解釋:
#include
int
abs(int arg) else
//這句話的意思是,如果arg大於等於0則返回arg本身,否則返回arg的相反數。
}
int arg:宣告乙個int型別的引數arg。函式可以擁有引數,在程式執行過程中呼叫這些函式時可以向其傳遞引數。表示式abs(5)中5即是引數,5將傳入arg中。
int f(int arg)
這樣我們在程式中寫下的f(5)時就和數學上的意義一樣了。
比如我們可以看下面的例程:
#include
int f(int arg)
int main()
(注2)
能想象得出輸出到螢幕上的是幾嘛?沒錯,就是77(5×5+1 + 10×5+1)。
其實int a這行語句還隱藏著奧妙,這是一句變數宣告(變數宣告格式:
[修飾符] 變數型別 變數名稱 [= 初始值];
)。 這條語句翻譯成中文,就是」定義乙個在一定範圍內的整數a」。
為什麼要宣告變數呢?
因為宣告變數可以讓我們把資料儲存起來,方便修改和讀取,給變數起乙個好的名字也能增加**的可讀性(比如int 金錢=5,金錢+5之類的)。
什麼?沒有」金錢+5」這種寫法?要寫成」金錢=金錢+5」?金錢怎麼可能和+5的金錢相等呢?
這是個數學問題,那個等號不是邏輯上的相等,而是賦值,等號這裡也不叫等號而叫做賦值號。這裡的意思是把先獲得目前金錢數,然後計算它+5,最後再把得到的值儲存在金錢這個變數裡。你還可以寫」存款=金錢+5」,意思是把金錢+5儲存在存款這個變數裡,而金錢沒有變化。賦值號的左邊叫做左值,右邊要求是乙個表示式。表示式不能作為左值(賦值物件),因為表示式不能儲存內容,而賦值的目標必須要能夠儲存內容(我的理解)。所以函式也同樣只能放在賦值符號的右側,而不能放在左側。
std::cout << 「hello world」 << std::endl;:實際上會是」(std::cout << 「hello world」) << std::endl;」,先將」hello world」輸入到cout(標準輸出流)中,然後把std::endl(暫時可以理解成換行符,雖然這是錯誤的)輸入到進行完剛才的操作的流中(此時為在末尾新增了」hello world」文字的cout)。<<:輸出操作符,我的理解是把右側的流的內容輸入到左側的流。類似的,>>作為輸入操作符,是把左側的流的內容輸入到右側,是不是很形象?
2、 分支結構
很明顯,光有順序結構,讓程式按照死的順序執行語句將有非常多的功能不能實現,比如剛才的絕對值函式,還有隨機情況的處理等等。分支結構即是讓程式可以根據不同的情況執行不同的**。
一)簡單的if語句
練習2:輸入乙個int型別的整數,判斷它是否大於5。
實現**:
#include
int main()
else
system(「pause」);
}
具體解釋:
int a;:先宣告了乙個int型別的變數a。
std::cin >> a;:將標準輸入流中的資料輸入a。在控制台應用程式(窗體和命令提示符的樣子基本一樣)中,這會等待使用者輸入內容,按下回車表示輸入完畢。
二)else if
練習3:輸入成績,返回評價。85~100:優秀 75~84:良好 60~74:合格 0~59:涼涼
實現**:
#include
int main()else
if(grade > 74)else
if(grade > 59)else
system(「pause」);
return
0;}
具體解釋:
整個if塊的意思是:如果成績在85分之上就輸出優秀,再不然在75分之上輸出良好,再不然合格,最後就涼涼了。只要if、elsif中有乙個測試語句滿足了條件,就會不再測試其他的條件。可以對比一下下面的寫法:
if(grade > 84)
if(grade > 74)
if(grade > 59)
if(grade < 60)
如果輸入的成績大於85分,會發現輸出的結果變成了」優秀良好合格」,顯然這是不合適的。
還有一種寫法:
if(grade > 84)
if(grade > 74 && grade < 85)
if(grade > 59 && grade < 75)
if(grade < 60)
&&:邏輯運算子之一,表示」且(and)」的意思,只有左右兩邊都為真時它們的和才為真。||是或。
這種寫法雖然思路、結果都是正確的,但是效率不如第一種高。原因在於只要大於等於85分就不需要再判斷這個成績是否屬於良好了,以此類推。
三)巢狀的if語句
其實細心的盆友會發現,剛才我們輸入的成績可以輸入負數,也可以輸入超過100的數值,這是不符合我們的要求的。需要在判斷這個成績的好壞之前,對它的真實性進行檢查。
實現**:
#include
int main()else
if(grade > 74)else
if(grade > 59)else
}else
system(「pause」);
return
0;}
3、 迴圈結構
即使使用了分支結構使得程式可以產生不同的變化,還是會有很多無法完成的任務。比如遊戲中的畫面時刻都需要重新整理(渲染),繪製的畫面內容時刻會產生變化,如果開啟遊戲的時間越來越長那麼執行**的長度也應該會越來越長,如果期間不修改程式的**的話,這是不可能的,況且也沒見哪個遊戲玩了一會之後發現遊戲的程式本體大小變大了的。
需要乙個**能……往回返的機制,於是我們現在就開始學習迴圈啦。
一) 簡單的for迴圈
練習4:使用for迴圈粗略計算根號1+根號2+根號3+……+根號100的值。
實現**:
#include
#include //開根號需要的函式的宣告在這個標頭檔案裡
int main()
std::cout
<< sum; //輸出結果。
system(「pause」);
return
0;}
具體解釋:
for(int i = 1; i <= 100; i = i + 1):
可以這樣理解上面的語句(實際上好像也是這樣的):
int i = 1;
if(i <= 100)
for迴圈語句我覺得只是簡化了寫法。
二) while迴圈
練習5:使用while迴圈粗略計算根號1+根號2+根號3+……+根號100的值。
實現**:
#include
#include //開根號需要的函式的宣告在這個標頭檔案裡
int main()
std:cout
<< sum; //輸出結果。
system(「pause」);
return
0;}
while用在事先不知道要執行多少次的迴圈中更能體現作用。
練習6:一直要求使用者輸入int型別的數字,直到使用者輸入的數字和超過100。之後輸出使用者輸入數字的次數。
實現**:
#include
int main()
std::cout
<< times;
system(「pause」);
return
0;}
注1:
比較下面兩種寫法。
第一種:
int f(int arg)
…… int a = f(b) + f(c) + f(d); //b,c,d都是int型別的變數
第二種:
int a = b * b + b * 2 + 5 + c * c + c * 2 + 5 + d * d + d * 2 + 5;
好吧這樣的函式還屬於比較簡單的函式,還不太顯,不過已經有點意思了。
結對程式設計(鋪墊)
結對程式設計 鋪墊 1.對敏捷開發和結對程式設計的理解 首先,敏捷開發,簡單的說,敏捷開發是一種以人為核心 迭代 循序漸進的開發方法。怎麼理解呢?首先,我們要理解它不是一門技術,它是一種開發方法,也就是一種軟體開發的流程,它會指導我們用規定的環節去一步一步完成專案的開發 而這種開發方式的主要驅動核心...
單鏈表實現 HashMap鋪墊
你知道單鏈表長什麼樣子嗎?嘿嘿,說起來感覺超級簡單,但是寫起來考慮的就多嘍 說明不是最後乙個,得到最後乙個這樣可以賦值node while nodenext.next null 得到最後的乙個位址指向節點 nodenext.next node param index 刪除的節點的位址 public ...
web基礎知識鋪墊
我們寫的 是需要瀏覽器解析與執行的,首先我們先來了解一下瀏覽器 常見的渲染引擎 這個是ie瀏覽器的核心,window10之後瀏覽器edge的核心是edgehtml 複製 webkit核心是蘋果公司開發的 主要代表有safira 複製 主要代表有火狐瀏覽器 複製 在chromium專案中研發blink...