#include "stdio.h" #define n 10 void fun(int *a[n]) { int i,j,*temp; for(i=0;i<n/2;i++) { temp=*(a+i);*(a+i)=*(a+n-i);*(a+n-i)=temp; } } int main() { int *a[n],i; printf("输入数:\n"); for(i=0;i<n;i++) { scanf("%d",*(a+i)); } fun(a); printf("\n输出:"); for(i=0;i<n;i++) { printf("%d\t",*(a+i)); } }哪里出错
时间: 2024-03-03 21:49:16 浏览: 247
这段代码存在几个问题:
1. 在输入数的时候,应该使用 & 操作符获取输入的数的地址,而不是直接将其赋值给 *(a+i)。
2. 在函数 fun 中进行交换时,交换的是 *(a+i) 和 *(a+n-i),而应该交换的是 *(a+i) 和 *(a+n-i-1),因为数组下标是从 0 开始的。
3. 在输出数的时候,同样应该使用 *(a+i) 来输出,而不是直接将其作为整体输出。
下面是修改过的代码:
```
#include "stdio.h"
#define n 10
void fun(int *a[n]) {
int i, *temp;
for(i = 0; i < n / 2; i++) {
temp = *(a+i);
*(a+i) = *(a+n-i-1);
*(a+n-i-1) = temp;
}
}
int main() {
int *a[n], i;
printf("输入数:\n");
for(i = 0; i < n; i++) {
scanf("%d", a+i);
}
fun(a);
printf("\n输出:");
for(i = 0; i < n; i++) {
printf("%d\t", *(a+i));
}
return 0;
}
```
需要注意的是,这段代码仅适用于整型数组的倒序排列,对于其他类型的数组或者其他排序方式,需要根据具体情况进行修改。
相关问题
完成以下C语言代码功能:将主函数中输入的字符串反序存放。#include<stdio. h> #include<conio. h> #include(string. h> #define N 50 void fun(char *str, int n)
我可以提供一个示例代码:#include <stdio.h>
#include <string.h>int main ()
{
char str[100], temp;
int i, j; printf("输入一个字符串: ");
gets(str); j = strlen(str) - 1; for (i = 0; i < j; i++, j--)
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
} printf("反序后的字符串: %s", str); 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;
}
```
阅读全文