程式流程結構
C/C++支援最基本的三種程式執行結構:==順序結構、選擇結構、迴圈結構=
一.選擇結構
1.if語句
<1>if
<2>if......else....
<3>if.....else if......else
【例】輸入一個年份,判斷是否為閏年。閏年的年份必須滿足以下兩個條件之一)(1)能被4整除,但不能被100整除的年份都是閏年。
(2)能被400整除的年份都是閏年
include <iostream> using namespace std; int main() { int year; cout << "Enter the year:"; cin >> year; if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))//判斷是否為閏年 cout << year << " is a leap year" << endl; else cout << year << " is not a leap year" << endl; system("pause"); return 0; }
2.嵌if語句
if語句中,如果內嵌語句又是if語句,就構成了巢狀if語句。
一般形式如下:
if() If()語句1 else語句2 Else If()語句3 else語句4
應當注意if與else的配對關係。else總是與它上面最近的、且未配對的if配對。
假如寫成:
if() if()語句l else if()語句2 else語句3
第一個else寫在與第一個if(外層if)同一列上,看似else與第一個if對應,但實際上,else是與第二個if配對,因為它們相距最近,而且第二個if並未與任何else配對。
為了避免誤用,最好使每一層內嵌的
如果if與else的數目不一樣,為實現程式設計者的意圖,可以加花括號來確定配對關系。例如:
if() {if()語句1}//這個語句是上一行if語句的內嵌if else語句2//本行與第一個if配對
這時{}限定了內嵌if語句的範圍,{}外的else不會與{}內的if配對。關係清楚,不易出錯。
【例】用巢狀if語句實現上個例子的功能。程式碼如下:
#include <iostream> using namespace std; int main() { int year; bool leap; cout << "Enter the year:"; cin >> year; if (year % 4 == 0) { if (year % 100 == 0) { if (year % 400 == 0) leap = true; else leap = false; } else leap = false; } else leap = false; if( leap) cout << year << " is" << endl; else cout << year << " is not" << endl; cout <<"a leap year" << endl; system("pause"); return 0; }
3.switch語句
c++提供了一個switch語句, 稱為多分支語句(開關語句) , 可以用來實現多分支選擇程序結構。
switch語句的語法格式為:
switch(表示式){ case 常量表達式1:語句序列1; break; case 常量表達式2:語句序列2; break; case 常量表達式n:語句序列n; break; default: 語句序列n+1; }
(1)當switch後面括號中表達式的值與某一個case分支的常量表達式匹配時,就執行該分支。如果所有的case分支中常量表達式都不能與switch後面括號中表達式的值匹配,
就執行default分支。
(2)break語句可選,如果沒有break語句,每一個case分支都只作為開關語句執行入口,執行完該分支後,還將接著執行其後的所有分支。因此,為保證邏輯的正確實現,
通常每個case分支都與break語句聯用。
(3)每個常量表達式的取值必須各不相同, 否則將引起歧義。各case子句後面必須是常量, 而不能是變數或表示式。各個case(包括default) 分支出現的次序可以任意, 通常將
default分支放在最後。
(4)允許多個常量表達式對應同一個語句序列。例如:
char score; cin>>score; switch (score) case 'A': case 'a': cout<<"excellent"; break; case 'B': case 'b': cout<<"good"; break; default:cout<<"fair";
(5)從形式上看, switch語句的可讀性比巢狀if語句好, 但不是所有多選一的問題都 可由開關語句完成, 這是因為開關語句中限定了swi h後面括號中表達式的型別, 它的類型可以是整型、字元型、列舉型別,而不能是浮點型。
【例】用switch語句編寫程式實現如下功能:某百貨公司為了促銷,採用購物打折的辦法。在1000元以上者,按九五折優惠:在2000元以上者,按九折優惠:在3000元以上者,按八五折優惠;在5000元以上者,按八折優惠。編寫程式,輸入購物款數,計算並出優惠價。
#include <iostream> using namespace std; int main(){ int imoney; cout << "請輸入您消費的金額:" << endl; cin >> imoney; switch (imoney / 1000) { case 0: cout << "您的消費沒有折扣,金額是:" << imoney << endl; case 1: cout << "您的消費享受95折優惠,金額是:" << imoney << ",優惠後的金額是:" << imoney * 0.95 << endl; break; case 2: cout << "您的消費享受9折優惠,金額是:" << imoney << ",優惠後的金額是:" << imoney * 0.9 << endl; break; case 3:case 4: cout << "您的消費享受85折優惠,金額是:" << imoney << ",優惠後的金額是:" << imoney * 0.85 << endl; break; default: cout << "您的消費享受8折優惠,金額是:" << imoney << ",優惠後的金額是:" << imoney * 0.8 << endl; break; } system("pause"); return 0; }
二.迴圈結構
1 .while迴圈語句
**作用:**滿足迴圈條件,執行迴圈語句
語法: while(迴圈條件){ 迴圈語句 }
解釋:==只要迴圈條件的結果為真,就執行迴圈語句==
示例:
int main() { int num = 0; while (num < 10) { cout << "num = " << num << endl; num++; } system("pause"); return 0; }
注意:在執行迴圈語句時候,程式必須提供跳出迴圈的出口,否則出現死迴圈。
2. do...while迴圈語句
作用: 滿足迴圈條件,執行迴圈語句
語法: do{ 迴圈語句 } while(迴圈條件);
**注意:**與while的區別在於==do...while會先執行一次迴圈語句==,再判斷迴圈條件
示例:
int main() { int num = 0; do { cout << num << endl; num++; } while (num < 10); system("pause"); return 0; }
總結:與while迴圈區別在於,do...while先執行一次迴圈語句,再判斷迴圈條件
3. for迴圈語句
作用: 滿足迴圈條件,執行迴圈語句
語法: for(起始表示式;條件表示式;末尾迴圈體) { 迴圈語句; }
示例:
int main() { for (int i = 0; i < 10; i++) { cout << i << endl; } system("pause"); return 0; }
詳解:
注意:for迴圈中的表示式,要用分號進行分隔
總結:while , do...while, for都是開發中常用的迴圈語句,for迴圈結構比較清晰,比較常用
4. 巢狀迴圈
作用: 在迴圈體中再巢狀一層迴圈,解決一些實際問題
示例:
int main() { //外層迴圈執行1次,內層迴圈執行1輪 for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { cout << "*" << " "; } cout << endl; } system("pause"); return 0; }
【例項】輸出九九乘法表。
#include <iostream> #include<iomanip>/*io代表輸入輸出,manip是manipulator(操縱器)的縮寫(在c++上只能通過輸入縮寫才有效。) iomanip的作用: 主要是對cin, cout之類的一些操縱運運算元,比如setfill, setw, setbase, setprecision等等*/ using namespace std; int main() { cout << "*"; for (int i = 1; i <= 9; i++) cout << setw(8) << i; cout<< endl;//輸出迴圈語句每一行的表頭,其中setw(int n)是c++中在輸出操作中使用的欄位寬度設定,設定輸出的域寬,n表示欄位寬度 for (int i = 1; i <= 9; i++){ cout << i;//輸出行號 for (int j = 1; j <= i; j++) cout << setw(3) << i << '*' << j << '=' << setw(2) << i * j; cout<< endl; } system("pause"); return 0; }
三. 跳轉語句
1.break語句
作用: 用於跳出==選擇結構==或者==迴圈結構==
break使用的時機:
- 出現在switch條件語句中,作用是終止case並跳出switch
- 出現在迴圈語句中,作用是跳出當前的迴圈語句
- 出現在巢狀迴圈中,跳出最近的內層迴圈語句
示例:
int main() { //在迴圈語句中用break for (int i = 0; i < 10; i++) { if (i == 5) { break; //跳出迴圈語句 } cout << i << endl; } system("pause"); return 0; }
2. continue語句
**作用:**在==迴圈語句==中,跳過本次迴圈中餘下尚未執行的語句,繼續執行下一次迴圈
示例:
int main() { for (int i = 0; i < 100; i++) { if (i % 2 == 0) { continue; } cout << i << endl; } system("pause"); return 0; }
注意:continue並沒有使整個迴圈終止,而break會跳出迴圈
四.goto語句
**作用:**可以無條件跳轉語句
語法: goto 標記;
**解釋:**如果標記的名稱存在,執行到goto語句時,會跳轉到標記的位置
注意:在程式中不建議使用goto語句,以免造成程式流程混亂