1

私はcの初心者です。配列を関数のパラメーター、引数として使用する方法、または関数から配列を返す方法があまりわかりません。私の知る限り、以下のコードは正常に動作するはずです。しかし、私は問題がどこにあるのかわかりません。機能が正常に動作していません。

//reversing an array using function
#include<stdio.h>
void rev(int array[],int length)
{
    int k,j,temp;
    for(k=length-1,j=0;k>=0&&j<length;k--,j++){
        temp=array[k];
        array[k]=array[j];
        array[j]=temp;
    }
}
int main()
{
    int c,arr[]={1,2,3,4,5,6,7,8,9};
    rev(arr,9);
    for(c=0;c<9;c++){
        printf("%d ",arr[c]);
    }
    return 0;
}
4

3 に答える 3

3

配列の中央まで移動するだけで済みます。さらに移動する場合は、配列を元に戻します。

したがって、この:

for(k=length-1,j=0;k>=0&&j<length;k--,j++){

次のようにする必要があります。

for(k=length-1,j=0;k > j;k--,j++){
于 2012-08-06T08:45:00.863 に答える
0

配列に問題はありません。アルゴリズムに問題があります。// 関数を使用して配列を反転

#include<stdio.h>
void rev(int array[],int length)
{
    int k,j,temp;
    for(k=length-1,j=0;k>=0 && j<length / 2; k--,j++){
        temp=array[k];
        array[k]=array[j];
        array[j]=temp;
    }
}

この逆配列。あなたのアルゴリズムはそれを 2 回反転させます。したがって、条件に /2 を追加するだけです。

于 2012-08-06T08:55:03.307 に答える
0

リバースを 2 回行っているように見えます。

つまり、開始要素と終了要素をすぐに交換し、反復の最後に再度交換します。つまり、同じ配列になります。

次のいずれかを実行できます。

  1. アレイの途中でのみスワップを実行するか、または
  2. 最初の配列とは逆に2番目の配列にデータを入力します(元の配列に再データを入力するかどうかはわかりませんが、コピーして戻す必要がある場合があります)
于 2012-08-06T08:47:50.647 に答える