两个关于C语言的问题

问题1:当a=1,b=2,c=3时,以下if语句执行后,a、b、c中的值分别为if(a>c)b=a;a=c;c=b;问题2:若变量已正确定义,以下语句段的输出结果是:x=... 问题1:当a=1,b=2,c=3时,以下if语句执行后,a、b、c中的值分别为
if(a>c)
b=a;a=c;c=b;
问题2:若变量已正确定义,以下语句段的输出结果是:
x=0;y=2;z=3;
switch(x)
{ case 0: switch (y=2)
{ case 1 : printf("*");break;
case 2 : printf("%");break;
}
case 1:switch (z)
{ case 1: printf ("$");
case 2: printf("*");break;
default : printf ("#");
}
}

求答案和思路。第一个题我完全不懂。第二个题我的思路是,x等于0,所以执行第一个case 0 ,这里面switch(y=2)所以执行里面的case 2,所以得出%,但答案为何是*#。我不明白,求助大神了!
展开
 我来答
liucuocun
2014-01-22 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:76.6万
展开全部

第一题:应该这样看

if(a>c)
    b=a;
a=c;
c=b;

如果你明白可追问


第二题:

首先,在  switch(x) {} 中,case 0与case 1之间没有break;所以执行完case 0后面的内容后还会执行case 1后面的内容,这就是为什么会输出    #,因为执行了default : printf ("#");

其次,* 这个是得不到的,除非把switch (y=2)改成switch (y==2)才能得到printf("*");

最后,你觉得应该得出%,其实即使满足条件,执行了printf("%");也是得不到%,因为%和\一样,具有转义的作用,要想打印%,应该是printf("%%");

追问
为何y==2了的话就能得出printf("*")?是不是代表着这句话是真,所以是1.
追答

没错,结果为“真”用数字1表示,为“假”用数字0表示。你可以写两句代码验证一下:

int a=2;
printf("%d\n",a==2);
printf("%d\n",a==3);

用数字1和0不是绝对的,不同的编译器会用不同的值来表示真和假,但在这里是这样的。

百度网友e9f69da
2014-01-22 · TA获得超过572个赞
知道小有建树答主
回答量:347
采纳率:0%
帮助的人:301万
展开全部
if(a>c)因为a不大于c所以if后的语句b=a;不执行。由于if之后没有大括号,所以只有b=a;这一条语句归if管,后两条语句a=c;和c=b;不受if影响。所以最后的结果是a=3,c=2,b依然为原值2。

case 2,所以得出%,但是并没有退出外面的SWITCH语句,所以继续执行case 1:
Z=3;所以输出了#;所以答案为*#
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
un_femme
2014-01-22
知道答主
回答量:5
采纳率:0%
帮助的人:3.1万
展开全部
问题1:if(a>c)因为a不大于c所以if后的语句b=a;不执行。由于if之后没有大括号,所以只有b=a;这一条语句归if管,后两条语句a=c;和c=b;不受if影响。所以最后的结果是a=3,c=2,b依然为原值2。
源程序相当于if(a>c)
{
b=a;
}
a=c;
c=b;
问题2:输出结果为:*#因为switch(x),其中x=0,跳到case0,执行switch(y=2),因为y=2是正确的,所以switch括号内为1(另外是switch(y==2)吧,表判断),所以执行case 1,输出’*‘,break跳出当前switch语句到switch(z)处,z=3,执行default输出‘#’
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乘风破浪的蜻蜓V
2014-01-22
知道答主
回答量:25
采纳率:0%
帮助的人:12.5万
展开全部
问题1:当a=1,b=2,c=3时,以下if语句执行后,a、b、c中的值分别为
if(a>c)
b=a;a=c;c=b;
选择不成立,直接进行;a=c;c=b;然后就是 a=3 c=2 b=b=2
后面的
switch(y=2)里面的y=2是一个赋值语句,因此其实y=2这个式子所代表的意思是 1.因此进行到下面的case1.而后在跳出到下面一个case1;因为前面的break 只用来跳出switch (y=2) 并没有跳出switch(x),因此会继续下面的case1.如果
x=0;y=2;z=3;
switch(x)
{ case 0: switch (y=2)
{ case 1 : printf("*");break;
case 2 : printf("%");break;
}
break;
case 1:switch (z)
{ case 1: printf ("$");
case 2: printf("*");break;
default : printf ("#");
}
}
如果这样。 则会输出*
如果讲y=2 改成y==2 则还是输出*
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mnbvcxzk159357
2014-01-22
知道答主
回答量:13
采纳率:0%
帮助的人:8.8万
展开全部
问题一:
if (a > c) {
b = a;

}
a = c;
c = b;
这样就清晰多了,答案是a=3,b=2,c=2
问题二:switch(x)中case 0执行完没有break所以会继续进入case 1执行default,还有printf("%")中%后面没有匹配的东西所以打印不出任何东西的,可以改一下printf("%%")就可以看到%了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
已经漂流到南京
2014-01-22
知道答主
回答量:26
采纳率:0%
帮助的人:16.9万
展开全部
这个问题很有想象力啊,强烈建议先思考一个小时,然后编写代码运行一下子;
谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式