有时发现完成的一个程序还能扩展到更大范围内使用。不过也要当心,必须仔细测试是否满足全部新的条件。下面就举一个将功能普遍化后,不能满足全部情况的例子。
【例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
结论:要推广程序的使用范围,必须经过严格测试。