簡體   English   中英

似乎無法理解為什么這個數組不會在 C 中反轉

[英]Can't seem to understand why this array won't reverse in C

我無法理解為什么我的 reverseArray 函數無法正確交換索引處的值。

我想要的是最后一個值一直與第一個值交換,直到棄用為 0。我相信 [(SIZE - i) - 1] 有問題,但我似乎無法繞過我的頭為什么。

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

#define MIN 0
#define MAX 100
#define SIZE 40

void fillArray(int arr[]);
int findWithRange(int arr[], int low, int high);
int findMaxInArray(int arr[], size_t arr_size);
void printArray(int arr[], size_t arr_size);
void reverseArray(int arr[]);


int main(void){

  srand((unsigned)time(NULL));
  int arr[SIZE], low, high;
  
  fillArray(arr);
  printArray(arr, SIZE);
  puts("\n");
  puts("\n");
  reverseArray(arr);
  printArray(arr, SIZE);
  puts("\n");
}

void fillArray(int arr[]){
  for (int i = 0; i < SIZE; i++){
    arr[i] = rand() % (MAX + 1) + MIN;
  }
}

void reverseArray(int arr[]){
  int temp;
  for (int i = SIZE - 1; i > 0; i--){
    temp = arr[i];
    arr[i] = arr[(SIZE - i) - 1];
    arr[(SIZE - i) - 1] = temp;
  }
}

輸出(底部是“反向”陣列): 輸出

預期輸出(類似): 輸出

我得到的第一個線索是你得到的輸出,你會注意到只有第一個和最后一個數字被交換,而不是中間的數字。 在您的反向函數的 for 循環中,您走得太遠了。 您需要做的是運行一半的 for 循環,因為中間是您開始將數字交換回原始位置的地方。 所以:

void reverseArray(int arr[]){
  int temp;
  for (int i = SIZE - 1; i > SIZE/2; i--){ // Changed code here
    temp = arr[i];
    arr[i] = arr[(SIZE - i) - 1];
    arr[(SIZE - i) - 1] = temp;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM