2017-04-07 24 views
0

配列内の要素を1右に正しくシフトする方法がわかりません。配列は[1 ,2, 3, 4, 5]に初期化されています。だから私がシフトすると、結果は[2, 3, 4, 5, 1]になるはずですが、それは[2, 3, 4, 5, 0]として出てきます。なぜそうはわかりません。ここに私がこれまで持っていたものがあります -配列内の要素を右にシフトする1

for(k = 0; k <= n - 1; k++){ 
    array[k] = array[k+1]; 
    } 

    printf("Array is now:\n"); 
    k = 0; 
    while(k < n) { 
     printf("x[%d] = %f\n", k, array[k]); 
     k++; 
    } 

結果が縦に印刷されます。

+2

最初の要素のコピーは保存しません。そして、 'k + 1 == n - 1 + 1 == n 'なので' k'が 'n-1'なら配列境界から読み出すので、' array [n] 'はすべてです。 – StoryTeller

+1

適切な関数を書くことをお勧めします。これは配列をシフトしたものとして解釈します。実際にシフトする要素は、大規模な配列にとって高価になります。彼らが比較的小さいと保証されているなら、どんな作品でも自由に行くことができます。 – Downvoter

+0

コンパイラの警告C4477: 'printf':フォーマット文字列 '%f'には 'double'型の引数が必要ですが、可変引数2には 'int'型があります。私は* 'array'が' int'だったと仮定して、MCVEを供給してください。 –

答えて

0

これは、1だけ右シフトするための基本コードです。あなたが右シフトするために任意のインデックスで動作することができる一般的なコードをしたい場合、私は変数を使用することをお勧めします。

//array elements are from index 0 to n-1 

int tempData = array[0]; // if right shift is only by 1 
for(k = 0; k < n-1; k++){ 
    array[k] = array[k+1]; 
} 

array[n-1] = tempData; //reinstall the value of first index to last index 
printf("Array is now:\n"); 
k = 0; 
while(k < n) { 
    printf("x[%i] = %d\n", k, array[k]); 
    k++; 
} 
+3

これは、アウトオブバウンド配列から*を読み込みます。これにより、フォールトが発生する可能性があります。私は 'k

+0

' array [n-1] = tempData; '---->' array [k] = tempData; '' – LPs

+0

@LPsをお勧めします。 – roottraveller

関連する問題