数组排序没输出怎么改


#include <stdio.h>
#include <stdlib.h>


int main()
{
    int arr1[10]={4,5,6,2,9,7,1,3,2,8};

   // printf("%d\n",search(arr1,4));

    //delete(arr1,0);


    //printf("\n");


    sort(arr1);

    print(arr1)

    //creat(4);


    return 0;
}



int creat(int n){

int arr[n];
for(int i=0;i<n;i++)
{
    scanf("%d",&arr[i]);
}
for(int i=0;i<n;i++)
printf("%d",arr[i]);
}



int search(int arr[],int n){
    int length = sizeof(arr);
  for(int i=0;i<length;i++){
        if(arr[i]==n){
            return i;
        }
  }
}



void delete(int arr[],int n){

   int length =sizeof(arr);

 for(int i=n;i<=length;i++){
        arr[i]=arr[i+1];
}
//length=length-1;
 for(int i=0;i<=length;i++){
    printf("%d",arr[i]);
 }

}




void sort(int arr[]){
    int length =sizeof(arr);
    int temp=0;
    for(int i=0;i<length-1;i++){

        for(int j=0;j<=length-1-i;j++){

       if(arr[j]>arr[j+1]){

        temp=arr[j];

        arr[j]=arr[j+1];

        arr[j+1]=temp;
       }

       }

}


void print(int arr[]){
int length=sizeof(arr);

for(int i=0;i<length;i++){

    printf("%d\n",arr[i]);
}



}


}

指针传递的问题,你传递了数组指针,在函数内部sizeof得到的的是指针的长度,不是数组的长度。
解决方法:

71void sort(int arr[])
改成
void sort(int *arr,int len)
print也都存在相同问题。
调用第18行地方改成 
sort(arr1,sizeof(arr1));


如果解决您的问题,请采纳,谢谢。

int length =sizeof(arr); 函数中arr退化为指针了,得不到数组尺寸。

【以下回答由 GPT 生成】

问题描述: 给定的C代码中,排序和打印数组的函数没有进行正确的输出。请修改代码,使其能够正确排序并打印数组元素。

问题解决方案如下所示:

#include <stdio.h>
#include <stdlib.h>

void creat(int arr[], int n) {
    for(int i=0; i<n; i++) {
        scanf("%d", &arr[i]);
    }
}

int search(int arr[], int n, int length) {
    for(int i=0; i<length; i++) {
        if(arr[i]==n) {
            return i;
        }
    }
    return -1; // 如果未找到,返回-1
}

void delete(int arr[], int n, int length) {
    int i;
    for(i=n; i<length-1; i++) {
        arr[i] = arr[i+1];
    }
    arr[length-1] = 0; // 最后一个元素置为0
}

void sort(int arr[], int length) {
    int temp=0;
    for(int i=0; i<length-1; i++) {
        for(int j=0; j<length-1-i; j++) {
            if(arr[j]>arr[j+1]) {
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
}

void print(int arr[], int length) {
    for(int i=0; i<length; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main()
{
    int arr1[10]={4,5,6,2,9,7,1,3,2,8};
    int length = sizeof(arr1) / sizeof(arr1[0]);

    sort(arr1, length);
    print(arr1, length);

    int arr2[10];
    creat(arr2, length);
    sort(arr2, length);
    print(arr2, length);

    int index = search(arr2, 6, length);
    printf("Index: %d\n", index);

    delete(arr2, index, length);
    print(arr2, length-1);

    return 0;
}

解决方案解释: 1. 将 creat 方法用作创建数组,并接受一个数组和其大小作为参数。使用scanf函数在循环中逐个输入数组元素,并使用%d作为格式化字符串。然后,使用printf函数打印出数组元素。 2. search 方法用于在数组中查找给定的元素,并返回它的索引。循环遍历数组,如果找到相应的元素,则返回索引。如果循环结束后未找到相应的元素,则返回-1. 3. delete 方法用于删除数组中给定索引的元素。将给定索引后面的元素前移一个位置,并将最后一个元素置为0. 4. 修改sort方法,将数组和数组长度作为参数传递进去。计算数组长度的方法是sizeof(arr) / sizeof(arr[0])。在冒泡排序算法中,循环的上界由length-1确定。 5. 修改print方法,以便循环遍历整个数组,并使用printf函数按照预定格式打印数组元素。 6. 在main函数中,首先对arr1数组进行排序并打印输出。然后,通过调用creat方法,动态输入arr2数组的元素。再次对arr2数组进行排序并打印输出。接下来,使用search方法查找6在arr2中的索引,并打印输出。最后,使用delete方法删除找到的元素,并打印输出删除后的数组。

以上是解决问题的具体步骤和解释,希望对你有帮助。如果还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^