输入4个整数,要求按从小到大顺序输出

#include<stdio.h>
int main()
{
int a,b,c,d;
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a>b){a=b-a;b=b-a;a=a+b;}
if(a>c){a=c-a;c=c-a;a=a+c;}
if(a>d){a=d-a;d=d-a;a=a+d;}
if(b>c){b=c-b;c=c-b;b=b+c;}
if(b>d){b=d-b;d=d-b;b=b+d;}
if(c>d){c=d-c;d=d-c;c=c+d;}
printf("%d,%d,%d,%d\n",a,b,c,d);
getch();
return 0;
}
各位大虾帮忙解释下为什么啊?
为什么成立了,就交换数值啊,做这种题目出发点是什么啊?
谢谢,谢谢啦!
哈,无限个的我还没学到啊,刚学了3个的,这个题目有4个,
我想知道他们交换数值是为了什么,原理性的问题,朋友们帮帮忙啊,加分啊

我给你详细解释一下你这个程序里每一步,
我用一种最坏的假设来给你说明,
比如a =4 b=3 c=2 d =1
在第一次判断中a>b成立,则a b 互换之后这四个数变为
3 4 2 1
在第二次判断中a>c立,则a c互换之后这四个数变为
2 4 3 1
在第三次判断中a>d立,则a d互换之后这四个数变为
1 4 3 2
在第四次判断中b>c成立,则b c 互换之后这四个数变为
1 3 4 2
在第五次判断中b>d成立,则 b d 互换之后这四个数变为
1 2 4 3
在第六次判断中c>d成立,则c d 互换之后这四个数变为
1 2 3 4

对于初学者,只要用书上的东西认真分析程序中的每一步,
电脑会怎么样执行,你就怎么样想。
实在不行你可以像这样给他付上值来想,总之认真 仔细就可以了,
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-07-24
这个算法不是很好,只能用于很少几个数的排序,所以我不推荐-----
因为最后是a,b,c,d四个变量顺序输出:
// printf("%d,%d,%d,%d\n",a,b,c,d);
而题目要求的是从小到大输出,所以要把小的往前放;
之前通过两两比较确定几个数的大小关系,再通过数值的交换达到排序的目的;

总而言之你这个算法的出发点,就是要把小的数换到前面,大的数换到后面(a,b,c,d四个变量的顺序),再顺序输出,由此达到排序要求.

呵呵,是c语言新手吧,我也是前段时间才学的,加我qq:826563317
也许可以帮你讲解点东西~~~~
就这么多了~~~~~
第2个回答  2008-07-24
21世纪了,还用这种方法?
C42=6中,两个两个都比较了,肯定能排序了,那如果N很大呢??那要写多少行,多少个if?

你的程序的意思就是用abcd这四个内存空间来存放从小到大的序列;
比较一遍,如果发现排在前面的大于后面的,就把两个数值交换。
第3个回答  2008-07-25
其实他进行a=b-a;b=b-a;a=a+b这类的运算只是交换啊a,b的值而已,可以引入中间变量t,保存其中的一个值,在进行交换——必须保存原先的值后才能赋值交换!。。。。。这个题目还是用循环来做比较好。。。。
第4个回答  2008-07-24
用选择排序法啊:
#include"stdio.h"
void str(int a[]);
main()
{int a[4],i,j;
for(i=0;i<4;i++)
scanf("%d",&a[i]);
str(a);
for(i=0;i<4;i++)
printf("%4d",a[i]);
getch();
}

void str(int a[])
{int p,i,j,temb;
for(i=0;i<3;i++)
{
p=i;
for(j=i+1;j<4;j++)
{if(a[p]<a[j])p=j;}
if(p!=i)
{temb=a[p];
a[p]=a[i];
a[i]=temb;}
}
}
相似回答