黑马程序员技术交流社区

标题: 学霸们,帮忙看下这个题! [打印本页]

作者: 丁丙乙甲    时间: 2015-7-27 23:21
标题: 学霸们,帮忙看下这个题!

运行结果怎么是2,而不是3呢?

  1. 11.以下程序的运行结果是()。
  2. #include ”stdio.h”
  3. main()
  4. {
  5.     int a=2,b= -1,c=2;
  6.     if (a<b)
  7.         if (b<0)
  8.             c=0;
  9.         else c++;
  10.     
  11.     printf(”%d\n”,c);
  12. }
复制代码

作者: Eil.tea    时间: 2015-7-27 23:27
else 配对的是第二个if,第一个if不成立,后边的代码都不执行,建议在写if else的时候,都加上{},一来便于读写代码,二来也是语法规范。当你进入公司的时候,很多公司都要求规范书写的,从现在保持一个良好的规范吧。
作者: Northcity    时间: 2015-7-27 23:43
else 就近原则选取if配对
作者: 余丽丽    时间: 2015-7-27 23:53
Northcity 发表于 2015-7-27 23:43
else 就近原则选取if配对

楼上正解
作者: 红双喜    时间: 2015-7-28 00:19
这个头文件怎么这么奇怪。
作者: ZHYU    时间: 2015-7-28 13:08
 楼主,下面给出了你的源代码的等价代码,实际结果相当于直接将 c 的值打印出来。很简单的,能看懂了吗?

#include ”stdio.h”
main()
{
    int a=2,b= -1,c=2;
    if (a<b){
        if (b<0)
            c=0;
        else c++;
    }
    printf(”%d\n”,c);
}

作者: cpo007    时间: 2015-7-28 13:13
bujia括号不是作死me
作者: 香港    时间: 2015-7-28 13:20
判断完就没往if执行就直接打印了   
作者: wowthe1st    时间: 2015-7-28 14:05
输出2吧,if里面都没执行到
作者: 1312878967    时间: 2015-7-28 15:40
是故意不加{}的吗 呵呵了
作者: 我的呸    时间: 2015-7-28 16:47
学习啦。
作者: Foreversidy夏末    时间: 2015-7-28 22:19
学习学习
作者: 刘彦麟    时间: 2015-7-28 22:33
红双喜 发表于 2015-7-28 00:19
这个头文件怎么这么奇怪。

一样的··
作者: Northcity    时间: 2015-7-29 00:28
余丽丽 发表于 2015-7-27 23:53
楼上正解

:victory:      大神还来水:shutup:
作者: fudanxiaoan    时间: 2015-7-29 07:56
相当于 int a = 2, b = -1, c =2;
printf("%d\n",c);
作者: 飞翔的猪    时间: 2015-7-29 10:00
if else 就近匹配原则,你的写法也不好,加上大括号把上下的if用大括号分开作用域,如果你是水分的。。。就当我没说
作者: 余丽丽    时间: 2015-7-29 12:04
Northcity 发表于 2015-7-29 00:28
 大神还来水

水水更健康
作者: 865061682    时间: 2015-7-29 21:46
c=2 第一个if不成立 就不会去执行{}中的代码 就是说07到09这几行的代码都不执行
作者: liusuizuoyou    时间: 2015-7-29 22:26
把中间那个IF 用括号 扩起来 就搞定啦
作者:   张恒宇    时间: 2015-7-29 22:46
本帖最后由   张恒宇 于 2015-7-29 22:52 编辑

你这样的代码是怎么写出来的。。。。主函数不交代是否有返回值。。。。if条件判断之后要做什么。。。。还有你这是要嵌套IF的话也没有{}怎么解释。。。。
#include <stdio.h>
int main()
{   
           int a=2,b= -1,c=2;   
              if (a<b)            
  {        
                    if (b<0)        
           {            
                          c=0;        
              }            
}         
             else c++;        
             printf("%d\n",c);
  }               得出的结果是3.。。你的程序没有办法得出结论。。。

#include <stdio.h>
int main()
{
    int a=2,b= -1,c=2;
    if (a<b)
        

    {
        if (b<0)
           {
               c=0;
           }
        else c++;

        
    }
   
    printf("%d\n",c);
}
这样的出来的结果是2.。。if 和esle的用法是看if后面大括号来决定else和谁配对的。。。。

作者: ivae0    时间: 2015-7-30 09:29
很简单,第一个if条件不满足,跳出if循环,直接输出c的值,楼主再看看基础题学习学习
作者: 865061682    时间: 2015-7-30 09:37
第一个if()括号里面的条件不成立 不会执行{  }里面的东西 很显然后面07到09是在{ }里面的呗直接跳过了
作者: ws4715535    时间: 2015-7-30 15:54
因为判断a<b不成立所以直接输出打印了,c的值不变。
如果想要结果为3,那么把中间的IF 带上括号
nt a=2,b= -1,c=2;
    if (a<b)
   {
    if (b<0)
    c=0;
           }
        else c++;
然后输出

        




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2