
关于C语言的一个问题,当if语句后的花括号去掉之后
#include<stdio.h>main(){inta,b,t;printf("a,b=");scanf("%d%d',&a,&b);if(a<b){t=a;a=b;b...
#include<stdio.h>
main()
{
int a,b,t;
printf("a,b=");
scanf("%d%d',&a,&b);
if (a<b)
{
t=a;
a=b;
b=t;
}
pritf("%d%d\n",a,b);
}
当if语句后的花括号去掉之后,当输入两个数为12、37后答案是3712,而输入两个数为59、28,结果为什么会是28-858993460 展开
main()
{
int a,b,t;
printf("a,b=");
scanf("%d%d',&a,&b);
if (a<b)
{
t=a;
a=b;
b=t;
}
pritf("%d%d\n",a,b);
}
当if语句后的花括号去掉之后,当输入两个数为12、37后答案是3712,而输入两个数为59、28,结果为什么会是28-858993460 展开
11个回答
展开全部
if (a<b){t=a;a=b;b=t;}
你说的是这一对花括号吗?
如果不加花括号,与if自动贴合的只会是t=a;也就是if下面的第一句话,其他的都和if没有关系了。也就是成了if(a<b) t=a;这样的结构,如果a<b成立,那就t=a吧,至于a=b;b=t;就与if判断没有关系了。而是执行完if这个整体结构后顺序往下遇到的结构。
如果不去掉花括号,if后面的三句话是一个整体,if条件成立的话都执行,否则都不执行。
去掉花括号,if成立执行第一句,然后下面不属于if结构但是顺序执行;如果if不成立,第一句t=a不执行,继续执行下面的两句。
就和else和if的关系似的,else只贴合于距离他最近的那个if。
你说的是这一对花括号吗?
如果不加花括号,与if自动贴合的只会是t=a;也就是if下面的第一句话,其他的都和if没有关系了。也就是成了if(a<b) t=a;这样的结构,如果a<b成立,那就t=a吧,至于a=b;b=t;就与if判断没有关系了。而是执行完if这个整体结构后顺序往下遇到的结构。
如果不去掉花括号,if后面的三句话是一个整体,if条件成立的话都执行,否则都不执行。
去掉花括号,if成立执行第一句,然后下面不属于if结构但是顺序执行;如果if不成立,第一句t=a不执行,继续执行下面的两句。
就和else和if的关系似的,else只贴合于距离他最近的那个if。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当花括号去掉之后只有第一句是会跟着if判断的,后面两句是必定执行的。
当你输入12和37之后,判断a<b不为0,if后面那一句执行,t=12,然后a=37,b=12。
当你输入59和28之后,判断a<b为0,if后面那一句不执行,然后执行a=b,b=t,也就是a=28,b=t,由于t没赋初值,t就是给他分配的那块内存空间中原先存的数,就是那一堆乱数,然后b就等于那一堆乱数了。
当你输入12和37之后,判断a<b不为0,if后面那一句执行,t=12,然后a=37,b=12。
当你输入59和28之后,判断a<b为0,if后面那一句不执行,然后执行a=b,b=t,也就是a=28,b=t,由于t没赋初值,t就是给他分配的那块内存空间中原先存的数,就是那一堆乱数,然后b就等于那一堆乱数了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当你把if后的大括号去掉后,那么这时if语句的执行语句只有一条就是:t=a
这是如果输入的
a
比
b小就是说满足if的执行条件,那么和你不去掉大括号是一样的
都都会完成ab交换
但是,当你输入的a》b时,if
(a<b)
t=a;不会被执行
会直接在下一条也就是
a=b执行
所以你的28可以正确得到
而此时的t并没有被准确赋值,t的值是编译程序随机赋值的,所以b=t这句之后,b才会那样
这是如果输入的
a
比
b小就是说满足if的执行条件,那么和你不去掉大括号是一样的
都都会完成ab交换
但是,当你输入的a》b时,if
(a<b)
t=a;不会被执行
会直接在下一条也就是
a=b执行
所以你的28可以正确得到
而此时的t并没有被准确赋值,t的值是编译程序随机赋值的,所以b=t这句之后,b才会那样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当你把if后的大括号去掉后,那么这时if语句的执行语句只有一条就是:t=a
这是如果输入的
a
比
b小就是说满足if的执行条件,那么和你不去掉大括号是一样的
都都会完成ab交换
但是,当你输入的a》b时,if
(a<b)
t=a;不会被执行
会直接在下一条也就是
a=b执行
所以你的28可以正确得到
而此时的t并没有被准确赋值,t的值是编译程序随机赋值的,所以b=t这句之后,b才会那样
这是如果输入的
a
比
b小就是说满足if的执行条件,那么和你不去掉大括号是一样的
都都会完成ab交换
但是,当你输入的a》b时,if
(a<b)
t=a;不会被执行
会直接在下一条也就是
a=b执行
所以你的28可以正确得到
而此时的t并没有被准确赋值,t的值是编译程序随机赋值的,所以b=t这句之后,b才会那样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询