4用指针实现:由键盘输入10个整数,将最大的调到最后,最小的调到最前。 输入 10个整数。 输出 最大的调到最后,最小的调到最前。 样例输入 复制 5876943210 样例输出 复制 0876543219
时间: 2024-10-09 16:12:05 浏览: 31
c语言关于输入输出的ppt
3星 · 编辑精心推荐
要使用指针实现这个功能,可以采用以下步骤来设计一个C语言程序:
1. 初始化:定义一个数组来存储10个整数,然后定义两个指针,一个指向数组的开始(`int* begin`),另一个指向数组的结束(`int* end`)。同时,初始化一个临时变量 `temp` 来交换数值。
2. 获取输入:循环10次,每次从键盘获取一个整数并将其插入数组中,同时更新`begin`指针。
3. 比较与交换:使用两个指针,一个从数组的开始遍历,另一个从数组的倒数第二个元素开始遍历(因为要找最大值,从后往前比)。如果发现当前元素小于指针所指的元素,就用临时变量`temp`暂存当前元素,然后交换当前位置和指针位置的元素。遍历结束后,`temp`指向的就是最大的数。
4. 将最大值移到最后:找到最大值后,将它从`end`指向的位置移动到最后,即`end--`。
5. 最小值移到最前:现在数组已经有序了,剩下的工作就是找出最小值。类似地,从`begin`开始遍历,遇到比当前元素大的元素就停止,此时`begin`所指的就是最小值。将`begin`指向的元素移到数组的第一个位置,即`begin++`。
6. 输出结果:最后,打印整个调整后的数组。
下面是一个简单的示例代码实现:
```c
#include <stdio.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int arr[10];
int begin = 0, end = 9;
int temp;
for (int i = 0; i < 10; ++i) {
scanf("%d", &arr[i]);
}
while (begin < end) {
if (arr[end] > arr[begin]) {
temp = arr[begin];
arr[begin] = arr[end];
arr[end] = temp;
--end;
} else {
++begin;
}
}
// 现在arr[0]是最小值,arr[9]是最大值
for (int i = 0, j = 9; i <= j; --j, ++i) {
if (arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
for (int i = 0; i < 10; ++i) {
printf("%d", arr[i]);
}
return 0;
}
```
阅读全文