C语言 有3个数a,b,c,要求按大小顺序把它们输出。

#include <stdio.h>
int main()
{
int a,b,c,d;
scanf("%d,%d,%d\n",&a,&b,&c);
if(b>a)
{d=a;
a=b;
b=d;
}
if(c>a)
printf("%d,%d,%d\n",c,a,b);
else
{
if(b<c) printf("%d,%d,%d\n",a,c,b);
else printf("%d,%d,%d\n",a,b,c);
}
return 0;
}

请问哪里出错了???

下面介绍两种解题方法

1.用if else语句求解:

#include<stdio.h>

int main()

{

int a,b,c,x;

scanf("%d %d %d",&a,&b,&c);

if(a>b){x=a;a=b;b=x;}

if(a>c){x=a;a=c;c=x;}

if(b>c){x=b;b=c;c=x;}

printf("%d %d %d\n",a,b,c);

return 0;

}

2.用数组求解:

#include<stdio.h>

int main()

{

int a,b,c,t;

printf("请输入三个整数:\n");

scanf("%d\t%d\t%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\n", c);

printf("将这三个数按从大到小的顺序排列为:%d\t%d\t%d\n", c, b, a);

return 0;

}

扩展资料

上述过程中我们用到了数组的知识,数组使用需要注意的是:


1) 数组中每个元素的数据类型必须相同,对于int a[4];,每个元素都必须为 int。

2) 数组长度 length 最好是整数或者常量表达式

3) 访问数组元素时,下标的取值范围为 0 ≤ index < length,

4) 数组是一个整体,它的内存是连续的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-26

花了点时间看了四楼大哥的,然后自己试了能排列出来的语句,成功了,挺开心,也发一下吧

void main()
{
int a, b, c, max;
printf("请输入三个数:\n");
scanf_s("%d,%d,%d", &a, &b, &c);
printf("%d,%d,%d", a > (b > c ? b : c) ? a : (b > c ? b : c), (a > (b > c ? b : c) ? (b > c ? b : c) : a) > (b > c ? c : b) ? (a > (b > c ? b : c) ? (b > c ? b : c) : a) : (b > c ? c : b), (a > (b > c ? b : c) ? (b > c ? b : c) : a) > (b > c ? c : b) ? (b > c ? c : b) : (a > (b > c ? b : c) ? (b > c ? b : c) : a));
}

注:a>b?a:b  的意思是a>b成立值是a,不成立表达式值为b

纯粹瞎试试,推荐还是分步慢慢来的比较靠谱,比较简洁

第2个回答  2006-03-14
晕,这题C语言课本上有,你不会?我给你抄过来吧。
输入3个数a,b,c,要求按由小到大的顺序输出;
用伪代码写出解此题的算法:
if a>b 将a和b对换 (a是a,b中的小者)
if a>c 将a和c对换 (a是a,c中的小者,因此a是三者中最小者)
if b>c 将b和c对换 (b是b,c中的小者,也是三者中次小者)
然后顺序输出a,b,c即可。
按此算法编写程序:
main()
{
float a,b,c,t;
scanf("%f,%f,%f",&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;} /*实现a和b的互换*/
if(a>c)
{t=a;a=c;c=t;} /*实现a和c的互唤*/
if(b>c)
{t=b;b=c;c=t;] /*实现b和c的互换*/
printf("%5.2f,%5.2f,%5.2f\n",a,b,c);
}
运行情况如下:3,7,1 ↓
1.00,3.00,7.00
下面是我的点津:
3者比较就是两两比较综合处理,两两比较实现互换要通过中间变量t,即如果a>b,按从小到大排列则把a放在t中,然后把b放在a中,最后再把a取出放在b中,用C语言说就是赋职号=。按大小顺序排列只须把a>b,a>c,b>c改为a<b,a<c,b<c即可。

看了5楼的程序我有些惭愧,确实,程序就应该这么写,程序的好坏得看执行效率,自己只顾课本了。。。不过楼下好像写错了吧,题目是要求按大小顺序输出,不是输出最大值。这个题用条件表达式实现并不简练。还请楼下考虑一个可行的指教一下。多谢了。在下愚钝。
第3个回答  推荐于2017-11-24
#include <stdio.h>
int main()
{
int a,b,c,d;
printf("请输入三个数:");
scanf("%d,%d,%d",&a,&b,&c);
if(b>a)
{
d=a;
a=b;
b=d;
}
if(c>a)
printf("%d,%d,%d\n",c,a,b);
else
{
if(b<c) printf("%d,%d,%d\n",a,c,b);
else printf("%d,%d,%d\n",a,b,c);
}
return 0;
}
改过来了,可以了追问

可以告诉我错的地方么?

追答

scanf输入格式里最后不需要\n

本回答被提问者采纳
第4个回答  2012-01-20
你错在逻辑不够清楚。你用的这个方法比较简单直接,但是思路一定要清楚。
你上面只知道b>a,但是b<a没有。
#include <stdio.h>
main()
{
int a,b,c;
scanf("%d,%d,%d\n",&a,&b,&c);
if(b>a) //b>a
{if(c>b) //c>b
printf("%d,%d,%d\n",c,b,a);
else //c<b
{
if(a<c) printf("%d,%d,%d\n",b,c,a);
else
printf("%d,%d,%d\n",b,a,c);
}
}
else //b<a
if(a<c) printf("%d,%d,%d\n",c,a,b);
else //a>c
{if(b<c) printf("%d,%d,%d\n",a,c,b);
else
printf("%d,%d,%d\n",a,b,c);
}
}