|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
S1E21:指针 | 课后测试题及答案
https://fishc.com.cn/thread-71653-1-1.html
(出处: 鱼C论坛)
动动手第0题,我复制了小甲鱼给的答案:
#include <stdio.h>
int main(void)
{
int a, b, c, t;
int *pa, *pb, *pc;
printf("请输入三个数:");
scanf("%d%d%d", &a, &b, &c);
pa = &a;
pb = &b;
pc = &c;
if (a > b)
{
t = *pa;
*pa = *pb;
*pb = t;
}
if (a > c)
{
t = *pa;
*pa = *pc;
*pc = t;
}
if (b > c)
{
t = *pb;
*pb = *pc;
*pc = t;
}
printf("%d <= %d <= %d\n", *pa, *pb, *pc);
printf("%d <= %d <= %d\n", a, b, c);
return 0;
}
(见图片)
为什么会这么奇怪??
本帖最后由 jackz007 于 2024-10-20 18:49 编辑
如果键盘输入语句这样写:
- scanf("%d%d%d", &a, &b, &c) ;
复制代码
那么,键盘输入必须是这样:
就是说,1 5 3 之间的分隔字符是空格,不可以使用逗号
如果键盘输入语句是这样写的:
- scanf("%d,%d,%d", &a, &b, &c) ;
复制代码
那么,键盘输入才可以这样:
通常情况下,为了避免不必要的麻烦,应该尽量选择前者,也就是以空格作为输入分隔符。
此外,利用三目运算符可以大幅度简化代码:
- #include <stdio.h>
- int main(void)
- {
- int a, b, c, t ;
- int *pa, *pb, *pc ;
-
- printf("请输入三个数:") ;
- scanf("%d%d%d", &a, &b, &c) ;
-
- pa = (a < b && a < c) ? & a : (b < a && b < c) ? & b : & c ;
- pc = (a > b && a > c) ? & a : (b > a && b > c) ? & b : & c ;
- pb = (b + c == * pa + * pc) ? & a : (a + c == * pa + * pc) ? & b : & c ;
-
- printf("%d <= %d <= %d\n", *pa, *pb, *pc) ;
- return 0;
- }
复制代码
编译、运行实况:
- D:\[exercise]\C>cl x.c
- 用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.31.31107 版
- 版权所有(C) Microsoft Corporation。保留所有权利。
- x.c
- Microsoft (R) Incremental Linker Version 14.31.31107.0
- Copyright (C) Microsoft Corporation. All rights reserved.
- /out:x.exe
- x.obj
- D:\[exercise]\C>x
- 请输入三个数:1 5 3
- 1 <= 3 <= 5
- D:\[exercise]\C>
复制代码
|
-
运行结果
|