C程序设计语言 1.6 数组

在这部分,我们来编写一个程序,已统计各个数字、空白符(包括空格符、制表符及换行符)以及所有其他字符出现的次数。
在统计数字出现的次数时,我们使用一个数组存放各个数字出现的次数,这样比10个独立的变量更加方便。如下:

#include 
/* 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语句。

你可能感兴趣的:(C程序设计语言 1.6 数组)