C語言流程控制編程
1、流程控制結構ide
(1)順序結構:按書寫順序執行每一條語句。post
(2)選擇結構:對給定的條件進行判斷,根據判斷結果決定執行哪一段代碼。性能
(3)循環結構:在給定條件成立的狀況下,反覆執行某一段代碼。spa
2、選擇結構-ifcode
(一)if簡單使用blog
1) 第一種結構:seo
a) 若是條件爲真,就執行後面的語句,不然不執行。作用域
if(條件)編譯器
{
語句1;
語句2;
····
}
2) 第二種結構:
a) 若是條件成立就執行語句1,不然執行語句2。
if(條件)
{
語句1;
}
else
{
語句2;
}
3) 第三種結構:
a) 先判斷條件1,若成立則執行語句1,其它不執行;若條件1不成立,則檢查條件2···,【注意】若是條件3成立,則說明前面的都不成立。全部的語句塊只有一個會被執行。
if(條件1)
{
語句1;
}
else if(條件2)
{
語句2;
}
else (條件3)
{
語句3;
}
4) 第四種結構:
a) 在這種狀況下,當條件成立,只執行語句1,語句2不屬於次條件結構,但不推薦此種寫法。
If(條件)
語句1;
語句2;
(二)if使用注意
①. 比較大小時,能夠把常量值放在左邊,變量值放在右邊以免錯誤。由於if(a==0)也容易被寫成if(a=0),而這種狀況,編譯器並不會報錯,推薦使用if(0==a)這種寫法。
②. 注意賦值運算符,不要把=寫成是==。
③. If(條件)後面不要加分號,這表明是一個空語句,後面的代碼塊將成爲一個獨立的代碼塊。如if(條件);{.....}//須要多加註意
④. 注意做用域的問題,若是要在if後面定義新的變量,則必定要使用大括號。
if(10>6)
{
Int a;//a的做用域在代碼塊結束後失效
}
Printf(「a=%d」,a);//編譯器報錯,找不到標識符
if(10>6)
Int a; //這種狀況下報錯,a的做用域不明確
Printf(「a=%d」,a); //編譯器報錯,找不到標識符
⑤. If(0){...}隨便挑一個數值也能夠作條件
(三)If結構練習
問題:輸入一個整數seore表明分數,根據分數輸出等級(A-E)。
A 90-100 B80-89 C70-79 D60-69 E0-60
代碼:
![](http://static.javashuo.com/static/loading.gif)
複製代碼 1 #include<stdio.h> 2 3 int main() 4 5 { 6 7 //定義變量存儲分數值 8 9 int score; 10 11 //提示輸入 12 13 printf("請輸入分值:\n"); 14 15 //接受輸入 16 17 scanf("%d",&score); 18 19 //判斷等級 20 21 if(score>=90&&score<=100) 22 23 printf("A\n"); 24 25 else if(score>=80) 26 27 printf("B\n"); 28 29 else if(score>=70) 30 31 printf("C\n"); 32 33 else if(score>=60) 34 35 printf("D\n"); 36 37 else 38 39 printf("E\n"); 40 41 return 0; 42 43 }
3、選擇結構-switch
(一)switch結構
Switch(值) //一般是變量
{
Case 數值1:
語句1;
Break;
Case 數值2:
語句2;
Break;
Case 數值3:
語句3;
Break;
Default :
語句4;
Break;
}
解說:該結構把數值與數值1進行比較,若相等,則執行後面的全部語句,直到碰見break語句跳出整個循環,若前面的條件都不知足,則最終會執行default後面的語句。若是不寫break語句,則後面的語句會接連執行,直到遇到break語句或者是所有語句執行完畢,只要前面的條件成立,則後面的判斷就直接被忽略。
(二)Switch使用注意
Char c=‘A’;
Switch(c)
{
Case ‘A’:
語句1;
Break;
Case 65://不能這樣寫,由於‘A’的ASCII值就是65,會報錯
語句2;
Break;
Case 數值3:
Int a=10;
//a的做用域不明確報錯,c語言檢查變量的做用域根據{}決定,這裏能夠加{}
Break;
Default :
語句4;
Break;
}
注意:若是要在case後面的語句中定義變量,則必須使用大括號包住。
(三)switch結構練習
問題:輸入一個整數seore表明分數,根據分數輸出等級(A-E)。
A 90-100 B80-89 C70-79 D60-69 E0-60
代碼:
![](http://static.javashuo.com/static/loading.gif)
1 #include<stdio.h> 2 3 int main() 4 5 { 6 7 //定義變量存儲分數值 8 9 int score; 10 11 //提示輸入 12 13 printf("請輸入分值:\n"); 14 15 //接受輸入 16 17 scanf("%d",&score); 18 19 //判斷等級 20 21 switch(score/10) 22 23 { 24 25 case 10: 26 27 case 9: 28 29 printf("A\n"); 30 31 case 8: 32 33 printf("B\n"); 34 35 break; 36 37 case 7: 38 39 printf("C\n"); 40 41 break; 42 43 case 6: 44 45 printf("D\n"); 46 47 break; 48 49 default: 50 51 printf("E\n"); 52 53 break; 54 55 } 56 57 return 0; 58 59 }
【對比】if與switch:
1. If語句可以完成的功能,switch有時並不可以完成,如判斷if(a>100)
2. 在有些狀況下,if語句和switch語句能夠互換
3. Switch語句能完成的功能,if語句均可以完成
4、循環結構-while
(一)簡單使用
While(條件)
{
語句;
}
解說:先判斷條件是否成立,成立則執行,執行完代碼後再次判斷條件是否成立(判斷條件-》執行代碼塊-》判斷條件-》執行代碼塊···)1.首先肯定循環執行的操做,2.在肯定約束條件,即須要循環多少次,3.定義一個變量來記錄循環的次數。
提示:在while循環體內使用if...break(跳出整個循環)或if...continue語句(跳出本次循環,繼續下一次循環判斷)。
While結構的運行原理:
①. 若是一開始條件不成立,則永遠不會執行循環體。
②. 若是條件成立,則執行一次循環體,執行完畢後再次判斷條件是否成立。
③. Break:直接退出整個循環。
④. Continue:結束當前循環體,進行下一輪循環判斷。
(二)使用注意
1) While(1){.....}是一個死循環
2) While(a<10);{...}在條件後面加逗號表示循環體是一個空語句,而非{}部分
3) While條件語句後推薦使用{},不然只有第一條語句時循環體
4) 最簡單的死循環 while(1);//永遠執行空語句,讓程序崩潰
(三)While練習
問題:編程實現,提示輸入一個正整數n,計算1+2+3+...n的值。
代碼:
![](http://static.javashuo.com/static/loading.gif)
1 #include<stdio.h> 2 3 int main() 4 5 { 6 7 //定義變量保存用戶輸入的整數 8 9 int n; 10 11 while(n<=0) 12 13 { 14 15 //提示輸入 16 17 printf("請輸入一個正整數:\n"); 18 19 //接受輸入 20 21 scanf("%d",&n); 22 23 } 24 25 int sum=0; 26 27 int number=0;//默認被加的數值 28 29 while(number<n) 30 31 { 32 33 number++; 34 35 sum=sum+number; 36 37 } 38 39 printf("計算結果爲:%d\n",sum); 40 41 return 0; 42 43 }
5、循環結構-do while
Do
{
語句
}while(條件)
特色:do while循環至少會執行一次循環體
6、循環結構-for
(一)基本使用
for(語句1,條件,語句2)
{
循環體
}
語句1:通常爲初始化語句
語句2:通常爲增量語句(執行完循環體後再執行的語句)
For循環原理:
1) For循環一開始就會執行語句1(整個for循環只會執行一次)
2) 判斷條件是否成立,若成立,則執行一次循環體,而後執行語句2,再次判斷條件是否成立,若條件不成立則結束循環
3) 順序爲:(語句1-》判斷條件-》循環體—》語句2-》判斷條件-》循環體···)
【對比】for和while:
在性能上,for循環稍勝一籌,由於while循環只能使用外部的變量,而for循環能夠對變量進行及時回收。
(二)for使用注意
①. 不要隨便在for語句後面寫上分號,如for();{....}
②. 定義變量的做用域不明確錯誤
for(int i=0;i<5;i++)
Int a=10; //編譯器報錯,變量做用域不明確
③. For語句中最簡單的死循環for(;;);
④. 須要注意變量定義的做用域
Int a=10;
For(int i=0,int a=9;i<5;i++)
{
Int a=10;
Printf(「a=%d\n」,a);//這裏打印的a的值是多少?
}
(三)For循環嵌套
用以輸出特定格式的內容,如QQ好友列表等,提高可擴展性。
For(in i=0;i<5;i++)
{
//外面的循環控制行數
Printf(「好友列表%d\n」,i);
//內部的循環控制列數
For(int j=1;j<=6;j++)
{
Printf(「好友%d\n」,j);
}
}
(四)For練習
使用for循環輸出九九乘法表。//先控制行數,在控制列數
代碼:
![](http://static.javashuo.com/static/loading.gif)
複製代碼 1 #include<stdio.h> 2 3 int main() 4 5 { 6 7 for(int i=1;i<=9;i++) 8 9 { 10 11 for(int j=1;j<=i;j++) 12 13 { 14 15 printf("%dx%d=%d\t",i,j,i*j); 16 17 } 18 19 printf("\n"); 20 21 } 22 23 return 0; 24 25 } 複製代碼