首页 » C语言解惑 » C语言解惑全文在线阅读

《C语言解惑》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 0100有12个0输入number和数字:1000 91000有300个9输入number和数字:120 0120有23个0  

结论:要推广程序的使用范围,必须经过严格测试。