先来看一下题目描述
将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。
输入
输入为两行:第一行数组中元素的个数n(1<n<100),第二行是n个整数,每两个整数之间用空格分隔。
输出
输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。
样例输入
5
8 6 5 4 1
样例输出
1 4 5 6 8
这题的关键就在"倒序"上
倒序输出的方法有很多
为了让初学者很快get到新技能
我今天要讲到的,就是用for语句倒序输出
先看一下程序体(完整版)
#include
using namespace std;
int main()
{
int b,c;
int a[100];
cin>>b;
for(int i=1;i<=b;i )
{
cin>>a[i];
}
for(int j=b;j>0;j--)
{
c=a[j];
cout<<c<<" ";
}
return 0;
}
这个程序只需要用iostream就能解决(为了方便新手,我没有使用标准输入输出)
我们只用了两个循环,而第一个循环只是拿来正序输入的
这是第一个循环:
for(i=1;i<=b;i )
{
cin>>a[i];
}
此处用的是最基本的for语句读入数组法
之前读入了一个b,b就是这个数组的元素的数量。
i的初值要设为1
如果i的初值设为0那么就会多读入一个数据
(道理:若从一开始,假设我们要读入5个数据,将会是:1.2.3.4.5 5个数据
假设从0开始,将会是:0.1.2.3.4.5 6个数据)
i<=b 表示有b个数据
(解释一下为什么是<=b而不是<b或=b或==b)
先说
如果写=b,那么就更不科学,在c中,一个等号表示赋值,i=b相当于把i的值赋给b,这在for语句中是不合规矩的,会报错
如果写==b,在c中,"=="表示判等,意思说只有在i等于b的时候才会执行后面的运算。虽然不会报错,但是没有达到我们想要的效果)
i 相当于i=i1
下面的cin>>a[i]就是读入数组。
那么我刚才int的a[100]数组中的前b个元素已经赋值了
而后的for就是用来倒序输出的
for(int j=b;j>0;j--)
{
c=a[j];
cout<<c<<" ";
}
首先,j=b
先让j等于b,也就是正序的最后一个数据,它将成为倒序的第一个数据
j>0
大于0的整数,也就是说j最小为1
这个1代表正序的第一个元素,现在1成了最小值,就相当于让以前的第一个成了现在的最后一个
至此,我们已成功的让正序的第一个元素成为了倒序的最后一个元素。正序的最后一个元素成了倒序的第一个元素
j--相当于j=j-1
那么在这个循环语句中,j的值将会是b,b-1,b-2,b-3.....3.2.1
也就是a[b],a[b-1],a[b-2]......a[1]
成功将数组倒序
但是还要输出,我们就将就这个循环来进行输出
这里我把a[j]赋给了c,只是为了图个清爽
也可以不用c
将就循环,把a[j]的值赋给c,在输出一个空格
(意思是说a[j]的值在变,而c的值也跟着它变,它变一次,c就取了它的值然后输出,它的值再变,c的值又跟着变然后在输出,如此反复)
然后return 0
到此,程序结束
网友评论