C语言流程控制
?
C語(yǔ)言流程控制
一、流程控制結(jié)構(gòu)
(1)順序結(jié)構(gòu):按書寫順序執(zhí)行每一條語(yǔ)句。
(2)選擇結(jié)構(gòu):對(duì)給定的條件進(jìn)行判斷,根據(jù)判斷結(jié)果決定執(zhí)行哪一段代碼。
(3)循環(huán)結(jié)構(gòu):在給定條件成立的情況下,反復(fù)執(zhí)行某一段代碼。
二、選擇結(jié)構(gòu)-if
(一)if簡(jiǎn)單使用
1)?第一種結(jié)構(gòu):
a)?如果條件為真,就執(zhí)行后面的語(yǔ)句,否則不執(zhí)行。
if(條件)
{
語(yǔ)句1;
語(yǔ)句2;
····
}
2)?第二種結(jié)構(gòu):
a)?如果條件成立就執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2。
if(條件)
{
語(yǔ)句1;
}
else
{
語(yǔ)句2;
}
3)?第三種結(jié)構(gòu):
a)?先判斷條件1,若成立則執(zhí)行語(yǔ)句1,其它不執(zhí)行;若條件1不成立,則檢查條件2···,【注意】如果條件3成立,則說(shuō)明前面的都不成立。所有的語(yǔ)句塊只有一個(gè)會(huì)被執(zhí)行。
if(條件1)
{
語(yǔ)句1;
}
else?if(條件2)
{
語(yǔ)句2;
}
else?(條件3)
{
語(yǔ)句3;
}
4)?第四種結(jié)構(gòu):
a)?在這種情況下,當(dāng)條件成立,只執(zhí)行語(yǔ)句1,語(yǔ)句2不屬于次條件結(jié)構(gòu),但不推薦此種寫法。
If(條件)
語(yǔ)句1;
語(yǔ)句2;
?
(二)if使用注意
?
①.?比較大小時(shí),可以把常量值放在左邊,變量值放在右邊以避免錯(cuò)誤。因?yàn)閕f(a==0)也容易被寫成if(a=0),而這種情況,編譯器并不會(huì)報(bào)錯(cuò),推薦使用if(0==a)這種寫法。
②.?注意賦值運(yùn)算符,不要把=寫成是==。
③.?If(條件)后面不要加分號(hào),這代表是一個(gè)空語(yǔ)句,后面的代碼塊將成為一個(gè)獨(dú)立的代碼塊。如if(條件);{.....}//需要多加注意
④.?注意作用域的問(wèn)題,如果要在if后面定義新的變量,則一定要使用大括號(hào)。
if(10>6)
{
Int?a;//a的作用域在代碼塊結(jié)束后失效
}
Printf(“a=%d”,a);//編譯器報(bào)錯(cuò),找不到標(biāo)識(shí)符
?
if(10>6)
Int?a; //這種情況下報(bào)錯(cuò),a的作用域不明確
Printf(“a=%d”,a); //編譯器報(bào)錯(cuò),找不到標(biāo)識(shí)符
?
⑤.?If(0){...}隨便挑一個(gè)數(shù)值也可以做條件
(三)If結(jié)構(gòu)練習(xí)
問(wèn)題:輸入一個(gè)整數(shù)seore代表分?jǐn)?shù),根據(jù)分?jǐn)?shù)輸出等級(jí)(A-E)。
A?90-100? B80-89 C70-79 D60-69 E0-60
代碼:
復(fù)制代碼1 #include<stdio.h>2 3 int main()4 5 {6 7 //定義變量存儲(chǔ)分?jǐn)?shù)值8 9 int score; 10 11 //提示輸入 12 13 printf("請(qǐng)輸入分值:\n"); 14 15 //接受輸入 16 17 scanf("%d",&score); 18 19 //判斷等級(jí) 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 }?
?
三、選擇結(jié)構(gòu)-switch
(一)switch結(jié)構(gòu)
Switch(值) //通常是變量
{
Case?數(shù)值1:
語(yǔ)句1;
Break;
Case?數(shù)值2:
語(yǔ)句2;
Break;
Case?數(shù)值3:
語(yǔ)句3;
Break;
Default?:
語(yǔ)句4;
Break;
}
解說(shuō):該結(jié)構(gòu)把數(shù)值與數(shù)值1進(jìn)行比較,若相等,則執(zhí)行后面的所有語(yǔ)句,直到遇見break語(yǔ)句跳出整個(gè)循環(huán),若前面的條件都不滿足,則最終會(huì)執(zhí)行default后面的語(yǔ)句。如果不寫break語(yǔ)句,則后面的語(yǔ)句會(huì)接連執(zhí)行,直到遇到break語(yǔ)句或者是全部語(yǔ)句執(zhí)行完畢,只要前面的條件成立,則后面的判斷就直接被忽略。
(二)Switch使用注意
Char?c=‘A’;
Switch(c)
{
Case?‘A’:
語(yǔ)句1;
Break;
Case??65://不能這樣寫,因?yàn)椤瓵’的ASCII值就是65,會(huì)報(bào)錯(cuò)
語(yǔ)句2;
Break;
Case?數(shù)值3:
Int?a=10;
//a的作用域不明確報(bào)錯(cuò),c語(yǔ)言檢查變量的作用域根據(jù){}決定,這里可以加{}
Break;
Default?:
語(yǔ)句4;
Break;
?
}
注意:如果要在case后面的語(yǔ)句中定義變量,則必須使用大括號(hào)包住。
(三)switch結(jié)構(gòu)練習(xí)
問(wèn)題:輸入一個(gè)整數(shù)seore代表分?jǐn)?shù),根據(jù)分?jǐn)?shù)輸出等級(jí)(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 //定義變量存儲(chǔ)分?jǐn)?shù)值8 9 int score; 10 11 //提示輸入 12 13 printf("請(qǐng)輸入分值:\n"); 14 15 //接受輸入 16 17 scanf("%d",&score); 18 19 //判斷等級(jí) 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 }?
【對(duì)比】if與switch:
1.?If語(yǔ)句能夠完成的功能,switch有時(shí)并不能夠完成,如判斷if(a>100)
2.?在有些情況下,if語(yǔ)句和switch語(yǔ)句可以互換
3.?Switch語(yǔ)句能完成的功能,if語(yǔ)句都可以完成
?
四、循環(huán)結(jié)構(gòu)-while
(一)簡(jiǎn)單使用
While(條件)
{
語(yǔ)句;
}
解說(shuō):先判斷條件是否成立,成立則執(zhí)行,執(zhí)行完代碼后再次判斷條件是否成立(判斷條件-》執(zhí)行代碼塊-》判斷條件-》執(zhí)行代碼塊···)1.首先確定循環(huán)執(zhí)行的操作,2.在確定約束條件,即需要循環(huán)多少次,3.定義一個(gè)變量來(lái)記錄循環(huán)的次數(shù)。
提示:在while循環(huán)體內(nèi)使用if...break(跳出整個(gè)循環(huán))或if...continue語(yǔ)句(跳出本次循環(huán),繼續(xù)下一次循環(huán)判斷)。
While結(jié)構(gòu)的運(yùn)行原理:
①.?如果一開始條件不成立,則永遠(yuǎn)不會(huì)執(zhí)行循環(huán)體。
②.?如果條件成立,則執(zhí)行一次循環(huán)體,執(zhí)行完畢后再次判斷條件是否成立。
③.?Break:直接退出整個(gè)循環(huán)。
④.?Continue:結(jié)束當(dāng)前循環(huán)體,進(jìn)行下一輪循環(huán)判斷。
(二)使用注意
1)?While(1){.....}是一個(gè)死循環(huán)
2)?While(a<10);{...}在條件后面加逗號(hào)表示循環(huán)體是一個(gè)空語(yǔ)句,而非{}部分
3)?While條件語(yǔ)句后推薦使用{},否則只有第一條語(yǔ)句時(shí)循環(huán)體
4)?最簡(jiǎn)單的死循環(huán)??while(1);//永遠(yuǎn)執(zhí)行空語(yǔ)句,讓程序崩潰
(三)While練習(xí)
問(wèn)題:編程實(shí)現(xiàn),提示輸入一個(gè)正整數(shù)n,計(jì)算1+2+3+...n的值。
代碼:
1 #include<stdio.h>2 3 int main()4 5 {6 7 //定義變量保存用戶輸入的整數(shù)8 9 int n; 10 11 while(n<=0) 12 13 { 14 15 //提示輸入 16 17 printf("請(qǐng)輸入一個(gè)正整數(shù):\n"); 18 19 //接受輸入 20 21 scanf("%d",&n); 22 23 } 24 25 int sum=0; 26 27 int number=0;//默認(rèn)被加的數(shù)值 28 29 while(number<n) 30 31 { 32 33 number++; 34 35 sum=sum+number; 36 37 } 38 39 printf("計(jì)算結(jié)果為:%d\n",sum); 40 41 return 0; 42 43 }?
?
五、循環(huán)結(jié)構(gòu)-do?while
Do
{
語(yǔ)句
}while(條件)
特點(diǎn):do?while循環(huán)至少會(huì)執(zhí)行一次循環(huán)體
?
六、循環(huán)結(jié)構(gòu)-for
(一)基本使用
for(語(yǔ)句1,條件,語(yǔ)句2)
{
循環(huán)體
}
語(yǔ)句1:一般為初始化語(yǔ)句
語(yǔ)句2:一般為增量語(yǔ)句(執(zhí)行完循環(huán)體后再執(zhí)行的語(yǔ)句)
For循環(huán)原理:
1)?For循環(huán)一開始就會(huì)執(zhí)行語(yǔ)句1(整個(gè)for循環(huán)只會(huì)執(zhí)行一次)
2)?判斷條件是否成立,若成立,則執(zhí)行一次循環(huán)體,然后執(zhí)行語(yǔ)句2,再次判斷條件是否成立,若條件不成立則結(jié)束循環(huán)
3)?順序?yàn)?#xff1a;(語(yǔ)句1-》判斷條件-》循環(huán)體—》語(yǔ)句2-》判斷條件-》循環(huán)體···)
【對(duì)比】for和while:
在性能上,for循環(huán)稍勝一籌,因?yàn)閣hile循環(huán)只能使用外部的變量,而for循環(huán)可以對(duì)變量進(jìn)行及時(shí)回收。
?
(二)for使用注意
①.?不要隨便在for語(yǔ)句后面寫上分號(hào),如for();{....}
②.?定義變量的作用域不明確錯(cuò)誤
for(int?i=0;i<5;i++)
Int?a=10; //編譯器報(bào)錯(cuò),變量作用域不明確
③.?For語(yǔ)句中最簡(jiǎn)單的死循環(huán)for(;;);
④.?需要注意變量定義的作用域
Int?a=10;
For(int?i=0,int?a=9;i<5;i++)
{
Int?a=10;
Printf(“a=%d\n”,a);//這里打印的a的值是多少?
}
?
(三)For循環(huán)嵌套
用以輸出特定格式的內(nèi)容,如QQ好友列表等,提升可擴(kuò)展性。
For(in?i=0;i<5;i++)
{
//外面的循環(huán)控制行數(shù)
Printf(“好友列表%d\n”,i);
//內(nèi)部的循環(huán)控制列數(shù)
For(int?j=1;j<=6;j++)
{
Printf(“好友%d\n”,j);
}
}
(四)For練習(xí)
使用for循環(huán)輸出九九乘法表。//先控制行數(shù),在控制列數(shù)
代碼:
復(fù)制代碼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 } 復(fù)制代碼?
?
轉(zhuǎn)載于:https://www.cnblogs.com/LifeTechnologySupporter/p/9655734.html
總結(jié)
- 上一篇: 用GO把你想说的话写到比特币链上
- 下一篇: 日志管理