c高级语言程序设计第4章

上传人:tian****1990 文档编号:75143087 上传时间:2019-01-30 格式:PPT 页数:93 大小:1.09MB
返回 下载 相关 举报
c高级语言程序设计第4章_第1页
第1页 / 共93页
c高级语言程序设计第4章_第2页
第2页 / 共93页
c高级语言程序设计第4章_第3页
第3页 / 共93页
c高级语言程序设计第4章_第4页
第4页 / 共93页
c高级语言程序设计第4章_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《c高级语言程序设计第4章》由会员分享,可在线阅读,更多相关《c高级语言程序设计第4章(93页珍藏版)》请在金锄头文库上搜索。

1、C+高级语言程序设计,第4章 数组及其他自定义类型 北京邮电大学信息与通信工程学院,2019/1/30,北京邮电大学信息与通信工程学院,1,第4章 数组及其他自定义类型,4.1 数组 数组基本概念、数组初始化、访问数组元素、字符型数组、多维数组 4.2 枚举类型 枚举类型的定义、枚举型变量的定义及使用 4.3 结构类型 结构类型的定义、结构变量的定义及初始化、结构变量的使用 4.4 联合类型 联合类型的定义、联合型变量的定义及使用,2019/1/30,北京邮电大学信息与通信工程学院,-2-,4.1 数组,数组是具有一定顺序关系的若干相同类型变量的集合,组成数组的变量称为该数组的元素。 数组属于

2、构造类型。 数组是实际编程中经常使用的一种数据结构。,2019/1/30,北京邮电大学信息与通信工程学院,-3-,4.1.1 数组定义及初始化,1. 一维数组的定义 一维数组定义的语法形式 类型标识符 数组名常量表达式; 说明 类型标识符:任何合法的类型标识符,用于说明数组元素的类型; 数组名 :程序员对该数组的命名,数组的命名规则同变量命名; 方括号及常量表达式:用于说明该数组中元素的个数。,2019/1/30,北京邮电大学信息与通信工程学院,-4-,4.1.1 数组定义及初始化,例: 10级119班30名同学“C+程序设计”课程的成绩 int Cscore30; 实验,测得一组电阻R随温度

3、T变化的值 float Ri30; short Tc30;,2019/1/30,北京邮电大学信息与通信工程学院,-5-,4.1.1 数组定义及初始化,一维数组在内存中存储映射 int score 5;,2019/1/30,北京邮电大学信息与通信工程学院,-6-,4.1.1 数组定义及初始化,注意 定义一个数组,系统为这个数组保留一定数量的连续内存单元,数组元素依次占用这一连续内存空间,这段内存空间起始地址的外部标识就是数组名; 数组名是一个地址常量,禁止给数组名赋值; 数组各元素用数组名及下标(或称索引值)来标识,score0,score1,score4分别表示数组的第15个元素; C语言和C

4、+语言中,元素的下标从0开始计, 数组元素的最大下标比元素个数少1,数组 score最大下标对应的元素是score4,而 不是score5(访问越界);,2019/1/30,北京邮电大学信息与通信工程学院,-7-,4.1.1 数组定义及初始化,注意 数组名表示数组在内存中的起始地址,可以将元素的下标理解为元素存放位置相对于数组名的偏移量,第i个元素scorei的起始地址相对于数组的起始地址偏移了i个int型变量所占空间; 每个元素可以视为一个同类型的变量,如scorei可以视为一个整型变量; 数组的每个元素占用空间大小与同类型变量占用的内存大小一样; 数组占用的内存空间是其全部元素所占空间的总

5、和,如果数组有N个元素,它所占的字节数可以通过以下方式得到:sizeof (数组名) 或 N*sizeof (数组类型)。,2019/1/30,北京邮电大学信息与通信工程学院,-8-,4.1.1 数组定义及初始化,2. 数组初始化 在定义数组时,直接给出赋给数组元素的值,称为数组初始化。 数组初始化语法形式 类型标识符 数组名常量表达式 = 以逗号隔开的初始化值;,2019/1/30,北京邮电大学信息与通信工程学院,-9-,4.1.1 数组定义及初始化,例: 定义并初始化整型数组score5的语句为: int score5 = 80,70,90,95,60; 初始化列表中的数据依次赋给元素sc

6、ore0、score1、score2、score3、score4。 注意不要丢掉语句最后的分号。,2019/1/30,北京邮电大学信息与通信工程学院,-10-,4.1.1 数组定义及初始化,注意 初始化数组时,给定的初始化数值不能比数组元素多,但可以比数组元素少;如果少,初始化列表中的初始值将从下标0开始依次分配给各元素,后面没有得到初始值的元素被初始化为0。 double d10 = 1.0 ,2.0; 如果使用初始化列表,则表内至少包含一个初始值,否则编译将出现错误。 如果没有初始化列表,即只定义不做初始化,一般在函数内部定义的自动局部数组,其各元素的值是随机值,使用时需要重新给数组元素赋

