← 学习库 C++程序设计教程 本册目录

第6章 数组

原书第 101 页

第6章 同类数据的组合——数组

既然 C++ 是接近人们生活的高级语言,那么,是否生活中的所有事物都可以用 C++ 语言来描述呢?回答是肯定的。从前面学到的知识可知,C++ 语言思考和处理问题时也像人类一样有三大方法:顺序的、选择判断的、循环重复的。人在处理问题时要有被处理的对象、物质、事情等,而 C++ 语言把这些被处理的对象、物质、事情用什么来表示呢?数据信息,即变量和常量。前面学过,一个变量或常量对应一个变量名或常量名,那如果是一群相同数据类型的变量或常量,是否要用 C++ 语言的一群变量名或常量名来表示呢?例如,一个班有 50 个学生的数学成绩,那是否要用 50 个浮点型变量来表示呢?C++ 提供了更好的方法。C++ 乐园第 5 站的景点就是把具有相同数据类型的信息归为一个小组——数组,数组相当于数学中的集合,只需要起一个小组名称,然后将这些数据群按照规律安放在这个小组中,C++ 程序可以随意地改变这些数据群的数据,也可以随意地把这些数据群从小组中取出来使用。下面来具体介绍。

6.1 往大房间(数组)里放数据并显示的例题详解

【例 6-1】定义一个数组 a1,再给该数组赋值,并显示赋值之后的数组的所有元素值。

  1. 用心分析人想通,机随人行写提纲

人的做法是:开一个放数据的大房间,再把数据放入房间,然后查看房间里的数据。

  1. 对号入座写文章,头脑运行改文章

用 “int a1[3];” 语句开一个放 3 个数据的大房间(数组 a1),a1 是大房间的名称(数组名),方括号里的 3(下标)表示大房间里有 3 个小房间(3 个变量),如图 6-1 所示。

Image
图6-1 数组元素排放示意图

3 个小房间就是 3 个变量,赋值、使用的方法与前面所学的一样,只是这里的变量名要加上下标以区分是哪个小房间(数组元素),这里的变量名表示为:数组名[下标],下标指明是第几个数组元素。注意:下标从 0 开始,即 a1[0] 是指数组中的第 1 个小房间。

有了房间就可以放数据了(赋值),先用赋值语句赋100给第1个小房间,再从键盘上接收一个数据放在第2个小房间(a1[1],此例运行时输入数据66),最后赋值给第3个小房间(3000)。

以上的数据都放在房间里了吗?可以查看一下,因为要看 3 次,所以用循环。正好可以利用循环控制次数 i 作为数组的下标值,第 1 次:i=0,显示 a1[i]=a1[0]=100,……注意:因为不是字符串,所以不能用 “cout<<a1” 来输出数组的所有元素值,否则会出错。

原书第 102 页
//ex6-1-4.cpp
#include<iostream.h>
void main()
{
    int a1[3];
    a1[0]=100; //用赋值语句给数组 a1 的第一个元素赋值 100
    cout<<"请输入数组的第二个元素值"<<endl;
    cin>>a1[1]; //用键盘输入数据,给数组 a1 的第二个元素赋值
    a1[2]=3000; //用赋值语句给数组 a1 的第三个元素赋值 3000
    for(int i=0;i<3;i++) //循环输出数组 a1 的所有元素值
        cout<<a1[i]<<"; //第一次输出 a1 的第一个元素值 100, ……
}
  1. C++帮助且裁判,人定胜机凯歌扬输出结果:

请输入数组的第二个元素值

66

100 66 3000

结果正确。

6.2 勤奋实践,总结评分

6.2.1 习题
  1. 请将你每天记忆的英语单词的数量用一维数组来表示,然后将每天记忆的单词量排队,看你每天记住的单词量是否有所提高。

2.请将全班同学的某科考试成绩输入计算机,并保存在一维数组中,然后输出显示全部成绩。

3.计算第2题中全班同学某科考试成绩的平均分及合格率。

  1. 在第2题中,请你选出全班前3名的同学的成绩,并输出显示这3个成绩。

5.有一位顾客问商场售货员,能否告诉她同类商品中价格最便宜的是哪一种,售货员欣然地满足了她的要求。请编程实现该过程,假设同类商品的货物单价保存在一个一维数组中。又假设顾客问售货员最贵的价钱,该怎么做?

