--- tags: 2021CRC Extra Resources title: 社課額外補充教材:重複結構 --- # 社課額外補充教材 : 重複結構 如果你覺得社課還算輕鬆,這裡提供你一些額外的補充教材。 這些是我們在備課的時候覺得稍微進階,或是篇幅太多,而沒有放在正式社課的內容。 --- 這邊有目錄,左邊也有,可以跳到自己想看的地方 [TOC] --- 建議必看的地方 : * 詳細解說各迴圈執行順序 * 常用功能 * 大括號、縮排 --- ## 詳細解說各迴圈執行順序 ### while ```cpp= a; while(b){ c; } d; ``` 執行順序: 1. a-> 2. 判斷b->執行c->判斷b->執行c......(重複直到b為否) 3. ->d ### for ```cpp= a; for(b ; c ; d){ e; } f; ``` 執行順序: 1. a->b 注意b只會執行一次,之後才會判斷c 2. 判斷b->執行e->執行d......(重複直到b為否) 3. ->f ### do-while ```cpp= a; do{ b; }while(c); //注意分號 d; ``` 執行順序︰ 1. a->b 注意b在判斷c前會先執行一次 2. 判斷c->執行b......(重複直到c為否) 3. ->d ### 迴圈間比較 首先,這三個迴圈有一樣的功能 也就是說,三者可以互換 - while 常用於無窮迴圈或是不知道確切次數的時候 - for 常用於指定次數時 - do-while 常用於至少須一次執行時(也就是不常用) --- ## 常用功能 ### 無窮迴圈 顧名思義就是無止盡的迴圈 ```cpp= while(1) { } //其實只要放不為0的東西都可 for( ; 1 ; ) { } //相同概念,在條件判斷的地方放永為真的東西 do{ }while(1); //比起無窮迴圈希望各位更注意分號 ``` ### 執行n次 簡單明瞭控制執行次數 ```cpp= //下面都用n表示次數 int i = n; while(i--){ } //想想看為什麼可以這樣寫 for(int j = 0 ; j < n ; j++){ } //這最常見 int k = n-1; do{ }while(n--); //沒錯又是我,記得分號 //雖然超不常用但希望各位想想看為何可以這樣寫 ``` --- ## 大括號、縮排 在學if的時候有說到相關縮排的事情,忘記的可以回去看 [上次補充講義](https://hackmd.io/@Tony041010/ExtraResourcesIfElse) 有關迴圈的部份 * 只有當行程式時也可不寫大括號 ### while ```cpp= while(1) std::cout<<"hello world\n"; //會出現無止境的hello world ``` ### for ```cpp= for(int i = 0 ; i < 10 ; i++) std::cout<<"hello world\n"; //會出現十個hello world ``` ### do-while ```cpp= do std::cout<<"hello world\n"; while(false); //會出現一個hello world ``` --- ## 一些邪教 ```cpp= int n; while(std::cin>>n){} //重複直到eof,但不能對n進行更改 //更恐怖的改良板 int in; while(std::cin.eof()) { std::cin>>in; } //不解釋 ``` EOF(End Of File),文件結束時回傳 可以用鍵盤上的ctrl+z 或是 ctrl+c 模擬eof --- ## 避之唯恐不急的邪教 ─ goto 語法 ### 請千萬不要使用 語法結構 ```cpp= goto AAA; //AAA是標籤名稱,不須宣告 ``` 示例 ```cpp= #include<iostream> int main(){ AAA:; std::cout<<"不要用拜託不要那真的超恐怖\n"; goto AAA; //等同於 while(1) std::cout<<"用while不好嗎為啥要用goto?\n"; } ``` 也就是說,goto 語法會使程式從標籤處開始執行 嚴格來說,goto 並不算迴圈結構的一種 ### 為什麼不要用? ```cpp= #include<iostream> int main(){ int a,b; a=10; b=20; for(int i=0;i<a;i++){ CHAOS:; for(int j=0;j<b;j++){ std::cout<<j<<'\n'; goto CHAOS; } std::cout<<i<<'\n'; } } ``` 請問輸出是什麼? 答案是...我也不知道 #### 簡單來說 - goto的標籤容易使人混亂 - 程式碼難以預測與讀取 - 他人(或是過了一個禮拜的你)難以閱讀 **→請千萬不要使用**
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up