版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章
复杂数据及运算清华大学郑莉C+复杂数据及运算——数组修改版共53页,您现在浏览的是第1页!学习目标掌握数组的初始化及使用;掌握地址的概念及指针变量的应用;掌握引用使用;学会使用枚举、结构体等数据结构。2C+复杂数据及运算——数组修改版共53页,您现在浏览的是第2页!目录4.1数组4.1.1一维数组的声明和使用4.1.2多维数组的声明和使用
4.2指针4.2.1数据在内存中的地址4.2.2指针及指针运算3C+复杂数据及运算——数组修改版共53页,您现在浏览的是第3页!目录(续)4.3字符串4.3.1以数组存放C风格的字符串4.3.2string类型的字符串4.4枚举类型(不讲)4.5运算优先级与类型转换(已讲)4C+复杂数据及运算——数组修改版共53页,您现在浏览的是第4页!数组当需要处理大量同一类型的数据时。多数时候,对大批量同类型数据的处理,所用的方法都是相同的。例如:某门课程,一个班级的40个学生成绩。intscore1,score2……..intscore[40];C+复杂数据及运算——数组修改版共53页,您现在浏览的是第5页!枚举(不讲)当需要模拟整数的某个有限子集的时候例如:表示一星期的7天intday;//用整型常量0,1,2,3,4,5,6表示星期天到星期六。但是int的范围不仅仅是0到6。enumweek{Sun,Mon,Tue,Wen,Thu,Fri,Sat};weekday;C+复杂数据及运算——数组修改版共53页,您现在浏览的是第6页!关于本章例题为什么要使用复杂数据类型,前面几张幻灯片讲了根本原因。本章介绍数组与指针的用法。本章所用的例题,有些题,也许你会觉得不用复杂数据类型也可以做出来,甚至可能不用复杂数据类型会更简单,这些做法仅仅是为了教大家学会使用复杂数据类型。在自己写程序的时候,在没有题目特别规定的要求时,可自行选择合适的做法。C+复杂数据及运算——数组修改版共53页,您现在浏览的是第7页!问题的提出统计某一地区每岁年龄的人数,以及总人数,假定不超过120岁。用120个变量:intage1,age2,age3,…...age119,age120C+复杂数据及运算——数组修改版共53页,您现在浏览的是第8页!4.1.1一维数组的声明和使用一维数组类型声明的语法形式为:TName[size]T:类型名,如int型,float型等;Name:数组名;size:常量表达式,表示数组的大小。数组大小的确定1.如果在对一维数组进行初始化时给出了全部初始值,则数组声明中的元素个数可以省略,编译器会根据初始值的个数,自动计算出元素个数。2.可以用符号常量或常量表达式来说明数组元素的个数。94.1数组C+复杂数据及运算——数组修改版共53页,您现在浏览的是第9页!引用时不能超出下标最大值引用下标
inti=3,j=2,a[10];引用a[i],a[i+2],a[i+j],……a[0],a[1],a[2],…...a[9]数组是一个整体概念,数组元素是个体概念,此例:每一个元素都是一个整数注意:下标从0~9C+复杂数据及运算——数组修改版共53页,您现在浏览的是第10页!定义其他类型数组floatb[5];charc[20];b[0],b[1],…...b[4]c[0],c[1],…...c[19]定义引用C+复杂数据及运算——数组修改版共53页,您现在浏览的是第11页!数组在内存中的存放在内存中占据:一片连续的存储区例:inta[20];VC++中,一个整型变量占用4个字节内存。…..内存a[0]…..a[1]a[2]a[18]a[19]C+复杂数据及运算——数组修改版共53页,您现在浏览的是第12页!运行结果:12345Pressanykeytocontinue通过本例,学会:1)数组定义与初始化2)数组元素的访问:通过下标访问,如array[i]3)数组下标的起始值是0,最大下标“数组元素个数-1”。数组下标切勿越界!例4-1(续)4.1数组——4.1.1一维数组的声明和使用C+复杂数据及运算——数组修改版共53页,您现在浏览的是第13页!运行结果:themembersofarrayBare:9.14例4-2(续)4.1数组——4.1.1一维数组的声明和使用C+复杂数据及运算——数组修改版共53页,您现在浏览的是第14页!例4_1与4_2通过这两个例子,学习了如何定义,初始化数组,以及如何输出数组元素。补充:对数组的处理从键盘读入数组元素的值求数组元素的最大值求和。。。C+复杂数据及运算——数组修改版共53页,您现在浏览的是第15页!输出arrayB中元素的最大值输出arrayB中元素的总和C+复杂数据及运算——数组修改版共53页,您现在浏览的是第16页!注意C++不允许在数组上进行整体操作不能整体赋值不能比较不能整体输入输出赋值:for(i=0;i<10;i++)y[i]=x[i];输入:for(i=0;i<10;i++)cin>>y[i];输出:for(i=0;i<10;i++)cout<<y[i];比较:if(x[i]>=y[i])……C+复杂数据及运算——数组修改版共53页,您现在浏览的是第17页!多维数组一维数组是最基本的数组,一个数组又可以作为元素去构成更复杂的数组,即“数组的数组”。例如:表示矩阵或二维表格,要用二维数组。类似嵌套的感觉01234567891011121314每一行都是一个一维数组将3个一维数组当成元素构成了二维数组C+复杂数据及运算——数组修改版共53页,您现在浏览的是第18页!4.1.2多维数组的声明和使用多维数组类型声明的语法形式为TName[size1][size2]…;其中T:类型名,如int型,float型等;Name:数组名;size1,size2:为常量表达式,分别表示各维度的大小。
194.1数组C+复杂数据及运算——数组修改版共53页,您现在浏览的是第19页!元素的引用inta[4][3]代表12个简单变量:a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]a[3][0]a[3][1]a[3][2]行号从0开始,列号也从0开始,C+复杂数据及运算——数组修改版共53页,您现在浏览的是第20页!二维数组在内存中的存储占据一片连续存储区a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]a[3][0]a[3][1]a[3][2]按行存放第0行a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]第1行a[3][0]a[3][1]a[3][2]第3行…..…..内存C+复杂数据及运算——数组修改版共53页,您现在浏览的是第21页!运行结果:
01234
12345234563456745678例4-3(续)4.1数组——4.1.2多维数组的声明和使用C+复杂数据及运算——数组修改版共53页,您现在浏览的是第22页!对例4_3的改进例4_3实现了二维数组元素的赋值以及输出。在此二维数组array的基础上,可以做数据处理矩阵转置主对角线求和。。。C+复杂数据及运算——数组修改版共53页,您现在浏览的是第23页!例4-4:多维数组的初始化#include<iostream>#include<iomanip>usingnamespacestd;
intmain(){ intarrayA[3][2]={2,4,1,6,8,9}; intarrayB[][2]={2,4,1,6,8,9,1,10}; intarrayC[3][2]={2,4,1}; intarrayD[3][2]={{2},{4},{1}};
cout<<"themembersofarrayAare:"<<endl;inti; for(i=0;i<3;i++){ for(intj=0;j<2;j++){ cout<<setw(4)<<arrayA[i][j]; } cout<<endl; cout<<"themembersofarrayBare:"<<endl;244.1数组——4.1.2多维数组的声明和使用C+复杂数据及运算——数组修改版共53页,您现在浏览的是第24页!运行结果:themembersofarrayAare:241689themembersofarrayBare:241689110themembersofarrayCare:241000themembersofarrayDare:204010例4-4(续)4.1数组——4.1.2多维数组的声明和使用C+复杂数据及运算——数组修改版共53页,您现在浏览的是第25页!二维数组的初始化
inta[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
四行三列
inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
存储顺序
inta[4][3]={{1},{4},{7},{10}};
给每一行的第1个元素赋值,其余为零C+复杂数据及运算——数组修改版共53页,您现在浏览的是第26页!习题P71选择题:1 6C+复杂数据及运算——数组修改版共53页,您现在浏览的是第27页!次上机安排(第七周)班级时间地点B130201周五(1-2)教2-227B130202周二(3-4)教2-227B130203周二(3-4)教2-227B130204周二(3-4)教2-227C+复杂数据及运算——数组修改版共53页,您现在浏览的是第28页!引言为什么会用到复杂数据类型数组结构体枚举指针C+复杂数据及运算——数组修改版共53页,您现在浏览的是第29页!结构体(5.5.1)当需要将一组相关的不同类型的数据作为一个整体来存储和处理时。例如:学生信息structstudent{ intnum; stringname; chargender; …};C+复杂数据及运算——数组修改版共53页,您现在浏览的是第30页!指针(难点)--存放地址的类型1)当函数之间需要共享大量数据的时候,以参数合返回值在函数之间传递数据会造成很大的开销,传递地址比较高效。2)对于处理大批量数据的程序,需要在运行时动态申请内存。动态申请的内存空间与普通变量不同,不能命名,没有变量名,需要用内存地址去访问动态申请的内存空间。C+复杂数据及运算——数组修改版共53页,您现在浏览的是第31页!4.1数组为什么要使用数组?什么是数组:数组是具有一定顺序关系的若干对象的集合体,组成数组的对象称为该数组的元素。同一数组的各元素具有相同的类型。数组可以由除了void型以外的任何一种类型构成。C+复杂数据及运算——数组修改版共53页,您现在浏览的是第32页!程序age1=0;age2=0;cout<<age1<<endl;……cout<<age2<<endl;age120=0;…...cin>>x;cout<<age120<<endl;while((x>0)&&(x<121)){if(x==1)age1+=1;elseif(x==2)age2+=1;……elseif(x==120)age120+=1;cin>>x;}程序结构庞大,机械重复,于是引入数组C+复杂数据及运算——数组修改版共53页,您现在浏览的是第33页!一维数组的定义
数组(整体)inta[10];数组名数组元素个数数组类型C+复杂数据及运算——数组修改版共53页,您现在浏览的是第34页!统计各年龄段的人数问题:统计某一地区每岁年龄的人数,以及总人数,假定不超过120岁。
a[0],a[1],a[2],…...a[119]1岁人数2岁人数3岁人数120岁人数C+复杂数据及运算——数组修改版共53页,您现在浏览的是第35页!数组初始化在定义数组时赋初值inta[3]={1,3,5};floatb[2]={3.14,5.18};charc[5]={'a','b','c','d','e'};亦可
inta[]={1,2,3,4,5};
编译系统自动确定元素个数
intb[10]={1,2};
前两个元素的值为1、2,其他元素为0C+复杂数据及运算——数组修改版共53页,您现在浏览的是第36页!例4-1:声明并初始化一个具有5个整数的序列#include<iostream>usingnamespacestd;
voidmain(){ intarray[5]={1,2,3,4,5}; for(inti=0;i<5;i++){ cout<<array[i]<<""; } cout<<endl;}374.1数组——4.1.1一维数组的声明和使用C+复杂数据及运算——数组修改版共53页,您现在浏览的是第37页!例4-2:数组大小的确定#include<iostream>#include<iomanip>usingnamespacestd;constintsize=5;
intmain(){ doublearrayA[]={1.1,3,2.4,5.5,9.14}; doublearrayB[size]; for(inti=0;i<5;i++) { arrayB[i]=arrayA[i]; } cout<<"themembersofarrayBare:\n"; for(i=0;i<5;i++){ cout<<setw(6)<<arrayB[i]; }}384.1数组——4.1.1一维数组的声明和使用C+复杂数据及运算——数组修改版共53页,您现在浏览的是第38页!一维数组的初始化小结intarrayA[5]={1,2,3,4,5};//完全初始化intarrayB[5]={1,2};//部分初始化,其余元素初始化为0intarrayC[]={1,2,3,4,5};//完全初始化,不指定数组元素的个数,编译器自动计算staticintarrayD[5];//静态数组如果不初始化,所有元素都默认初始化为0C+复杂数据及运算——数组修改版共53页,您现在浏览的是第39页!数组arrayB的元素由键盘输入C+复杂数据及运算——数组修改版共53页,您现在浏览的是第40页!数组的大小在声明数组时,确定数组的大小是关键问题,需要在设计程序时能够正确地估计需要的数组大小。静态的声明方式,不允许用变量来指定数组的大小。大小声明后,是不可改变的。但是在很多情况下,数组的大小是在运行时才能确定的,P59,后面会学习到动态内存分配,解决运行时确定数组大小的问题。C+复杂数据及运算——数组修改版共53页,您现在浏览的是第41页!一维数组应用逆序数的分解求Fibonacci数列问题排序插入查找(顺序、折半)合并C+复杂数据及运算——数组修改版共53页,您现在浏览的是第42页!问题课程1课程2课程3学生1897856学生28899100学生3728061学生4607075二维表格①求每门课程的平均成绩,一列的平均值②求一个学生的平均成绩,一行的平均值C+复杂数据及运算——数组修改版共53页,您现在浏览的是第43页!二维数组的定义
数组(整体)inta[4][3];数组名行数列数数组类型C+复杂数据及运算——数组修改版共53页,您现在浏览的是第44页!元素的引用问题:课程1课程2课程3学生1897856学生28899100学生3728061学生4607075二维表格元素(个体)inta[4][3]代表12个简单变量如a[0][0]、a[1][2]、a[3][2]
a[i][j]行下标列下标C+复杂数据及运算——数组修改版共53页,您现在浏览的是第45页!4-3:编写程序模拟一个5×5的矩阵,对元素赋值并输出#include<iostream>#include<iomanip>usingnamespacestd;
voidmain(){ intarray[5][5]; for(inti=0;i<5;i++){ for(intj=0;j<5;j++){ array[i][j]=i+j; } } for(i=0;i<5;i++){ for(j=0;j<5;j++){ cout<<array[i][j]<<""; } cout<<endl; } cout<<endl;}464.1数组——4.1.2多维数组的声明和使用C+复杂数据及运算——数组修改版共53页,您现在浏览的是第46页!对例4_3的分析通过本例,学习如何遍历二维数组(依次访问数组的所有元素)双重循环理解array,array[i],array[i][j]array:二维数组名/二维数组的首地址array[i]:二维数组第i行的首地址array[i][j]:二维数组第i行第j列的元素C+复杂数据及运算——数组修改版共53页,您现在浏览的是第47页!C+复杂数据及运算——数组修改版共53页,您现在浏览的是第48页! for(i=0;i<4;i++){ for(intj=0;j<2;j++){ cout<<setw(4)<<arrayB[i][j]; } cout<<endl; } cout<<"themembersofarrayCare:"<<endl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026学年安徽省宁国市三年级语文期末自测模拟历年考试题附答案详细答案和解析
- 2026年北京市朝阳区亚运村医院医护人员招聘笔试备考题库及答案解析
- 2026年中山市阜沙医院医护人员招聘笔试备考题库及答案解析
- 2025年塔河县第二人民医院医护人员招聘笔试试题及答案详解
- 2026年濮阳市中医医院医护人员招聘笔试备考题库及答案解析
- 转Bt基因棉田生物群落对土壤盐分响应的生态机制解析
- 2026年南京市红十字医院医护人员招聘笔试备考题库及答案解析
- 2026年大庆市第二建筑工程公司职工医院医护人员招聘笔试备考题库及答案解析
- 2025年永定县下洋华侨医院医护人员招聘笔试试题及答案详解
- 踝肱指数及踝肱脉搏波速度:冠心病评估的新视角
- 2026年辽宁锦州海通实业有限公司计划招录28人备考题库含答案详解
- 2026中国铁建纪委办案中心社会招聘13人笔试模拟试题及答案详解
- 2025年四川资阳市八年级地理生物会考真题试卷+答案
- 2026深静脉血栓形成诊断和治疗指南(第四版)全面解读
- 2026永州农商银行招聘78人笔试参考试题及答案解析
- 《疫苗管理法》法律法规解读课件
- 农商银行强化公司治理年工作总结-银行工作总结
- GB 4569-2000摩托车噪声限值及测试方法
- 网络路由重发布
- 招标代理机构廉洁从业措施
- DB225065-2021装配式建筑评价标准
评论
0/150
提交评论