6.100 米短跑比赛中的 10 个参赛队员的成绩已记录在一维数组中,请列出冠、亚、季军的成绩。试编程实现。

  1. 某工厂的产品是边生产边自动记录合格品的规格尺寸,假设出口产品要求好中挑好,例如,从20个产品中再挑出15个更好的产品,请问如何编写程序来实现。

8.毕业联欢晚会上,整个年级的女生准备演出一个舞蹈节目,要求挑选出身材适中的10位女生。假设身材特征的信息存放在二维数组中,请按要求挑选出10位女生。

9.商场里的货物序号及数量列在货物清单中,请用 $ ^{二} $维数组保存此货物清单,并打印输出该货物清单。试编程实现。

  1. 用二维数组存放5个学生的学号和数学成绩,请输入这5个学生的学号及成绩,然后按从高分到低分的顺序对成绩排序并输出显示。再假设某位学生转学了,请删除该学生的
原书第 103 页

信息。试编程实现。

6.2.2 思考题
  1. 编程实现矩阵的转置功能。
  1. 如何从矩阵中找出最小或最大值及其所在的位置?
6.2.3 总结评分,继续提高

学习了例题、习题和思考题之后,说说你的体会和收获,认真总结,给自己评判一下可以得多少分。

表6-1 总结评分表
成绩ABCD不足的原因改进的方法备注
C++知识完全理解和会用基本理解和会用肤浅理解和会用基本不理解和不会用
程序原创(独立编程)的比例(%)≥9080~8960~79<60

不论得分多少,大家都要总结经验,扬长避短,勤奋努力,不断提高。

最后浏览一下本章的第4节,可以先考考自己再浏览,以便使重点知识掌握得更牢固。

6.3 数组和字符串知识

虽然当初来到这个景点时,做了一些粗略的介绍,但数组究竟是什么样子?它有什么作用?怎样表示数组,又如何运用它?字符串是什么,怎么运用字符串?等等,都是这一景点的奇观异景,请认真观赏吧。

6.3.1 数组知识

其实,数组是把若干个相同数据类型的变量集中到一起管理,使用的方法还和以前使用单个变量的方法相同。只要注意使用时称呼(表示)这些变量——数组元素的方法就可以了。这么说来,岂不是很容易学?确实是。下面具体介绍数组的相关知识。

1. 在什么情况下用到数组

当用到一组数据类型相同的数据时,就用数组把这些数据集中在一起管理和使用。例如,学生的姓名、学号、成绩等,还有图书馆里的书籍号码、名称等,都可以用数组来表示。

2. 一维数组和二维数组

数组可以是一维或者多维的,常用的是一维数组和二维数组。下面分别来观赏它们。

(1)一维数组

1)什么是一维数组。

一维数组——将一组数据类型相同的数据按一行(或一列)的方式安放在一起(即像数

原书第 104 页

学中所讲的一维空间,也就是在一条直线上),其结构图请见图6-1。

数组本身也是一种数据类型,数组中的每一个数据称为数组元素。

2)一维数组的定义。

既然数组是一种数据类型,则使用这种数据类型的数据(变量或常量)时也要遵循“先定义,后使用”这个规则,怎么定义一维数组呢?有以下两种方式。

方式一:按以下语法格式定义。

数组元素的数据类型 数组名[数组元素的总个数];

数组元素的总个数(即数组这个大房间里的小房间数)必须是常量表达式,因为数组元素的总个数在定义数组时就要确定下来,不能改变。如果想在程序中随意改变数组元素的总个数,可以参考第8章中链表的知识或第16章中的知识来解决这个问题。

【例 6-2】定义一个有 3 个元素的整型数组。

int a1[3];// 定义了数组名为 a1 的一维数组,该数组中最多只能存放 3 个元素(3 个小房间)

