收藏 分享(赏)

C++函数.ppt

上传人:gsy285395 文档编号:4528842 上传时间:2019-01-02 格式:PPT 页数:37 大小:376KB
下载 相关 举报
C++函数.ppt_第1页
第1页 / 共37页
C++函数.ppt_第2页
第2页 / 共37页
C++函数.ppt_第3页
第3页 / 共37页
C++函数.ppt_第4页
第4页 / 共37页
C++函数.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、第六课 数组,C+语言程序设计,主讲 王更生教授,第六课 数组,第六课 数组,第六课 数组,课程内容: 数组 指针与数组重、难点: 重点:数组元素的使用;取数组、字符串地址的方法。 难点:指向数组的指针变量;数组的地址。,第六课 数组,6.1数组 引例:计算机2001共有300个同学,求其C+程序设计课程成绩的最大值、最小值、平均值。分析:在现有知识情况下,以下方案可以勉强解决此问题:定义300个表示成绩变量并对其赋值后,进行运算。缺点:源代码太长。更好的解决方案是采用数组进行处理。数组是若干互相关联的相同类型变量的集合。它往往用于解决类似于数学中的矩阵问题。,第六课 数组,一、一维数组 1、

2、一维数组的声明 数组类型 数组名 数组长度 ; 例如: double a5; 注意:数组长度必须是整形常数表达式。 描述数组必须给出元素类型,元素个数必须在编程时确定,任何变量都不允许int aa ; / 表示int a97;int n = 100 ;int an ; / 错: 元素个数必须预知const int n = 100 ;int an ; / okint a ; / 错: 无元素个数int a = 1, 2, 3, 4, 5 ; / ok:通过初始化确定元素个数,第六课 数组,2、一维数组元素及其在内存中的存放顺序在数组的声明中,数组的长度表示数组元素的个数。例如:double a5

3、;它表示“双精度型数组a有5个元素。C+语言通过下标来区分各个元素。 (1)一维数组元素的下标 C+规定,数组元素的下标从0开始计数:0、1、2、。对于double a5;其数组元素的下标分别是:0、1、2、3、4。 注意:数组的长度表示数组元素的个数。,第六课 数组,(2)一维数组元素的表示方法一维数组元素的表示方法是:数组名下标。每一个数组元素相当于一个同类型的变量。对于double a5;其数组元素分别是:a0、a1、a2、a3、a4。程序中,a0 相当于1个双精度型变量、a1 相当于1个双精度型变量、a4 相当于1个双精度型变量。(3)各数组元素在内存中的存放顺序同一个一维数组中的各元

4、素占用一片连续的内存空间,其下标顺序即是其存放顺序。对于double a5;设a0的首地址为:0000,则a1的首地址为: 0008 、则a4的首地址为: 0032,第六课 数组,3、一维数组的初始化 数组初始化可选,但须遵循语法无初始化的数组按规定取默认值int array15 = 1, 2, 3, 4, 5, 6 ; / 错: 初始值个数超元素个数 int array25 = 1, , 2, 3, 4 ; / 错: 不能以逗号方式省略 int array35 = 1, 2, 3, ; / 错: 同上 int array45 = ; / 错: 初始值不能为空 int array55 = 1,

5、 2, 3 ; / ok: 后面元素取0 int array65 = 0 ; / ok: 元素全为0 int array75 ; / ok: 元素值不确定,第六课 数组,数组有诸多缺陷,造成编程艰难和不安全int a5 = 1,2,3,4,5, c5;int b5 = a; / 错:无法拷贝创建c = a; / 错:无法整体拷贝和局部拷贝a8 = 10; / 错:无法动态扩容和随意增减元素for(int i=0; i=5; +i) / 错:无法防范下标溢出ai = i+1;,第六课 数组,if(a=c) a0 = 2; / 错:不可比较int a5 = 1; / 初始化呆板,无法获得全初值 【

