希望大侠来帮忙看看我错哪了

时间:2021-03-05 21:24:03
/*编一函数将一维数组的元素倒置存放。
已知:一维数组,元素个数。结果:倒置后的一维数组*/
#include<stdio.h>
void inverse(int a[],int n)
{
int *p=a,*q=a+n-1,t;
for(;p>=q;p++,q--)
t=*p;*p=*q;*q=t;

}
void main()
{
int a[3]={4,5,6},i;
for(i=0;i<3;i++)
printf("%d",a[i]);
puts("");
inverse(a,3);
for(i=0;i<3;i++)
printf("%d",a[i]);
}

/*运行后结果不正确*/

11 个解决方案

#1


for条件的p>=q;改成p<=q试试

#2


void inverse(int a[],int n)

int *p=a,*q=a+n-1;
while(q!=a)
{
*p++=*q--;
}
}

#3


引用 2 楼 fukang258369 的回复:
C/C++ code
void inverse(int a[],int n)

    int *p=a,*q=a+n-1;
    while(q!=a)
    {
        *p++=*q--;
    }
}
不对,没有交换最后一个,可以把while的条件改成p!=a+n; 希望大侠来帮忙看看我错哪了

#4


 

#include<stdio.h>
void inverse(int a[],int n)

/*int *p,*q=a+(n-1),t;
for(p=a;p<q;p++,q--)
{
if( p == q )
break;
t=*p;*p=*q;*p=t;

}*/
int *p,*q,t;
p = a;
q = a + n - 1;
for(;p<q;p++,q--)
{
if( p == q )
break;  //防止奇数个
t = *p;
*p = *q;
*q = t;
}
}
void main()
{
int a[3]={4,5,6},i;
for(i=0;i<3;i++)
printf("%d ",a[i]);
puts("");
inverse(a,3);
for(i=0;i<3;i++)
printf("%d ",a[i]);
printf("\n");
}

希望大侠来帮忙看看我错哪了

#5


这个好像没什么难度吧。。。

#6


为什么for中间那个判断 用q<p  他们是指针, 值是地址啊, 怎么判断??  大小端问题~~!!

#7


#include<iostream>
using namespace std;
void inverse(int a[],int n)

int *p=a,*q=a+n-1;
int t;
    //cout<<p[2]<<endl;
while(p<=q)
{
t=*p;
*p=*q;
*q=t;
p++;
q--;
}

}
void main()
{
int a[3]={4,5,6},i;
for(i=0;i<3;i++)
printf("%d",a[i]);
puts("");
inverse(a,3);
for(i=0;i<3;i++)
printf("%d",a[i]);
}

#8


错误一:p>=q 应该成p<=q
错误二:inverse函数里for语句后面应该加{}。
纠正后的代码如下:
#include<stdio.h>
void inverse(int a[],int n)

int *p=a,*q=a+n-1,t;
for(;p<=q;p++,q--){
t=*p;*p=*q;*q=t;
}
}
void main()
{
int d=1;
char *c=(char *)&d;
printf("%d", *c);
int a[3]={4,5,6},i;
for(i=0;i<3;i++)
printf("%d",a[i]);
puts("");
inverse(a,3);
for(i=0;i<3;i++)
printf("%d",a[i]);
}
至于楼上的说分数组个数分奇偶的情况,个人觉得没必要。这个完全可以适用。

#9


for(; p<=q;p++,q--)
应该是这个问题,LZ测试一下

#10


void inverse(int a[],int n)

int *p=a,*q=a+n-1,t;
for(; p<=q;p++,q --){
t=*p;*p=*q;*q=t;
}
}//要加上括号

#11


谢谢了各位 错误已解决  希望大家交个朋友啊  本人初学  QQ1503539333

#1


for条件的p>=q;改成p<=q试试

#2


void inverse(int a[],int n)

int *p=a,*q=a+n-1;
while(q!=a)
{
*p++=*q--;
}
}

#3


引用 2 楼 fukang258369 的回复:
C/C++ code
void inverse(int a[],int n)

    int *p=a,*q=a+n-1;
    while(q!=a)
    {
        *p++=*q--;
    }
}
不对,没有交换最后一个,可以把while的条件改成p!=a+n; 希望大侠来帮忙看看我错哪了

#4


 

#include<stdio.h>
void inverse(int a[],int n)

/*int *p,*q=a+(n-1),t;
for(p=a;p<q;p++,q--)
{
if( p == q )
break;
t=*p;*p=*q;*p=t;

}*/
int *p,*q,t;
p = a;
q = a + n - 1;
for(;p<q;p++,q--)
{
if( p == q )
break;  //防止奇数个
t = *p;
*p = *q;
*q = t;
}
}
void main()
{
int a[3]={4,5,6},i;
for(i=0;i<3;i++)
printf("%d ",a[i]);
puts("");
inverse(a,3);
for(i=0;i<3;i++)
printf("%d ",a[i]);
printf("\n");
}

希望大侠来帮忙看看我错哪了

#5


这个好像没什么难度吧。。。

#6


为什么for中间那个判断 用q<p  他们是指针, 值是地址啊, 怎么判断??  大小端问题~~!!

#7


#include<iostream>
using namespace std;
void inverse(int a[],int n)

int *p=a,*q=a+n-1;
int t;
    //cout<<p[2]<<endl;
while(p<=q)
{
t=*p;
*p=*q;
*q=t;
p++;
q--;
}

}
void main()
{
int a[3]={4,5,6},i;
for(i=0;i<3;i++)
printf("%d",a[i]);
puts("");
inverse(a,3);
for(i=0;i<3;i++)
printf("%d",a[i]);
}

#8


错误一:p>=q 应该成p<=q
错误二:inverse函数里for语句后面应该加{}。
纠正后的代码如下:
#include<stdio.h>
void inverse(int a[],int n)

int *p=a,*q=a+n-1,t;
for(;p<=q;p++,q--){
t=*p;*p=*q;*q=t;
}
}
void main()
{
int d=1;
char *c=(char *)&d;
printf("%d", *c);
int a[3]={4,5,6},i;
for(i=0;i<3;i++)
printf("%d",a[i]);
puts("");
inverse(a,3);
for(i=0;i<3;i++)
printf("%d",a[i]);
}
至于楼上的说分数组个数分奇偶的情况,个人觉得没必要。这个完全可以适用。

#9


for(; p<=q;p++,q--)
应该是这个问题,LZ测试一下

#10


void inverse(int a[],int n)

int *p=a,*q=a+n-1,t;
for(; p<=q;p++,q --){
t=*p;*p=*q;*q=t;
}
}//要加上括号

#11


谢谢了各位 错误已解决  希望大家交个朋友啊  本人初学  QQ1503539333