如果数据类型是字符型 char 时,因为数组的最后一个单元要放字符串的结束符‘0’,则数组的大小为数组元素的总数加 1,如例 6-3 中的 “char c[6]={'H','a','p','p','y','0\}”;”。

方式二:将定义一维数组和给数组元素赋初始值合二为一。具体又可分为两种方式。

① 第一种方式的定义格式如下:

数组元素的数据类型 数组名[数组元素的总个数]={数组中的各元素初值};

注意:每个值之间用逗号间隔。如例 6-3 中的 “char c[6]={'H','a','p','p','y','0'};”。

② 第二种方式即省略“数组元素的总个数”的方式,当给全部数组元素赋初值时,可用此方式,如例 6-3 中的“char c1[]={"happy"};”。

【例6-3】定义两个存放5个字符的字符数组,并显示这些字符。

char c[6]={'H','a','p','p','y','0’};//定义了一个字符数组 c,
//并赋 6 个字符给 c 中的各数组元素,最后一个元素是字符串结束符。
//这是将数组中的每个元素作为 1 个字符来赋初值,所以用单引号引起每个元素值
char c1[6]={"happy"};//或用“char c1[]={"happy"};”,结果是一样的。
//定义了一个字符数组 c1,
//并用字符串赋初值,所以用双引号引起字符串,系统自动给字符串的末尾加上结束符'0'
cout<<c<<'t'<<c1<<endl;//输出字符数组或字符串名就是输出了其中的字符内容

运行结果:

Happy happy

结果正确。

3)一维数组的使用。

① 一维数组的下标。

这么多的数据在数组里存放,那么如何查询其中的某个数据呢?可以通过数组的下标来查询,因为数组是通过下标来决定元素位置的。就像人排队一样,队列中的第几个人是张

原书第 105 页

三,第几个人是李四,这个“几”对应的就是数组的下标。数组的下标就是“[]”里的数字,其表示法为:数组名[下标],这也是调用数组元素的写法。

② 一维数组的使用。

例如,数组 a 的第 5 个元素用 a[4]来表示。为什么卜标是 4 而不是 5 呢?因为 C++中数组的下标是从 0 开始编号的,即 a[0]表示数组中第一个位置的数据,所以,下标=数组中数据的位置号-1。在使用数组的数据时(如给它赋值、用它来计算、打印等),就用“数组名[下标]”来调用数组中的数据。

【例6-4】有一个工厂,想对日产量进行排序并显示的排序结果,以便直观了解生产情况,然后调整生产计划、改进生产管理,请编写程序实现。其中,日产量的数据用一个数组存放,可自己拟定一些日产量的数据及生产天数。

① 用心分析人想通,机随人行写提纲。

假设按照从左到右、从小到大的次序对日产量排序,则人的做法如图6-2所示。

按照人的做法,从头到尾用人脑运行至少一遍,确定能完成题目要求后,即可转入下一步。

②对号入座写文章,头脑运行改文章。

根据图 6-2 的流程图,结合 C++ 的知识,用 C++ 语句对号入座写文章——编写 C++ 源程序代码。下面具体介绍编程的过程。

首先要考虑日产量数据,这里有以下几点需要注意。

其一,数据可以采取任一种方式输入,但因为日产量时时变化,所以此处采用键盘输入的方式,语句为“cin>>array[i]”;”。

其二,以前是写“cin>>变量名”,那么此处 array[i]是什么?它就是一个存放数据的房间,以前的变量名只有一个房间,而此处的 array 是一个大房间,里面有若干个小房间,如图 6-3 所示。这个大房间就是数组,array是大房间的门牌号,里面的小房间也有房号,例如 array[0]就是第 1 个房间,array[i]就是第 i 个房间。因为此例若定义 10 个变量(10 个单房间),则不仅麻烦,而且房间分散不好管理,所以此例采用数组来存放数据。

Image
图 6-2 排序的流程图

其三,数据放到哪个大房间,要靠设计者来指定,此时即有了初始化中的“int array[N]”这一句,此外还要指定大房间 array 里有多少个(N)小房间,即指定方括号中的数(这个数必须是常数或常量表达式),可以直接写个具体的数字,也可以用类似“const int N=10”这样的语句定义一个常数 N。

其四,往大房间里的各个小房间放数据是一个重复的动作,因此可以使用循环语句,例如:

$$ \begin{aligned}for(i=0;i>array[i];\end{aligned} $$

原书第 106 页

放完数据后,可以通过显示数组元素值来查看是否所有数据都已放好,若已放好,则可开始后面的操作。

有了数据就可以唱“处理”这部曲了,即可以排序了,此处,采用选择排序法对数组元素按从小到大的顺序排放,其方法是在每一轮排序中最多只移动一次最小的数据,即找出这一轮中的最小数之后,再把它与这一轮参与比较的所有数据中的首位数据调换,其他数据保持原位不动。不断重复这种比较换位的过程,直到排序完毕。

例如按选择排序法对 7、9、2、5、3 这一组数排序,排序前的数组元素排放示意图如图 6-3 所示。

Image
图 6-3 排序前的数组元素排放示意图

注意:数组的下标是从 0 开始编排的,array[0]表示第 1 个房间(元素),所以,只要令循环控制变量 i 从 0 开始,i 就等于数组的下标了,这是一个很有用的数据关联,会有利于编程。

排序的过程如下:

第一轮,在5个数中找到2这个最小数,把2和这一轮在首位的7互换。

第二轮,在剩下的4个数中找到3这个最小数,把3和这一轮在首位的9互换。

・・・・・・

最后一轮,在剩下的两个数中,因为7就是最小数(即这一轮在首位的数就是最小数),所以不用互换。

各轮排序后的结果为:

初始 79253

第一轮 29753

第二轮23759

第三轮 23579

第四轮 23579

关键在于:找到最小的数时,要记录其所在的位置。在每一轮找最小数时,是从左至右两个数两个数地比较,并随时记录当前最小数的位置 seat(seat=j;),当一轮比完时(即内循环结束时),array[seat]中自然就是这一轮的最小数。如果最小数是这一轮首位的数(即这一轮初设定的最小数位置 seat=i 没有变化时),则不用交换;否则,array[seat]要与哪个位置的元素调换位置呢?因为第1轮的最小数要放在第1个位置,第2轮的最小数要放在第2个位置……正好i这个循环的控制变量是负责每一轮的,所以 array[seat]与 array[i]调换位置即可(即找到的最小数与这一轮在首位的数互换)。互换需要借助于中间变量来完成,即相当于红墨水瓶和蓝墨水瓶的红蓝墨水互换时,必须借助于另一个空瓶来完成。此例借助于中间变量temp来完成互换。语句如下:

$$ if(seat!=i)\quad// 如果查找中每一轮的首位 (i) 元素不是最小值 $$

$$ temp=array[i],array[i]=array[seat],array[seat]=temp;// 元素交换 $$

原书第 107 页

当完成外循环的最后一轮(n-1轮)后,所有元素就按从小到大的顺序排列好了。排序结果使用循环语句打印输出即可。

程序的执行过程如图6-4所示。

Image
图 6-4 排序流程图
原书第 108 页

根据图6-4编写程序代码如下:

//ex6-1-1.cpp

#include

const int N=10;//N 为生产天数,暂定 10 天,此数值可根据实际情况更改

void main()
{
    int array[N], i, j;
    int seat, temp;
    cout << "请输入" << N << "天的日产量" << endl;
    for (i=0; i<N; i++) //给数组 array 的元素赋值
        cin >> array[i];
    cout << "array 排序前的所有元素值\n";
    for (i=0; i<N; i++) //输出数组 array 排序前的所有元素值
        cout << array[i] << "";
    for (i=0; i<N; i++) //对数组 array 排序,外循环管排多少轮
    {
        seat = i; //暂时以此轮比较的首位元素的位置作为最小值的位置
        for (j=i+1; j<N; j++) //内循环负责每一轮的排序
        {
            if (array[j] < array[seat]) //比较两个数的大小
                seat = j; //记录该次比较出的最小数的位置,这是关键
            }
            if (seat != i) //如果这一轮比较的首位元素不是这一轮的最小数
                temp = array[i]; array[i] = array[seat]; array[seat] = temp; //元素交换
        }
        cout << endl << endl;
        cout << "array 排序后的所有元素值\n";
        for (i=0; i<N; i++) //输出数组 array 排序后的所有元素值
        cout << array[i] << "";
    }
}

将写出的程序与图 6-4 的流程图分析比照,并用人脑跟踪运行,直至认为正确(即可以完成题目的功能,也符合 C++ 的语法及规定),然后转入下一步操作。

注意:判断多重循环正确与否是人脑跟踪运行的最好发挥机会,至少用人脑跟踪运行i=1、i=2,以及最后一次的循环。如果用人脑跟踪运行还搞不清楚,或排除不了错误,则可在记录本上列个简表,写出每一轮的关键数字,如记录每一轮的i、j、seat、array[seat]等值,这样查找起错误来会很有效。

③ C++帮助且裁判,人定胜机凯歌扬。

将上面这个程序输入计算机→编译→连接→无错→运行[→调试修改→如果无错→运行]。

上机实验记录如表6-2所示。

表6-2 上机实验记录
出 错 现 象出 错 原 因解 决 办 法
'array' : unknown size;定义数组时没有定义数组长度,即定义为了 array[]改为:const int N=10 int array[N];此错纠正
原书第 109 页

(续)

出 错 现 象出 错 原 因解 决 办 法
'array0': undeclared identifier引用数组元素时,下标没加[],致使程序把 array0 当做了变量名,所以错误信息为:没有定义标识符 array0改为:\narray[0] 此错纠正
syntax error : '[]'引用数组元素时,[]中没加下标改为:\narray[1] 此错纠正

运行结果:

请输入10天的日产量

98

95

103

117

89

92

109

102

115

81

array 排序前的所有元素值

98 95 103 117 89 92 109 102 115 81

array 排序后的所有元素值

81 89 92 95 98 102 103 109 115 117

结果正确。

结果正确与否,与内外循环的终止条件有关系,这很重要,若结果不正确,再用人脑跟踪运行,耐心查错,加以更正。

(2)二维数组

1)什么是二维数组。

