用C语言指针完成下列要求编写一个程序,将3个数由小到大排序。可以把两个数交换编写成自定义函数,如果用变量名作为函数参数,参数传递是单向的,形参数据交换了但实参仍然不变。
时间: 2024-09-12 16:11:29 浏览: 37
在C语言中,由于函数参数传递的是值拷贝而不是地址,所以如果你想要通过函数改变实参的值,你需要显式地使用指针。这里是一个简单的例子,我们将创建一个自定义函数`swap`,它接受指向整数的指针,并交换它们的值。然后我们再创建一个主函数`sort`来对三个数进行排序。
```c
#include <stdio.h>
// 自定义函数,接收两个整数指针并交换他们的值
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 主函数,用于排序3个数
void sort(int arr[], int n) {
if (n <= 1)
return;
// 选择第一个元素作为最小值
int min_index = 0;
for (int i = 1; i < n; i++) {
if (arr[i] < arr[min_index])
min_index = i;
}
// 将最小值与第一个位置的元素交换
swap(&arr[0], &arr[min_index]);
// 对剩余的元素递归调用 sort 函数
sort(arr, n - 1);
}
int main() {
int numbers[] = {5, 2, 8};
int length = sizeof(numbers) / sizeof(numbers[0]);
printf("Before sorting: ");
for (int i = 0; i < length; i++)
printf("%d ", numbers[i]);
sort(numbers, length);
printf("\nAfter sorting: ");
for (int i = 0; i < length; i++)
printf("%d ", numbers[i]);
return 0;
}
```
当你运行这个程序时,它会打印出未排序和排序后的数组。注意,这里的`swap`函数确实改变了输入数组的实际值,即使它是通过指针传递过去的。
阅读全文