版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、共37页第1页C+言语程序设计主讲主讲 王更生教授王更生教授第六课 数组共37页第2页第六课第六课 数组数组课程内容:课程内容:数组数组指针与数组指针与数组重、难点:重、难点:重点:数组元素的运用;取数组、字符串地址的重点:数组元素的运用;取数组、字符串地址的方法。方法。难点:指向数组的指针变量;数组的地址。难点:指向数组的指针变量;数组的地址。共37页第3页6.1数组数组引例:计算机引例:计算机2001共有共有300个同窗,求其个同窗,求其课程成果的最大值、最小值、平均值。课程成果的最大值、最小值、平均值。 分析:在现有知识情况下,以下方案可以勉分析:在现有知识情况下,以下方案可以勉强处理此
2、问题:强处理此问题: 定义定义300个表示成果变量并对其赋值后,进个表示成果变量并对其赋值后,进展运算。缺陷:源代码太长。展运算。缺陷:源代码太长。 更好的处理方案是采用数组进展处置。更好的处理方案是采用数组进展处置。 数组是假设干相互关联的一样类型变量的集数组是假设干相互关联的一样类型变量的集合。它往往用于处理类似于数学中的矩阵问题。合。它往往用于处理类似于数学中的矩阵问题。共37页第4页一、一维数组一、一维数组1、一维数组的声明、一维数组的声明数组类型数组类型 数组名数组名 数组长度数组长度 ;例如:例如: double a5;留意:数组长度必需是整形常数表达式。留意:数组长度必需是整形常
3、数表达式。描画数组必需给出元素类型,元素个数必需在编程时描画数组必需给出元素类型,元素个数必需在编程时确定,任何变量都不允许确定,任何变量都不允许 int aa ; / 表示表示int a97; int n = 100 ; int an ; / 错错: 元素个数必需预知元素个数必需预知 const int n = 100 ; int an ; / ok int a ; / 错错: 无元素个数无元素个数 int a = 1, 2, 3, 4, 5 ; / ok:经过初始化确定元经过初始化确定元素个数素个数共37页第5页2、一维数组元素及其在内存中的存放顺序、一维数组元素及其在内存中的存放顺序 在
4、数组的声明中,数组的长度表示数组元素的个在数组的声明中,数组的长度表示数组元素的个数。例如:数。例如:double a5;它表示它表示“双精度型数组双精度型数组a有有5个个元素。元素。C+言语经过下标来区分各个元素。言语经过下标来区分各个元素。1一维数组元素的下标一维数组元素的下标C+规定,数组元素的下标从规定,数组元素的下标从0开场计数:开场计数:0、1、2、。对于。对于double a5;其数组元素的下标分别是:;其数组元素的下标分别是:0、1、2、3、4。留意:数组的长度表示数组元素的个数。留意:数组的长度表示数组元素的个数。共37页第6页2一维数组元素的表示方法一维数组元素的表示方法
5、一维数组元素的表示方法是:一维数组元素的表示方法是: 数组名数组名下标下标。 每一个数组元素相当于一个同类型的变量。每一个数组元素相当于一个同类型的变量。 对于对于double a5;其数组元素分别是:;其数组元素分别是:a0、a1、a2、a3、a4。程序中,。程序中,a0 相当于相当于1个双个双精度型变量、精度型变量、a1 相当于相当于1个双精度型变量、个双精度型变量、a4 相当于相当于1个双精度型变量。个双精度型变量。 3各数组元素在内存中的存放顺序各数组元素在内存中的存放顺序 同一个一维数组中的各元素占用一片延续的内存同一个一维数组中的各元素占用一片延续的内存空间,其下标顺序即是其存放顺
6、序。对于空间,其下标顺序即是其存放顺序。对于double a5;设设a0的首地址为:的首地址为:0000,那么,那么a1的首地址为:的首地址为: 0008 、那么、那么a4的首地址为:的首地址为: 0032 共37页第7页3、一维数组的初始化、一维数组的初始化数组初始化可选,但须遵照语法无初始化的数组按规定数组初始化可选,但须遵照语法无初始化的数组按规定取默许值取默许值 int array15 = 1, 2, 3, 4, 5, 6 ; / 错错: 初始值个数超初始值个数超元素个数元素个数int array25 = 1, , 2, 3, 4 ; / 错错: 不能以逗号方不能以逗号方式省略式省略i
7、nt array35 = 1, 2, 3, ; / 错错: 同上同上int array45 = ; / 错错: 初始值不能为初始值不能为空空int array55 = 1, 2, 3 ; / ok: 后面元素取后面元素取0int array65 = 0 ; / ok: 元素全为元素全为0int array75 ; / ok: 元素值不确定元素值不确定共37页第8页数组有诸多缺陷,呵斥编程困难和不平安 int a5 = 1,2,3,4,5, c5; int b5 = a; / 错:无法拷贝创建 c = a; / 错:无法整体拷贝和部分拷贝 a8 = 10; / 错:无法动态扩容和随意增减元素 f
8、or(int i=0; i=5; +i) / 错:无法防备下标溢出 ai = i+1; 共37页第9页if(a=c) a0 = 2; / 错错:不可比不可比较较 int a5 = 1; / 初始化呆初始化呆板板,无法获得全初值无法获得全初值【例【例5.4】求】求10个元素的数组中元素的最个元素的数组中元素的最大值、最小值、平均值。大值、最小值、平均值。#include void main()double a10=1,2,3,4,5,6,7,8,9,0;double max,min,aver;max=min=aver=a0;共37页第10页for(int i=1;imax)max=ai;else
9、 if(aimin)min=ai;aver=aver/10.0;coutmax= maxendl;coutmin= minendl;coutaver=averendl;共37页第11页二、二维数组二、二维数组1、二维数组的声明、二维数组的声明数组类型数组类型 数组名数组名 第第1维的长度维的长度 第第2维的长度维的长度;2、二维数组元素的下标和表示方法、二维数组元素的下标和表示方法例如:例如: double a43;二维数组元素的两个下标也都是从二维数组元素的两个下标也都是从0开场计数:开场计数:0、1、2、。对于例句:。对于例句:double a43;它的第它的第1下标下标为:为:0、1、2
10、、3;第;第2下标为:下标为:0、1、2。假设说二维数组相当于数学中的矩阵,第假设说二维数组相当于数学中的矩阵,第1维下标维下标个数相当于矩阵的行数,第个数相当于矩阵的行数,第2维下标个数相当于矩阵维下标个数相当于矩阵的列数。的列数。对于对于double a43;它表示;它表示“双精度型数组双精度型数组a有有43=12个元素。这个元素。这12个元素分别是:个元素分别是:共37页第12页a00 a01 a02a10 a11 a12a20 a21 a22a30 a31 a32程序中,每一个数组元素相当于一个同类型的变量。程序中,每一个数组元素相当于一个同类型的变量。3各数组元素在内存中的存放顺序各
11、数组元素在内存中的存放顺序同一数组中的各元素占用一片延续的内存空间,对于二维数同一数组中的各元素占用一片延续的内存空间,对于二维数组其存放顺序是按行存放的。例如:对于组其存放顺序是按行存放的。例如:对于double a43;设设a00的首地址为:的首地址为:0000,那么,那么a01的首地址为:的首地址为:0008 、a02的首地址为:的首地址为: 0016; a10的首地址为:的首地址为: 0024; ; a20的首地址为:的首地址为:0048 ; ; a30的首地址为:的首地址为: 0072留意:二维数组可被看作是一维数组下的一维数组。留意:二维数组可被看作是一维数组下的一维数组。对于对于
12、double a43;它可表示为;它可表示为a0、a1、a2、a3四个四个一维数组,其中:一维数组,其中:a0有有3个元素个元素a0 0、a0 1、a0 2,其他雷同。其他雷同。共37页第13页3、二维数组的初始化、二维数组的初始化1以花括号套花括号的方式对二维数组按行赋初值以花括号套花括号的方式对二维数组按行赋初值例如:例如: short a34= 1,3,5,7, 9,11,2,4, 6,8,10,12 ;2可以对数组的各行前面部分元素赋初值。可以对数组的各行前面部分元素赋初值。例如:例如: short a34= 1,0, 9,1,4, 6,8 ; 3可以将全部数组元素写在一个花括号内,顺
13、序赋初值可以将全部数组元素写在一个花括号内,顺序赋初值例如:例如:short a34=1,3,5,7,9,11,2,4,6,8,10,12; 4可以对数组的前面部分元素赋初值。可以对数组的前面部分元素赋初值。例如:例如:short f23=3,5,9,7,4;它表示:定义了短整型数组它表示:定义了短整型数组f,f中有中有6个元素,数组中前面个元素,数组中前面4个个元素有初值:元素有初值:f00=3,f01=5,f02=9,f10=7,f11=4;其他元素的初值为默许值;其他元素的初值为默许值0。5两种情况下,可以省略两种情况下,可以省略“第第1维的长度。维的长度。共37页第14页A、分行赋值时
14、,里层花括号的对数,可以确、分行赋值时,里层花括号的对数,可以确定第定第1维的长度维的长度例如:例如:short a 4= 0,0,3, , 0,1 ;等价:等价:short a34= 0,0,3, , 0,1 ;B、根据全部数组元素的个数及第、根据全部数组元素的个数及第2维的长度,维的长度,可以计算第可以计算第2维的长度。维的长度。例如:例如:short a 3= 0,0,3,9,0,1;等价:等价:short a23= 0,0,3,9,0,1;共37页第15页 【例5.5】 知矩阵A如下,编程输出矩阵A中最大元素所在的行号和列号。 程序如下: #include void main() do
15、uble A34=1,2,3,4,9,2,6,5,-8,7,0,0; int max,x,y;007856294321A共37页第16页max=A00;x=0;y=0;for(int i=0;i3;i+) for(int j=0;jmax) max=Aij; x=i; y=j; coutx=xendl;couty=yendl;共37页第17页补充例题:冒泡排序。补充例题:冒泡排序。(思绪:将相邻两个数比思绪:将相邻两个数比较,小的数调前头。较,小的数调前头。)i=021181818181821202020202021171717171721191919191921j=0j=1j=2j=3j=4
16、共37页第18页i=11818181820201717171720191919192021j=0j=1j=2j=3i=2以此类推以此类推#include void main()int a5,temp;couttPlease enter 5 number :n;for(int i=0;i5;i+)couttaiai;共37页第19页for(i=0;i4;i+)for(int j=0;jaj+1)temp=aj;aj=aj+1;aj+1=temp;couttOutput the sorted number :n;for(i=0;i5;i+) coutttai=aiendl;coutnt;/wgs1
17、d.cpp共37页第20页三、字符数组与字符串三、字符数组与字符串 字符串变量:字符串变量:C+言语无此类变量,必要言语无此类变量,必要时用字符数组或字符指针来处理。时用字符数组或字符指针来处理。用字符数组表示字符串的表达方式:用字符数组表示字符串的表达方式:字符数组是用字符数组是用char来阐明的数组,其中的来阐明的数组,其中的每一个数组元素只能存放一个字符。即字符每一个数组元素只能存放一个字符。即字符数组中的每一个数组元素相当于一个字符变数组中的每一个数组元素相当于一个字符变量。对字符数组的初始化有如下方式:量。对字符数组的初始化有如下方式:共37页第21页例例1:一维字符数组初始化的有三
18、种方式,普通运用第一种。:一维字符数组初始化的有三种方式,普通运用第一种。1“字符串字符串2“字符串字符串3字符字符1, 字符字符2, 字符字符n,0例如以下三句是等价的:例如以下三句是等价的:char c =“I am happy;char c =“I am happy;char c =I, , a, m, , h, a, p, p, y, 0;例例2:二维字符数组初始化的有两种方式,普通运用方式为:二维字符数组初始化的有两种方式,普通运用方式为:“字符串字符串1,“字符串字符串2 , “字符串字符串n 例如:例如:char c 20=“I am happy,“OK;留意:第留意:第2下标的
19、长度必需大于最大长度的字符串下标的长度必需大于最大长度的字符串 。例例wgsp39.cpp 共37页第22页5.3.4字符串的输出对于字符串的输出,可以采用以下方法完成。对于字符串的输出,可以采用以下方法完成。1、用、用cout输出,格式是:输出,格式是:cout字符串或字符数组名;字符串或字符数组名;例如:例如:char s20= “This is a string.; couts;输出结果是:输出结果是:This is a string.2、用、用cout流对象的流对象的put方法,格式是:方法,格式是:cout.put(字符或字符变量字符或字符变量);采用这种方法,每次只能输出一个字符,
20、要输出采用这种方法,每次只能输出一个字符,要输出整个字符串,应采用循环的方法。整个字符串,应采用循环的方法。共37页第23页【例【例5.6】#include void main() char s20= This is a string.; int i=0; while(si!= 0) cout.put(si); i+; 共37页第24页3、用、用cout流对象的流对象的write方法,格式是:方法,格式是:cout.write(字符串或字符数组名,个数字符串或字符数组名,个数n);其作用是输出字符串中的前其作用是输出字符串中的前n个字符。个字符。【例【例5.7】#include void ma
21、in() char s20= This is a string.; cout.write(s,4); 该程序的输出结果为:该程序的输出结果为:This。共37页第25页5.3.5字符串的输入 除了可以在程序中利用字符数组初除了可以在程序中利用字符数组初始化的方法或赋值的方法将字符串始化的方法或赋值的方法将字符串存放到字符数组中外,还可以采用存放到字符数组中外,还可以采用以下方法输入字符串。但要留意只以下方法输入字符串。但要留意只能用字符数组接纳输入的字符串能用字符数组接纳输入的字符串 。 1、利用、利用cin直接输入,格式是:直接输入,格式是: cin字符数组名字符数组名;共37页第26页【例
22、【例5.8】#include void main() char s20; cins;couts; 运转该程序时,假假设键盘输入运转该程序时,假假设键盘输入abcdefg并并回车,那么输出结果为回车,那么输出结果为abcdefg。但当输入。但当输入abcd efg并回车,那么输出结果为并回车,那么输出结果为abcd。可。可见,用这种方法输入字符串时,见,用这种方法输入字符串时,cin只能接纳只能接纳空格符之前的部分,而对空格后部分视而不见。空格符之前的部分,而对空格后部分视而不见。共37页第27页2、利用、利用cin流对象的流对象的getline方法,格式是:方法,格式是:cin.getline
23、(字符数组名,输入字符串的最大长度字符数组名,输入字符串的最大长度n);【例【例5.9】 #include void main() char s20; cin.getline(s,20);couts;运转该程序时,假假设键盘输入运转该程序时,假假设键盘输入abcdefg并回并回车,那么输出结果为车,那么输出结果为abcdefg。当输入。当输入ab cdefg并回车,输出结果为并回车,输出结果为ab cdefg。可见,这种方法。可见,这种方法输入字符串时,可以接纳空格符及其以后部分。输入字符串时,可以接纳空格符及其以后部分。共37页第28页3、利用、利用cin流对象的流对象的get方法,格式是:
24、方法,格式是: 格式格式1:cin.get(字符数组名,输入字符串的最大字符数组名,输入字符串的最大长度长度n); 格式格式2:cin.get();【例【例5.10】#include void main() char s20; char c; cin.get(s,10); couts; c= cin.get(); coutc;共37页第29页 6.2 指针与数组 一、一维数组的指针我们知道,数组是构造类型的变量,它由固定数目的同类型成员称为数组元素构成。C+言语规定,一维数组名是指针常量,它代表数组的首地址,也就是第0个元素的地址,其类型是数组元素类型的指针。C+言语的数组与指针有着亲密的联络
25、,程序中援用数组元素时完全可以用指针替代下标。共37页第30页数组名本身就是表示元素集合的首地址数组名本身就是表示元素集合的首地址可以将数组名赋给指针可以将数组名赋给指针(例例f0313) int a3; for(int i=0; i3; +i) ai = i*2; for(int* iP=a; iPa+3; iP+=1) coutiP“: *iP“n; 结果为:结果为:0012FF74: 00012FF78: 20012FF7C: 4共37页第31页1、如何使指针变量指向一维数组?、如何使指针变量指向一维数组?前提:需定义一个与数组元素类型一样的指针变量。前提:需定义一个与数组元素类型一样的
26、指针变量。方法例句:方法例句:1) int a10,*p; p=a; 2) int a10,*p; p=&a0; 3) int a10,*p=a; 4) int a10,*p=&a0; 以上四组数据的效果是一样的,都使指针以上四组数据的效果是一样的,都使指针p指向一维数组的首指向一维数组的首地址此法不可推行到多维数组。地址此法不可推行到多维数组。2、指向一维数组的指针与一维数组之间的关系、指向一维数组的指针与一维数组之间的关系假设有假设有C+语句片段:语句片段: int a5,*p;共37页第32页p=a;当指针变量当指针变量p指向一维数组的首地址后,对下标为指向一维数组的首地址后,对下标为i的数组元素的数组元素的援用一共有以下四种方法:的援用一共有以下四种方法:1*(p+i)2*(a+i)3pi4ai由于指针变量是一类特殊变量,它的加、减两种根本的运算,由于指针变量是一类特殊变量,它的加、减两种根本的运算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 醋酸装置操作工岗前班组安全考核试卷含答案
- 矿山电机车司机操作评估能力考核试卷含答案
- 超重型汽车列车司机基础常识评优考核试卷含答案
- 70个活动策划方案模板(3篇)
- 企业应急预案评估指南(3篇)
- 凉棚设备安装施工方案(3篇)
- 人工挖除毒草施工方案(3篇)
- 亲子运动居家活动方案策划(3篇)
- 公园木工施工方案(3篇)
- 专项施工方案幕墙高度(3篇)
- 常用电子元器件培训教材
- GB/T 47047-2026海上结构物海上移动平台锚链轮
- 乡镇便民中心考核制度
- 新疆馕介绍教学课件
- 钢结构厂房柱安装施工方案
- 医疗机构服务态度与微笑服务
- 《色彩基础》第5章色彩归纳写生训练
- 药事管理学考试真题及答案
- 浙江省精诚联盟2025-2026学年高一上学期10月月考化学试题(含答案)
- LNG消防安全培训内容课件
- 养殖蝎子知识培训课件
评论
0/150
提交评论