如果说一维数组是一条直线,那么二维数组就是一个平面,既有水平方向,也有垂直方向。二维数组是按行从上到下、每一行又按列从左到右的次序排列数据的,即如表6-3中去掉第一行和第一列的形式。而且二维数组的元素在内存中也按此顺序线性连续排列,即像一维数组的元素一样,一个接着一个排列在内存中。

2)二维数组的定义。

和一维数组一样,二维数组也有两种定义方式,其特点就是多了一个下标,一个下标指明水平方向(即行),另一个下标指明垂直方向(即列)。

方式一:按以下语法格式定义。

数组元素的数据类型 数组名[数组的总行数][数组的总列数];

实际上,数组的总行数×数组的总列数=数组元素的总个数,所以,这与一维数组是对应的。总行数和总列数也必须是常数或常量表达式。

原书第 110 页

【例6-5】定义一个4行×4列的二维数组,数组数据为浮点型。

float b[4][4]; // 定义了数组名为 b 的二维数组

方式:将定义二维数组和给数组元素赋初值合二为一。

方式一格式={{第一行各元素值},{第二行各元素值},...,{第n行各元素值}};

注意:每一行的各值之间用逗号间隔,行与行之间也用逗号间隔。

【例 6-6】 某大学的某个学院有 4 个年级的本科生,每个年级又有 3 个班,每个班的人数如表 6-3 所示,请将这些班级的学生人数保存在二维数组中。

