c语言一维数组(数组倒置的多种方法)

题目:将n个元素的数组的值前后倒置

方法1:借助另外一个数组b,将一维数组a的值取出后存入按照相反的顺序的另外一个维数组b中,再将b值正序换到a中,输出a即可。

(1)编程思想:建立数组存储当前要倒置的你个元素,再建立一个数组b,将a中数据反序存储到数组b中,在将数组b的值正序传回数组a中即可实现数组a的倒序。

(2)代码实现:

【1】将a中数据反序存储到数组b中(n为元素个数)

b[0]=a[n-1];

b[1]=a[n-2];

b[3]=a[n-3];

..................

可以归纳为:

for(i=0;i<=n-1;i++){

  b[i]=a[n-i-1];//数组下标是从0开始的

}

【2】将数组b的值正序传回数组a

for(i=0;i<=n-1;i++){

  a[i]=b[i];

}

(4)全部代码:

#include"stdio.h"
int main(){
	int i,n;
	printf("请输入元素总个数n:\n");
	scanf("%d",&n);
	int a[n],b[n];//定义两个一维变长数组
	printf("请输入a[%d]中的元素:\n",n);
    //循环输入a[n]的值 
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	} 
	//1.将a[n]中的值逆序输入b[n]中
	for(i=0;i<=n-1;i++){
		b[i]=a[n-1-i];
	} 
	//2.将b[n]的值正序存入a[n]中
	for(i=0;i<=n-1;i++){
		a[i]=b[i];
	} 
	printf("倒置后数组中的元素为:\n");
	//3.循环输出a[n]值为倒置后的数组a[n]
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	} 
	return 0;
}

方法2:引入中间变量temp,依次将首a[0]尾a[n-1]两个元素的值互相交换,有n个元素,共换[n/2]次。

(1)算法思想:借助中间变量temp,实现数组中对应元素的互换。

依次将a[0]和a[n-1]

           a[1]和a[n-2]

           a[2]和a[n-3]

           ...................

也就是将a[i]和a[n-1-i]互相交换,直至完成[n/2]次互换。

//n/2次互换

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

    temp=a[i];

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

    a[n-1-i]=temp;

}

(2)全部代码:

#include"stdio.h"
int main(){
  int n,i;
  printf("请输入总元素个数n:\n");
  scanf("%d",&n);
  int a[n];//定义变长数组a[n]
  printf("请输入a[%d]中的元素:\n",n);
  //元素输入
  for(i=0;i<n;i++){
    scanf("%d",&a[i]);
  }
  int temp;//定义中间变量temp
  //功能函数:交换n/2次,每次都把头尾元素交换
  for(i=0;i<=n/2-1;i++){
    temp=a[i];
    a[i]=a[n-1-i];
    a[n-1-i]=temp;
  }
  printf("元素倒置后:\n");
  //元素输出
  for(i=0;i<n;i++){
   printf("%d ",a[i]);
  }
  return 0;
}
  

  方法3:利用两个变量(i和j)分别代表左右两侧互换的数组下标值。

(1)算法思想:和方法2类似,不过是用i代表首元素,j代表末元素,将i++,将j--。

依次将a[0]和a[n-1]

           a[1]和a[n-2]

           a[2]和a[n-3]

           ...................

也就是将a[i]和a[n-1-i]互相交换,直至完成[n/2]次互换。

令i=0(代表首元素下标),j=n-1代表末尾元素下标

int i,j,temp;

i=0;

j=n-1;

//循环条件是首元素小于末元素下标,如果等于就没必要换了

while(i<j){

  temp=a[i];

  a[i]=a[j];

  a[j]=a[i];

  i++;

  j--;

}

(2)全部代码:

#include"stdio.h"
int main(){
  int n,i;
  printf("请输入总元素个数n:\n");
  scanf("%d",&n);
  int a[n];//定义变长数组a[n]
  printf("请输入a[%d]中的元素:\n",n);
  //元素输入
  for(i=0;i<n;i++){
    scanf("%d",&a[i]);
  }
  int j,temp;//定义中间变量temp
  i=0;//i表示首元素下标
  j=n-1;//j表示末尾元素下标 
  //功能函数:交换n/2次,每次都把头尾元素交换
  while(i<j){
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;
    i++;
    j--;
  }
  printf("元素倒置后:\n");
  //元素输出
  for(i=0;i<n;i++){
   printf("%d ",a[i]);
  }
  return 0;
}
  

猜你喜欢

转载自blog.csdn.net/weixin_55021541/article/details/133858248
今日推荐