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
......不知道

C语言问题 #include <stdio.h> void main( ) { int a=3,
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 ...

C语言问题 #include<stdio.h> void main() { int a
printf是没有任何问题的~你好%p会以16进制输出地址,其中的abcdef用的是大写,然后还有就是%p输出的时候会有8位,地址不足八位的前面补0.x以十六进制输出地址,是小写,输出实际位数。

# include <stdio.h> void main() { int a=3,b=3,c=3; printf("%a %...
printf("%a %b %c\\n",a,b,c);变量c 对应的格式符是 %c , %c在C语言中意为转换成一个字符。虽然 变量c 数据类型是int,但C语言中 char类型与int是可以相互转换的。所以变量c被转换成了ASCII码为3的字符,即心形。要正确输出将格式符 修改为 %d即可。从这个题目中可以看出,你还不了解...

C语言问题: #include <stdio.h> int main() { int a=3,
a+=b,代表给a赋值为(a+b),-=同理,同时这俩运算符平级。所以顺序为首先a+=a,此时a=2a;然后a-=a,此时=0;然后c=a=0

#include<stdio.h> void main() {int a; printf("%d\\n",(a=3*5,a*...
include <stdio.h> void main() { int a;a=3*5,a*4;\/\/书上写的真的不是a=(a=3*5,a*4);么……不是的话就可以把书撕了……printf("%d\\n",a);} \/\/逗号运算符的优先级是C语言所有运算符中最低的 \/\/因此如果没有括号,赋值运算符一定比逗号运算符先求值 \/\/即a=3*5,a*4;...

#include <stdio.h> void main() { int a; a=3*5,a*4; printf("%d\\n...
include <stdio.h> void main() { int a;a=3*5,a*4;\/\/书上写的真的不是a=(a=3*5,a*4);么……不是的话就可以把书撕了……printf("%d\\n",a);} \/\/逗号运算符的优先级是C语言所有运算符中最低的 \/\/因此如果没有括号,赋值运算符一定比逗号运算符先求值 \/\/即a=3*5,a*4;...

#include <stdio.h> int main () { int a=3,b=4; printf("%d,%d...
逗号表达式 (a,b)整个逗号表达式的值是b的值为4 (b,a)整个逗号表达式的值是a的值为3 所以输出的结果是4,3 希望能够帮到您。

#include <stdio.h>void main(){ int a[3][4]={{1,2,3,4},{9,7,10...
max=10,row=1,colum=2 这个程序的作用是找出数组中的最大值。因为i,j都是从0开始的i=(0,1,2);j=(0,1,2,3)实际数组时[2,3]。但是在这个程序中是[1,2]

c语言 a=3 b=7,怎么把a 和b的位子 对换下
adavgl 显然是答非所问,BS.我这里给出不同的四种方法:①方法一(利用中间变量):include <stdio.h> int main(){ int a=3,b=7,temp;temp=a;a=b;b=temp;printf("a=%d,b=%d",a,b);return 1;} ②方法二(这种方法下a+b不能超过65536\/2-1,利用线性运算):include <stdio.h> i...

C语言怎样写一个程序得出a+b>c&&b==c的值,其中a=3 ,b=4, c=5_百度知...
如果转为整型就只能是1和0;只是想知道这个表达式的值得话:这样写就ok include<stdio.h> void main(){ int a=3,b=4,c=5;printf("%d\\n",a+b>c&&b==c);} 如果想要得到并保存利用这个结果:就把这个结果保存到一个变量里,int d;d=a+b>c&&b==c;再输出d;...

相似回答
大家正在搜