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