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