7、值。,2019/1/30,北京邮电大学信息与通信工程学院,-11-,4.1.1 数组定义及初始化,如果在初始化列表中给定数组元素的全部值,可以省略中括号中元素个数常量表示式。上述score数组的初始化也可以写成: int score = 80,70,90,95,60; 此时,编译器自动计算出数组元素的个数为5,给score数组分配能够存放5个int型数据的连续空间。 思考题:如何将一个在某函数内部定义的自动局部数组的所有元素都初始化为0?最简单的方法是什么?,2019/1/30,北京邮电大学信息与通信工程学院,-12-,4.1.1 数组定义及初始化,例4-1 定义各种基本类型的数组并初始化,利

8、用debug调试方式观察数组各元素得到的值、数组占用的空间、数组元素占用的空间。,2019/1/30,北京邮电大学信息与通信工程学院,-13-,2019/1/30,北京邮电大学信息与通信工程学院,-14-,/例4-1数组的定义、初始化,查看数组的大小 #include using namespace std; void main() const int N = 5; char chArrayN; short int shArrayN = 1,2,3,4,5; int iArrayN = 10; float fArray = 3.1f, 4.1f, 5.0f; double dArrayN =

9、3.14, 6.28; int k;,2019/1/30,北京邮电大学信息与通信工程学院,-15-,for (k=0; kN; 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,

10、3, 4, 5, 10, 0, 0, 0, 0, 3.1, 4.1, 5, 3.14, 6.28, 0, 0, 0,说明 符号常量N,用于说明数组的大小; 使用符号常量说明数组的大小便于程序修改,如果想让数组的大小为100,只需修改N的值即可,其他语句不需要修改; 在多文件结构中,可将一些符号常量的定义放在头文件中,更利于工程的维护和修改。,4.1.2 访问数组元素,数组元素是用下标来区分的,指定要访问的数组元素的语法形式为: 数组名下标表达式 下标表达式:可以是常量、变量或表达式,其值大于或等于0,小于数组的大小。 例: const int N = 8; float angleN; for

11、(int k=0; kN; k+) anglek = 3.14f / N * k; /给元素赋值,写操作 coutanglek “, “; /读取元素值 ,2019/1/30,北京邮电大学信息与通信工程学院,-16-,4.1.2 访问数组元素,例4-2 将正弦函数的一个周期2分为N等份,定义数组分别存储自变量值和函数值,并显示数组元素的值。,2019/1/30,北京邮电大学信息与通信工程学院,-17-,2019/1/30,北京邮电大学信息与通信工程学院,-18-,/例4-2用数组存储和显示正弦函数一周期内的值 #include #include #include using namespace

12、 std; void main() const int N = 8; double xN; /自变量值 double yN; /函数值 const double PI2 = 3.14159 * 2; double delta = PI2 / N; coutsetw(8)“弧度“setw(12)“sin(x)“endl; for (int k=0; kN; k+) xk = k * delta; yk = sin(xk); coutsetw(10)xk“, “ykendl; ,运行结果: 弧度 sin(x) 0, 0 0.785397, 0.707106 1.57079, 1 2.35619,

13、0.707108 3.14159, 2.65359e-006 3.92699, -0.707104 4.71238, -1 5.49778, -0.70711,4.1.2 访问数组元素,访问数组元素时需要注意 (1)数组元素的下标表达式的结果必须为0或正整数。 (2)数组元素的下标值不得超过数组声明时所限定的上下界。 数组元素下标的下界是0,上界是相应维数大小减1。 例: int a10; /a数组可使用的有效下标为09 float f50; /f数组可使用的有效下标为049,2019/1/30,北京邮电大学信息与通信工程学院,-19-,4.1.2 访问数组元素,访问数组元素时需要注意 (3)

14、越界访问问题 如果访问数组元素时,使用的下标不是有效范围内的值,会造成“越界访问”错误。 由于编译器在编译程序时不会检查这种错误,所以编辑人员要特别小心,尽可能杜绝这类错误发生。 使用面向对象程序设计技术的读者可以定义下标不能越界的数组,也就是C+中的vector类,相关内容可参见附录。,2019/1/30,北京邮电大学信息与通信工程学院,-20-,4.1.3 字符数组,char型的数组称为字符数组,通常用来存储字符串。 定义并且初始化字符数组: char chArray = “hello world!“;,2019/1/30,北京邮电大学信息与通信工程学院,-21-,4.1.3 字符数组,1

15、初始化字符数组 两种方法: (1)用双引号内的字符串初始化字符数组 例:char array10=“hello“; 可以省略大括号,简化为: char array10= “hello“; 用这种方法初始化时,系统自动在数组最后一个元素后面补0(结束符)。,2019/1/30,北京邮电大学信息与通信工程学院,-22-,4.1.3 字符数组,(2)用字符常量来初始化字符数组 例: char array10= h, e, l, l, o, 0; 该方法将初始值一一列举在初始化列表中,这种方法通常用于输入不容易在键盘上生成的不可见字符。 下面的代码中初始化值包含两个制表符。 char array10= a, t, b, t, 0; 注意,此种方式下,编程者要自己添加字符串结束符(0),同时不要忘记为最后的0留出空间。,2019/1/30,北京邮电大学信息与通信工程学院,-23-,4.1.3 字符数组,2字符数组的输入和输出 字符数组的输入是给数组各元素赋值的过程 在循环中通过cin一个一个地输入 通过cin整串输入 调用I/O流类的成员函数输入,例如使用getline()函数输入一行字符。 char buffer80; for(int

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号