6、例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;,第六课 数组,for(int i=1;imax)max=ai;else if(aimin)min=ai;aver=aver/10.0;cout“max= “maxendl;cout“min= “minendl;cout“aver=“averendl; ,第六课 数组,二、二维数组 1、二维数组的声明 数组类型 数组名 第1维的长度 第2维的长度; 2、二维数

7、组元素的下标和表示方法 例如: double a43; 二维数组元素的两个下标也都是从0开始计数:0、1、2、。对于例句:double a43;它的第1下标为:0、1、2、3;第2下标为:0、1、2。 如果说二维数组相当于数学中的矩阵,第1维下标个数相当于矩阵的行数,第2维下标个数相当于矩阵的列数。 对于double a43;它表示“双精度型数组a有43=12个元素。这12个元素分别是:,第六课 数组,a00 a01 a02 a10 a11 a12 a20 a21 a22 a30 a31 a32 程序中,每一个数组元素相当于一个同类型的变量。 (3)各数组元素在内存中的存放顺序 同一数组中的各

8、元素占用一片连续的内存空间,对于二维数组其存放顺序是按行存放的。例如:对于double a43; 设a00的首地址为:0000,则a01的首地址为:0008 、a02的首地址为: 0016; a10的首地址为: 0024; ; a20的首地址为:0048 ; ; a30的首地址为: 0072 注意:二维数组可被看作是一维数组下的一维数组。 对于double a43;它可表示为a0、a1、a2、a3四个一维数组,其中:a0有3个元素(a0 0、a0 1、a0 2),其他雷同。,第六课 数组,3、二维数组的初始化 (1)以花括号套花括号的形式对二维数组按行赋初值 例如: short a34= 1,

9、3,5,7, 9,11,2,4, 6,8,10,12 ; (2)可以对数组的各行前面部分元素赋初值。 例如: short a34= 1,0, 9,1,4, 6,8 ;(3)可以将全部数组元素写在一个花括号内,顺序赋初值 例如: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维的长度”。,第六课

10、 数组,A、分行赋值时,里层花括号的对数,可以确定第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;,第六课 数组,【例5.5】 已知矩阵A如下,编程输出矩阵A中最大元素所在的行号和列号。程序如下: #include void main() double A34=1,2,3,4,9,2,6,5,-8,7,0,0;int max,x,y;,第六课

11、数组,max=A00; x=0; y=0; for(int i=0;imax) max=Aij;x=i;y=j; cout“x=“xendl; cout“y=“yendl; ,第六课 数组,补充例题:冒泡排序。(思路:将相邻两个数比较,小的数调前头。) i=0 21 18 18 18 18 18 21 20 20 20 20 20 21 17 17 17 17 17 21 19 19 19 19 19 21 j=0 j=1 j=2 j=3 j=4,第六课 数组,i=1 18 18 18 18 20 20 17 17 17 17 20 19 19 19 19 20 21 j=0 j=1 j=2

12、j=3 i=2以此类推 #include void main() int a5,temp;coutai;,第六课 数组,for(i=0;iaj+1)temp=aj;aj=aj+1;aj+1=temp;cout“tOutput the sorted number :n“;for(i=0;i5;i+)cout“tta“i“=“aiendl;cout“nt“; /wgs1d.cpp,第六课 数组,三、字符数组与字符串 字符串变量:C+语言无此类变量,必要时用字符数组或字符指针来解决。 用字符数组表示字符串的表达方式: 字符数组是用char来说明的数组,其中的每一个数组元素只能存放一个字符。即字符数组

13、中的每一个数组元素相当于一个字符变量。对字符数组的初始化有如下方式:,第六课 数组,例1:一维字符数组初始化的有三种方式,一般使用第一种。 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下标的长度必须大于最大长度

