两个关于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,所以得出%,但答案为何是*#。我不明白,求助大神了! 展开
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,所以得出%,但答案为何是*#。我不明白,求助大神了! 展开
7个回答
展开全部
第一题:应该这样看
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不是绝对的,不同的编译器会用不同的值来表示真和假,但在这里是这样的。
展开全部
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;所以输出了#;所以答案为*#
case 2,所以得出%,但是并没有退出外面的SWITCH语句,所以继续执行case 1:
Z=3;所以输出了#;所以答案为*#
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题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输出‘#’
源程序相当于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输出‘#’
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题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 则还是输出*
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 则还是输出*
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题一:
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("%%")就可以看到%了
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("%%")就可以看到%了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题很有想象力啊,强烈建议先思考一个小时,然后编写代码运行一下子;
谢谢
谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询