25.4 扩展程序要注意是否满足全部条件

有时发现完成的一个程序还能扩展到更大范围内使用。不过也要当心,必须仔细测试是否满足全部新的条件。下面就举一个将功能普遍化后,不能满足全部情况的例子。

【例25.4】编写一个求1~100范围内有多少个8的程序。


#include <stdio.h>
int main
()
{
      int i=0
, num=0
, count = 0
;
      int base=8
;
      for
(i=0
;i<=100
;i++
)
      {
         num=i
;
         while
(num 
!=0
)
         {
               if
(num%10 == base
)
                    count++
;     //
个位的8
               num=num/10
;
         }
     }
     printf
("
有%d
个8\n"
, count
);
     return 0
;
}
  

程序运行结果为:


有20
个8
  

如果用键盘输入base的值,就可以将有多少个8扩为有其他0~9的任意数。但做这个结论需要经过验证,一般至少用首、尾的数字验证。验证结果是9满足,但0不满足。应该有12个零(100有2个0),但只求出11个0。是while语句的问题,应使用do~while结构。


//
修改后的程序
#include <stdio.h>
int main
()
{
      int i=0
, num=0
, count = 0
;
      int number=0
, base=0
;
      printf
("
输入number
和数字:"
);
      scanf
("%d%d"
, &number
, &base
);
      for
(i=0
;i<=number
;i++
)
      {
             num=i
;
             do
             {
                 if
(num % 10 == base
)
                      count++
;   //
个位的0
                 num = num / 10
;
             }while
(num 
!=0
);
      }
      printf
("%d
有%d
个%d\n"
, number
, count
, base
);
      return 0
;
}
  

修改后不仅可以满足求0~9的个数,而且也不受100的限制。

程序输出示范如下:


输入number
和数字:
100 0
100
有12
个0
输入number
和数字:
1000 9
1000
有300
个9
输入number
和数字:
120 0
120
有23
个0
  

结论:要推广程序的使用范围,必须经过严格测试。

《C语言解惑》