在這部分,我們來編寫一個(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
該程序中的聲明語句
int ndigit[10]
意為聲明一個(gè)由10個(gè)整形數(shù)組成的數(shù)組,[]
在變量名后意為數(shù)組秉沼,其中的數(shù)字為這個(gè)數(shù)組所能存放元素的個(gè)數(shù)桶雀。在C語言中,數(shù)組下標(biāo)總是從0開始唬复,ndigit[0]
表示數(shù)組中的第一個(gè)元素矗积,ndigit[1]
表示數(shù)組中的第二個(gè)元素,以此類推敞咧,這可以通過初始化和打印數(shù)組的兩個(gè)for循環(huán)反應(yīng)出來棘捣。
數(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)起來茵烈。
判斷一個(gè)字符是數(shù)字百匆、空白符還是其他字符的功能由下列語句序列完成:
if (c >= '0' && c <= '9')
++ndigit[c - '0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;
程序中經(jīng)常使用下列方式表示多路判定:
if (條件 1)
語句 1
else if (條件 2)
語句 2
...
...
else
語句 n
這種語句從前往后依次求值,直到滿足某個(gè)條件呜投,然后執(zhí)行對(duì)應(yīng)的部分加匈,語句執(zhí)行結(jié)束。其中的語句可以為單條語句也可以為大括號(hào)括起來的多條語句仑荐。如果所有條件都不滿足雕拼,則執(zhí)行位于最后一個(gè)else
之后的語句(如果有的話)。在第三章中粘招,我們將學(xué)習(xí)多路分支的另外一種方式啥寇,switch
語句。