C語(yǔ)言學(xué)習(xí)雜記(5)—循環(huán)語(yǔ)句

優(yōu)秀的語(yǔ)言,能有效提升語(yǔ)言的靈活性。在幾乎所有的語(yǔ)言中,順序、循環(huán)和判斷是其中必不可少的程序流控制。順序,可以理解成從上往下依次執(zhí)行。循環(huán),重復(fù)執(zhí)行某件事情,直到xx條件滿足。判斷,在結(jié)果為true時(shí)執(zhí)行,結(jié)果為false時(shí)跳過(guò)。

C語(yǔ)言中,C的循環(huán)主要分為:while、do...while、for。

while循環(huán)

while循環(huán)的語(yǔ)法如下:

while (condition) // a
{
    // b some codes to be here
}

當(dāng)a條件滿足時(shí),執(zhí)行花括號(hào)中的內(nèi)容,直到條件不滿足。b中的內(nèi)容要能改變條件的值,不然會(huì)陷入死循環(huán)的危機(jī)之中。例如下面的程序

#include <stdio.h>

int main(void)
{
    int value;

    printf("if you input a value that is bigger than zero, the program continue, or it will stop.\n");
    scanf("%d", &value);
    while (value > -1)
    {
        printf("value %d > 0\n", value);
        scanf("%d", &value);
    }
    printf("stop!\n");

    return 0;
}

這個(gè)程序當(dāng)你輸入的值不為負(fù)數(shù)時(shí),程序就永遠(yuǎn)不會(huì)停止。當(dāng)輸入為負(fù)數(shù)時(shí),循環(huán)語(yǔ)句塊停止。

再論boolean

再討論boolean之前,我們先了解一些比較運(yùn)算符。

運(yùn)算符 說(shuō)明
> 大于
< 小于
>= 大于或等于
<= 小于或等于
== 等于(記住和單個(gè)等號(hào)的區(qū)別)
!= 不等于

運(yùn)用這些運(yùn)算符之后的值,只能為1或0。而回憶以前使用的關(guān)系運(yùn)算符,如或、且、非,他們的結(jié)果也是如此。而C認(rèn)為,非0的值為真,0值為假。

for循環(huán)

for循環(huán)的引入,是因?yàn)椤俺绦騿T都是懶惰的”這句話而引出來(lái)的。我們看一個(gè)例子,我們需要依次訪問(wèn)一個(gè)數(shù)組中的值,然后將所有的值相加,得到最終的結(jié)果。

#include <stdio.h>

int main(void)
{
    int total = 0;
    int array[] = {12, 13, 99, 27, 39, 65};
    int index=0, size = sizeof(array)/sizeof(int); // 注釋1

    while (index < size) // 注釋2
    {
        total += array[index++]; // 注釋3
    }
    printf("the array's sum is %d\n", total);

    return 0;
}

這個(gè)例子在使用while的時(shí)候,將條件的初始化、判斷和變化分別放置在注釋1、注釋2、注釋3處。就因?yàn)橐粋€(gè)循環(huán)的執(zhí)行,我們就需要特別注意三處地方,遵從一些軟件原則,我們知道當(dāng)只在一個(gè)地方維護(hù)條件,有利于軟件的維護(hù)和閱讀。同時(shí),for循環(huán)帶來(lái)的靈活性遠(yuǎn)比我們能想象的要好。我們將上面的例子改寫成for的方式。

#include <stdio.h>

int main(void)
{
    int total = 0;
    int array[] = {12, 13, 99, 27, 39, 65};
    int index, size;

    for (index=0, size = sizeof(array)/sizeof(int); index < size; index++)
    {
        total += array[index];
    }
    printf("the array's sum is %d\n", total);

    return 0;
}

我們需要特別注意一下,初始化、判斷和變化,支持多語(yǔ)句。語(yǔ)句間使用英文逗號(hào)(,)分割,這極大地增強(qiáng)了for的靈活性。

逗號(hào)運(yùn)算符

針對(duì)逗號(hào)運(yùn)算符,我們注意以下幾點(diǎn)就可以了。
1、逗號(hào)是一個(gè)順序點(diǎn)

int a = 30, b = 20;
a++, b += a; // a++之后,a變成31。 b += a時(shí),a為31.
printf("a is %d, b is %d\n", a, b);

2、逗號(hào)表達(dá)式是右值表達(dá)式

int a = 30, 40; // 這兒逗號(hào)不僅僅是右值,而是順序點(diǎn)。所以可以看成兩個(gè)語(yǔ)句,等同如下

int a = 30;
40;

int a = (30, 40); // 這兒a的值為40,因?yàn)槎禾?hào)表達(dá)式是右值表達(dá)式

3、逗號(hào)也用作分隔符

int a, b; // 聲明語(yǔ)句中的逗號(hào)

do...while循環(huán)

這個(gè)循環(huán)和while循環(huán)的區(qū)別有兩點(diǎn)。
1、它是一個(gè)循環(huán)語(yǔ)句,所以必須以“;”作為語(yǔ)句的結(jié)束
2、do...while循環(huán)是先執(zhí)行循環(huán)內(nèi)的代碼,再做條件判斷。所以它至少執(zhí)行一次。

使用哪種循環(huán)

在while和do...while中做選擇時(shí),要看是先執(zhí)行條件,還是先執(zhí)行語(yǔ)句塊,一般前者的使用率比后者要高很多。而在選擇for和while的時(shí)候,主要是看是否用到計(jì)數(shù)器,若用到,則使用for,否則使用while。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 53.計(jì)算字符 在字符串中獲取字符值的數(shù)量, 可以使用字符串字符屬性中的計(jì)數(shù)屬性: let unusualMena...
    無(wú)灃閱讀 1,269評(píng)論 0 4
  • 距離婚禮還有三天。 辦理婚禮最大的困難大概就是距離,親朋好友過(guò)來(lái),基本上要跨越400到600公里的距離,更有甚者,...
    王金寶閱讀 269評(píng)論 0 0
  • 三個(gè)人干涉人告訴
    hyyuh閱讀 284評(píng)論 0 0
  • 只要你愿意 時(shí)間就像自來(lái)水 隨便做點(diǎn)什么 不管無(wú)聊高雅 單獨(dú)或者扎堆 一切經(jīng)得起消磨 磨來(lái)磨去 就成了那顆豆子 生...
    老資情調(diào)閱讀 229評(píng)論 0 1
  • 每一個(gè)來(lái)過(guò)新疆的人都曾感嘆新疆的美,因此有情懷的人,稱她為“大美新疆”。這樣描述她,是因?yàn)樗拇_夠大,占去了祖國(guó)六...
    有夢(mèng)_就去追閱讀 698評(píng)論 6 8

友情鏈接更多精彩內(nèi)容