表6-3 某大学的某个学院在校学生人数清单
年级\n班123
大一485150
大二524749
大三454847
大四464948

int stud[4][3]={{48,51,50},{52,47,49},{45,48,47},{46,49,48}};//定义了二维数组 stud,并进行了初始化注意,内层的花括号均可省略,即上例可写为:

int stud[4][3]={48,51,50,52,47,49,45,48,47,46,49,48};

在方式二中,当给全部数组元素赋初值时,二维数组的总行数可省略,即上例可写为:

$$ \operatorname{i n t}s t u d[][3]=\{48,51,50,52,47,49,45,48,47,46,49,48\}; $$

赋初值还有其他一些方式,例如,若只赋了其中一些值,则其余元素的值会被自动赋为0。但没必要记这么多方式,书写时,还是全写出来比较好,尽量不用省略方式。

3)维数组的使用。

①二维数组的下标。

类似于一维数组下标的含义,二维数组的下标有两个,其表示形式为:

数组名[行下标][列下标]

②二维数组的使用。

使用时按上述带下标的表示形式来调用二维数组中的数据。

【例 6-7】将表 6-3 所示的某大学的某个学院在校学生人数分布情况用二维数组存储,并输出显示。

程序代码如下:

//ex6-7.cpp

#include<iostream.h>

void main()
原书第 111 页
int i,j;
int stud[4][3]={{48,51,50},{52,47,49},{45,48,47},{46,49,48}};
//定义了二维数组 stud,并进行了初始化
for(i=0;i<4;i++)//循环输出数组 stud 所有行的元素值,即外循环
{
for(j=0;j<3;j++)//循环输出数组 stud 第i行的元素值,即内循环
cout<<stud[i][j]<<"";//输出数组 stud 第i行、第j列的元素值
cout<<endl;//输出完一行元素值就换行
}
}

