簡體   English   中英

反向數組 C

[英]Reverse Array C

我對以下功能有問題。

void reverseAr1D(int ar[], int size)
{
   int temp[size], j = 0;

   for(int i = size - 1; i > -1; i--)
   {
       temp[j] = ar[i];
       j++;
   }

   j = 0;

   for(int i = size - 1; i >- 1; i--)
   {
       *(ar + j) = *(temp + i);
       j++;
   }

   for (int i = 0; i < size; i++)
       printf("%d ", temp[i]);
 }

我想反轉數組ar[]中的每個元素。 我試圖反向復制到另一個數組temp[] 然后將temp[]復制回ar[] 我試過了,但沒有用。 下面是我的代碼。 謝謝。

#include <stdio.h>

void printReverse1(int ar[], int size);
void printReverse2(int ar[], int size);
void reverseAr1D(int ar[], int size);

int main()
{
    int ar[10];
    int size, i;

    printf("Enter array size: \n");
    scanf("%d", &size);
    printf("Enter %d data: \n", size);

    for (i = 0; i <= size - 1; i++)
        scanf("%d", &ar[i]);

    printReverse1(ar, size);
    printReverse2(ar, size);

    reverseAr1D(ar, size);
    printf("reverseAr1D(): ");

    if (size > 0) 
    {
        for (i = 0; i < size; i++)
            printf("%d ", ar[i]);
    }

    return 0;
 }



  void printReverse1(int ar[], int size)
{
 /* using index – Write your program code here */
  printf("printReverse1(): ");
  for(int i=size-1;i>-1;i--){

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



 void printReverse2(int ar[], int size)
 {
 /* using pointer – Write your program code here */
   printf("printReverse2(): ");
  for(int i=size-1;i>-1;i--){

  printf(" %d ",*(ar+i));
 }
 printf("\n");
}



void reverseAr1D(int ar[ ], int size)
{
 /* Write your program code here */
 int temp[size],j=0;
 for(int i=size-1;i>-1;i--){

 temp[j]=ar[i];


 j++;
 }
 j=0;
 for(int i=size-1;i>-1;i--){

 *(ar+j)=*(temp+i);


 j++;
 }
 for (int i=0; i<size; i++)
 printf("%d ", temp[i]);

 }

可能是,最快的方法:

 int *front_p, *back_p;
 for(front_p=&ar[0], back_p=&ar[size-1]; front_p < back_p; ++front_p, --back_p) {
     tmp=*back_p; *back_p=*front_p; *front_p=tmp; 
 }

您在reverseAr1D函數中所做的是以相反的順序將temp中已經反轉的元素復制到ar 所以你最終會得到元素的原始順序。

在您的reverseAr1D函數中,您必須將第二個for循環更改for

for(int i = 0; i < size; i++){
 *(ar + j) = *(temp + i);
  j++;
}

這是反轉整數數組的大量代碼。 這是經典的方法:

void arrayReverse(int* array, int size) {
    for (int i = 0; i < (size / 2); i++) {
        int swap = array[size - 1 - i];
        array[size - 1 - i] = array[i];
        array[i] = swap;
    }
}
#include<stdio.h>
#define SIZE 5
void main(){
    int i,j,temp,array[SIZE]={1,2,3,4,5},k;

    for(i=0,j=SIZE-1;i<j;i++,j--){
        temp=array[i];
        array[i]=array[j];
        array[j]=temp;
    }   

    for(k=0;k<SIZE;k++){
        printf("%d\n",array[k]);
    }
}

暫無
暫無

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

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