讀古今文學網 > C語言解惑 > 25.4 擴展程序要注意是否滿足全部條件 >

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
  

結論:要推廣程序的使用範圍,必須經過嚴格測試。