8.1 题目:输入三个整数,按由小到大的顺序输出
思路:
①先定义指针变量和数组,用于存放输入的数字。
②对于数字大小的排列,利用三个if语句列出所有的可能,即第一个数最小时,第二个数最小时,第三个数最小时,分别进行位置的置换。
#include<stdio.h>
int main()
{
int *p, a[3];
int i, temp;
p = a;
printf("请输入三个整数:\n");
for (i = 0; i < 3; i++,p++)
scanf_s("%d", p);
p = a;
if (*p < *(p + 1) && *p < *(p + 2))//第一个数为最小的情况
if (*(p + 1) > *(p + 2))//若第二个数>第三个数,进行位置调换
{
temp = *(p + 2);
*(p + 2) = *(p + 1);
*(p + 1) = temp;
}
if (*(p + 1) < *p && *(p + 1) < *(p + 2))//第二个数为最小的情况
{
temp = *(p + 1);
*(p + 1) = *p;
*p = temp;
if (*(p + 1) > *(p + 2))//若第二个数>第三个数,进行位置调换
{
temp = *(p + 1);
*(p + 1) = *(p+2);
*(p+2) = temp;
}
}
if (*(p + 2) < *p && *(p + 2) < *(p + 1))//第三个数为最小的情况
{
temp = *(p + 2);
*(p + 2) = *p;
*p = temp;
if (*(p + 1) > *(p + 2))//若第二个数>第三个数,进行位置调换
{
temp = *(p + 1);
*(p + 1) = *(p + 2);
*(p + 2) = temp;
}
}
printf("由小到大排列为:");
for (i = 0; i < 3; i++,p++)
printf("%4d", *p);
return 0;
不足之处:if语句虽然简单但太麻烦,可以用选择法排序,但我没有掌握好。。或者定义一个求两数之间较小的那个数的函数,然后利用函数的递归,但是我不知道该怎么返回排序好后的数。。
改进:利用调用函数,程序更简洁了一些。
#include<stdio.h>
void swap(int* n1, int *n2)
{
int temp;
temp = *n1;
*n1 = *n2;
*n2 = temp;
}
int main()
{
int *p1, *p2, *p3;
int n1, n2, n3;
printf("请输入三个整数:\n");
scanf_s("%d%d%d",&n1,&n2,&n3);
p1 = &n1;
p2 = &n2;
p3 = &n3;
if (*p1 > *p2)swap(p1, p2);
if (*p1 > *p3)swap(p1, p3);
if (*p2 > *p3)swap(p2, p3);
printf("由小到大排列为:");
printf("%4d%4d%4d", *p1, *p2, *p3);
return 0;
}