《C++高级语言程序设计第四章.ppt》由会员分享,可在线阅读,更多相关《C++高级语言程序设计第四章.ppt(93页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C+高级语言程序设计高级语言程序设计第第4 4章章 数组及其他自定义类型数组及其他自定义类型北京邮电大学信息与通信工程学院北京邮电大学信息与通信工程学院 2022/12/21北京邮电大学信息与通信工程学院1第第4章章 数组及其他自定义类型数组及其他自定义类型4.1 4.1 数组数组n数组基本概念、数组初始化、访问数组元素、字数组基本概念、数组初始化、访问数组元素、字符型数组、多维数组符型数组、多维数组4.2 4.2 枚举类型枚举类型n枚举类型的定义、枚举型变量的定义及使用枚举类型的定义、枚举型变量的定义及使用4.3 4.3 结构类型结构类型n结构类型的定义、结构变量的定义及初始化、结结构类型的
2、定义、结构变量的定义及初始化、结构变量的使用构变量的使用4.4 4.4 联合类型联合类型n联合类型的定义、联合型变量的定义及使用联合类型的定义、联合型变量的定义及使用2022/12/21北京邮电大学信息与通信工程学院-2-4.1 数组数组数组是具有一定数组是具有一定顺序关系顺序关系的若干的若干相同相同类型变量的集合类型变量的集合,组成数组的变量称,组成数组的变量称为该数组的为该数组的元素元素。数组属于构造类型。数组属于构造类型。数组是实际编程中经常使用的一种数数组是实际编程中经常使用的一种数据结构。据结构。2022/12/21北京邮电大学信息与通信工程学院-3-4.1.1 数组定义及初始化数组
3、定义及初始化1.1.一维数组的定义一维数组的定义一维数组定义的语法形式一维数组定义的语法形式 类型标识符类型标识符 数组名数组名 常量表达式常量表达式;说明说明 n类型标识符类型标识符:任何合法的类型标识符任何合法的类型标识符,用于说明数组元,用于说明数组元素的类型素的类型;n数组名数组名 :程序员对该数组的命名,数组的命名规则同变程序员对该数组的命名,数组的命名规则同变量命名;量命名;n方括号方括号及及常量表达式常量表达式:用于说明该数组中元素的个数用于说明该数组中元素的个数。2022/12/21北京邮电大学信息与通信工程学院-4-4.1.1 数组定义及初始化数组定义及初始化例例:1010级
4、级11119 9班班3030名同学名同学“C+C+程序设计程序设计”课程课程的成绩的成绩 int Cscore30;int Cscore30;实验,测得一组电阻实验,测得一组电阻R R随温度随温度T T变化的值变化的值 float Ri30;float Ri30;short Tc30;short Tc30;2022/12/21北京邮电大学信息与通信工程学院-5-4.1.1 数组定义及初始化数组定义及初始化一维数组一维数组在内存中存储映射在内存中存储映射intscore5;2022/12/21北京邮电大学信息与通信工程学院-6-4.1.1 数组定义及初始化数组定义及初始化注意注意n定义一个数组,
5、系统为这个数组保留一定数量的连续内存定义一个数组,系统为这个数组保留一定数量的连续内存单元,数组元素依次占用这一连续内存空间,这段内存空单元,数组元素依次占用这一连续内存空间,这段内存空间起始地址的外部标识就是数组名间起始地址的外部标识就是数组名;n数组名是一个地址常量,禁止给数组名赋值数组名是一个地址常量,禁止给数组名赋值;n数组各元素用数组名及下标(或称索引值)来标识,数组各元素用数组名及下标(或称索引值)来标识,score0score0,score1score1,score4score4分别表示数组的第分别表示数组的第1 15 5个个元素元素;nC C语言和语言和C+C+语言中,元素的下
6、标从语言中,元素的下标从0 0开始计,开始计,数组元素的最大下标比元素个数少数组元素的最大下标比元素个数少1 1,数组数组scorescore最大下标对应的元素是最大下标对应的元素是score4score4,而,而不是不是score5score5(访问越界)(访问越界);2022/12/21北京邮电大学信息与通信工程学院-7-4.1.1 数组定义及初始化数组定义及初始化注意注意n数组名表示数组在内存中的起始地址,可以将元素的下数组名表示数组在内存中的起始地址,可以将元素的下标理解为元素存放位置相对于数组名的偏移量,第标理解为元素存放位置相对于数组名的偏移量,第i i个元个元素素scoresco
7、rei i 的起始地址相对于数组的起始地址偏移了的起始地址相对于数组的起始地址偏移了i i个个intint型变量所占空间型变量所占空间;n每个元素可以视为一个同类型的变量,如每个元素可以视为一个同类型的变量,如scorescorei i 可以视可以视为一个整型变量为一个整型变量;n数组的每个元素占用空间大小与同类型变量占用的内存数组的每个元素占用空间大小与同类型变量占用的内存大小一样大小一样;n数组占用的内存空间是其全部元素所占空间的总和数组占用的内存空间是其全部元素所占空间的总和,如如果数组有果数组有N N个元素,它所占的字节数可以通过以下方式得个元素,它所占的字节数可以通过以下方式得到:到
8、:sizeof(sizeof(数组名数组名)或或 N N*sizeof(*sizeof(数组类型数组类型)。2022/12/21北京邮电大学信息与通信工程学院-8-4.1.1 数组定义及初始化数组定义及初始化2.2.数组初始化数组初始化在定义数组时,直接给出赋给数组元素的值,称为在定义数组时,直接给出赋给数组元素的值,称为数组初始化。数组初始化。数组初始化数组初始化语法语法形式形式 类型标识符类型标识符 数组名数组名 常量表达式常量表达式=以逗号隔开的初以逗号隔开的初始化值始化值;2022/12/21北京邮电大学信息与通信工程学院-9-4.1.1 数组定义及初始化数组定义及初始化例:例:定义并
9、初始化整型数组定义并初始化整型数组score5score5的语句为:的语句为:int score5=80,70,90,95,60;int score5=80,70,90,95,60;初始化列表中的数据依次赋给元素初始化列表中的数据依次赋给元素score0score0、score1score1、score2score2、score3score3、score4score4。注意注意不要丢掉语句最后的分号。不要丢掉语句最后的分号。2022/12/21北京邮电大学信息与通信工程学院-10-4.1.1 数组定义及初始化数组定义及初始化注意注意n初始化数组时,给定的初始化数值不能比数组元素多,初始化数组时
10、,给定的初始化数值不能比数组元素多,但可以比数组元素少但可以比数组元素少;如果少,初始化列表中的初始值如果少,初始化列表中的初始值将从下标将从下标0 0开始依次分配给各元素,后面没有得到初始值开始依次分配给各元素,后面没有得到初始值的元素被初始化为的元素被初始化为0 0。doubled10=1.0,2.0;n如果使用初始化列表,则表内至少包含一个初始值,否如果使用初始化列表,则表内至少包含一个初始值,否则编译将出现错误。则编译将出现错误。n如果没有初始化列表,即只定义不做初始化,一般在函如果没有初始化列表,即只定义不做初始化,一般在函数内部定义的自动局部数组,其各元素的值是随机值,数内部定义的
11、自动局部数组,其各元素的值是随机值,使用时需要重新给数组元素赋值。使用时需要重新给数组元素赋值。2022/12/21北京邮电大学信息与通信工程学院-11-4.1.1 数组定义及初始化数组定义及初始化n如果在初始化列表中给定数组元素的全部值,可以省略如果在初始化列表中给定数组元素的全部值,可以省略中括号中元素个数常量表示式。上述中括号中元素个数常量表示式。上述scorescore数组的初始化数组的初始化也可以写成:也可以写成:intscore=80,70,90,95,60;此时,编译器自动计算出数组元素的个数为此时,编译器自动计算出数组元素的个数为5 5,给,给scorescore数数组分配能够
12、存放组分配能够存放5 5个个intint型数据的连续空间。型数据的连续空间。思考题:如何将一个在某函数内部定义的自动局部数组的思考题:如何将一个在某函数内部定义的自动局部数组的所有元素都初始化为所有元素都初始化为0 0?最简单的方法是什么?最简单的方法是什么?2022/12/21北京邮电大学信息与通信工程学院-12-4.1.1 数组定义及初始化数组定义及初始化例例4-1 4-1 定义各种基本类型的数组并初始化,利用定义各种基本类型的数组并初始化,利用debugdebug调试方式观察数组各元素得到的值、数组占调试方式观察数组各元素得到的值、数组占用的空间、数组元素占用的空间。用的空间、数组元素占
13、用的空间。2022/12/21北京邮电大学信息与通信工程学院-13-2022/12/21北京邮电大学信息与通信工程学院-14-/例例4-1数数组组的定的定义义、初始化,、初始化,查查看数看数组组的大小的大小#includeusingnamespacestd;voidmain()constintN=5;charchArrayN;shortintshArrayN=1,2,3,4,5;intiArrayN=10;floatfArray=3.1f,4.1f,5.0f;doubledArrayN=3.14,6.28;intk;2022/12/21北京邮电大学信息与通信工程学院-15-for(k=0;kN
14、;k+)coutchArrayk,;coutendl;for(k=0;kN;k+)coutshArrayk,;coutendl;for(k=0;kN;k+)coutiArrayk,;coutendl;for(k=0;k3;k+)coutfArrayk,;coutendl;for(k=0;kN;k+)coutdArrayk,;coutendl;运行运行结结果:果:?1,2,3,4,5,10,0,0,0,0,3.1,4.1,5,3.14,6.28,0,0,0,说明说明符号常量符号常量N N,用于说明,用于说明数组的大小;数组的大小;使用符号常量说明数组使用符号常量说明数组的大小便于程序修改,的大小
15、便于程序修改,如果想让数组的大小为如果想让数组的大小为100100,只需修改,只需修改N N的值即的值即可,其他语句不需要修可,其他语句不需要修改;改;在多文件结构中,可将在多文件结构中,可将一些符号常量的定义放一些符号常量的定义放在头文件中,更利于工在头文件中,更利于工程的维护和修改。程的维护和修改。4.1.2 访问数组元素访问数组元素 数组元素是用下标来区分的,指定要访问的数组元素数组元素是用下标来区分的,指定要访问的数组元素的语法形式为:的语法形式为:数组名数组名 下标表达式下标表达式 下标表达式:可以是常量、变量或表达式,其值大于或等于下标表达式:可以是常量、变量或表达式,其值大于或等
16、于0 0,小于数组的大小。,小于数组的大小。例:例:constintN=8;floatangleN;for(intk=0;kN;k+)anglek=3.14f/N*k;/给元素赋值,写操作给元素赋值,写操作coutanglek,;/读取元素值读取元素值2022/12/21北京邮电大学信息与通信工程学院-16-4.1.2 访问数组元素例例4-2 4-2 将正弦函数的一个周期将正弦函数的一个周期2 2 分为分为N N等份,等份,定义数组分别存储自变量值和函数值,并显定义数组分别存储自变量值和函数值,并显示数组元素的值。示数组元素的值。2022/12/21北京邮电大学信息与通信工程学院-17-202
17、2/12/21北京邮电大学信息与通信工程学院-18-/例例4-2用数用数组组存存储储和和显显示正弦函数一周期内的示正弦函数一周期内的值值#include#include#includeusingnamespacestd;voidmain()constintN=8;doublexN;/自自变变量量值值 doubleyN;/函数函数值值constdoublePI2=3.14159*2;doubledelta=PI2/N;coutsetw(8)弧度弧度setw(12)sin(x)endl;for(intk=0;kN;k+)xk=k*delta;yk=sin(xk);coutsetw(10)xk,yk
18、endl;运行运行结结果:果:弧度弧度sin(x)0,00.785397,0.7071061.57079,12.35619,0.7071083.14159,2.65359e-0063.92699,-0.7071044.71238,-15.49778,-0.707114.1.2 访问数组元素访问数组元素时需要注意访问数组元素时需要注意(1 1)数组元素的下标表达式的结果必须为)数组元素的下标表达式的结果必须为0 0或正整数。或正整数。(2 2)数组元素的下标值不得超过数组声明时所限定的)数组元素的下标值不得超过数组声明时所限定的上下界。上下界。n数组元素下标的下界是数组元素下标的下界是0 0,上
19、界是相应维数大小减,上界是相应维数大小减1 1。例:例:int a10;/aint a10;/a数组可使用的有效下标为数组可使用的有效下标为0 09 9float f50;/ffloat f50;/f数组可使用的有效下标为数组可使用的有效下标为0 049492022/12/21北京邮电大学信息与通信工程学院-19-4.1.2 访问数组元素访问数组元素时需要注意访问数组元素时需要注意(3 3)越界访问越界访问问题问题如果访问数组元素时,使用的下标不是有效范围内的值,会造如果访问数组元素时,使用的下标不是有效范围内的值,会造成成“越界访问越界访问”错误。错误。由于编译器在编译程序时不会检查这种错误
20、,所以编辑人员要由于编译器在编译程序时不会检查这种错误,所以编辑人员要特别小心,尽可能杜绝这类错误发生。特别小心,尽可能杜绝这类错误发生。使用面向对象程序设计技术的读者可以定义下标不能越界的数使用面向对象程序设计技术的读者可以定义下标不能越界的数组,也就是组,也就是C+C+中的中的vectorvector类,相关内容可参见附录。类,相关内容可参见附录。2022/12/21北京邮电大学信息与通信工程学院-20-4.1.3 字符数组字符数组charchar型的数组称为字符数组,通常用来存储字型的数组称为字符数组,通常用来存储字符串。符串。定义并且初始化字符数组:定义并且初始化字符数组:char c
21、hArray=hello world!;char chArray=hello world!;2022/12/21北京邮电大学信息与通信工程学院-21-4.1.3 字符数组字符数组1 1初始化字符数组初始化字符数组两种方法两种方法:(1 1)用双引号内的字符串初始化字符数组用双引号内的字符串初始化字符数组例:例:char array10=hello;char array10=hello;可以省略大括号,简化为:可以省略大括号,简化为:char array10=hello;char array10=hello;用这种方法初始化时,系统自动在数组最后用这种方法初始化时,系统自动在数组最后一个元素后面
22、补一个元素后面补00(结束符)。(结束符)。2022/12/21北京邮电大学信息与通信工程学院-22-4.1.3 字符数组字符数组(2 2)用字符常量来初始化字符数组用字符常量来初始化字符数组例:例:char array10=h,e,l,l,o,0;char array10=h,e,l,l,o,0;该方法将初始值一一列举在初始化列表中,这种方法该方法将初始值一一列举在初始化列表中,这种方法通常用于输入不容易在键盘上生成的不可见字符。通常用于输入不容易在键盘上生成的不可见字符。下面的代码中初始化值包含两个制表符。下面的代码中初始化值包含两个制表符。char array10=a,t,b,t,0;c
23、har array10=a,t,b,t,0;注意,此种方式下,编程者要自己添加字符串结束符注意,此种方式下,编程者要自己添加字符串结束符(00),同时不要忘记为最后的),同时不要忘记为最后的00留出空间。留出空间。2022/12/21北京邮电大学信息与通信工程学院-23-4.1.3 字符数组字符数组2 2字符数组的输入和输出字符数组的输入和输出字符字符数组的输入是给数组各元素赋值的数组的输入是给数组各元素赋值的过程过程在在循环中通过循环中通过cincin一个一个地一个一个地输入输入通过通过cincin整串整串输入输入调用调用I/OI/O流类的成员函数输入,例如使用流类的成员函数输入,例如使用g
24、etline()getline()函数输入函数输入一行字符一行字符。charbuffer80;for(intk=0;kbufferk;cinbuffer;cin.getline(buffer,80,n);2022/12/21北京邮电大学信息与通信工程学院-24-4.1.3 字符数组字符数组2 2字符数组的输入和输出字符数组的输入和输出字符数组的输出字符数组的输出逐元素输出逐元素输出通过数组名输出。通过数组名输出。例如,下面的语句输出字符数组例如,下面的语句输出字符数组bufferbuffer中的字符串:中的字符串:coutbuffer;coutbuffer;例例4-3 4-3 从键盘输入一行或
25、多行字符串,用字符数组存从键盘输入一行或多行字符串,用字符数组存储,并统计所输入的字符串中储,并统计所输入的字符串中2626个字母出现的次数。个字母出现的次数。2022/12/21北京邮电大学信息与通信工程学院-25-2022/12/21北京邮电大学信息与通信工程学院-26-/例例4-3输输入入26个英文字符的分布个英文字符的分布统计统计#includeusingnamespacestd;voidmain()/数数组组及及变变量定量定义义;constintN=80;charbufferN;intk=0;constintNUM=26;intcountsNUM=0;charlettersNUM;i
26、nti=0;2022/12/21北京邮电大学信息与通信工程学院-27-do/循循环输环输入每一行字符入每一行字符coutenterastring:n;cin.getline(buffer,N,n);/获获得一行得一行输输入字符串入字符串k=0;/对对于于输输入的每一行字符,入的每一行字符,统计统计字符出字符出现现的次数的次数while(bufferk!=0)i=tolower(bufferk)-a;countsi+;k+;/countstolower(bufferk+)-a+;/用此行可代替前三句用此行可代替前三句while(buffer0!=0);2022/12/21北京邮电大学信息与通信工
27、程学院-28-coutthestatisticsresult:endl;for(i=0;i0)coutlettersi:countsiendl;思考题:如何统计一个思考题:如何统计一个txttxt文件中各种字文件中各种字符出现的次数?符出现的次数?2022/12/21北京邮电大学信息与通信工程学院-29-4.1.4 多维数组1 1多维数组的定义多维数组的定义定义多维数组语法形式如下。定义多维数组语法形式如下。n二维数组二维数组类型标识符类型标识符 数组名标识符数组名标识符 常量表达式常量表达式11常量表达式常量表达式22;n三维数组三维数组类型标识符类型标识符 数组名标识符数组名标识符 常量表
28、达式常量表达式11常量表达式常量表达式22常常量表达式量表达式33;nn n维数组维数组类型标识符类型标识符 数组名标识符数组名标识符 常量表达式常量表达式11 常量表达式常量表达式n n;2022/12/21北京邮电大学信息与通信工程学院-30-4.1.4 多维数组例:例:bool seat106;/bool seat106;/座位座位 unsigned char image256128 unsigned char image256128;/256/256行行128128列列图像图像 float matrix33;/float matrix33;/三元一次线性方程组的系数矩阵三元一次线性方程
29、组的系数矩阵 char table58;/char table58;/课表课表二二维数维数组元素的下标从左至右称为行、列。组元素的下标从左至右称为行、列。char book2003240;char book2003240;/书书三维三维数组元素的下标由左至右可称为页、行、列或层、数组元素的下标由左至右可称为页、行、列或层、行、列行、列。2022/12/21北京邮电大学信息与通信工程学院-31-4.1.4 多维数组在定义多维数组时,在定义多维数组时,需要注意需要注意n首先要根据所要表示的对象内容,选择合适的数据类型首先要根据所要表示的对象内容,选择合适的数据类型(数组的类型,也就是数组元素的类型
30、);(数组的类型,也就是数组元素的类型);n其次确定数组的维数,即几维数组(有几维就有几对中其次确定数组的维数,即几维数组(有几维就有几对中括号);括号);n最后确定每一维的大小(中括号内)。最后确定每一维的大小(中括号内)。特别特别强调强调:数组每一维的大小必须用常量表达式声:数组每一维的大小必须用常量表达式声明,否则,编译会出错。这也是明,否则,编译会出错。这也是C C和和C+C+数组的一大数组的一大缺陷:数组的使用不够灵活。缺陷:数组的使用不够灵活。2022/12/21北京邮电大学信息与通信工程学院-32-4.1.4 多维数组2 2多维数组在内存中的映像多维数组在内存中的映像例:例:in
31、td15;intd223;intd3232;2022/12/21北京邮电大学信息与通信工程学院-33-4.1.4 多维数组2 2多维数组在内存中的映像多维数组在内存中的映像一维数组一维数组在内存中从数组名所代表的在内存中从数组名所代表的起始地址开始,按下标次序存储起始地址开始,按下标次序存储;数数组组d1d1的第的第i i个元素在内存中的起始位置个元素在内存中的起始位置相对于数组名所代表的地址偏移了相对于数组名所代表的地址偏移了i i个个intint型变量空间大小。型变量空间大小。2022/12/21北京邮电大学信息与通信工程学院-34-4.1.4 多维数组2 2多维数组在内存中的映像多维数组
32、在内存中的映像二维数组二维数组在内存中从数组名所代表的起始地址开始,在内存中从数组名所代表的起始地址开始,按行优先依次存储按行优先依次存储;数组数组d2d2的第的第i i行第行第j j列元素在内存中的起始位置相对于列元素在内存中的起始位置相对于数组起始地址偏移了数组起始地址偏移了 行号行号列数列数+列号列号个个intint型变量空间大小型变量空间大小。例如,例如,元素元素d2d2i i j j 的起始地址的起始地址计算计算:&d200+(&d200+(i i 3+3+j j)2022/12/21北京邮电大学信息与通信工程学院-35-4.1.4 多维数组2 2多维数组在内存中的映像多维数组在内存
33、中的映像三维数组三维数组在内存中从数组名所代表的起始地址开始,在内存中从数组名所代表的起始地址开始,按页、行、列依次存储,即按使数组元素最右边的下按页、行、列依次存储,即按使数组元素最右边的下标值最快地变化来存储。标值最快地变化来存储。数组数组d3d3的第的第k k页第页第i i行第行第j j列元素在内存中的起始位置相列元素在内存中的起始位置相对于数组起始地址偏移了对于数组起始地址偏移了页号页号(行数(行数列数)列数)+行号行号列数列数+列号列号 个个intint型变量空间大小型变量空间大小。例如例如,元素元素d3d3k k i i j j 的起始地址为:的起始地址为:&d3000&d3000
34、+(k k3 32 2+i i2 2+j j)。2022/12/21北京邮电大学信息与通信工程学院-36-4.1.4 多维数组3 3初始化多维数组初始化多维数组n提供数组元素的全部初始值提供数组元素的全部初始值n提供部分元素的初始值提供部分元素的初始值这些初始这些初始化化值位于大括号内,构成初始值列表值位于大括号内,构成初始值列表,多多维数组初始化时需要使用嵌套的括号。维数组初始化时需要使用嵌套的括号。inta24=4,3,2,1,1,2,3,4;doubled34=l.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0;2022/12/21北京邮
35、电大学信息与通信工程学院-37-4.1.4 多维数组3 3初始化多维数组初始化多维数组n可以省略内层的括号,只要程序好读即可可以省略内层的括号,只要程序好读即可。例如用换行的方式:例如用换行的方式:int a24=4,3,2,1,1,2,3,4;int a24=4,3,2,1,1,2,3,4;double d34=l.0,2.0,3.0,4.0,double d34=l.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0;9.0,10.0,11.0,12.0;2022/12/21北京邮电大学信息与通信工程学院-38-
36、4.1.4 多维数组3 3初始化多维数组初始化多维数组 n多维数组的初始化,也可以只给出部分值多维数组的初始化,也可以只给出部分值;例:例:int a24=4,3;int a24=4,3;则只有则只有a00a00、a01a01分别得到初始值分别得到初始值4 4和和3 3,其余各,其余各元素的值为元素的值为0 0。n可利用此特性将一些用做计数器的多维数组初始可利用此特性将一些用做计数器的多维数组初始化为化为0 0。例例:定义并初始化二维整型计数器定义并初始化二维整型计数器countscounts:int counts512256=0;int counts512256=0;这是将多维数组元素置这是
37、将多维数组元素置0 0的最简便方法之一。的最简便方法之一。2022/12/21北京邮电大学信息与通信工程学院-39-4.1.4 多维数组4 4访问多维数组的元素访问多维数组的元素访问多维数组的元素时,只要指定要访问的数组元访问多维数组的元素时,只要指定要访问的数组元素的具体下标值即可,语法形式为:素的具体下标值即可,语法形式为:数组名数组名 下标表达式下标表达式11下标表达式下标表达式n n 其中,下标表达式的个数同数组维数,其中,下标表达式的个数同数组维数,“下标表达式下标表达式i”i”(1in1in)可以用常量、变量或表达式,其值大于)可以用常量、变量或表达式,其值大于或等于或等于0 0,
38、小于数组对应维的大小,即,小于数组对应维的大小,即 00下标表达式下标表达式i i的值的值 第第i i维的大小维的大小 2022/12/21北京邮电大学信息与通信工程学院-40-4.1.4 多维数组例:例:constintM=8,N=4;charmatrixMN;for(inti=0;iM;i+)for(intj=0;jmatrixij;/给元素赋值,写操作给元素赋值,写操作2022/12/21北京邮电大学信息与通信工程学院-41-4.1.4 多维数组例例4-5 4-5 编程实现矩阵转置功能,矩阵行数编程实现矩阵转置功能,矩阵行数为为MM,列数为,列数为N N,用二维数组表示矩阵。,用二维数组
39、表示矩阵。2022/12/21北京邮电大学信息与通信工程学院-42-2022/12/21北京邮电大学信息与通信工程学院-43-/例例4-5矩矩阵转阵转置置#include#include#includeusingnamespacestd;voidmain()constintM=5;constintN=6;intmatrixMN;/矩矩阵阵inttMatrixNM;/转转置矩置矩阵阵srand(unsignedint)time(NULL);inti,j;2022/12/21北京邮电大学信息与通信工程学院-44-coutmatrix:endl;for(i=0;iM;i+)/生成矩生成矩阵阵for(
40、j=0;jN;j+)matrixij=rand()%100;/给给数数组组元素元素赋值赋值coutsetw(4)matrixij;coutendl;2022/12/21北京邮电大学信息与通信工程学院-45-couttransposeofmatrix:endl;for(i=0;iN;i+)/得到得到转转置矩置矩阵阵for(j=0;jM;j+)tMatrixij=matrixji;/给给数数组组元素元素赋值赋值coutsetw(4)tMatrixij;coutendl;4.1.5 数组应用举例例例4-6 404-6 40个学生用个学生用1 11010的分数评价学生的分数评价学生食堂的质量(食堂的质
41、量(1 1表示很差,表示很差,1010表示很好),表示很好),将将4040个分数放在整型数组中,并汇总调查个分数放在整型数组中,并汇总调查结果。结果。2022/12/21北京邮电大学信息与通信工程学院-46-2022/12/21北京邮电大学信息与通信工程学院-47-/例例4-6汇总评汇总评分分结结果果#include#includeusingnamespacestd;voidmain()constintcStuNum=40;/学生人数学生人数constintcScoreNum=11;/分数个数分数个数intscorecStuNum=1,2,6,4,8,5,9,7,8,10,1,6,3,8,6,
42、10,3,8,2,6,6,5,6,8,7,7,5,5,6,7,4,6,8,10,3,1,2,7,9,6;/全部分数全部分数intcountscScoreNum=0;/分数分数统计计统计计数器,初始化数器,初始化为为02022/12/21北京邮电大学信息与通信工程学院-48-intk;for(intk=0;kcStuNum;k+)/统计统计分数分数countsscorek+;coutscoresetw(10)countsendl;for(k=1;kcScoreNum;k+)/输输出出结结果果coutsetw(6)ksetw(10)countskendl;4.1.5 数组应用举例例例4-7 4-7
43、 编程实现计算两个编程实现计算两个N N阶方阵乘积矩阵阶方阵乘积矩阵的功能,矩阵元素为整形,的功能,矩阵元素为整形,N=5N=5。2022/12/21北京邮电大学信息与通信工程学院-49-2022/12/21北京邮电大学信息与通信工程学院-50-/例例4-7求两个求两个N阶阶方方阵阵乘乘积积矩矩阵阵#include#include#includeusingnamespacestd;voidmain()constintN=5;intaNN,bNN;/两个相乘的矩两个相乘的矩阵阵intcNN=0;/乘乘积积矩矩阵阵inti,j,k;srand(unsignedint)time(NULL);/生成矩
44、生成矩阵阵a和和bfor(i=0;iN;i+)/行循行循环环for(j=0;jN;j+)/列循列循环环aij=rand()%100;bij=rand()%100;2022/12/21北京邮电大学信息与通信工程学院-51-/显显示矩示矩阵阵a,再,再显显示矩示矩阵阵bcoutmatrixa:endl;for(i=0;iN;i+)for(j=0;jN;j+)coutsetw(5)aij;coutendl;coutmatrixb:endl;for(i=0;iN;i+)for(j=0;jN;j+)coutsetw(5)bij;coutendl;2022/12/21北京邮电大学信息与通信工程学院-52-
45、/计计算乘算乘积积矩矩阵阵c,并,并显显示示for(i=0;iN;i+)for(j=0;jN;j+)for(k=0;kN;k+)/求求c的一个元素的一个元素cij+=aik*bkj;coutmatrixc:endl;for(i=0;iN;i+)for(j=0;jN;j+)coutsetw(10)cij;coutendl;4.1.5 数组应用举例例例4-8 4-8 给定二维数组,编程计算元素的给定二维数组,编程计算元素的均值和方差。均值和方差。2022/12/21北京邮电大学信息与通信工程学院-53-2022/12/21北京邮电大学信息与通信工程学院-54-/例例4-8计计算一算一组组数据的均数
46、据的均值值和方差和方差#include#include#includeusingnamespacestd;voidmain()constintROWS=20;constintCOLS=10;intmatrixROWSCOLS=0;introw,col;srand(unsigned)time(NULL);for(row=0;rowROWS;row+)/生成数据生成数据for(col=0;colCOLS;col+)matrixrowcol=rand()%100;coutsetw(4)matrixrowcol,;coutendl;2022/12/21北京邮电大学信息与通信工程学院-55-/统计统计均
47、均值值floatmean(0),var(0);for(row=0;rowROWS;row+)for(col=0;col0)mean/=size;elsemean=0;2022/12/21北京邮电大学信息与通信工程学院-56-/统计统计方差方差for(row=0;rowROWS;row+)for(col=0;col0)var/=size;elsevar=0;/显显示示统计结统计结果果coutmean=mean;stdvar=varendl;4.2 枚 举 类 型C+C+语言不仅有丰富的基本数据类型,而语言不仅有丰富的基本数据类型,而且允许用户自己定义数据类型。且允许用户自己定义数据类型。枚举、结
48、构、联合都属于自定义类型枚举、结构、联合都属于自定义类型2022/12/21北京邮电大学信息与通信工程学院-57-2022/12/21北京邮电大学信息与通信工程学院-58-4.2.1 4.2.1 枚举类型定义枚举类型定义枚举型数据类型(简称枚举型数据类型(简称枚举类型枚举类型)n有些问题中所处理数据的取值可以一一列举出来有些问题中所处理数据的取值可以一一列举出来例例:一周七天一周七天:星星期期日日、星星期期1 1、星星期期2 2、星星期期3 3、星星期期4 4、星星期期5 5、星星期期6 6n定定义义一一种种数数据据类类型型,一一一一列列举举这这种种数数据据类类型型的的变变量量的可能值,的可能
49、值,称为称为枚举类型枚举类型,声明形式为:,声明形式为:enum enum 枚举类型名枚举类型名 枚举元素列表枚举元素列表;n可以使用这种自定义数据类型来定义变量可以使用这种自定义数据类型来定义变量。4.2.2 枚举变量定义及使用例如:例如:enumweekdaysun,mon,tue,wed,thu,fri,sat;weekdayday;/定义一个定义一个weekdayweekday类型的变量:类型的变量:变变量量dayday的的取取值值范范围围:类类型型定定义义时时,表表里里列列举举出出来来的的七种标识符,把这些标识符看作符号常量。七种标识符,把这些标识符看作符号常量。例如:例如:day=
50、sat;day=sat;枚举常量在机器内部仍然是用整型数来存取枚举常量在机器内部仍然是用整型数来存取定定义义某某个个枚枚举举类类型型的的变变量量时时,分分配配几几个个字字节节的的内内存存空间呢?空间呢?2022/12/21北京邮电大学信息与通信工程学院-59-自定义的自定义的数据类型数据类型枚举元素或枚举元素或枚举常量枚举常量2022/12/21北京邮电大学信息与通信工程学院-60-使用枚举类型注意:使用枚举类型注意:enumweekdaysun,mon,tue,wed,thu,fri,sat;在在类类型型定定义义之之后后,对对枚枚举举元元素素按按常常量量处处理理,不不能对它们赋值。能对它们赋