日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 控制结构和函数(一) —— 控制结构

發(fā)布時間:2023/12/9 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 控制结构和函数(一) —— 控制结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一個程序的語句往往并不僅限于線性順序結(jié)構。在程序的執(zhí)行過程中它可能被分成兩支執(zhí)行,可能重復某些語句,也可能根據(jù)一些判斷結(jié)果而執(zhí)行不同的語句。因此C++ 提供一些控制結(jié)構語句 (control structures) 來實現(xiàn)這些執(zhí)行順序。

為了介紹程序的執(zhí)行順序,我們需要先介紹一個新概念:語句塊(block of instructions)。一個語句塊(A block of instructions) 是一組互相之間由分號semicolons (;) 分隔開但整體被花括號curly bracket signs: { and }括起來的語句。

本節(jié)中我們將看到的大多數(shù)控制結(jié)構允許一個通用的statement做參數(shù),這個statement根據(jù)需要可以是一條語句,也可以是一組語句組成的語句塊。如果我們只需要一條語句做statement,它可以不被括在花括號 ({}) 內(nèi)。但如果我們需要多條語句共同做statement,則必須把它們括在花括號內(nèi) ({}) 以組成一個語句塊。


條件結(jié)構Conditional structure: if and else

條件結(jié)構用來實現(xiàn)僅在某種條件滿足的情況下才執(zhí)行一條語句或一個語句塊。它的形式是:

if (condition) statement

這里 condition 是一個將被計算的表達式(expression)。如果表達式值為真,即條件(condition)為true,statement 將被執(zhí)行。否則,statement 將被忽略(不被執(zhí)行),程序從整個條件結(jié)構之后的下一條語句繼續(xù)執(zhí)行。

例如,以下程序段實現(xiàn)只有當變量x存儲的值確實為100的時候才輸出"x is 100":

if (x == 100)
cout << "x is 100";

如果我們需要在條件condition為真true的時候執(zhí)行一條以上的語句,我們可以花括號{}將語句括起來組成一個語句塊:

if (x == 100)
{
cout << "x is ";
cout << x;
}

我們可以用關鍵字else 來指定當條件不能被滿足時需要執(zhí)行的語句,它需要和if 一起使用,形式是:

if (condition) statement1 else statement2

例如:

if (x == 100)
cout << "x is 100";
else
cout << "x is not 100";

以上程序如果x的值為100,則在屏幕上打出x is 100,如果x不是100,而且也只有在x不是100的時候,屏幕上將打出x is not 100。

多個if + else 的結(jié)構被連接起來使用來判斷數(shù)值的范圍。以下例子顯示了如何用它來判斷變量 x中當前存儲的數(shù)值是正值,負值還是既不正也不負,即等于0 。

if (x > 0)
cout << "x is positive";
else if (x < 0)
cout << "x is negative";
else
cout << "x is 0";

記住當我們需要執(zhí)行多條語句時,必須使用花括號{}將它們括起來以組成一個語句塊block of instructions。


重復結(jié)構 Iteration structures 或循環(huán)loops

循環(huán)Loops 的目的是重復執(zhí)行一組語句一定的次數(shù)或直到滿足某種條件。

while 循環(huán)

格式是:

while (表達式expression) 語句statement

它的功能是當expression 的值為真true時重復執(zhí)行statement。

例如,下面我們將用while循環(huán)來寫一個倒計數(shù)程序:

// custom countdown using while
#include <iostream.h>
int main ()
{
int n;
cout << "Enter the starting number > ";
cin >> n;
while (n>0) {
cout << n << ", ";
--n;
}
cout << "FIRE!";
return 0;
}
Enter the starting number > 8
8, 7, 6, 5, 4, 3, 2, 1, FIRE!

程序開始時提示用戶輸入一個倒計數(shù)的初始值。然后while 循環(huán)開始,如果用戶輸入的數(shù)值滿足條件n>0 (即 n 比0 大),后面跟的語句塊將會被執(zhí)行一定的次數(shù),直到條件 (n>0) 不再滿足(變?yōu)閒alse)。

以上程序的所有處理過程可以用以下的描述來解釋:

