我们在利用编程语言解决问题时,首先要思考问题如何解决,最重要的就是思考如何将一个问题分成多个小问题,然后各个击破。各个小问题之间的关系也是我们所要考虑的,这关系到如何将小问题的解决和最终问题的解决结合。
但是我们最终要将我们所想的解决办法,落实到程序的运行上,即如何使用代码来描述解决方案。这就关系到代码的逻辑问题。
观察下面两个栗子🌰
栗子1
#include <stdio.h>
int main()
{
int x;
int n = 1;
scanf("%d", &x);
if (x>999)
{
n = 4;
}else if (x>99)
{
n = 3;
}else if (x>9)
{
n = 2;
}
printf("%d", n);
}
栗子2
#include <stdio.h>
int main()
{
int x;
int n = 1;
scanf("%d", &x);
if (x>999)
{
n = 4;
}
if (x>99)
{
n = 3;
}
if (x>9)
{
n = 2;
}
if (x>0)
{
n = 1;
}
printf("%d", n);
}
通过观察,我们发现这两个栗子实际上是解决同一种问题,即判断小于10000的情况下,输入的数字的位数。二者的区别在于栗子1是利用了if(){}else if() {} else{}
语句进行判断;而栗子而则只是一直利用if(){}
语句。虽然在我们描述关系的时候,二者是一样的,即:如果x
大于999,则n
为4;如果x
大于99,则n
为3;如果x
大于9,则n
为2;如果x
大于0,则n
为1。说的有点啰嗦哎。。。
但是当描述逻辑,或者说计算机执行时,其运行的先后顺序就有所不同了。栗子1中的语句执行过程是一个逐渐排除的过程,即if
的条件满足,则执行其后的命令,不满足则检验else if
的条件是否满足,满足则执行其后的命令,否则就检验else
的条件是否满足,满足则执行其后的命令。而栗子二中的各个if
语句的关系则是并行的,如果输入的数字是1000
,其满足x>999
的条件,此时n=4
,但此时并不输出n
;程序继续执行,数字进入第二个if
语句进行判断,此时n=3
,一直到最后一个if
语句,输出n=1
。但是结果是不对的。
很明显,栗子1中的程序的写法是正确的,这就是描述关系和程序执行逻辑的不同。在有了解决问题的思路后,一定要明确程序执行的逻辑来写代码
说得有点儿啰嗦,初学者的逻辑还是有些不清楚哎