#include "stdio.h" #include "stdlib.h" #define n 5 int fun(int **p) { int i,j,k,*temp; for(i=0;i<n;i++) { k=i; for(j=i+1;j<n;j++) { if(*(p+i)>*(p+j)) k=j; } if(k!=i) { temp=*(p+i); *(p+i)=*(p+k); *(p+k)=temp; } } return **p; } int main() { int *a=malloc(n*sizeof(int)); printf("please enter:\n"); for(int i=0;i<n;i++) { scanf("%d",&(*(a+i))); } *a=fun(&a); printf("排序后:\n"); for(int i=0;i<n;i++) printf("%d ",*(a+i)); return 0; }
时间: 2024-04-27 12:19:39 浏览: 75
这是一段 C 语言代码,实现了对输入的一维数组进行选择排序,并输出排序后的结果。通过调用 `fun` 函数来实现排序,`fun` 函数的参数是一个指向指针的指针,表示一个二维数组,但是在本程序中实际上只使用了一维数组,因此可以简化代码。具体来说,`fun` 函数中的双重循环实现选择排序的核心部分,通过比较数组中元素的大小来交换它们的位置,最后返回排序后的数组的第一个元素的值。在 `main` 函数中,首先动态分配了一个长度为 5 的一维数组 `a`,然后通过循环读入 5 个整数,并将它们存储到数组 `a` 中。接着调用 `fun` 函数来对数组 `a` 进行排序,然后输出排序后的结果。值得注意的是,代码中使用了指针来传递数组参数,这样可以减少函数调用中的内存开销,提高程序的效率。
相关问题
对这段代码进行改错#include <conio.h> #include <stdio.h> #include <stdlib.h> #define N 20 /**********FOUND**********/ void fun( int a, int n ) { int i, j, k, t ; for ( j = 0; j < n-1; j++) { k = j; for ( i = j + 1; i < n ; i++ ) /**********FOUND**********/ if ( a [i] < a[k] ) k = i; t = a[j] ; a[j] = a[k]; a[k] = t; } }
有两处错误需要进行改正:
1. 第一个错误是参数a应该是一个指针类型,而不是一个整型变量。因为如果传递的是一个整型变量,函数内部无法通过指针访问数组元素。因此需要将参数a修改为int a[]或者int *a。
2. 第二个错误是函数定义时缺少了返回值类型,应该将void fun修改为void。
修改后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 20
void fun(int a[], int n) {
int i, j, k, t;
for (j = 0; j < n-1; j++) {
k = j;
for (i = j + 1; i < n; i++) {
if (a[i] < a[k]) {
k = i;
}
}
t = a[j];
a[j] = a[k];
a[k] = t;
}
}
int main() {
int a[N], i;
for (i = 0; i < N; i++) {
a[i] = rand() % 100;
printf("%d ", a[i]);
}
printf("\n");
fun(a, N);
for (i = 0; i < N; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
```
#include "stdio.h" #include "stdlib.h" #define n 5 void fun(int **p) { int i,j,k,*temp; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { if(*(p+i)>*(p+j)) { temp=*(p+i); *(p+i)=*(p+j); *(p+j)=temp; } } } printf("排序后:\n"); for(i=0;i<n;i++) printf("%d\t",**(p+i)); } int main() { int *a=malloc(n*sizeof(int)); printf("please enter:\n"); for(int i=0;i<n;i++) { scanf("%d",&(*(a+i))); } fun(&a); return 0; }哪里有错误
代码中存在一些错误。首先,在 `fun` 函数中,比较两个指针时应该使用 `*` 运算符,即 `*(p+i) > *(p+j)`。其次,在 `fun` 函数中,交换两个指针时应该使用 `*` 运算符,即 `temp = *(p+i); *(p+i) = *(p+j); *(p+j) = temp;`。最后,在 `main` 函数中,应该将 `a` 作为指针传递给 `fun` 函数,即 `fun(&a);` 应改为 `fun(&&a);`。修改后的代码如下:
```c
#include "stdio.h"
#include "stdlib.h"
#define n 5
void fun(int ***p) {
int i,j,*temp;
for(i=0;i<n;i++) {
for(j=i+1;j<n;j++) {
if(*(*p+i) > *(*p+j)) {
temp = *(*p+i);
*(*p+i) = *(*p+j);
*(*p+j) = temp;
}
}
}
printf("排序后:\n");
for(i=0;i<n;i++) printf("%d\t",*(*p+i));
}
int main() {
int *a=malloc(n*sizeof(int));
printf("请输入:\n");
for(int i=0;i<n;i++) {
scanf("%d",&(*(a+i)));
}
fun(&a);
return 0;
}
```
阅读全文