|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
动动手 第0 题的答案有问题啊
#include <stdio.h>
int main()
{
int a, b, c;
int *d, *e, *f, *g;
printf("请输入三个数:");
scanf("%d%d%d", &a, &b, &c);
d = &a;
e = &b;
f = &c;
if (a > b)
{
g = d;
d = e;
e = g;
}
if (a > c)
{
g = d;
d = f;
f = g;
}
if (b > c)
{
g = e;
e = f;
f = g;
}
printf("%d <= %d <= %d\n", *d, *e, *f);
return 0;
}
输入a=5,b=3,c=4,打印出来结果是4<=5<=3,但是其他5种情况都可以正确输出(3个数排序总共6种组合)
我写的答案是:
#include <stdio.h>
int main()
{
int a, b, c;
int *d, *e, *f, *g;
printf("请输入三个数:");
scanf("%d%d%d", &a, &b, &c);
d = &a;
e = &b;
f = &c;
if (a > b)
{
g = d;
d = e;
e = g;
}
if (a > c)
{
g = e;
e = f;
f = g;
}
if( (a>b||a>c)&&b > c) //如果不加控制条件,对三个数排序(6种组合),a=3,b=5,c=4时输出结果为5<=3<=4,6种情况中只有b>c>a和a<b<c(这种情况直接输出结果了),b>c>a
{ //这种情况没有经过上面两个if的判断,直接判断第三个if,所以对第三个if 加了判断条件,但是我还是不太懂。
g = d;
d = e;
e = g;
}
else if (a<b&&a<c&&b>c)//最后一个if 是对b>c>a这种情况的补充,此时d指向a,e指向b,f指向c,直接调换e和f所指向的值。
{
g=e;
e=f;
f=g;
}
printf("%d <= %d <= %d\n", *d, *e, *f);
return 0;
}
|
|