在这部分,我们来编写一个程序,已统计各个数字、空白符(包括空格符、制表符及换行符)以及所有其他字符出现的次数。
在统计数字出现的次数时,我们使用一个数组存放各个数字出现的次数,这样比10个独立的变量更加方便。如下:
#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;
}
当把这段程序本身作为输入时,输出结果为:
digits = 9 3 0 0 0 0 0 0 0 1, white space = 123, other = 345
该程序中的声明语句
int ndigit[10]
意为声明一个由10个整形数组成的数组,[]
在变量名后意为数组,其中的数字为这个数组所能存放元素的个数。在C语言中,数组下标总是从0开始,ndigit[0]
表示数组中的第一个元素,ndigit[1]
表示数组中的第二个元素,以此类推,这可以通过初始化和打印数组的两个for循环反应出来。
数组下标可以是任何整形表达式,包括整形变量及整形常量
if (c >= '0' && c <= '9')
用于判断c中的字符是否为数字。如果是数字,那么对应是数的计算方式为:
c - '0'
如果c中存储的字符是'0''9',其值将为09,下标刚好和数值对应起来。
判断一个字符是数字、空白符还是其他字符的功能由下列语句序列完成:
if (c >= '0' && c <= '9')
++ndigit[c - '0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;
程序中经常使用下列方式表示多路判定:
if (条件 1)
语句 1
else if (条件 2)
语句 2
...
...
else
语句 n
这种语句从前往后依次求值,直到满足某个条件,然后执行对应的部分,语句执行结束。其中的语句可以为单条语句也可以为大括号括起来的多条语句。如果所有条件都不满足,则执行位于最后一个else
之后的语句(如果有的话)。在第三章中,我们将学习多路分支的另外一种方式,switch
语句。