C高级语言程序设计第4章.ppt
《C高级语言程序设计第4章.ppt》由会员分享,可在线阅读,更多相关《C高级语言程序设计第4章.ppt(93页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+高级语言程序设计高级语言程序设计第第4 4章章 数组及其他自定义类型数组及其他自定义类型北京邮电大学信息与通信工程学院北京邮电大学信息与通信工程学院 2023/1/16北京邮电大学信息与通信工程学院1第第4章章 数组及其他自定义类型数组及其他自定义类型4.1 4.1 数组数组n数组基本概念、数组初始化、访问数组元素、字数组基本概念、数组初始化、访问数组元素、字符型数组、多维数组符型数组、多维数组4.2 4.2 枚举类型枚举类型n枚举类型的定义、枚举型变量的定义及使用枚举类型的定义、枚举型变量的定义及使用4.3 4.3 结构类型结构类型n结构类型的定义、结构变量的定义及初始化、结结构类型的定
2、义、结构变量的定义及初始化、结构变量的使用构变量的使用4.4 4.4 联合类型联合类型n联合类型的定义、联合型变量的定义及使用联合类型的定义、联合型变量的定义及使用2023/1/16北京邮电大学信息与通信工程学院-2-4.1 数组数组数组是具有一定数组是具有一定顺序关系顺序关系的若干的若干相同相同类型变量的集合类型变量的集合,组成数组的变量称,组成数组的变量称为该数组的为该数组的元素元素。数组属于构造类型。数组属于构造类型。数组是实际编程中经常使用的一种数数组是实际编程中经常使用的一种数据结构。据结构。2023/1/16北京邮电大学信息与通信工程学院-3-4.1.1 数组定义及初始化数组定义及
3、初始化1.1.一维数组的定义一维数组的定义一维数组定义的语法形式一维数组定义的语法形式 类型标识符类型标识符 数组名数组名 常量表达式常量表达式;说明说明 n类型标识符类型标识符:任何合法的类型标识符任何合法的类型标识符,用于说明数组元,用于说明数组元素的类型素的类型;n数组名数组名 :程序员对该数组的命名,数组的命名规则同变程序员对该数组的命名,数组的命名规则同变量命名;量命名;n方括号方括号及及常量表达式常量表达式:用于说明该数组中元素的个数用于说明该数组中元素的个数。2023/1/16北京邮电大学信息与通信工程学院-4-4.1.1 数组定义及初始化数组定义及初始化例例:1010级级111
4、19 9班班3030名同学名同学“C+C+程序设计程序设计”课程课程的成绩的成绩 int Cscore30;int Cscore30;实验,测得一组电阻实验,测得一组电阻R R随温度随温度T T变化的值变化的值 float Ri30;float Ri30;short Tc30;short Tc30;2023/1/16北京邮电大学信息与通信工程学院-5-4.1.1 数组定义及初始化数组定义及初始化一维数组一维数组在内存中存储映射在内存中存储映射intscore5;2023/1/16北京邮电大学信息与通信工程学院-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(访问越界)(访问越界);2023/1/16北京邮电大学信息与通信工程学院-7-4.1.1 数组定义及初始化数组定义及初始化注意注意n数组名表示数组在内存中的起始地址,可以将元素的下数组名表示数组在内存中的起始地址,可以将元素的下标理解为元素存放位置相对于数组名的偏移量,第标理解为元素存放位置相对于数组名的偏移量,第i i个元个元素素scorescorei i 的
7、起始地址相对于数组的起始地址偏移了的起始地址相对于数组的起始地址偏移了i i个个intint型变量所占空间型变量所占空间;n每个元素可以视为一个同类型的变量,如每个元素可以视为一个同类型的变量,如scorescorei i 可以视可以视为一个整型变量为一个整型变量;n数组的每个元素占用空间大小与同类型变量占用的内存数组的每个元素占用空间大小与同类型变量占用的内存大小一样大小一样;n数组占用的内存空间是其全部元素所占空间的总和数组占用的内存空间是其全部元素所占空间的总和,如如果数组有果数组有N N个元素,它所占的字节数可以通过以下方式得个元素,它所占的字节数可以通过以下方式得到:到:sizeof
8、(sizeof(数组名数组名)或或 N N*sizeof(*sizeof(数组类型数组类型)。2023/1/16北京邮电大学信息与通信工程学院-8-4.1.1 数组定义及初始化数组定义及初始化2.2.数组初始化数组初始化在定义数组时,直接给出赋给数组元素的值,称为在定义数组时,直接给出赋给数组元素的值,称为数组初始化。数组初始化。数组初始化数组初始化语法语法形式形式 类型标识符类型标识符 数组名数组名 常量表达式常量表达式=以逗号隔开的初以逗号隔开的初始化值始化值;2023/1/16北京邮电大学信息与通信工程学院-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。注意注意不要丢掉语句最后的分号。不要丢掉语句最后的分号。2023/1/16北京邮电大学信息与通信工程学院-10-4.1.1 数组定义及初始化数组定义及初始化注意注意n初始化数组时,给定的初始化数值不能比数组元素多,初始化数组时,给定的初始化数值不
10、能比数组元素多,但可以比数组元素少但可以比数组元素少;如果少,初始化列表中的初始值如果少,初始化列表中的初始值将从下标将从下标0 0开始依次分配给各元素,后面没有得到初始值开始依次分配给各元素,后面没有得到初始值的元素被初始化为的元素被初始化为0 0。doubled10=1.0,2.0;n如果使用初始化列表,则表内至少包含一个初始值,否如果使用初始化列表,则表内至少包含一个初始值,否则编译将出现错误。则编译将出现错误。n如果没有初始化列表,即只定义不做初始化,一般在函如果没有初始化列表,即只定义不做初始化,一般在函数内部定义的自动局部数组,其各元素的值是随机值,数内部定义的自动局部数组,其各元
11、素的值是随机值,使用时需要重新给数组元素赋值。使用时需要重新给数组元素赋值。2023/1/16北京邮电大学信息与通信工程学院-11-4.1.1 数组定义及初始化数组定义及初始化n如果在初始化列表中给定数组元素的全部值,可以省略如果在初始化列表中给定数组元素的全部值,可以省略中括号中元素个数常量表示式。上述中括号中元素个数常量表示式。上述scorescore数组的初始化数组的初始化也可以写成:也可以写成:intscore=80,70,90,95,60;此时,编译器自动计算出数组元素的个数为此时,编译器自动计算出数组元素的个数为5 5,给,给scorescore数数组分配能够存放组分配能够存放5
12、5个个intint型数据的连续空间。型数据的连续空间。思考题:如何将一个在某函数内部定义的自动局部数组的思考题:如何将一个在某函数内部定义的自动局部数组的所有元素都初始化为所有元素都初始化为0 0?最简单的方法是什么?最简单的方法是什么?2023/1/16北京邮电大学信息与通信工程学院-12-4.1.1 数组定义及初始化数组定义及初始化例例4-1 4-1 定义各种基本类型的数组并初始化,利用定义各种基本类型的数组并初始化,利用debugdebug调试方式观察数组各元素得到的值、数组占调试方式观察数组各元素得到的值、数组占用的空间、数组元素占用的空间。用的空间、数组元素占用的空间。2023/1/
13、16北京邮电大学信息与通信工程学院-13-2023/1/16北京邮电大学信息与通信工程学院-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;2023/1/16北京邮电大学信息与通信工程学院-15-for(k=0;kN;k+)coutchArray
14、k,;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 访问数组元素访问数组元素 数组元素是用下标来区分的,指定要访问的数组元素数组元素是用下标来区分的,指定要访问的数组元素的语法形式为:的语法形式为:数组名数组名 下标表达式下标表达式 下标表达式:可以是常量、变量或表达式,其值大于或等于下标表达式:可以是常量、变量或表达式,其值大于或等于0 0,小于数组的大小。,小
16、于数组的大小。例:例:constintN=8;floatangleN;for(intk=0;kN;k+)anglek=3.14f/N*k;/给元素赋值,写操作给元素赋值,写操作coutanglek,;/读取元素值读取元素值2023/1/16北京邮电大学信息与通信工程学院-16-4.1.2 访问数组元素例例4-2 4-2 将正弦函数的一个周期将正弦函数的一个周期2 2 分为分为N N等份,等份,定义数组分别存储自变量值和函数值,并显定义数组分别存储自变量值和函数值,并显示数组元素的值。示数组元素的值。2023/1/16北京邮电大学信息与通信工程学院-17-2023/1/16北京邮电大学信息与通信
17、工程学院-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,ykendl;运行结果:运行结果:弧度弧
18、度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 049492023/1/16北京邮电大学信息与通信工程学院-19-4.1.2 访问数组元素访问数组元素时需要注意访问数组元素时需要注意(3 3)越界访问越界访问问题问题如果访问数组元素时,使用的下标不是有效范围内的值,会造如果访问数组元素时,使用的下标不是有效范围内的值,会造成成“越界访问越界访问”错误。错误。由于编译器在编译程序时不会检查这种错误,所以编辑人员要由于编译器在编译程序时
20、不会检查这种错误,所以编辑人员要特别小心,尽可能杜绝这类错误发生。特别小心,尽可能杜绝这类错误发生。使用面向对象程序设计技术的读者可以定义下标不能越界的数使用面向对象程序设计技术的读者可以定义下标不能越界的数组,也就是组,也就是C+C+中的中的vectorvector类,相关内容可参见附录。类,相关内容可参见附录。2023/1/16北京邮电大学信息与通信工程学院-20-4.1.3 字符数组字符数组charchar型的数组称为字符数组,通常用来存储字型的数组称为字符数组,通常用来存储字符串。符串。定义并且初始化字符数组:定义并且初始化字符数组:char chArray=hello world!;
21、char chArray=hello world!;2023/1/16北京邮电大学信息与通信工程学院-21-4.1.3 字符数组字符数组1 1初始化字符数组初始化字符数组两种方法两种方法:(1 1)用双引号内的字符串初始化字符数组用双引号内的字符串初始化字符数组例:例:char array10=hello;char array10=hello;可以省略大括号,简化为:可以省略大括号,简化为:char array10=hello;char array10=hello;用这种方法初始化时,系统自动在数组最后用这种方法初始化时,系统自动在数组最后一个元素后面补一个元素后面补00(结束符)。(结束符)
22、。2023/1/16北京邮电大学信息与通信工程学院-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;char array10=a,t,b,t,0;
23、注意,此种方式下,编程者要自己添加字符串结束符注意,此种方式下,编程者要自己添加字符串结束符(00),同时不要忘记为最后的),同时不要忘记为最后的00留出空间。留出空间。2023/1/16北京邮电大学信息与通信工程学院-23-4.1.3 字符数组字符数组2 2字符数组的输入和输出字符数组的输入和输出字符字符数组的输入是给数组各元素赋值的数组的输入是给数组各元素赋值的过程过程在在循环中通过循环中通过cincin一个一个地一个一个地输入输入通过通过cincin整串整串输入输入调用调用I/OI/O流类的成员函数输入,例如使用流类的成员函数输入,例如使用getline()getline()函数输入函数
24、输入一行字符一行字符。charbuffer80;for(intk=0;kbufferk;cinbuffer;cin.getline(buffer,80,n);2023/1/16北京邮电大学信息与通信工程学院-24-4.1.3 字符数组字符数组2 2字符数组的输入和输出字符数组的输入和输出字符数组的输出字符数组的输出逐元素输出逐元素输出通过数组名输出。通过数组名输出。例如,下面的语句输出字符数组例如,下面的语句输出字符数组bufferbuffer中的字符串:中的字符串:coutbuffer;coutbuffer;例例4-3 4-3 从键盘输入一行或多行字符串,用字符数组存从键盘输入一行或多行字符
25、串,用字符数组存储,并统计所输入的字符串中储,并统计所输入的字符串中2626个字母出现的次数。个字母出现的次数。2023/1/16北京邮电大学信息与通信工程学院-25-2023/1/16北京邮电大学信息与通信工程学院-26-/例例4-3输入输入26个英文字符的分布统计个英文字符的分布统计#includeusingnamespacestd;voidmain()/数组及变量定义;数组及变量定义;constintN=80;charbufferN;intk=0;constintNUM=26;intcountsNUM=0;charlettersNUM;inti=0;2023/1/16北京邮电大学信息与通
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 语言程序设计
限制150内