我的C语言学习日志(五)

2010.4.23
统计数字的问题
        要求:由用户自己输入从1到10之间整数,可输入任意多个,统计1到10分别输入了多少个。要求用户可以输入999来结束输入。
        这是自学的书中一道题目,书中有个例子是限定输入20次,这个题目主要是可以允许输入任意次。
        我原本想使用变量index作为数组下标,从而实现变量长度数组,但是却没办法解决数组元素初始化的问题。
        最后只能用笨办法,直接声明一个长度999的数组……程序代码如下:

Code:
  1. #include <stdio.h>   
  2. int main (void)   
  3. {   
  4.  int response, i;   
  5.  int ratingCounter[999];   
  6.   
  7.  for (i=0; i<999; i++)   
  8.   ratingCounter[i]=0;   
  9.   
  10.  printf ("Enter your responses:/n");   
  11.   
  12.  for (i=0; ; i++)   
  13.  {   
  14.   scanf ("%i", &response);   
  15.   
  16.   if (response==999)   
  17.    break;   
  18.   else if (response<1 || response>10)   
  19.    printf ("Bad response: %i/n", response);   
  20.   else  
  21.    ++ratingCounter[response];   
  22.  }   
  23.   
  24.  printf ("/n/nRating Number of Responses/n");   
  25.  printf ("------ -------------------/n");   
  26.   
  27.  for (i=1; i<=10; i++)   
  28.   printf ("%4i%14i/n", i, ratingCounter[i]);   
  29.   
  30.  return 0;   
  31. }   


        这样写,编译没问题,运行起来也符合要求,只是感觉这(就是声明长度999的数组)肯定不是最佳的解决办法。
        这个题目从昨天晚上睡觉前看书,到今天下午,我都没有找到办法如何更合理的编写符合要求的程序。实在不行了,编辑好了上面一堆文字准备上网发帖求助。可就在论坛发帖页面进行排版时,突然有个问题跳进我的脑袋:这个程序中的数组到底干嘛用的?
        就这么个简单的问题,却把自己的疑问解开了……
        这个数组就是用来计数的!但不是计算用户一共输入了多少次,而是直接将用户输入的某个值的次数记录下来。用户每输入一个n(n为1到10之间的整数),数组元素P[n]就加1,所以从最后的printf语句就可以看出,P[1]的值就是输入的1的个数,以此类推。那么其实这个数组只有11个元素不就够了吗?(为直观起见[0]就闲置不用了)我何苦又去定义变量长度数组呀?!
        可能是目前刚自学完的一章主要讲的是数组,所以一想到“输入任意次”就想定义变量长度数组了,汗……其实回头想想,“输入任意次”主要是靠省略for语句中的循环条件实现的,而这一点其实我已经想到了……
        经过修改,我想这次的代码没有什么不对的了:

Code:
  1. #include <stdio.h>   
  2. int main (void)   
  3. {   
  4.     int response, i;   
  5.     int ratingCounter[11];   
  6.   
  7.     for (i=0; i<11; i++)   
  8.         ratingCounter[i]=0;   
  9.   
  10.     printf ("Enter your responses:/n");   
  11.   
  12.     for (i=0; ; i++)   
  13.     {   
  14.         scanf ("%i", &response);   
  15.   
  16.         if (response==999)   
  17.             break;   
  18.         else if (response<1 || response>10)   
  19.             printf ("Bad response: %i/n", response);   
  20.         else  
  21.             ++ratingCounter[response];   
  22.     }   
  23.   
  24.     printf ("/n/nRating Number of Responses/n");   
  25.     printf ("------ -------------------/n");   
  26.   
  27.     for (i=1; i<=10; i++)   
  28.         printf ("%4i%14i/n", i, ratingCounter[i]);   
  29.   
  30.     return 0;   
  31. }  


        反省!看来自己其实还没有完全参透书中的例子啊!如果真正明白了,知道了例子中数组的作用,也就不会绕这么多弯子了。

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值