C语言用指针实现:从键盘输入十个整数,将最大的调到最后,最小的调到最前
时间: 2024-10-15 08:09:21 浏览: 29
2016级信息学院《〈C语言程序设计〉》考试试题(A)1
在C语言中,你可以使用指针和数组结合来实现这个功能。这里是一个简单的步骤:
1. 首先,创建一个动态大小的整型数组,用于存储输入的十位整数。
```c
int *arr = NULL;
size_t size = 0; // 存储元素的数量
```
2. 接着,从键盘输入十个整数,并将它们添加到数组中。由于我们不确定输入的具体数值,可以使用循环并检查用户是否输入结束标志(如-1)。
```c
while (true) {
int num;
scanf("%d", &num);
if (num == -1) break;
arr = realloc(arr, (size + 1) * sizeof(int)); // 动态扩容
arr[size++] = num;
}
```
3. 确定最大值和最小值的指针,通常可以用第一个元素作为初始比较点,然后遍历整个数组找到最大值和最小值的索引。
```c
int max_index = 0, min_index = 0;
for (size_t i = 1; i < size; i++) {
if (arr[i] > arr[max_index]) {
max_index = i;
}
if (arr[i] < arr[min_index]) {
min_index = i;
}
}
```
4. 最后,交换最大值和最小值的位置,再将剩余的数据按顺序调整。
```c
if (max_index != 0) {
int temp = arr[max_index];
arr[max_index] = arr[0];
arr[0] = temp;
temp = max_index;
max_index = min_index;
min_index = temp;
}
// 如果还有其他元素需要调整
for (size_t i = 0; i < size; i++) {
if (i != min_index && i != max_index) {
for (size_t j = i + 1; j < size && arr[j] < arr[i]; j++) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
```
5. 别忘了释放额外分配的内存,如果之前有动态扩容的话。
```c
free(arr);
arr = NULL;
```
阅读全文