运行结果:

48 51 50

52 47 49

45 48 47

46 49 48

结果正确。

3. 如何运用数组

使用数组的方法与使用其他变量的方法基本一样,但要将“数组名[下标]”或“数组名[行下标][列下标]”作为变量看待,则数组在赋值、输入、输出和比较等方面的使用就与原来使用变量的方法一样了。注意:在使用数组中的数据时,一定要带着下标,才与原来使用变量的方法一样,即不能给数组名赋值,如“a1=100;”是错误的,但却可以这样赋值:

a1[0]=100;//用赋值语句给数组 a1 的第一个元素赋值 100

cin>>a1[1];//用键盘输入给数组 a1 的第二个元素赋值

也可以这样赋值:

char a2[3][20]={"Television","Calculate","Car"};

1)当数据在一条直线上存放时,可采用一维数组,如例 6-1、例 6-3 和例 6-4。

2)当数据在平面上存放,既有行也有列时,可采用二维数组。

【例6-8】

//ex6-8.cpp
#include<iostream.h>

void main()
{
    int i,j;
    char a2[3][20]={"Television","Calculate","Car"};
    //定义了二维数组 a2,并进行了初始化
    for(i=0;i<3;i++)//循环输出数组 a2 所有行的元素值
        cout<<a2[i]<<endl;//与输出变量一样,输出时只写二维数组的分变量名
原书第 112 页

运行结果:

Television

Calculate

Car

结果正确。

3)在处理字符数组时,还可以使用 C++ 的标准字符串函数。

6.3.2 字符串知识

前面已经介绍了用一维数组表示的字符串和用二维数组表示的字符串数组,那么这些用数组表示的字符串还可以使用 C++ 提供的字符串函数完成一些常见的操作,如字符串连接、复制、比较和计算串长度等操作。这些字符串函数在 string.h 头文件中定义,即使用时要包括此头文件,有关的例题可参考 8.3.3 节的例 8-14。

因字符数组表示的字符串受大小的限制,所以 C++ 又想了一个好办法,那就是用字符串类型(string)来对字符串进行操作,下面具体讲解。

1. 在什么情况下用到字符串类型

凡是对字符及字符串进行操作和处理时,一般都可以使用字符串类型,尤其是用字符数组处理不方便时,使用效果更佳。但有时用字符串类型达不到预定效果,又要反过来用字符数组来处理,例如从键盘输入中文字符串给字符串变量,并保存在文件中,但打开显示出来的却是乱码,而用字符数组时显示的则是正确的。所以,应视具体情况而定。

2. 字符串变量

(1) 定义字符串变量

string 是在 C++标准库中声明的一个字符串类,用这个类可以定义对象(关于类和对象的知识在第 12 章会介绍)。现在先将 string 这个数据类型看做是原来学过的一种数据类型,而将定义对象看做是原来学过的定义变量,则定义字符串变量的方法与原来学过的定义变量的方法相同。具体有如下两种方式。

方式一:先定义,后赋初值。

【例6-9】

string stuname;//定义字符串变量 stuname

stuname="何新"; //给 stuname 赋值

方式二:定义和赋初值合二为一。

【例6-10】

string stuname="何新"; //既定义字符串变量 stuname,又给 stuname 赋初值

在定义语句的前面,还要加上头文件包括语句:

#include //注意不要加.h

原书第 113 页

其中,“using namespace std”是声明命名空间std,std中定义了标准C++库中的所有标识符,有了这句,string 和 iostream等的头文件包括语句中就不要加“.h”,否则会出错。

(2) 使用字符串变量

使用字符串变量的方法和使用其他变量的方法一样,因为字符串变量也是一种变量,包括赋值、输入、输出和比较等方面的使用都与原来使用变量的方法相同,例如上面两个例子中的赋值操作,就与其他变量的操作方法相同。

【例6-11】

cin>>stuname;//与输入变量一样,输入时只写字符串变量名即可

cout<<stuname<<endl;//与输出变量一样,输出时只写字符串变量名即可

运行结果:

何新

何新

结果正确。

还可参考例6-14和例6-15。

(3) 字符串数组

