優(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。