複製鏈接
請複製以下鏈接發送給好友

結構控制

鎖定
結構控制(structure control)就是一種程序運行的邏輯。
中文名
結構控制
外文名
structure control
涉及學科
信息科學
應用領域
自動控制
包    括
順序結構,選擇結構,循環結構
舉    例
C語言

結構控制簡介

結構控制就是一種程序運行的邏輯。C語言一共有三種控制結構:順序結構選擇結構循環結構 [1] 
1.從執行方式上看,從第一條語句到最後一條語句完全按順序執行,是簡單的順序結構;
2.若在程序執行過程當中,根據用户的輸入或中間結果去執行若干不同的任務則為選擇結構;
3.如果在程序的某處,需要根據某項條件重複地執行某項任務若干次或直到滿足或不滿足某條件為止,這就構成循環結構。
大多數情況下,程序都不會是簡單的順序結構,而是順序、選擇、循環三種結構的複雜組合。
C語言中,有一組相關的控制語句,用以實現選擇結構與循環結構:
1.選擇控制語句:if; switch、case
2.循環控制語句:for、while、do...while
3.轉移控制語句:break、continue、goto

結構控制順序分支循環

結構控制順序控制結構

代碼 從上到下,自左而右的執行
不對代碼進行任何的干預,那麼他就是順序結構
Eg: test.php

結構控制分支控制結構

(if \ switch)
分支結構:是指代碼可以有多個選擇的執行
分支結構分為單分支和多分支
單分支: 程序執行的流程不超過2個結構 (雙分支)
多分支: 程序執行的流程超過了2個以上的結構
分支結構:( if 和 switch )

結構控制詞語釋義

if語句:
條件?操作1:操作2
原理:如果條件成功(true)就執行操作1,否則執行操作2
條件:能夠判斷正確或錯誤的表達式
eg: $speed = 200; if ($speed >=120) echo "MUST DEATH!"; else echo "Still Alive!";
注意:
1、if語句可以沒有else
2、如果需要在分支結構中,循環結構中運行2行和2行以上的代碼,要將這多行代碼改寫成代碼塊{語句1;語句2;....},不寫在代碼塊中則會報錯!
eg: if(條件){ 代碼塊1;(>1句的代碼) }else{ 代碼塊2; } Eg: if.php
switch:多分支結構
原理:如果變量等於值1那麼就執行代碼1,然後break跳出結構,否則判斷如果變量值等於值2,那麼執行代碼2,然後break跳出 如果case值沒有符合條件的,那麼就執行代碼n;
注意:
1、如果case後面沒有break,那麼程序會會繼續向下執行直到碰到break跳出或者直到程序結束
2、case\default 後面全都是冒號
Eg: switch.php

結構控制流程控制結構

(1)順序結構:按書寫順序執行每一條語句。
(2)選擇結構:對給定的條件進行判斷,根據判斷結果決定執行哪一段代碼。
(3)循環結構:在給定條件成立的情況下,反覆執行某一段代碼。

結構控制選擇結構

結構控制使用

1)第一種結構:
a)如果條件為真,就執行後面的語句,否則不執行。
if(條件)
{
語句1;
語句2;
····
}
2)第二種結構:
a)如果條件成立就執行語句1,否則執行語句2。
if(條件)
{
語句1;
}
else
{
語句2;
}
3)第三種結構:
a)先判斷條件1,若成立則執行語句1,其它不執行;若條件1不成立,則檢查條件2···,【注意】如果條件3成立,則説明前面的都不成立。所有的語句塊只有一個會被執行。
if(條件1)
{
語句1;
}
elseif(條件2)
{
語句2;
}
else(條件3)
{
語句3;
}
4)第四種結構:
a)在這種情況下,當條件成立,只執行語句1,語句2不屬於次條件結構,但不推薦此種寫法。
If(條件)
語句1;
語句2;

結構控制注意

①.比較大小時,可以把常量值放在左邊,變量值放在右邊以避免錯誤。因為if(a==0)也容易被寫成if(a=0),而這種情況,編譯器並不會報錯,推薦使用if(0==a)這種寫法。
②.注意賦值運算符,不要把=寫成是==。
③.If(條件)後面不要加分號,這代表是一個空語句,後面的代碼塊將成為一個獨立的代碼塊。如if(條件);{.....}//需要多加註意
④.注意作用域的問題,如果要在if後面定義新的變量,則一定要使用大括號。
if(10>6)
{
Inta;//a的作用域在代碼塊結束後失效
}
Printf(“a=%d”,a);//編譯器報錯,找不到標識符
if(10>6)
Inta; //這種情況下報錯,a的作用域不明確
Printf(“a=%d”,a); //編譯器報錯,找不到標識符
⑤.If(0){...}隨便挑一個數值也可以做條件

