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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

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

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

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

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


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

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

if (condition) statement

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

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

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

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

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

我們可以用關(guān)鍵字else 來指定當(dāng)條件不能被滿足時(shí)需要執(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的時(shí)候,屏幕上將打出x is not 100。

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

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

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


重復(fù)結(jié)構(gòu) Iteration structures 或循環(huán)loops

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

while 循環(huán)

格式是:

while (表達(dá)式expression) 語句statement

它的功能是當(dāng)expression 的值為真true時(shí)重復(fù)執(zhí)行statement。

例如,下面我們將用while循環(huán)來寫一個(gè)倒計(jì)數(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í)提示用戶輸入一個(gè)倒計(jì)數(shù)的初始值。然后while 循環(huán)開始,如果用戶輸入的數(shù)值滿足條件n>0 (即 n 比0 大),后面跟的語句塊將會(huì)被執(zhí)行一定的次數(shù),直到條件 (n>0) 不再滿足(變?yōu)閒alse)。

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

main開始:

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

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

  • 語句塊結(jié)束,自動(dòng)返回第2步。
  • 繼續(xù)執(zhí)行語句塊之后的程序:打印 FIRE! ,程序結(jié)束。
  • 我們必須考慮到循環(huán)必須在某個(gè)點(diǎn)結(jié)束,因此在語句塊之內(nèi)(loop的statement之內(nèi)) 我們必須提供一些方法使得條件condition 可以在某個(gè)時(shí)刻變?yōu)榧?false,否則循環(huán)將無限重復(fù)下去。在這個(gè)例子里,我們用語句--n;使得循環(huán)在重復(fù)一定的次數(shù)后變?yōu)閒alse :當(dāng) n 變?yōu)?, 倒計(jì)數(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í)行一次。例如,下面的程序重復(fù)輸出(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é)束。如果用戶永遠(yuǎn)不輸入0,則循環(huán)永遠(yuǎn)不會(huì)結(jié)束。

    for 循環(huán)

    格式是:

    for (initialization; condition; increase) statement;

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

    它按以下方式工作:

  • 執(zhí)行初始化initialization 。通常它是設(shè)置一個(gè)計(jì)數(shù)器變量(counter variable)的初始值,初始化僅被執(zhí)行一次。
  • 檢查條件condition ,如果條件為真true,繼續(xù)循環(huán),否則循環(huán)結(jié)束循環(huán)中語句statement 被跳過。
  • 執(zhí)行語句statement 。像以前一樣,它可以是一個(gè)單獨(dú)的語句,也可以是一個(gè)由花括號(hào){ }括起來的語句塊。
  • 最后增值域(increase field)中的語句被執(zhí)行,循環(huán)返回第2步。注意增值域中可能是任何語句,而不一定只是將計(jì)數(shù)器增加的語句。例如下面的例子中計(jì)數(shù)器實(shí)際為減1,而不是加1。
  • 下面是用for循環(huán)實(shí)現(xiàn)的倒計(jì)數(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 域是可選的(即可以為空)。但這些域?yàn)榭盏臅r(shí)候,它們和其他域之間間隔的分號(hào)不可以省略。例如我們可以寫:for (;n<10;)來表示沒有初始化和增值語句;或for (;n<10;n++) 來表示有增值語句但沒有初始化語句。

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

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

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

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

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

    break 語句

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

    // 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語句使得程序跳過當(dāng)前循環(huán)中剩下的部分而直接進(jìn)入下一次循環(huán),就好像循環(huán)中語句塊的結(jié)尾已經(jīng)到了使得循環(huán)進(jìn)入下一次重復(fù)。例如,下面例子中倒計(jì)數(shù)時(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語句可以使程序從一點(diǎn)跳轉(zhuǎn)到另外一點(diǎn)。你必須謹(jǐn)慎只用這條語句,因?yàn)樗膱?zhí)行可以忽略任何嵌套限制。

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

    通常除了底層程序愛好者使用這條語句,它在結(jié)構(gòu)化或面向?qū)ο蟮木幊讨胁⒉怀S?。下面的例子中我們用goto來實(shí)現(xiàn)倒計(jì)數(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是一個(gè)在cstdlib (stdlib.h)庫中定義的函數(shù)。

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

    void exit (int exit code);

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


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

    switch?語句的語法比較特殊。它的目標(biāo)是對(duì)一個(gè)表達(dá)式檢查多個(gè)可能常量值,有些像我們?cè)诒竟?jié)開頭學(xué)習(xí)的把幾個(gè)if 和else if 語句連接起來的結(jié)構(gòu)。它的形式是:

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

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

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

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

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

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

    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的語法有點(diǎn)特殊。注意每個(gè)語句塊結(jié)尾包含的break語句。這是必須的,因?yàn)槿绻贿@樣做,例如在語句塊block of instructions 1 的結(jié)尾沒有break,程序執(zhí)行將不會(huì)跳轉(zhuǎn)到switch選擇的結(jié)尾處 (}) ,而是繼續(xù)執(zhí)行下面的語句塊,直到第一次遇到break語句或到switch選擇結(jié)構(gòu)的結(jié)尾。因此,不需要在每一個(gè)case 域內(nèi)加花括號(hào){ }?。這個(gè)特點(diǎn)同時(shí)可以幫助實(shí)現(xiàn)對(duì)不同的可能值執(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只能被用來比較表達(dá)式和不同常量的值constants。因此我們不能夠把變量或范圍放在case之后,例如 (case (n*2):) 或 (case (1..3):) 都不可以,因?yàn)樗鼈儾皇怯行У某A俊?如果你需要檢查范圍或非常量數(shù)值,使用連續(xù)的if 和else if 語句。

    總結(jié)

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

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