一维数组练习题
数组输入,输出,访问
用一维数组输入10个数进去,再进行输出(正序,反序);
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[10];
for(int i=0;i<10;i++)
{
cin>>a[i];
}
cout<<endl;
for(int i=0;i<10;i++)
{
cout<<a[i];
}
cout<<endl;
for(int i=9;i>=0;i--)
{
cout<<a[i];
}
return 0;
}
反序输出
【题目描述】
输入n个数,要求程序按输入时的逆序把这n个数打印出来,已知整数不超过100个。也就是说,按输入相反顺序打印这n个数。
【输入】
输入一行共有n个数,每个数之间用空格隔开。
【输出】
如题要求:一行,共有n个数,每个数之间用一个空格隔开。
【输入样例】
1 7 3 4 5
【输出样例】
5 4 3 7 1
解法:由于不知道有多少数要输入,所以将输入作为循环条件,当换行跳出循环。反序输出时,从用到的最后一个下标开始访问,往前访问输出。
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[100]={};
int i=1,t=0;
while(cin>>a[i])
{
t++;
i++;
if(getchar()==10) break; //换行ASCII码 10
}
for(int i=t;i>=1;i--)
{
cout<<a[i]<<" ";
}
return 0;
}
-
LF意思是linefeed,换行,\n,ASCII码为10
-
getchar()
: 这是一个标准库函数,用于从标准输入(通常是键盘)读取一个字符,并返回其ASCII值。
平移数据
【题目描述】
将a数组中第一个元素移到数组末尾,其余数据依次往前平移一个位置。
【输入】
第一行为数组a的元素个数;
第二行为n个小于1000的正整数。
【输出】
平移后的数组元素,每个数用一个空格隔开。
【输入样例】
10
1 2 3 4 5 6 7 8 9 10【输出样例】
2 3 4 5 6 7 8 9 10 1
-
解法1:真正改变数组。用一个变量保存第一个元素,从第二个元素开始,依次赋值给前一个元素。再把第一个元素的值赋值给最后一个元素。
-
解法2:输入时直接按照平移后效果存放。然后直接输出
-
解法3:不改变数组,只是从第2个元素开始输出到最后,再输出第一个元素。
-
其他解法可自行思考尝试。
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[100]={};
/*//法一:输入后改变数组结构,暂存第一个元素,后面元素前移,再将暂存的第一个元素给最后一个元素
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int temp=a[0];
for(int i=1;i<n;i++)
{
a[i-1]=a[i];
}
a[n-1]=temp;
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
*/
/*//法二:输入时直接按照平移后效果存放。然后直接输出
cin>>a[n-1] ;
for(int i=0;i<n-1;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
*/
//法三:输入时按顺序输入,输出从第二个元素开始输出,最后输出第一个元素
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=1;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<a[0];
return 0;
}
教学后记
: 由于刚学一维数组,普遍对语法格式,以及数组长度,访问控制不够熟悉。需要多画图辅助去分析。(教学后记用来自己做完后报错了找不出错误则从这几点继续查找错误语句修正代码)
- 定义一位数组int a[100]={ }; 的等号 ‘ = ’容易遗漏
- 若从下标i=0开始遍历数组,则长度为n时,范围是i<n,容易把第0个下标的元素位置遗漏或忽略,导致访问出错,输出结果就不对。
- 个别还是遗漏了语句最后的 ‘ ;’结束符号!
- 使用时注意有没有超出数组长度。