如何将一个数组中的值按逆序排放

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将一个数组中的值按逆序排放相关的知识,希望对你有一定的参考价值。

例如输入8,6,5,4,1按1,4,5,6,8输出。我很急的,请各位高手帮帮忙,谢了!

两种方案:

1、输入的时候从最大下标开始到下标0的逆序存放,再顺序输出;

2、输入的时候从0开始依次输入,输出从最大下标开始到0下标的逆序输出;

例如:

//方案一 
#include "stdio.h"
#define N 5
int a[N];
int main()

int i=0;
double ave;
for(i=N-1;i>=0;i--)//逆序输入
scanf("%d",&a[i]); 
for(i=0;i<N;i++)//顺序输出
printf("%d ",a[i]);
return 0;

//方案二 
#include "stdio.h"
#define N 5
int a[N];
int main()

int i=0;
double ave;
for(i=0;i<N;i++)//顺序输入
scanf("%d",&a[i]); 
for(i=N-1;i>=0;i--)//逆序输出
printf("%d ",a[i]);
return 0;
参考技术A 逆序排放:
#include <stdio.h>

#define MAX 100

main()

int sz[MAX];
int n=0;

scanf("%d",&n); /*输入数字个数(本例中最多100个)*/
for(int i=0;i<n;i++)
scanf("%d",&sz[i]);
for(i=0;i<n/2;i++) /*颠倒顺序*/
sz[i] = sz[n-i-1];

getchar(); /*这句话相当于暂停,按任意键后程序结束*/


如果只是逆序输出的话,用楼上(酷的酷的study)的那个代码就可以了。
参考技术B 放进数组的时候反一下,或者取出来的时候反一下
比如a[4]=8,a[3]=6..a[0]=1
然后从a[0]开始打印本回答被提问者采纳
参考技术C #include<stdio.h>

main()

int n,a[101];
int i;
scanf("%d",&n); /*输入数字个数(本例中最多100个)*/
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=n;i>=1;i--)
printf("%d ",a[i]);
printf("\n");
getchar();
getchar(); /*这句话相当于暂停,按任意键后程序结束*/


说明:如果只是要按逆序输出的话,其实不必改变原来的顺序,只需让数组的下标倒着再输一遍就行了。
最后两个 getchar() 是暂停让你看结果的,这是我的习惯,对程序无影响

数组存放在啥位置?

就简简单单定义一个数组
char a[100];
它是放在什么位置?栈里面?

老师留一个题,要先这样定义数组来接受字符串,然后用malloc堆开辟一块空间来把a数组里面的东西放到新开辟的地方,也就是堆空间;
请问这样做有意义吗?
堆很大?
放在堆里 易于程序执行?

求解

如果是定义在全局下的全局变量,这个数组就在数据段里。始终有效。

如果定义在函数下的局部变量,这个数组就在函数调用栈里。
用malloc申请堆空间拷贝数组内容,可能就是这个数组是在函数里定义的局部变量,函数调用结束后,栈里面为这个函数分配的空间就要失效,从而局部变量数组也会失效。但堆空间不会因为函数调用结束失效,函数调用结束后,函数里malloc出来内存空间仍然有效。
堆是系统管理的剩余内存,供系统运行过程中申请/释放内存空间,一般都比较大。
参考技术A

数组是用于储存多个相同类型数据的集合。

在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

一维数组在内存中的存放方式是:

1、硬盘上不可能运行程序的,必须在内存中运行。

2、低地址到高地址存储 。

3、数组元素通常也称为下标变量。

4、在C语言中,只能逐个地使用下标变量, 不能用一个语句输出整个数组。

5、int a[10]和t=a[6]分别是定义数组长度为10和引用a数组中序号为6的元素,6不代表数组长度。

参考技术B 1、栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈。

2、堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表。

3、全局区(static):也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量和静态变量放一块区域,没有初始化的在相邻的另一块区域,程序结束后由系统释放。

4、文字常量区:常量字符串就是放在这里,程序结束后由系统释放。
5、程序代码区:存放函数体的二进制代码。
参考技术C 首先你要明白什么是堆,什么是栈。
栈是由编译器自己开辟的用来存放局部数据(局部变量,未显式初始化则为随机值),编译的时候不存在,运行的时候猜出现。
堆是由程序员开辟,堆是动态内存,也就是说知道程序员去释放它,否则它一直存在。
堆的大小:你开辟多大的空间,它就有多大。在c中是malloc,c++中是new。
最后一个问题,不是为了易于执行的,栈中的局部变量在使用完之后就释放掉了,即使这时候程序还没结束(例如局部函数中的变量,在出了“}”之后就释放了,释放之后就不能使用了)。而堆就不会释放,可以一直使用。追问

那老师让我们这么做没什么道理?难道只是让我们练习一下malloc?不会吧?
求解?

如果说没有free堆空间,那是不是进程结束了,那个开辟的位置还有数据呢?

追答

是让你们比较对比栈和堆的区别,这怎么没道理了?

程序结束,内存会被释放了。这是C++机制了好像。

如果存在句柄,并且还在被外部使用,那么程序结束了,这个句柄还是存在的。不会立即释放。

追问

谢谢你的回答,上次误操作没采纳你,原谅我吧~阿门。。。

追答

阿门。

以上是关于如何将一个数组中的值按逆序排放的主要内容,如果未能解决你的问题,请参考以下文章

C语言,将一个数组中的值按逆序重新存放

将一个数组中的值按逆序重新存放。例如8,6,5,4,1要求改为1,4,5,6,8.

将一个数组中的值按逆序重新存放:建立Map()函数实现N个整数按相反顺序存放,函数的形参是数组

将一个整型数组中的值逆序重新存放。用java编写

将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。填空

将一个数组中的值逆序存放