C程序,给四个数排序,源程序哪里错了?

来源:百度知道 编辑:UC知道 时间:2024/06/17 18:27:31
#include <stdio.h>
void main()
{
int a,b,c,d,e,f,g,h,x;
printf("请输入第1个数:");
scanf("%d",&a);
printf("请输入第2个数:");
scanf("%d",&b);
printf("请输入第3个数:");
scanf("%d",&c);
printf("请输入第4个数:");
scanf("%d",&d);
(a>b)? (e=b,f=a): (e=a,f=b);
(c>e)? (e=e,g=c): (g=e,e=c);
(f>g)? (x=f,f=g,g=x): (g=g,f=f);
(d>e)? (e=e,h=d): (goto loop1);
(h>f)? (h=h,f=f): (goto loop2);
(g>h)? (goto loop3): (goto loop4);
loop1: printf("从小到大顺序为:%d,%d,%d,%d\n",d,e,f,g);goto loop5;
loop2: printf("从小到大顺序为:%d,%d,%d,%d\n",e,h,f,g);goto loop5;
loop3: printf("从小到大顺序为:%d,%d,%d,%d\n",e,f,h,g);goto loop5;
loop4: printf("从小到大顺序为:%d,%d,%d,%d\n",e,f,g,h);goto loop5;
loop5: continue;
}

你这种排序思路混乱,停靠的是列举式的排列方式,这对3个数以下的排序还可以,4个以上的就不好用的,容易错,可以用冒泡,选择法什么的来排
例:冒泡法
main()
{
int a[5];
int i,j,t;
printf("input 4 numbers ;\n");
for(i=1;i<5;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=1;j<=3;j++)
for(i=1;i<=4-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the sorted numbers ;\n");
for(i=1;i<5;i++)
printf("%d",a[i]);
}

选择法我就不写程序了 思路就是循环比较,找出最大(或最小的)按顺序排列

很少人这样写的,你可以参考排序算法啊,比如冒泡排序,直接排序,二分法排序等等。。在vc里编译报告goto错误, continue非法.
经过分析,好像是因为(h>f)? (h=h,f=f): (goto loop2);
中的 :分号表达式是属于赋值语句,要求两边的表达式必须是赋值语句,goto是跳转语句,所以是语法非法。goto语句不能放在这里。
而continues不能用在这里,要改成return;因为程序结束了