从头学C(7)数组

0

团结就是力量,团结就是力量,这力量是铁,这力量是钢,比铁还硬……咳咳,别闹,我们这在学习呢~

一个人的力量总是有限的,团结在一起才能变得强大,今天咱们就来看看这团结的力量,啊呸,数组的力量。

前面我们看到的都是一个个独立的变量,如nw、nl、nc等等,都是单独的变量;而数组呢,则相当于多个相同类型的变量组合到了一起变成一个整体,共用一个变量名却不会发生冲突。

第一章 导言 >> 1.6 数组

目的:编写一个程序,统计各个数字(0 – 9)、空白符(包括空格、制表符、换行符),及所有其他字符出现的次数。

解决:

#include <stdio.h>

/* 统计各个数字、空白符及其他字符出现的次数 */
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);
}

可以看到,总共应该有12种字符需要统计,但这里使用了一个数组ndigit[10]来分别存放0 – 9这10个数字的出现次数,整个程序就显得相当的整洁。如果都用单独的变量,那哗啦啦一长串,没人能吃得消!

声明语句:

int ndigit[10];

将变量ndigit声明为由10个整型数构成的数组。

数组中的各个元素是由数组下标来区分的,在C语言中,数组的下标都是从0开始的,因此这10个元素分别是ndigit[0]、ndigit[1]、……、ndigit[9]。

数组的下标可以是任何整型表达式,包括整型变量和整型常量

因为在所有的字符集中,’0’、’1’、……、’9’是连续递增的,所以在条件测试中使用了:

c >= '0' && c <= '9'

这样巧妙的表达式来判断变量c是不是数字,如果是数字,那么 c – ‘0’ 就恰好是该数字对应的数值。

char类型本身就是小整型,而且char类型的变量和常量在算术表达式中等价于int类型的变量和常量,所以 c – ‘0’是一个整型表达式。

另外这里还使用了上一节提到过的 多个else if(条件) 的语法,从上往下依次去测试各个条件:

  1. 只要满足其中任何一个 if(条件) ,就会去执行对应的语句,然后跳出整个语句体;
  2. 如果不满足任何一个 if(条件),则会去执行最后一个else及其对应的语句;
  3. 如果不满足任何一个if(条件),而且也最后也没else,那么这整个语句体将不执行任何动作。

后续章节还会学到swith语句,到时还可与此进行比较。

Leave A Reply