关于C语言 选择表达式 的一个小问题!

来源:百度知道 编辑:UC知道 时间:2024/06/27 18:00:45
main()
{int a=1,b=2,c=3,d=4;
printf ("%d",a<b?a:c;c<d?a:d);}
问 1 这道题里第一个选择表达式和第二个选择表达式之间的分号
可以出现吗?
2 关于运算顺序 这里面的2个表达式之间若用了分号隔开 先计算哪一个?
3 若把中间的分号改为逗号 那么%d 输出的结果是哪个表达式的值?

当然不能有分号。 分号是分隔语句的, 除了for语句那个例外

printf("%d", a<b?a:c, c<d?a:d);
结果是打印 a<b?a:c的值。 因为 后面的被当作第三个参数,而这个printf并不会打印第三个参数

printf("%d", (a<b?a:c, c<d?a:d) );
结果是打印 c<d?a:d的值,当然之前也计算了 a<b?a:c只不过结果被丢掉了。

上机运行不就得了吗?3 后面的那个

改为:
main()
{int a=1,b=2,c=3,d=4;
printf ("%d%d",a<b?a:c;c<d?a:d);}
都输出

不能有分号,否则 到第一个分号这个语句就结束了,括号不匹配
不知道你要实现什么功能,
若想顺序执行,可改为逗号

ps:
如果只改为逗号,那么只输出 第一个表达式的值,
如果改为 (a<b?a:c,c<d?a:d)即把两个表达式用括号括起来的话,则输出的是第二个表达式的值

这句应该不能通过编译,不能有分号

main()
{int a=1,b=2,c=3,d=4;
printf ("%d",a<b?a:c;c<d?a:d);}
问 1 这道题里第一个选择表达式和第二个选择表达式之间的分号可以出现吗?
答:当然不行了,这句不能通过编译,编译器会报错的,不能有分号

2 关于运算顺序 这里面的2个表达式之间若用了分号隔开 先计算哪一个?
答:这里面的2个表达式之间若用了分号隔开则编译器也会报错,运行不起来。

3 若把中间的分号改为逗号 那么%d 输出的结果是哪个表达式的值?
答:若把中间的分号改为逗号 那么%d 输出的结果是第一个表达式的值,即是a<b?a:c的值,1啊。