|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这题要求我们补充被抹去的代码,补充完成之后如下:
#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;
}
对于上面的代码我有2点不是很清楚。第一点是怎么理解这三个if中的内容?
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)?
指针好难,感觉好多听不懂看不懂
第一点,这三个if语句是用来进行三个整数的排序操作的,采用的是简单的冒泡排序算法。其中,指针 *pa, *pb, *pc 分别存放了变量 a, b, c 的地址。
在第一个if中,if(a>b),是比较输入的两个数a和b的大小。如果a>b,那么会执行大括号中的语句,交换*pa(也就是a)和*pb(也就是b)的值,保证a的值小于b的值。
第二个if和第一个if的逻辑一样,只不过这次比较的是a和c,交换的是*pa和*pc的值,这样就保证了a的值是最小的。
最后,第三个if是用来比较剩下的两个数b和c的大小,交换*pb和*pc的值,这样就保证了b的值小于c的值。
所以,通过这三个if语句,可以将三个整数从小到大排序。
第二点,关于程序末尾的两个printf语句,其实它们打印的内容是一样的,只是表达方式不同。printf("%d <= %d <= %d\n", *pa, *pb, *pc) 是以指针的方式打印这三个数,而printf("%d <= %d <= %d\n", a, b, c) 是直接打印这三个数。因为在上面的if语句中已经对a,b,c的值进行了操作,所以*pa,*pb,*pc的值和a,b,c的值是一样的。这里写两个printf语句可能是为了帮助你理解和区分直接变量和指针变量的区别。
学习指针确实比较困难,但是只要多做一些练习,慢慢理解它的工作原理,你会发现它是一个非常强大和有用的工具。希望我的解答能帮到你,如果还有其他问题,请随时提问。
|
|