输入 3 个整数,按由小到大的顺序输出
本题只需要两两比较两个数的大小,需要用指针来完成,我们定义三个指针变量,存放三个变量的地址,用指针解引用之后比较然后排序即可
比较的思路是:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
int* pmin = &a;
int* pmid = &b;
int* pmax = &c;
int* temp = NULL;
scanf("%d %d %d", &a, &b, &c);
if (*pmin > *pmid)
{
temp = pmin;
pmin = pmid;
pmid = temp;
}
if (*pmin > *pmax)
{
temp = pmin;
pmin = pmax;
pmax = temp;
}
if (*pmid > *pmax)
{
temp = pmid;
pmid = pmax;
pmax = temp;
}
printf("%d %d %d", *pmin, *pmid, *pmax);
return 0;
}
运行结果如下:
输入 3 个字符串,按由小到大的顺序输出
本题是按照首字符大小进行排序输出
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
char s1[100] = { 0 };
char s2[100] = { 0 };
char s3[100] = { 0 };
gets(s1);
gets(s2);
gets(s3);
char* temp = NULL;
char* pmin = s1;
char* pmid = s2;
char* pmax = s3;
if (strcmp(pmin, pmid) > 0)
{
temp = pmin;
pmin = pmid;
pmid = temp;
}
if (strcmp(pmin, pmax) > 0)
{
temp = pmin;
pmin = pmax;
pmax = temp;
}
if (strcmp(pmid, pmax) > 0)
{
temp = pmid;
pmid = pmax;
pmax = temp;
}
printf("%s\n", pmin);
printf("%s\n", pmid);
printf("%s\n", pmax);
return 0;
}
运行结果如下:
输入 10 个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:
(1) 输人 10 个数;
(2) 进行处理;
(3)输出 10 个数
首先先处理输入函数
然后优先处理输出函数(因为最后的最难,放在最后解决)
最后处理交换
题目要求其中最小的数与第一个数对换,把最大的数与最后一个数对换
但是可能会出现一个问题,假如首元素地址就是最大值,即max就是arr的时候,那么在进行最小值的互换时,会把max的值给互换掉,此时max指向的arr[0]就不是最大值了,所以会导致最大值没有成功排序。如下图
进行pmin的交换后如下图:
然后再进行pmax交换
最终的运行结果为:
解决办法:将pmin传给pmax,如下图
执行完pmin和第一个数交换后,就会把最大值交换到pmin和pmax所指向的地址
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void input(int* arr, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
scanf("%d", (arr + i));
}
}
void handle(int* arr, int sz)
{
int i = 0;
int* pmin = arr;
int* pmax = arr;
for (i = 0; i < sz; i++)
{
if (*(arr + i) < *pmin)
{
pmin = arr + i;
}
if (*(arr + i) > *pmax)
{
pmax = arr + i;
}
}
if (pmax == arr)
{
pmax = pmin;
}
int temp = 0;
temp = *pmin;
*pmin = *arr;
*arr = temp;
temp = *pmax;
*pmax = *(arr + sz - 1);
*(arr + sz - 1) = temp;
}
void output(int* arr, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", *(arr + i));
}
}
int main()
{
int arr[10] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
input(arr, sz);
handle(arr, sz);
output(arr, sz);
return 0;
}
运行结果如下: