1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > c语言实现数组中的数据逆序排列

c语言实现数组中的数据逆序排列

时间:2021-01-23 03:30:33

相关推荐

c语言实现数组中的数据逆序排列

主函数里面已经定义了数组b及其中的9个数据,然后利用for循环将数组中的数据打印一遍,之后将数组的首地址和数组长度9传给函数fun,函数fun要实现的功能是将数组b中的数据前后置换顺序,即原来的1,2,3,4,5,6,7,8,9要换成9,8,7,6,5,4,3,2,1。

main()

{ int b[9]={1,2,3,4,5,6,7,8,9}, i;

printf("\nThe original data :\n");

for (i=0; i<9; i++)

printf("%4d ", b[i]);

printf("\n");

fun(b, 9);

printf("\nThe data after invert :\n");

for (i=0; i<9; i++)

printf("%4d ", b[i]);

printf("\n");

}

准备对数组进行一系列操作时,必须要在循环结构中实现,这里使用了最常见的for循环,要想将这组数据逆序排列,本质上是将后面的数依次与前面的数据交换位置,从交换数组b[i]中存储的数据的角度去理解,更简便也更高效。

数组长度为n,数组下标从0到n-1,函数fun里面需要通过循环来实现存储元素的交换,这里用i来控制循环次数,那么到底需要循环几次才能实现倒序排列呢?如果不能一下子想明白的话, 我们可以先假设n为奇数,假定n为9,那么n-1为8,数组下标为0,1,2,3,4,5,6,7,8,可以看出中位数的下标应该是4,i从0到3全部都需要参与到循环中去,分别与下标为8,7,6,5的数组元素进行交换,此时4=(n-1)/2;再假定n为偶数8,那么n-1为7,数组下标为0,1,2,3,4,5,6,7,此时有偶数个数据,即数组长度的一半都需要参与到循环中去,即0与7,1与6,2与5,3与4,都要进行交换,最后交换的是b[3],而(n-1)/2的结果是3,必须要注意的是,如果除号“/”两边的数字都是整数的话,商值会直接截取整数部分,比如7/3结果本来是3.5,但是在c语言中,会出现7/3=3,小数部分直接截去了,要想保留小数部分,需要写成7.0/3,或者1.0*7/3.

所以前面讨论的n为奇数时,可用i<(n-1)/2,上例中i最多取到3,但是当n为偶数时,判断条件如果是i<(n-1)/2的话,上例中i<3,则无法保证数据都进行交换,所以不能将i<(n-1)/2作为统一的判断条件,此时我们来考虑 i<n/2的情况,n为9时,n/2=4,i<4,可以取到0~3;若n为8,n/2=4,i<4,可以取到0~3,均满足题意,综上,无论n是奇数还是偶数,i<n/2都是最佳的循环判断条件

void fun(int a[], int n)

{ int i,t;

for (i=0; i<n / 2; i++)

{

t=a[i];

a[i] = a[n-1-i];

a[n-1-i] = t;

}

}

循环体中的语句就是交换两个变量中的数据的典型语句,将两个数组变量b[i]和b[n-1-i]分别看作两个分别装着标号A和标号B小球的杯子,要想将这两个小球互换位置,需要再拿一个空杯子t,用来盛放小球A,即赋值语句t=a[i],现在变量a[i]里面可以看做是空杯子,因为它里面放的那个球的数据已经给了t,就可以直接把B球放在a[i]里面了,即赋值语句a[i]=a[n-1-i],现在轮到变量a[n-1-i]“空着了”,就可以将t中的"小球”放入其中了。将一个变量赋值给另一个变量时,前者的存储空间相当于已经解放出来了,因为有后者存储着之前的数据。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。