cycf 发表于 2019-3-14 17:25:02

将数组a 中的整数按相反顺序存放

#include<stdio.h>
void main()
{int a[]={4,1,5,9,6};
void inv (int a[],int n);
int i,n;
inv(a,5);
for(i=0;i<5;i++)
{
        printf("%d\n",a);
       
}



}


void inv (int a[],int n)
{
        int i,j=n,x;
        for(i=0;i<j;i++)
        {
                for(;;j--)
                {
                        x=a;a=a;a=x;
                        break;
                       
                       
                }
               
               
        }
       
       
       
}



这个算法哪里有问题啊?语法没问题,算法哪里不对,百思不得其解

Croper 发表于 2019-3-14 17:37:52

你这写的。。这格式一团乱麻啊。。。
                for(;;j--)
                {
                        x=a;a=a;a=x;
                        break;
                        
                        
                }
这一句,你确定j--会执行么,进去就直接break了

cycf 发表于 2019-3-14 17:53:48

Croper 发表于 2019-3-14 17:37
你这写的。。这格式一团乱麻啊。。。

这一句,你确定j--会执行么,进去就直接break了

额 ,这个不是无限循环的表示吗

cycf 发表于 2019-3-14 17:54:43

Croper 发表于 2019-3-14 17:37
你这写的。。这格式一团乱麻啊。。。

这一句,你确定j--会执行么,进去就直接break了

那应该怎么改啊

Croper 发表于 2019-3-14 19:29:22


void inv (int a[],int n){
        int i,j;
        for (i=0,j=n-1;i<j;++i,--j){
                int tmp=a;
                a=a;
                a=tmp;
        }
}

jackz007 发表于 2019-3-14 20:44:09

本帖最后由 jackz007 于 2019-3-14 21:07 编辑

    楼主可以参考一下采用函数递归实现的数组倒序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void inv(int a[] , int n , int m)
{
      int x                                           ;
      x = a                                    ;
      if(n > 1) inv(a , n - 1 , m + 1)                ;
      a = x                                        ;
}

main(void)
{
      int i , a[] = {4 , 1 , 5 , 9 , 6}               ;
      printf("before:\n")                           ;
      for(i = 0 ; i < 5 ; i ++) printf("%d\n" , a) ;
      printf("after:\n")                              ;
      inv(a , 5 , 0)                                  ;
      for(i = 0 ; i < 5 ; i ++) printf("%d\n" , a) ;
}
页: [1]
查看完整版本: 将数组a 中的整数按相反顺序存放