結構控制選擇結構

結構控制結構

Switch(值) //通常是變量
{
Case數值1:
語句1;
Break;
Case數值2:
語句2;
Break;
Case數值3:
語句3;
Break;
Default:
語句4;
Break;
}
解説:該結構把數值與數值1進行比較,若相等,則執行後面的所有語句,直到遇見break語句跳出整個循環,若前面的條件都不滿足,則最終會執行default後面的語句。如果不寫break語句,則後面的語句會接連執行,直到遇到break語句或者是全部語句執行完畢,只要前面的條件成立,則後面的判斷就直接被忽略。

結構控制使用注意

Charc=‘A’;
Switch(c)
{
Case‘A’:
語句1;
Break;
Case65://不能這樣寫,因為‘A’的ASCII值就是65,會報錯
語句2;
Break;
Case數值3:
Inta=10;//a的作用域不明確報錯,c語言檢查變量的作用域根據{}決定,這裏可以加{}
Break;
Default:
語句4;
Break;
}
注意:如果要在case後面的語句中定義變量,則必須使用大括號包住。

結構控制比較

1.If語句能夠完成的功能,switch有時並不能夠完成,如判斷if(a>100)
2.在有些情況下,if語句和switch語句可以互換
3.Switch語句能完成的功能,if語句都可以完成
4.switch 的csae 一般只用於判斷確切的數值
  • 如果條件是範圍值 使用if
  • 如果條件是具體值 一般使用switch
5.所有的switch都可以改寫成if 但是並非所有的if都能改寫成switch
6.if運行效率比switch稍微低一點,一般在條件是確切的值的時候使用switch
  • 當判斷範圍值的時候,使用if
  • 當判斷的是具體值的時候: switch case 值1:

結構控制循環結構

結構控制簡單使用

While(條件)
{
語句;
}
解説:先判斷條件是否成立,成立則執行,執行完代碼後再次判斷條件是否成立(判斷條件-》執行代碼塊-》判斷條件-》執行代碼塊···)
  1. 首先確定循環執行的操作,
  2. 在確定約束條件,即需要循環多少次,
  3. 定義一個變量來記錄循環的次數。
提示:在while循環體內使用if...break(跳出整個循環)或if...continue語句(跳出本次循環,繼續下一次循環判斷)。
While結構的運行原理:
①.如果一開始條件不成立,則永遠不會執行循環體。
②.如果條件成立,則執行一次循環體,執行完畢後再次判斷條件是否成立。
③.Break:直接退出整個循環。
④.Continue:結束當前循環體,進行下一輪循環判斷。

結構控制使用注意

1)While(1){.....}是一個死循環
2)While(a<10);{...}在條件後面加逗號表示循環體是一個空語句,而非{}部分
3)While條件語句後推薦使用{},否則只有第一條語句時循環體
4)最簡單的死循環while(1);//永遠執行空語句,讓程序崩潰

結構控制循環結構

Do
{
語句
}while(條件)
特點:dowhile循環至少會執行一次循環體

結構控制循環結構

結構控制基本使用

for(語句1,條件,語句2)
{
循環體
}
語句1:一般為初始化語句
語句2:一般為增量語句(執行完循環體後再執行的語句)
For循環原理:
1)For循環一開始就會執行語句1(整個for循環只會執行一次)
2)判斷條件是否成立,若成立,則執行一次循環體,然後執行語句2,再次判斷條件是否成立,若條件不成立則結束循環
3)順序為:(語句1-》判斷條件-》循環體—》語句2-》判斷條件-》循環體···)

結構控制對比

在性能上,for循環稍勝一籌,因為while循環只能使用外部的變量,而for循環可以對變量進行及時回收。

結構控制使用注意

①.不要隨便在for語句後面寫上分號,如for();{....}
②.定義變量的作用域不明確錯誤
for(inti=0;i<5;i++)
Inta=10; //編譯器報錯,變量作用域不明確
③.For語句中最簡單的死循環for(;;);
④.需要注意變量定義的作用域
Inta=10;
For(inti=0,inta=9;i
{
Inta=10;
Printf(“a=%d\n”,a);//這裏打印的a的值是多少?
}

結構控制循環嵌套

用以輸出特定格式的內容,如QQ好友列表等,提升可擴展性。
For(ini=0;i
{
//外面的循環控制行數
Printf(“好友列表%d\n”,i);
//內部的循環控制列數
For(intj=1;j
{
Printf(“好友%d\n”,j);
}
}
參考資料
  • 1.    周德銘; 曹洪澤.信息系統結構控制審計框架研究:審計研究,2014-09-28