14、的字符串 。 例wgsp39.cpp,第六课 数组,5.3.4字符串的输出,对于字符串的输出,可以采用下列方法完成。 1、用cout输出,格式是:cout字符串或字符数组名; 例如:char s20= “This is a string.”; couts; 输出结果是:This is a string.2、用cout流对象的put方法,格式是: cout.put(字符或字符变量);采用这种方法,每次只能输出一个字符,要输出整个字符串,应采用循环的方法。,第六课 数组,【例5.6】 #include void main() char s20= “This is a string.“;int i=

15、0;while(si!= 0) cout.put(si);i+; ,第六课 数组,3、用cout流对象的write方法,格式是:cout.write(字符串或字符数组名,个数n);其作用是输出字符串中的前n个字符。 【例5.7】#include void main() char s20= “This is a string.“; cout.write(s,4);该程序的输出结果为:This。,第六课 数组,5.3.5字符串的输入,除了可以在程序中利用字符数组初始化的方法或赋值的方法将字符串存放到字符数组中外,还可以采用以下方法输入字符串。但要注意只能用字符数组接收输入的字符串 。1、利用cin

16、直接输入,格式是:cin字符数组名;,第六课 数组,【例5.8】#include void main() char s20;cins;couts;运行该程序时,假若键盘输入abcdefg并回车,则输出结果为abcdefg。但当输入abcd efg并回车,则输出结果为abcd。可见,用这种方法输入字符串时,cin只能接收空格符之前的部分,而对空格后部分视而不见。,第六课 数组,2、利用cin流对象的getline方法,格式是: cin.getline(字符数组名,输入字符串的最大长度n); 【例5.9】 #include void main() char s20;cin.getline(s,20

17、);couts;运行该程序时,假若键盘输入abcdefg并回车,则输出结果为abcdefg。当输入ab cdefg并回车,输出结果为ab cdefg。可见,这种方法输入字符串时,可以接收空格符及其以后部分。,第六课 数组,3、利用cin流对象的get方法,格式是:格式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;,第六课 数组,6.2 指针与数组 一、一维数组的指针 我们知道,数组是构造类

18、型的变量,它由固定数目的同类型成员(称为数组元素)构成。C+语言规定,一维数组名是指针常量,它代表数组的首地址,也就是第0个元素的地址,其类型是数组元素类型的指针。C+语言的数组与指针有着密切的联系,程序中引用数组元素时完全可以用指针代替下标。,第六课 数组,数组名本身就是表示元素集合的首地址 可以将数组名赋给指针(例f0313) int a3; for(int i=0; i3; +i) ai = i*2; for(int* iP=a; iPa+3; iP+=1) coutiP“: ”*iP“n”; 结果为: 0012FF74: 0 0012FF78: 2 0012FF7C: 4,第六课 数组

19、,1、如何使指针变量指向一维数组? 前提:需定义一个与数组元素类型相同的指针变量。 方法例句: 1) int a10,*p; p=a; 2) int a10,*p; p=,第六课 数组,p=a; 当指针变量p指向一维数组的首地址后,对下标为i的数组元素的引用一共有下列四种方法: 1)*(p+i) 2)*(a+i) 3)pi 4)ai 由于指针变量是一类特殊变量,它的加、减两种基本的运算,其实际意义是:“指针变量n”等效于“地址值n*sizeof(指针变量的基本类型) ”,因此,数组元素的指针加1等效于数组元素的下标加1。 二、二维数组的指针 1、如何使指针变量指向二维数组? 前提:需定义一个与数组元素类型相同的指针变量。,第六课 数组,方法例句:int a1010,*p=,第六课 数组, 对字符指针的赋值方法: 字符指针名=“字符串”; 例句: char *pstr; pstr=“China”; 注意:赋值语句:pstr=“China”;不是串拷贝。pstr是一个字符型指针变量,实际赋给pstr的是字符串(以0结尾的串)的首地址,即字符C的地址。 举例:wgssz.cpp,第六课 数组,作业1:,第六课 数组,1、第5章的全部例题。 2、 (P77) 一题 3、 (P78)二题: 1、8、10小题,作业2:,第六课 数组,再见!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报