main開始:

  • 用戶輸入一個數(shù)值賦給n.
  • while語句檢查(n>0)是否成立,這時有兩種可能:
    • true: 執(zhí)行statement (到第3步)
    • false: 跳過statement. 程序直接執(zhí)行第5步.
  • 執(zhí)行statement:
    cout << n << ", ";
    --n;

    (將n 的值打印在屏幕上,然后將n 的值減1).

  • 語句塊結(jié)束,自動返回第2步。
  • 繼續(xù)執(zhí)行語句塊之后的程序:打印 FIRE! ,程序結(jié)束。
  • 我們必須考慮到循環(huán)必須在某個點結(jié)束,因此在語句塊之內(nèi)(loop的statement之內(nèi)) 我們必須提供一些方法使得條件condition 可以在某個時刻變?yōu)榧?false,否則循環(huán)將無限重復下去。在這個例子里,我們用語句--n;使得循環(huán)在重復一定的次數(shù)后變?yōu)閒alse :當 n 變?yōu)?, 倒計數(shù)結(jié)束。

    do-while 循環(huán)

    格式:

    do 語句statement while (條件condition);

    它的功能與while 循環(huán)一抹一樣,除了在do-while循環(huán)中是先執(zhí)行statement 然后才檢查條件condition ,而不想while循環(huán)中先檢查條件然后才執(zhí)行statement。這樣,即使條件condition從來沒有被滿足過,statement 仍至少被執(zhí)行一次。例如,下面的程序重復輸出(echoes)用戶輸入的任何數(shù)值,直到用戶輸入0為止。

    // number echoer
    #include <iostream.h>
    int main ()
    {
    unsigned long n;
    do {
    cout << "Enter number (0 to end): ";
    cin >> n;
    cout << "You entered: " << n << "\n";
    } while (n != 0);
    return 0;
    }
    Enter number (0 to end): 12345
    You entered: 12345
    Enter number (0 to end): 160277
    You entered: 160277
    Enter number (0 to end): 0
    You entered: 0

    do-while?循環(huán)通常被用在判斷循環(huán)結(jié)束的條件是在循環(huán)語句內(nèi)部被決定的情況下,比如以上的例子,在循環(huán)的語句塊內(nèi)用戶的輸入決定了循環(huán)是否結(jié)束。如果用戶永遠不輸入0,則循環(huán)永遠不會結(jié)束。

    for 循環(huán)

    格式是:

    for (initialization; condition; increase) statement;

    它的主要功能是當條件condition 為真true時重復執(zhí)行語句statement ,類似while 循環(huán)。但除此之外,for 還提供了寫初始化語句initialization 和增值語句increase 的地方。因此這種循環(huán)結(jié)構是特別為執(zhí)行由計數(shù)器控制的循環(huán)而設計的。

    它按以下方式工作:

  • 執(zhí)行初始化initialization 。通常它是設置一個計數(shù)器變量(counter variable)的初始值,初始化僅被執(zhí)行一次。
  • 檢查條件condition ,如果條件為真true,繼續(xù)循環(huán),否則循環(huán)結(jié)束循環(huán)中語句statement 被跳過。
  • 執(zhí)行語句statement 。像以前一樣,它可以是一個單獨的語句,也可以是一個由花括號{ }括起來的語句塊。
  • 最后增值域(increase field)中的語句被執(zhí)行,循環(huán)返回第2步。注意增值域中可能是任何語句,而不一定只是將計數(shù)器增加的語句。例如下面的例子中計數(shù)器實際為減1,而不是加1。
  • 下面是用for循環(huán)實現(xiàn)的倒計數(shù)的例子:

    // countdown using a for loop
    #include <iostream.h>
    int main ()
    {
    for (int n=10; n>0; n--) {
    cout << n << ", ";
    }
    cout << "FIRE!";
    return 0;
    }
    10, 9, 8, 7, 6, 5, 4, 3, 2, 1, FIRE!

    初始化initialization 和增值increase 域是可選的(即可以為空)。但這些域為空的時候,它們和其他域之間間隔的分號不可以省略。例如我們可以寫:for (;n<10;)來表示沒有初始化和增值語句;或for (;n<10;n++) 來表示有增值語句但沒有初始化語句。

    另外我們也可以在for循環(huán)初始化或增值域中放一條以上的語句,中間用逗號 coma(,)隔開。例如假設我們想在循環(huán)中初始化一個以上的變量,可以用以下的程序來實現(xiàn):

    for ( n=0, i=100 ; n!=i ; n++, i-- )
    {
    // whatever here...
    }

    這個循環(huán)將被執(zhí)行50 次,如果n 和i 在循還內(nèi)部都不被改變的話:

    n初始值為0i初始值為100,條件是(n!=i)(即n不能等于i)。因為每次循環(huán)n1,而且i1,循環(huán)的條件將會在第50次循環(huán)之后變?yōu)榧?strong>false(n?和?i?都等于50)。

    分支控制和跳轉(zhuǎn)(Bifurcation of control and jumps)

    break 語句

    通過使用break語句,即使在結(jié)束條件沒有滿足的情況下,我們也可以跳出一個循環(huán)。它可以被用來結(jié)束一個無限循環(huán)(infinite loop),或強迫循環(huán)在其自然結(jié)束之前結(jié)束。例如,我們想要在倒計數(shù)自然結(jié)束之前強迫它停止(也許因為一個引擎故障):

    // break loop example
    #include <iostream.h>
    int main ()
    {
    int n;
    for (n=10; n>0; n--) {
    cout << n << ", ";
    if (n==3)
    {
    cout << "countdown aborted!";
    break;
    }
    return 0;
    }
    10, 9, 8, 7, 6, 5, 4, 3, countdown aborted!

    continue 語句

    continue語句使得程序跳過當前循環(huán)中剩下的部分而直接進入下一次循環(huán),就好像循環(huán)中語句塊的結(jié)尾已經(jīng)到了使得循環(huán)進入下一次重復。例如,下面例子中倒計數(shù)時我們將跳過數(shù)字5的輸出:

    // continue loop example
    #include <iostream.h>
    int main ()
    {
    for (int n=10; n>0; n--) {
    if (n==5) continue;
    cout << n << ", ";
    }
    cout << "FIRE!";
    return 0;
    }
    10, 9, 8, 7, 6, 4, 3, 2, 1, FIRE!

    goto 語句

    通過使用goto語句可以使程序從一點跳轉(zhuǎn)到另外一點。你必須謹慎只用這條語句,因為它的執(zhí)行可以忽略任何嵌套限制。

    跳轉(zhuǎn)的目標點可以由一個標示符(label)來標明,該標示符作為goto語句的參數(shù)。一個標示符(label)由一個標識名稱后面跟一個冒號colon (:)組成。

    通常除了底層程序愛好者使用這條語句,它在結(jié)構化或面向?qū)ο蟮木幊讨胁⒉怀S谩O旅娴睦又形覀冇胓oto來實現(xiàn)倒計數(shù)循環(huán):

    // goto loop example
    #include <iostream.h>
    int main ()
    {
    int n=10;
    loop:
    cout << n << ", ";
    n--;
    if (n>0) goto loop;
    cout << "FIRE!";
    return 0;
    }
    10, 9, 8, 7, 6, 5, 4, 3, 2, 1, FIRE!

    exit 函數(shù)

    exit是一個在cstdlib (stdlib.h)庫中定義的函數(shù)。

    exit的目的是一個特定的退出代碼來結(jié)束程序的運行,它的原型(prototype)是:

    void exit (int exit code);

    exit code是由操作系統(tǒng)使用或被調(diào)用程序使用。通常exit code0表示程序正常結(jié)束,任何其他值表示程序執(zhí)行過程中出現(xiàn)了錯誤。


    選擇結(jié)構The selective Structure: switch

    switch?語句的語法比較特殊。它的目標是對一個表達式檢查多個可能常量值,有些像我們在本節(jié)開頭學習的把幾個if 和else if 語句連接起來的結(jié)構。它的形式是:

    switch (expression) {
    case constant1:
    block of instructions 1
    break;
    case constant2:
    block of instructions 2
    break;
    .
    .
    .
    default:
    default block of instructions
    }

    它按以下方式執(zhí)行:

    switch 計算表達式expression 的值,并檢查它是否與第一個常量constant1相等,如果相等,程序執(zhí)行常量1后面的語句塊block of instructions 1 直到碰到關鍵字break ,程序跳轉(zhuǎn)到switch 選擇結(jié)構的結(jié)尾處。

    如果expression 不等于constant1,程序檢查表達式expression 的值是否等于第二個常量constant2, 如果相等,程序?qū)?zhí)行常量2后面的語句塊block of instructions 2 直到碰到關鍵字break。

    依此類推,直到最后如果表達式expression 的值不等于任何前面的常量(你可以用case語句指明任意數(shù)量的常量值來要求檢查),程序?qū)?zhí)行默認區(qū)default: 后面的語句,如果它存在的話。default: 選項是可以省略的。

    下面的兩段代碼段功能相同:

    switch?exampleif-else?equivalent
    switch (x) {
    case 1:
    cout << "x is 1";
    break;
    case 2:
    cout << "x is 2";
    break;
    default:
    cout << "value of x unknown";
    }
    if (x == 1) {
    cout << "x is 1";
    }
    else if (x == 2) {
    cout << "x is 2";
    }
    else {
    cout << "value of x unknown";
    }

    前面已經(jīng)提到switch的語法有點特殊。注意每個語句塊結(jié)尾包含的break語句。這是必須的,因為如果不這樣做,例如在語句塊block of instructions 1 的結(jié)尾沒有break,程序執(zhí)行將不會跳轉(zhuǎn)到switch選擇的結(jié)尾處 (}) ,而是繼續(xù)執(zhí)行下面的語句塊,直到第一次遇到break語句或到switch選擇結(jié)構的結(jié)尾。因此,不需要在每一個case 域內(nèi)加花括號{ }?。這個特點同時可以幫助實現(xiàn)對不同的可能值執(zhí)行相同的語句塊。例如:

    switch (x) {
    case 1:
    case 2:
    case 3:
    cout << "x is 1, 2 or 3";
    break;
    default:
    cout << "x is not 1, 2 nor 3";
    }

    注意switch只能被用來比較表達式和不同常量的值constants。因此我們不能夠把變量或范圍放在case之后,例如 (case (n*2):) 或 (case (1..3):) 都不可以,因為它們不是有效的常量。 如果你需要檢查范圍或非常量數(shù)值,使用連續(xù)的if 和else if 語句。

    總結(jié)

    以上是生活随笔為你收集整理的C++ 控制结构和函数(一) —— 控制结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。