黑马程序员技术交流社区

标题: 以下程序的运行结果是,大家帮我分析下这道题吧 [打印本页]

作者: flymanshow    时间: 2015-7-16 20:39
标题: 以下程序的运行结果是,大家帮我分析下这道题吧

#include ”stdio.h”
main()
{
    int a, b= 250, c;
    if ((c=b)<0) a=4;
    else if (b=0) a=5;
    else a=6;   
    printf(”\t%d\t%d\n”,a,c);
    if (c=(b==0))
        a=5;
    printf(”\t%d\t%d\n”,a,c);
    if (a=c=b) a=4;
    printf( ”\t%d\t%d\n”,a,c);}
结果为下面
6   250
5   1
0   0




后面的两组5 1,    0 0怎么分析出来的?


作者: 丁丙乙甲    时间: 2015-7-16 21:30
  1. #include ”stdio.h”
  2. main()
  3. {
  4.     int a, b= 250, c;        
  5.     if ((c=b)<0) a=4;   .. ……….执行c=b,c=250,且条件 if(0)为假,则不执行if后边的语句;
  6.     else if (b=0) a=5;…………….执行b=0,因此 if(0),所以则不执行if后边的语句;
  7.     else a=6;   ………………………,执行a=6;
  8.     printf(”\t%d\t%d\n”,a,c);…………所以a=6,b=0,c=250;
  9.     if (c=(b==0))…….........…执行(b==0)为真,所以c=1,if(1)为真,执行if后边的语句a=5;
  10.         a=5;
  11.     printf(”\t%d\t%d\n”,a,c);……所以,a=5,b=0,c=1;
  12.     if (a=c=b) a=4; …………执行a=c=b语句,从右往左计算等价于a=(c=b),所以a=b=c=0;
  13.     printf( ”\t%d\t%d\n”,a,c);}
复制代码

作者: 爱楚楚    时间: 2015-7-16 21:37
因为 else if(b=0)虽然不成立,但是已经把0赋值给b,所以b的值为0,后面的就很容易分析了
作者: flymanshow    时间: 2015-7-16 21:46
丁丙乙甲 发表于 2015-7-16 21:30

谢谢   分析的很好   明白了
作者: flymanshow    时间: 2015-7-16 21:47
爱楚楚 发表于 2015-7-16 21:37
因为 else if(b=0)虽然不成立,但是已经把0赋值给b,所以b的值为0,后面的就很容易分析了 ...

嗯嗯谢谢
作者: 2899028818    时间: 2015-7-17 08:26
思密达。。。。。
作者: neobug    时间: 2015-7-17 11:43
原来如此!!!




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