c语言用if语句求三个数按顺序排列疑惑

#inclde<stdio.h>main(){inta,b,c,t;printf("pleaseinputa,b,c.\n");scanf("%d,%d,%d",&a,&... #inclde<stdio.h>
main()
{
int a,b,c,t;
printf("please input a,b,c.\n");
scanf("%d,%d,%d",&a,&b,&c);
if(a>b) t=a;a=b;b=t;
if(a>c) t=a;a=c;c=t;
if(b>c) t=b;b=c;c=t;
printf("%d,%d,%d\n",a,b,c);
getch();
}

对于if语句,我看不懂,我的理解是:如果a>b,a,b互换;如果b>c,a,c互换;如果b>c,b,c互换。三个if都要执行,但这样为什么就能求出大小顺序呢?想了好久都没想通。。我初学c,求大神能详细解释下。。谢了。。我会努力赚分的,,现在没分了,,,见谅。
展开
 我来答
zzh0795
2011-10-25 · TA获得超过369个赞
知道小有建树答主
回答量:122
采纳率:0%
帮助的人:160万
展开全部
你的这个程序要先修改一下,才能实现你所说的排序。将程序 改为:
#include<stdio.h> /* include 这个词你漏掉了一个字符u */
#include <conio.h> /* 加上这个头文件,是因为后面有getch() */
void main()
{
int a,b,c,t;
printf("please input a,b,c.\n");
scanf("%d,%d,%d",&a,&b,&c);
/*下面这几个if语句都要加{ },否则不能实现从小到大排序 */
if(a>b) {t=a;a=b;b=t;} /* 这一句的意思是:如果a>b,则交换a和b,否则什么也不做。即用a存 放a b二者中较小的数,b存放较大的数*/
if(a>c) {t=a;a=c;c=t;} /* a再和c比较,a存放二者较小的数。经过这次比较后,a是三个数中最小的*/
if(b>c) {t=b;b=c;c=t;} /*b和c比较,b存二者中较小的数,c存较大的数*/
printf("%d,%d,%d\n",a,b,c); /*这样比较过再输出,则a最小,b其次,c最大*/
getch();
}
追问
终于搞清楚了,太感谢了,条件一先a和b比较,条件成立就把a和b互换,所以a反而成了较小数。同理,条件二也把较小数给了a.所以,a就最小,所以最后输出的最小值是a.同样,条件三把b和c比较把小值给了b,所以就能判断出abc 大小了。
保修齐0GD
2011-10-25
知道答主
回答量:70
采纳率:0%
帮助的人:14万
展开全部
你要记住,在定义a,b,c时,只是申请了三个内存空间,在执行if语句的时候,只是把a,b,c的值相互附给对方,而没有调换内存地址。 例如,我这边申请了四个盒子,分别代表了a,b,c,t,当我执行第一个if语句的时候,如果a>b,那么也就是说a盒子里存放的数比b盒子里存放的数大,那么,此时,系统就会把a盒子里的数放到t盒子里去,然后把b盒子里的数放到a盒子里去,同时会把t盒子里的数(应该是a盒子里的原数)放到b盒子里,这样就完成了,a和b内存没有变化,可是值交换了。 同理,其他两条if语句也是同样的情况。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晴空若雪
2011-10-25
知道答主
回答量:6
采纳率:0%
帮助的人:3.7万
展开全部
#include<stdio.h>
#include<conio.h>
main()
{
int a,b,c,t;
printf("please input a,b,c.\n");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;}
if(a>c) {t=a;a=c;c=t;}
if(b>c) {t=b;b=c;c=t;}
printf("%d,%d,%d\n",a,b,c);
getch();
}
你的输入语句不应该在d%上加逗号,scanf("%d%d%d",&a,&b,&c);这样就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式