在這部分,我們來(lái)編寫(xiě)一個(gè)程序,已統(tǒng)計(jì)各個(gè)數(shù)字、空白符(包括空格符、制表符及換行符)以及所有其他字符出現(xiàn)的次數(shù)。
在統(tǒng)計(jì)數(shù)字出現(xiàn)的次數(shù)時(shí),我們使用一個(gè)數(shù)組存放各個(gè)數(shù)字出現(xiàn)的次數(shù),這樣比10個(gè)獨(dú)立的變量更加方便。如下:
#include <stdio.h>
/* count digits, white space, others */
int main()
{
int c, i, nwhite, nother;
int ndigit[10];
nwhite = nother = 0;
for (i = 0; i < 10; ++i)
ndigit[i] = 0;//初始化
while ((c = getchar()) != EOF)
if (c >= '0' && c <= '9')
++ndigit[c - '0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;
printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[i]);
printf(", white space = %d, other = %d\n",nwhite, nother);
return 0;
}
當(dāng)把這段程序本身作為輸入時(shí),輸出結(jié)果為:
digits = 9 3 0 0 0 0 0 0 0 1, white space = 123, other = 345
該程序中的聲明語(yǔ)句
int ndigit[10]
意為聲明一個(gè)由10個(gè)整形數(shù)組成的數(shù)組,[]在變量名后意為數(shù)組,其中的數(shù)字為這個(gè)數(shù)組所能存放元素的個(gè)數(shù)。在C語(yǔ)言中,數(shù)組下標(biāo)總是從0開(kāi)始,ndigit[0]表示數(shù)組中的第一個(gè)元素,ndigit[1]表示數(shù)組中的第二個(gè)元素,以此類(lèi)推,這可以通過(guò)初始化和打印數(shù)組的兩個(gè)for循環(huán)反應(yīng)出來(lái)。
數(shù)組下標(biāo)可以是任何整形表達(dá)式,包括整形變量及整形常量
if (c >= '0' && c <= '9')
用于判斷c中的字符是否為數(shù)字。如果是數(shù)字,那么對(duì)應(yīng)是數(shù)的計(jì)算方式為:
c - '0'
如果c中存儲(chǔ)的字符是'0''9',其值將為09,下標(biāo)剛好和數(shù)值對(duì)應(yīng)起來(lái)。
判斷一個(gè)字符是數(shù)字、空白符還是其他字符的功能由下列語(yǔ)句序列完成:
if (c >= '0' && c <= '9')
++ndigit[c - '0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;
程序中經(jīng)常使用下列方式表示多路判定:
if (條件 1)
語(yǔ)句 1
else if (條件 2)
語(yǔ)句 2
...
...
else
語(yǔ)句 n
這種語(yǔ)句從前往后依次求值,直到滿足某個(gè)條件,然后執(zhí)行對(duì)應(yīng)的部分,語(yǔ)句執(zhí)行結(jié)束。其中的語(yǔ)句可以為單條語(yǔ)句也可以為大括號(hào)括起來(lái)的多條語(yǔ)句。如果所有條件都不滿足,則執(zhí)行位于最后一個(gè)else之后的語(yǔ)句(如果有的話)。在第三章中,我們將學(xué)習(xí)多路分支的另外一種方式,switch語(yǔ)句。