问题描述
- C语言数组倒序排列问题
-
#includeint main(){
void inv(int x[],int n);
int i,a[10]={1,2,3,4,5,6,7,8,9,0};
for(i=0;i<10;i++)printf("%d
",a[i]);inv(a,10); printf("after change: "); for(i=0;i<10;i++)printf("%d ",a[i]); return 0;
}
void inv(int x[],int n){
int temp,i,j,m = n-1/2;
for(i=0;i<=m;i++){
j = n-1-i;
temp = x[i];
x[i] = x[j];
x[j] = temp;
}
return;
}代码如图,想要把数组倒序排列,可是没有实现。还有想请问在INV的for循环里可不可以换成,for(i=0,j=n-1;i<=m;i++,j--)?如果不可以是为什么噢?
万分感谢!
解决方案
第一: 将 #include 改为 #include
第二:将 m = n-1/2 改为 m = (n-1)/2
只要将第一个和倒数第一个
第二个和倒数第二个
第三个和倒数第三个
。。。。
进行交换就行
当正数n和倒数的n相同时,就不能在继续交换了,否则就会得到没有交换的结果。
例如:有三个数据要交换
你只要交换第一个和倒数第一个就可以了,中间一个可以不交换
即可!!!!!!
解决方案三:
倒序输出哦,直接for(i=9;i>=0;i--)printf(“%d”,a[i])不行么
解决方案四:
你写的函数都定义成void了,你还return什么
解决方案五:
还有你下面个j--,都没有范围,你减到什么时候结束啊?
解决方案六:
直接用qsort得了。。。效率还高
解决方案七:
lz的问题出现在这样两个地方:
1、m = n-1/2;这句要改成(n-1)/2,不然m的值就比n小1
2、按照lz你的写法int a[10]; void inv(int x[],int n);要写在main之前
#include<iostream>
using namespace std;
int a[10];
void inv(int x[],int n);
int main(){
int i;
for(i=0;i<10;i++)
a[i] = i;
//a[10]={1,2,3,4,5,6,7,8,9,0};
for(i=0;i<10;i++)printf("%d
",a[i]);
inv(a,10);
printf("after change:
");
for(i=0;i<10;i++)printf("%d
",a[i]);
return 0;
}
void inv(int x[],int n){
int temp,i,j,m = (n-1)/2;
for(i=0;i<=m;i++){
j = n-1-i;
temp = x[i];
x[i] = x[j];
x[j] = temp;
}
return;
}
还有lz你想改的地方是可以的,并不会有错,但不建议这么写
以上,望采纳