赞
踩
题目描述
输入n(1<=n<=10)和n个整数,逆序输出这n个整数。
输入
输入n(1<=n<=10),然后输入n个整数。
输出
逆序输出这n个整数,每个整数占4列,右对齐。
样例输入
6
4 5 6 1 2 3
样例输出
3 2 1 6 5 4
本题当然可以用之前的递归解决,不过也可以跟递归说再见,迈向新的起点,数组的学习啦。这里关于数组的定义其实是建议放在main函数之外的,因为会节省程序运行时间,这里就不得不提一下为什么会出现这种情况,因为,全局变量在静态存储区分配内存,局部变量是在栈上分配内存空间的。(c语言程序在运行时会动态创建一个堆栈段,里面存放着调用栈,保存着函数的调用关系和局部变量。)如果数组太大,可能会造成栈溢出。所以这样来说,我们把数组定位全局变量是很有必要的。一是防止了栈溢出,二是节省了动态创建的时间~而且防止溢出这个操作,对于代码来说也是很必要的,因此对于要求100的数组,我们一般是要开辟101甚至105的空间的,这就是防止溢出,那么话不多说,开始咱们的解题。
#include<stdio.h> int a[11];//注意啦数组初始是从0开始,例如int a[3]其实是里面是a[0]、a[1]、a[2] //并且在外面定义是默认初始化数组值为0的,定义数字也是一样的~ int main() { int i,n;//定义循环变量i和数组元素数n scanf("%d",&n);//输入n //int a[n];//定义数组a[n],这里数字比较小,所以可以这样。 但是并不推荐,所以划掉 for(i=0;i<n;i++)//开始循环 ,从0开始 scanf("%d",&a[i]);//每次存入a[i] for(i=n-1;i>-1;i--)//从n-1到0结束 printf("%4d",a[i]);//按照格式要求输出占4列右对齐的数字 return 0;//程序正常结束 } //前边的递归方法是可以解决这个问题的 /* void inverse(int n) { int num;//定义数字num if(n>1) { scanf("%d",&num);//键盘读入num inverse(n-1);//递归给n-1 -->此时又进入了一个新的inverse()函数之中,重复操作 printf("%4d",num);//输出num } if( n == 1){//当n为1的时候,输入之后就输出 scanf("%d",&num);//键盘读入num printf ("%4d",num);//直接输出num; } } int main() { int n;//定义未知数数量n scanf("%d",&n);//键盘输入n inverse(n);//执行inverse函数 return 0;//程序正常结束 } */
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。