《从问题到程序》第一章
这一章主要强调了分析问题的能力,告诉我们如何学会写程序,以及在程序编写过程中要学会检查程序错误的能力。
想通过分析一个程序来逐步掌握程序设计的思维及方法。
题目是这样的:有一个不超过3位的数,现在要求按指定格式输出,例如312就输出:BBBS1(即百位数上是几就输出几个B,十位类似,之后输出从1到小于个位数字的序列)。
刚开始入手这个题,我的思路很直接,scanf一个数n,然后就从百位数字依次开始判断,里面用一个for循环来依次输出'S','B',但这个过程却很困难,因为首先我相当于只有一个变量就是我输入的这个数,其它的一切判断都是基于这一个数来进行运算的,很容易混淆当前的n是什么,其次就是我输入的这个数要能很好的辨别它是个几位数然后进入相应的循环条件里输出,最后就是循环终止条件很重要,我中间一度执行时不停输出停不下来,就是终止条件没想好。最终我的代码实现是这样的:
int main(){
int i,n,c,s;
scanf("%d",&n);
while(n/100>10){ //这是判断这个数是否是个不超过三位的数
printf("error");
n=-1;
}
while((n/10)!=0){ //首先判断这个数是有一位还是2-3位,作为循环终止条件
if(n/100!=0){ //三位数的时候
c=n/100;
for(i=0;i<c;i++){
printf("B");
}
n=n%100;
}
else if(n/10!=0){ //两位数的时候
s=n/10;
for(i=0;i<s;i++){
printf("S");
}
n=n/10;
}
}
while(n/10==0) { //只有一位数的时候,作为循环终止条件
for(i=1;i<=n%10;i++){
printf("%d",i);
}
break;
}
}
后来我想这么实现实在是太绕了,有没有简单点的方法,其实没有必要一位一位的判断输出,直接用个数组把每一位的数字存进去,然后用嵌入的for循环输出'S','B'和数字就可以了。
比较看来用数组实现的方法快速简单许多,这就看出程序设计的不同实现方法了,以后我要更学会用一直程序结构来简化问题,不要单刀直入费时费力。最后程序设计的关键我认为就是我们如何切入问题角度,把握整体思路,然后细化工作细节,排查错误,优化代码。