2010.4.23
统计数字的问题
要求:由用户自己输入从1到10之间整数,可输入任意多个,统计1到10分别输入了多少个。要求用户可以输入999来结束输入。
这是自学的书中一道题目,书中有个例子是限定输入20次,这个题目主要是可以允许输入任意次。
我原本想使用变量index作为数组下标,从而实现变量长度数组,但是却没办法解决数组元素初始化的问题。
最后只能用笨办法,直接声明一个长度999的数组……程序代码如下:
- #include <stdio.h>
- int main (void)
- {
- int response, i;
- int ratingCounter[999];
- for (i=0; i<999; i++)
- ratingCounter[i]=0;
- printf ("Enter your responses:/n");
- for (i=0; ; i++)
- {
- scanf ("%i", &response);
- if (response==999)
- break;
- else if (response<1 || response>10)
- printf ("Bad response: %i/n", response);
- else
- ++ratingCounter[response];
- }
- printf ("/n/nRating Number of Responses/n");
- printf ("------ -------------------/n");
- for (i=1; i<=10; i++)
- printf ("%4i%14i/n", i, ratingCounter[i]);
- return 0;
- }
这样写,编译没问题,运行起来也符合要求,只是感觉这(就是声明长度999的数组)肯定不是最佳的解决办法。
这个题目从昨天晚上睡觉前看书,到今天下午,我都没有找到办法如何更合理的编写符合要求的程序。实在不行了,编辑好了上面一堆文字准备上网发帖求助。可就在论坛发帖页面进行排版时,突然有个问题跳进我的脑袋:这个程序中的数组到底干嘛用的?
就这么个简单的问题,却把自己的疑问解开了……
这个数组就是用来计数的!但不是计算用户一共输入了多少次,而是直接将用户输入的某个值的次数记录下来。用户每输入一个n(n为1到10之间的整数),数组元素P[n]就加1,所以从最后的printf语句就可以看出,P[1]的值就是输入的1的个数,以此类推。那么其实这个数组只有11个元素不就够了吗?(为直观起见[0]就闲置不用了)我何苦又去定义变量长度数组呀?!
可能是目前刚自学完的一章主要讲的是数组,所以一想到“输入任意次”就想定义变量长度数组了,汗……其实回头想想,“输入任意次”主要是靠省略for语句中的循环条件实现的,而这一点其实我已经想到了……
经过修改,我想这次的代码没有什么不对的了:
- #include <stdio.h>
- int main (void)
- {
- int response, i;
- int ratingCounter[11];
- for (i=0; i<11; i++)
- ratingCounter[i]=0;
- printf ("Enter your responses:/n");
- for (i=0; ; i++)
- {
- scanf ("%i", &response);
- if (response==999)
- break;
- else if (response<1 || response>10)
- printf ("Bad response: %i/n", response);
- else
- ++ratingCounter[response];
- }
- printf ("/n/nRating Number of Responses/n");
- printf ("------ -------------------/n");
- for (i=1; i<=10; i++)
- printf ("%4i%14i/n", i, ratingCounter[i]);
- return 0;
- }
反省!看来自己其实还没有完全参透书中的例子啊!如果真正明白了,知道了例子中数组的作用,也就不会绕这么多弯子了。