已知:一维数组,元素个数。结果:倒置后的一维数组*/
#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
不对,没有交换最后一个,可以把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]);
}
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]);
}
至于楼上的说分数组个数分奇偶的情况,个人觉得没必要。这个完全可以适用。
错误二: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测试一下
应该是这个问题,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;
}}//要加上括号
{
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
不对,没有交换最后一个,可以把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]);
}
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]);
}
至于楼上的说分数组个数分奇偶的情况,个人觉得没必要。这个完全可以适用。
错误二: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测试一下
应该是这个问题,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;
}}//要加上括号
{
int *p=a,*q=a+n-1,t;
for(; p<=q;p++,q --){
t=*p;*p=*q;*q=t;
}}//要加上括号
#11
谢谢了各位 错误已解决 希望大家交个朋友啊 本人初学 QQ1503539333