用c语言写定义长度为3的整型数组,采用函数调用实现按照从大到小的顺序排序。在主函数中输出排序前和排序后的数组。按以下四种方法实现: (1)实参、形参为数组名; (2)实参为数组名,形参为指针变量; (3)实参为指针变量,形参为数组名; (4)实参为指针变量,形参为指针变量。
时间: 2024-03-20 15:43:33 浏览: 114
6_1.rar_数组、函数
好的,下面是四种实现方式的代码:
(1)实参、形参为数组名:
```c
#include <stdio.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void sort_array(int a[]) {
if (a[0] < a[1]) {
swap(&a[0], &a[1]);
}
if (a[0] < a[2]) {
swap(&a[0], &a[2]);
}
if (a[1] < a[2]) {
swap(&a[1], &a[2]);
}
}
int main() {
int a[3] = {2, 1, 3};
printf("排序前的数组为:%d %d %d\n", a[0], a[1], a[2]);
sort_array(a);
printf("排序后的数组为:%d %d %d\n", a[0], a[1], a[2]);
return 0;
}
```
(2)实参为数组名,形参为指针变量:
```c
#include <stdio.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void sort_array(int* a) {
if (a[0] < a[1]) {
swap(&a[0], &a[1]);
}
if (a[0] < a[2]) {
swap(&a[0], &a[2]);
}
if (a[1] < a[2]) {
swap(&a[1], &a[2]);
}
}
int main() {
int a[3] = {2, 1, 3};
printf("排序前的数组为:%d %d %d\n", a[0], a[1], a[2]);
sort_array(a);
printf("排序后的数组为:%d %d %d\n", a[0], a[1], a[2]);
return 0;
}
```
(3)实参为指针变量,形参为数组名:
```c
#include <stdio.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void sort_array(int a[3]) {
if (a[0] < a[1]) {
swap(&a[0], &a[1]);
}
if (a[0] < a[2]) {
swap(&a[0], &a[2]);
}
if (a[1] < a[2]) {
swap(&a[1], &a[2]);
}
}
int main() {
int a[3] = {2, 1, 3};
printf("排序前的数组为:%d %d %d\n", a[0], a[1], a[2]);
sort_array(a);
printf("排序后的数组为:%d %d %d\n", a[0], a[1], a[2]);
return 0;
}
```
(4)实参为指针变量,形参为指针变量:
```c
#include <stdio.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void sort_array(int* a0, int* a1, int* a2) {
if (*a0 < *a1) {
swap(a0, a1);
}
if (*a0 < *a2) {
swap(a0, a2);
}
if (*a1 < *a2) {
swap(a1, a2);
}
}
int main() {
int a[3] = {2, 1, 3};
printf("排序前的数组为:%d %d %d\n", a[0], a[1], a[2]);
sort_array(&a[0], &a[1], &a[2]);
printf("排序后的数组为:%d %d %d\n", a[0], a[1], a[2]);
return 0;
}
```
这四种实现方式本质上都是一样的,只不过形式略有不同。在排序时,我们依次比较三个数的大小,然后调用 `swap` 函数来进行交换,最终得到从大到小排序的数组。其中第一种和第三种方式是等价的,第二种和第四种方式也是等价的。
阅读全文