1. 程式人生 > 實用技巧 >程式流程結構

程式流程結構

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的數目和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; breakcase 常量表達式2:語句序列2; breakcase 常量表達式n:語句序列n; breakdefault: 語句序列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"breakcase 'B'case 'b': cout<<"good"breakdefault: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語句,以免造成程式流程混亂