c语言各语句执行顺序

如:
if(m%fac==0)
dfs(n,m/fac,fac-1);
if(n%fac==0)
dfs(n/fac,m,fac-1); 是不是如果fac满足了m%fac==0,就不在执行if(n%fac==0)下的语句了?

不是的,你先弄明白if语句的语法是
if(条件)
{语句(块)}

else
{语句(块)}
其中else部分可以省略

你写的就是省略了else部分,是2个互不相干的判断语句,各自判断自己的条件,不影响的。

如果你想fac满足了m%fac==0,就不再执行if(n%fac==0)需要加个else语句的,如下:

if(m%fac==0)
dfs(n,m/fac,fac-1);
else if(n%fac==0) //这这里加个else就是你说的意思了
dfs(n/fac,m,fac-1);追问

我是在DFS下写的这几条代码,看别人代码时有了这个执行顺序的疑惑,不过现在想通了,谢谢你,也谢谢其他几位。这个满意回答就给你吧。。。

追答

嗯,关键要看清楚分号和{}。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-12
if(m%fac==0) //先检查 m
dfs(n,m/fac,fac-1);
if(n%fac==0) //不管m成不成立,都会再次检查n
dfs(n/fac,m,fac-1);

if(m%fac==0) //先检查 m
dfs(n,m/fac,fac-1);
else if(n%fac==0) //加个else, 如果m不成立,才会检查n
dfs(n/fac,m,fac-1);
第2个回答  2014-04-12
不是,if语句下边如果不加花括号{},那么他默认的是他下一行的内容在他的语句块内,
也就是你那个等价于:
if(m%fac==0)
{
dfs(n,m/fac,fac-1);
}
if(n%fac==0)
{
dfs(n/fac,m,fac-1);
}

所以都会执行的,如果想按你说的那样做,应该是这样
if(m%fac==0)
dfs(n,m/fac,fac-1);
else
{
if(n%fac==0)
dfs(n/fac,m,fac-1);
}
这样满足m%fac==0的话第二个if不会执行,但是不满足的话第二个if还是会执行的。
第3个回答  2014-04-12
这个需要判断 n%fac==0 是否满足,如果满足就执行语句,如果不满足,就不执行了。

这两个if是独立的,不相互影响的
第4个回答  2014-04-12
那要看你第一个if语句是否包含第二个if语句,若包含,那么第一个if语句条件成立时,就是m%fac==0时,执行整个语句,若不包含,第一个if语句判断完毕之后,再判断第二个语句是否成立。

我看不出第一个语句是否包含第二个语句。建议格式:
if(m%fac==0)
{
dfs(n,m/fac,fac-1);
}//第一个语句结束处
if(n%fac==0)
{
dfs(n/fac,m,fac-1);
}第二个语句结束处

或者
if(m%fac==0)
{
dfs(n,m/fac,fac-1);
if(n%fac==0)
{
dfs(n/fac,m,fac-1);
}第一个语句结束处
}第二个语句结束处

手打
相似回答