有時發現完成的一個程序還能擴展到更大範圍內使用。不過也要當心,必須仔細測試是否滿足全部新的條件。下面就舉一個將功能普遍化後,不能滿足全部情況的例子。
【例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
結論:要推廣程序的使用範圍,必須經過嚴格測試。