内容正文:
第10课 遍历列表
——一维列表——
问题:
输入50个学生的某门课程的成绩,打印出低于平均分的学生序号与成绩。
导入新课
一维列表的定义
当列表中每个元素只带有一个下标时,我们称这样的列表为一维列表。
列表的定义格式如下:
类型标识符 列表名[常量表达式]
说明:
①列表名的命名规则与变量名的命名规则一致。
②常量表达式表示列表元素的个数。可以是常量和符号常量,但不能是变量。
例如:
int a[10]; //列表a定义是合法的
int b[n]; //列表b定义是非法的
一维列表的定义
int a[10]
其中,a是一维列表的列表名,该列表有10个元素,依次表示为:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。需要注意的是:a[10]不属于该列表的空间范围。当在说明部分定义了一个列表变量之后,C++编译程序为所定义的列表在内存空间开辟一串连续的存储单元,每个列表第一个元素的下标都是0,因此第一个元素为第0个列表元素。例如:上例中的a列表在内存的存储如表所示:
一维列表的引用
通过给出的列表名称和这个元素在列表中的位置编号(即下标),程序可以引用这个列表中的任何一个元素。
一维列表元素的引用格式:
列表名[下标]
例如:若i、j都是int型变量,则
a[5]
a[i+j]
a[i++]
都是合法的元素。
一维列表的引用
说明:
(1)下标可以是任意值为整型的表达式,该表达式里可以包含变量和函数调用。引用时,下标值应在列表定义的下标值范围内。
(2)列表的精妙在于下标可以是变量,通过对下标变量值的灵活控制,达到灵活处理列表元素的目的。
(3)C++语言只能逐个引用列表元素,而不能一次引用整个列表。
(4)列表元素可以像同类型的普通变量那样使用,对其进行赋值和运算的操作,和普通变量完全相同。
例如: c[10]=34;实现了给c[10]赋值为34。
一维列表的初始化
列表的初始化可以在定义时一并完成。
格式:类型标识符 列表名[常量表达式]={值1,值2,…}
例如:
int a[5]={1,2,3,4,5}
说明:
(1)在初值列表中可以写出全部列表元素的值,也可以写出部分。
例如:int x[10]={0,1,2,3,4};
该方法仅对列表的前5个元素依次进行初始化,其余值为0。
(2)对列表元素全部初始化为0,可以简写为:{}。
例如:int a[5]={}; 将列表a的5个元素都初始化为0。
一维列表的初始化
一维列表的初始化
【说明】
程序1、程序2和程序3的区别在于列表定义在int main()之外与之内,程序1中列表定义放在int main()之外,其初始值是0值。程序2中列表定义放在int main()之内,其初始值是随机的。程序2中列表定义放在int main()之内,只给a[0]、a[1]赋初值,但后面的a[2]~a[4]元素自动赋0值。
列表的越界
C++语言规定,使用列表时,要注意:
(1)、列表元素的下标值为正整数。
(2)、在定义元素个数的下标范围内使用。
然而,当在程序中把下标写成负数、大于列表元素的个数时,程序编译的时候是不会出错的。例如:
int a[10];
a[-3]=5;
a[20]=15;
a[10]=20;
int k=a[30]
这些语句的语法是正确的,能够通过程序的编译。然而,它们要访问的列表元素并不在列表的存储空间的,这种现象叫列表越界。例如下面程序
列表的越界
#include<iostream>
using namespace std;
int main()
{
int a[5];
for (int i=0;i<=10;i++)
{
a[i]=i;
cout<<a[i]<<" ";
}
return 0;
}
一维列表的应用
例5.1 输入n个数,要求程序按输入时的逆序把这n个数打印出来,已知整数不超过100个。也就是说,按输入相反顺序打印这n个数。
一维列表的应用
例5.2 将a列表中第一个元素移到列表末尾,其余数据依次往前平移一个位置。
【分析】为完成题目所要求的操作,其算法应该包括以下几个主要步骤:
①把第一个元素的值取出放在一个临时单元 temp中;
②通过 a[2]→a[1], a[3]→a[2], a[4]→a[3],……, a[n]→a[n-1],实现其余元素前移