在學習完C語言的流程控制后,發現選擇結構跟循環結構都各自有各自的特點,下面就來對選擇結構與循環結構進行一個綜合的總結
第一講 選擇結構與循環結構
選擇結構主要包括if語句和switch語句,而循環結構包括for循環,while循環以及do while循環:
一 選擇結構
1. if(條件){
}else if(條件2){
}else{
}
特點:同一時刻只有一個大括號里面的代碼會執行。
2. switch(數值)
{
case 數值1:
break;
case 數值2:
break;
case 數值3:
break;
default:
break;
}
特點:默認情況下,只有一個case后面的代碼會執行
如果一個case后面沒有bresk,而且這個case成立,就會按順序執行后面所有的case中語句,直到遇到break為止
如果要在case后面定義一個新的變量,必須用{}括起來
二 循環結構
1. while
特點:如果一開始條件不成立,永遠不會執行循環體
2. do while
特點:不管條件是否成立,至少會執行一次循環體
3. for
選擇:一般優先考慮for循環,然后在考慮while循環,但需要根據具體情況,有時while比for好用
break的使用:1.switch語句:退出整個switch語句 2.循環結構:退出整個循環結構
注意點:多重嵌套只對最近的的循環體有效
continue的使用:結束當前這次的循環體,進入下一次循環體
注意點:只對最近的循環結構有效
下面舉一個綜合循環與選擇語句的綜合例子來體會一下循環語句與選擇語句運用到實際的例子當中:
1 /*提示用戶輸入一個正整數並輸出相應的* 2 比如用戶輸入5,則輸出 3 ***** 4 **** 5 *** 6 ** 7 * 8
9 */
10 #include <stdio.h>
11 int main() 12 { //定義一個變量存儲用戶輸入的值,記住一定要初始化
13 int n=0; 14 //判斷n值合不合理
15 while (n <= 0) { 16 //提示用戶輸入正整數,此while循環是一個判斷用戶輸入的情況
17 printf("請輸入一個正整數:\n"); 18
19 scanf("%d", &n); 20 } 21 //接下來是一套嵌套循環,用來輸出圖形
22 for(int i=0;i<n;i++){//判斷有多少行,以及每行的情況 23
24 //printf("******\n");
25 for (int s=0; s<n-i; s++) {//判斷每一行的*的情況,n-i是每行的*遞減
26 printf("*"); 27 } 28 printf("\n"); 29 } 30 return 0; 31 }
這個例子的選擇語句while用來判斷用戶的輸入值合不合理,而for循環怎是一套嵌套循環,用來判斷輸出的行數以及每一行的*數。
第二講 循環中變量的作用域問題
先來看一個例子,根據這個例子來體會一下變量在循環中定義時的一些注意點
1 int main() 2 { 3 //在for的循環體中定義變量,且循環體只有一條語句,建議任何時候都寫大括號
4 for (int a=0; a<3; a++) 5 int b = 0;//報錯,不能定義變量,要定義只能在大括號中
6
7 return 0; 8 }
此處定義b時會報錯,因為b的作用域不明確,如果想定義,需要在for后面加上大括號,表面上看b屬於main的全局,因為只有一對main函數的大括號,但是對於for循環來講,又希望這個b在循環結束就釋放掉,這樣就矛盾了,所以編譯器強制在for循環體中定義變量時定義在大括號中;類似的還有case語句中定義變量,所以在使用for或者case時,即使語句只有一條也加上大括號。
在看這個例子:
1 int main() 2 { 3 for(int a=0; a<3; a++,b++)//這里的b當然是不能訪問了,b是在下邊的一對大括號中定義的,也就是內層結構體中
4 { 5 printf(“%d\n”,a);//依次輸出0、1、2,前提上邊小括號中的b++刪掉
6 int a = 10;//這個重名的a是可以的,在上邊定義過a后,循環體中可以繼續定義a
7 int b = 0; 8 printf(“%d\n”,a);//每次都輸出10
9 } 10 return 0; 11 }
這是在for循環中的局部變量a可以在循環體中定義重名變量,只是每一次循環結束,循環體中的a會被釋放
但是在定義函數時,形參是不能在函數體中定義重名變量的:
1 int test(int num1, int num2) 2 { 3 int num1 = 0;//這個是不允許的,按照上邊的for循環來講是可以的,但是函數的形參是等待接收實參的值的,並且這個值要在函數體中參與運算的,是一個很有意義的變量,c不允許重新定義與形參同名的變量名以防止這個形參真的沒了意義,而for中的a只是讓循環繼續的一個條件,即使在循環體中重新定義了,每次循環結束后,會被釋放,a又回到了原來的值,並不影響循環,所以可以;
4 return 0; 5 }
本章學習總結:
本章主要學習了選擇結構和循環結構,主要包括選擇結構中的if語句和switch語句,循環結構中的while語句,do while語句和for語句,這些語句在定義時的規范以及在使用時的特點和注意點,之前我們學習過選擇結構的變量作用域的一些注意點,當然本章也重點學習了循環結構中變量的作用域問題,並且通過幾個典型的例子體會了循環結構中的變量作用域問題,其實在循環結構和選擇結構的的運用上存在很多的注意點,需要在今后的實際應用中加以體會,但是其結構和用法都是固定的,只要是按照正常的語法結構以及定義時的規范走,都會萬變不離其宗,一定要注意作用域的問題。