C语言流程控制
?
C語言流程控制
一、流程控制結構
(1)順序結構:按書寫順序執行每一條語句。
(2)選擇結構:對給定的條件進行判斷,根據判斷結果決定執行哪一段代碼。
(3)循環結構:在給定條件成立的情況下,反復執行某一段代碼。
二、選擇結構-if
(一)if簡單使用
1)?第一種結構:
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
代碼:
復制代碼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 }?
?
三、選擇結構-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
代碼:
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語句都可以完成
?
四、循環結構-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的值。
代碼:
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 }?
?
五、循環結構-do?while
Do
{
語句
}while(條件)
特點:do?while循環至少會執行一次循環體
?
六、循環結構-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循環輸出九九乘法表。//先控制行數,在控制列數
代碼:
復制代碼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 } 復制代碼?
?
轉載于:https://www.cnblogs.com/LifeTechnologySupporter/p/9655734.html
總結
- 上一篇: 用GO把你想说的话写到比特币链上
- 下一篇: 日志管理