C语言问题 #include <stdio.h> void main( ) { int a=3,

C语言问题

#include <stdio.h>
void main( )
{ int a=3,b=2,c=1;
c-=++b;
b*=a+c;
{ int b=5,c=12;
c/=b*2; a-=c;
printf("%d,%d,%d,",a,b,c);
a+=--c; }
printf("%d,%d,%d\n",a,b,c); }
A) 3,2,1,2,3,-2 B) 2,5,1,3,5,12
C) 2,5,1,2,3,-2 D) 3,2,1,3,5,12

这题目看不懂什么意思,请C语言大神看看。

计算机编译器是死板的,人类的思维有时是跳跃性的,所以看程序必须一步步的走
#include <stdio.h>
void main( )
{ int a=3,b=2,c=1;//定义并赋初值
c-=++b;//这步要分解成两步,根据运算符的优先级表,先算++b,此时b已经不是初值2了,是3,c-=++b等价于c=c-(++b)=1-3=-2
b*=a+c;//等价于b=b*(a+c)=3*(3-2)=3
截止到这一步:a=3,b=3,c=-2
{ int b=5,c=12;//花括号里套了一个花括号本来a,b,c,的值作用域是main函数的全部,结果这个{}花括号挡住了,自己又建了一个作用域,并且他在这个作用域里面又重新定义并赋值了b和c
c/=b*2; a-=c;//此时就得按b=5,c=12,a=3(因为没有重新赋值,所以按照初值来给a)c=c/(b*2)=12/(5*2)=1.2(因为是int,所以取1)=1;a-=c等价于a=a-c=3-1(c的值取最近的一步的值)
完成后:a=2,b=5,c=1(没问题)
printf("%d,%d,%d,",a,b,c);所以打印也是2,5,1
a+=--c; }//这一步是让我很难受的一步,想了半天才想通,此时a+=--c这个式子还是分成两步--c后,c=0,a+=--c等价于a=a+(--c)=2+0=2,即a=2,c=0;我原来是这样想的既然是在{}里,所以出了括号后,这两个值就没了,a还是3,c还是-2,可是编译运行结果并不是,由此可以知道a作为一个在main函数里都有效且没在中间{}里重新赋值的变量且还在这个花括号结束前又变了一次值得变量,他的最近的一次变量是有效的,所以出了{}后a的值为2,b和c由于在中间花括号里重新赋值了,所以出了花括号,他们什么也没了,b=3,c=-2,***!!!(关于这步是我个人的想法,没查到相关依据,所以如果错了,望不吝赐教!)!!!***
printf("%d,%d,%d\n",a,b,c); }//所以a=2,b=3,c=-2
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-29
答案为C) 2,5,1,2,3,-2

void main( ){ int a=3,b=2,c=1; c-=++b; //b=3, c=c-b=1-3=-2 ,a=3 b*=a+c; //b=b*(a+c)=3*(3-2)=3 a=3 c=-2 { int b=5,c=12; //局部变量 b=5 ,c=12,全局变量a=3,b=3,c=-2
c/=b*2; a-=c; //局部变量c=1, b=5, 全局变量a=2 ,b=3,c=-2
printf("%d,%d,%d,",a,b,c); //2,5,1 a+=--c; } //局部c=0,b=5,全局a=2,,b=3,c=-2 局部变量b,c作用域到此结束 printf("%d,%d,%d\n",a,b,c); } //2,3,-2

故答案为C) 2,5,1,2,3,-2
第2个回答  2013-12-29

  答案是C

    #include <stdio.h>
    void main( )
    { int a=3,b=2,c=1;
     c-=++b;
     b*=a+c;
     { int b=5,c=12;
       c/=b*2;  a-=c;
       printf("%d,%d,%d,",a,b,c);//这个的作用区是就是这个大括号{int b=5,c=12;
       c/=b*2;  a-=c;}
       a+=--c; }
       printf("%d,%d,%d\n",a,b,c);//这个的作用区是就是第一个大括号{ int a=3,b=2,c=1;
     c-=++b;
     b*=a+c;}

}

本回答被网友采纳
第3个回答  2013-12-29
......不知道
相似回答
大家正在搜