既然字符串是变量,而数组可以存放多个相同数据类型的变量,则可以将多个字符串变量存放在数组中,即形成字符串数组。

【例6-12】

string gname[3];//定义名字为 gname 的字符串数组,有 3 个数组元素(即有 3 个字符串)

【例6-13】

string gname[3]={"Television","Calculate","Car";}

//定义名字为 gname 的字符串数组,并给 3 个数组元素赋初值

3. 如何运用字符串变量

按照上述知识运用字符串变量,下面来看两个具体的例子。

【例 6-14】将例 6-13 的字符串数组中的各元素输出显示。

for(int i=0;i<3;i++)//循环输出数组 gname 的所有元素值
    cout<<gname[i]<<endl;//与输出变量一样,输出时只写字符串数组的分变量名
//(即写“字符串数组的变量名[下标]”)即可

【例 6-15】对几本书的书名进行操作,书名分别为高等数学、模拟电子技术、高级算法语言 C++,程序设计基础,请编程实现下述各种操作:

1)输入几本书名,并输出显示。

2)书名拼接:“高级算法语言 C++” + “程序设计基础”,并输出显示。

原书第 114 页

程序代码如下:

//ex6-15.cpp
#include<iostream>//注意不要加.h,这是标准C++的写法
#include<string>//注意不要加.h

using namespace std;//注意要加此句,此句含义为:使用命名空间std。有此句,则包含头文件
//命令就不加.h;否则,包含头文件的命令要加.h

void main()
{
    string book1[4];//定义名字为book1的字符串数组,其中有4个数组元素
    cout<<"请分别输入4个书名"<endl;
    for(int i=0;i<4;i++)//循环输入数组book1的所有元素值
        cin>>book1[i];//与输入变量一样,输入时只写字符串数组的分变量名
        //(即写“字符串数组的变量名[下标]”)即可
    for(i=0;i<4;i++)//循环输出数组book1的所有元素值
        cout<<book1[i]<<endl;//与输出变量一样,输出时只写字符串数组的分变量名
    string cb;
    cb=book1[2]+book1[3];
    cout<<cb<<endl;
}

运行结果:

请分别输入4个书名

高等数学 模拟电子技术 高级算法语言 C++ 程序设计基础

高等数学

模拟电子技术

高级算法语言 C++

程序设计基础

高级算法语言 C++程序设计基础

果正确。

6.4 数组和字符串的亮点

1. 数组的亮点

(1)在什么情况下用数组的亮点

当用到一组数据类型相同的数据时,就用数组把这些数据集中在一起管理和使用。

(2)数组具体知识的亮点

数组可以是一维或者多维的,常用的是一维数组和二维数组。

一维数组——将一组数据类型相同的数据按一行(或一列)的方式安放在一起。

使用数组这种数据类型的数据(变量或常量)时也要遵循“先定义,后使用”这个规则。

定义数组的方式如下。

方式一:

数组元素的数据类型 数组名[数组数据的总个数];

原书第 115 页

方式二:定义一维数组和给数组元素赋初始值合二为一,即

方式一格式={数组中的各元素初值};

使用一维数组的数据时(如给它赋值、用它来计算、打印等),用“数组名[下标]”来调用数组中的数据。

二维数组就是一个平面,既有水平方向,也有垂直方向。

二维数组也有两种定义方式,其特点就是多了一个下标,一个下标指明水平方向(即行),另一个下标指明垂直方向(即列)。

用“数组名[行下标][列下标]”来调用二维数组中的数据。

(3)运用数组的亮点

按实际需要和数组的知识正确运用数组。

2. 字符串的亮点

(1)在什么情况下用字符串类型的亮点

凡是对字符及字符串进行操作和处理时,一般都可以使用字符串类型。

(2)定义字符串变量的亮点

string 是在 C++标准库中声明的一个字符串类,用这个类可以定义对象。现在先将 string 这个数据类型看做是原来学过的一种数据类型,而将定义对象看做是原来学过的定义变量,则定义字符串变量的方法与原来学过的定义变量的方法相同。

(3)使用字符串变量的亮点

使用字符串变量的方法与使用其他变量的方法一样,因为字符串变量也是一种变量,包括赋值、输入、输出和比较等方面的使用都与原来使用变量的方法相同。

← 第5章 循环结构程序与 C++ 基础知识(四)第7章 指针 →