|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这题是 《带你学C带你飞》的21课的动手题,第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;
- }
复制代码
但是如果输入值为:5 1 3
就得不到正确的排序了
甲鱼老师是想让我们照着运行结果写代码?如果不是,那应该怎么填呢?想了一个下午了,实在想不出来,看了答案有点懵。求大神指点。
因为小甲鱼老师给出的答案只是通过原输入的数和位置判断,但是改变指针的时候不改变原a、b、c的值,所以进行第一次互换后其实a、b、c依旧没变,只是改变了指针的指向。这里有两种方法,你可以理解下
第一种:改变判断条件,判断指针所指向的值,改变指针指向,但是不改变原值。
- #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 (*d > *e)
- {
- g = d;
- d = e;
- e = g;
- }
- if (*d > *f)
- {
- g = d;
- d = f;
- f = g;
- }
- if (*e > *f)
- {
- g = e;
- e = f;
- f = g;
- }
- printf("%d <= %d <= %d\n", *d, *e, *f);
- return 0;
- }
复制代码
第二种:改变原值,不改变指针的指向
- #include <stdio.h>
- int main()
- {
- int a, b, c, x;
- int *d, *e, *f, *g=&x; // 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;
- }
复制代码
|
|