在C编程中反转前n个数字的数组

时间:2015-04-08 23:07:22

标签: c arrays reverse

我的功能正在进入无限循环。问题是要反转数组的前n个整数:数组{2,4,1,3}将反转为{4,2,1,3},因为第一个数字是2,它会切换前2个数字等等。

有什么想法吗? :)

我的代码:

int *reverse(int *arr,int n)
{
    int w; 
    int q=arr[0]-1; 
    int first_value = arr[0];

    for(w=0; w<=first_value; w++) 
    {
        arr[w] = arr[q];
        q--;
    }

    return (arr); 
}

3 个答案:

答案 0 :(得分:1)

int *reverse(int *arr,int n){
    int i, temp;

    for(i = 0; i < --n ; i++){
        temp = arr[i];
        arr[i] = arr[n];
        arr[n] = temp;
    }

    return arr;
}

答案 1 :(得分:1)

您尝试反转子阵列两次,但无法交换元素并向前迈出一步。你应该停在阵列的中间位置:

int *reverse(int *arr, int n) {
    int w, q = arr[0];
    if (q > n) {
        /* handle this error! */
        return NULL;
    }
    for (w = 0; w < --q; w++) {
        int e = arr[w];
        arr[w] = arr[q];
        arr[q] = e;
    }
    return arr;
}

答案 2 :(得分:-1)

这是反转前n个数字的代码

#include <stdio.h>
int main(){
int arr [10] = {5,2,3,4,5,6,7,8,9,10};
int i,n=arr[0];
for (i=0; i<n--; ++i){
    int temp = arr[i];
    arr[i]=arr[n];
    arr[n] = temp;

       }
           for (i=0; i<10; ++i){
    printf("%d ",arr[i]);

       }}