资源预览内容
第1页 / 共99页
第2页 / 共99页
第3页 / 共99页
第4页 / 共99页
第5页 / 共99页
第6页 / 共99页
第7页 / 共99页
第8页 / 共99页
第9页 / 共99页
第10页 / 共99页
亲,该文档总共99页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第三章 数组与指针,第一部分 C+结构化程序设计,数组和指针是C+中两个重要的概念。 通过本章的学习,要求掌握: 数组和指针的概念 数组和指针使用方法 理解指针和数组之间的关系以及它们的用法。,本章提要:,本章内容,数组 指针 指针与数组 指针数组 堆内存分配 void指针和const指针 例题,3.1 数组,数组是一种高级数据类型 数组是若干个变量的有序集合 组成数组的变量称为数组元素 同一数组的元素具有相同的数据类型 二维数组可以看成“数组的数组”,多维数组也有类似的概念,为什么要使用数组?,问题:一个班有编号1-5的5名学生,现在需要将每个学生的成绩作调整,调整公式为:新成绩=原成绩*0.8,/使用数组 放大 #include #include void main() double s =36,54,72,80,95; for(int i=0;i5;i+) si=si*0.8; ,如果这个班有50名学生?,/未使用数组 放大 #include #include void main() double s1=36,s2=54, s3=72,s4=80,s5=95; s1=s1*0.8; s2=s2*0.8; s3=s3*0.8; s4=s4*0.8; s5=s5*0.8; ,3.1.1 数组的定义(声明)及元素引用,数组在使用前必须声明(定义)。 1)一维数组的定义及元素引用 一维数组的定义形式为: 类型名 数组名常量表达式; 定义数组包括: 数组的类型、数组的名字和数组的维数 及数组中元素的个数。 其中常量表达式值为数组元素的个数。例如: int a5; char ch10; double data15;,定义数组时 中必须是常量 表达式!,注意:,元素引用: 一维数组元素的引用形式为: 数组名下标 数组元素下标的取值由开始,最后一个元素的下标是数组定义中常量表达式的值减。例如: int a5; 元素是:a0 a1 a2 a3 a4 在程序中使用数组元素与使用变量一样,例如: int a5; a0=12; /给a0元素赋值12 a1=30; a2=a0+a1; /将a0和a1元素值相加结果存a2,数组的下标必须是整型常数或整型变量。 在程序中一般常用一个变量来控制数组元素的下标,依靠变量的变化表示不同的数组元素。例如: int a5; for(int i=0; i5; i+) ai=2*i;,讨论:,a数组中各元素的值是什么?,更多的数组声明与引用范例,#include 放大 #define N 7 #define M 8 void main() int a10; /正确 char chN; /正确,常量表达式可以包含宏定义常量 double dN+3; /正确 float scoreM*N; /正确 for(int i=0,iai; /引用时可以用任何整数表达式作为数组下标 couta10endl; /错误,下标越界。虽然编译时不会报错, /但可能引起不可预料的结果,应避免下标越界。 int j=10; double d2 j; /错误,使用了变量声明数组大小 ,为什么变量不能用于声明数组大小?,思考:,)二维数组定义及元素引用 二维以上的数组称为多维数组。 二维数组的定义形式为: 类型名 数组名常量常量 可以将二维数组视为一矩阵。 常量表示矩阵的行 常量表示矩阵的列,例如:int 34; 行和列下标元素的取值也是由开始,数组元素形成的矩阵为: 00 x01 x02 x03 行 10 x11 x12 x13 行 20 x21 x22 x23 行 二维数组元素的引用形式为: 数 组名行下标列下标 例如:00、12等。,3)多维数组定义及元素引用 多维维数组的定义形式为: 类型名 数组名常量常量 例如:int 345; /声明了一个3维数组 该3维数组的第一个元素为:x000,最后一个元素为:x234。元素总个数为:3*4*5=60。 如下程序所示:,#include 放大 void main() int x345; int i,j,k; for(i=0;ixijk; ,3.1.2 数组的初始化,数组在定义时可以被赋予初值,称为数组的初始化。初始化是指在声明时同时赋予初值。 除了基本初始化语法外,C+6.0编译器还支持一些比较自由的简化形式。 应该熟练掌握基本初始化语法。有些简化形式确实给编程带来了方便,我们应该学会;而另一些可能影响程序可读性,我们应不用或者少用。,基本初始化语法,数组的基本初始化形式示例如下: int x5=1,2,3,4,5; char ch3=a,b,c; double d123=1.5,1.2,1.3,3.7,2.1,4.0;,一些简化的初始化方式,以下3种写法等效 int a55,10,15,0,0; int a 5,10,15,0,0; int a5 5,10,15; 以下4种写法等效 int b23=1, 3, 5, 2, 4, 6; int b 3=1, 3, 5, 2, 4, 6; int b23=1, 3, 5, 2, 4, 6; int b 3=1, 3, 5, 2, 4, 6;,以下2种写法等效 int x33=1,0,0,2, 3,0,4, 5, 6; int x33=1,2, 3,4, 5, 6; 以下2种写法等效 int x33=1, 2, 3, 4, 5, 6, 7,0,0; int x33=1, 2, 3, 4, 5, 6, 7;,例3.1 求10个数的总和及平均值,#include 放大 void main( ) int array10=65,87,90,80,84, 85,53,46,95,70; int sum(0), average; for (int i=0; i10; i+) sum+=arrayi; average=sum/10; cout” 总和=”sumendl; cout”平均值=” averageendl; ,运行结果: 总和=755 平均值=75,例3.2 求二维数组中每行元素的和并输出,#include 放大 void main( ) double data34=1.2, 1.5, 1.7, 1.9, 2.0, 2.4, 2.6, 2.8, 3.2, 3.6, 3.7, 3.8; double sum; for (int i=0; i3; i+) sum=0.0; for (int j=0; j4; j+) sum+=dataij; cout”第”i”行和:”sumendl; ,运行结果: 第0行和: 6.3 第1行和: 9.8 第2行和: 14.3,字符数组的初始化,在+中常用字符数组来处理字符串。 字符数组赋初值时既可以赋字符常量,也可以赋字符串。 给字符型数组赋字符串时,每个数组元素存放一个字符。 给字符型数组赋字符串时定义的长度要比实际字符个数多,以存放字符串结束标志0。,以下几种初始化形式是等效的: char ch6=t,o,t,a,l,0; char ch6=“total”; char ch = “total”; char ch =“total”; 如下方式通常用于在字符数组中存放不可见字符。 char d =t,t,a,a, n;,字符数组的初始化,为字符数组初始化时要注意数组元素的个数与所赋字符串长度的关系,以免引起不可预料的错误。 例如: char array6=”program”; 该定义不会产生编译错误,但由于改写了数组的大小,占用数组空间以外的存储单元,容易引起混乱,甚至是危险的。这种情况最好写成: char array =”program”;,字符数组的初始化,当字符数组定义的空间大于初始化字符串长度时,剩余的空间填充0; 例如: char str15=”I love C+”; str数组中存放的是:,字符数组的初始化,二维字符型数组初始化时,可以用以下几种形式,结果是等效的。 char s135=b,o,o,k,0, p,e,n,0, b,a,g,0; char s235=“book”,”pen”,”bag”; char s3 5=“book”,”pen”,”bag”; char s4 5=“book”,”pen”,”bag”;,字符数组的初始化,例3.3 统计一个字符串中字符的个数,#include 放大 void main( ) char str80=”C+ Programming Today”; int count (0), i(0); while (str i!=0) count+; i+; cout”字符个数=”countendl; ,运行结果: 字符个数=21,3.1.3 数组的输入输出,数组中的数据除在定义时初始化外,更多时候是通过赋值或从键盘输入得到。 从键盘输入时,一般利用循环实现。 一般一维数组输入输出用一重循环; 二维数组的输入输出一般要用到二重循环,分别控制二维数组的行和列。 字符数组常用于接受从键盘输入的字符串。,例3.5 向二维数组array中输入数据,输出该二维数 组,并求array数组中所有元素和。,#include 放大 void main() int array55; coutarrayij; /按行输入二维数组 cout“按行输出数组n“; for(i=0; i5; i+) for(int j=0; j5; j+) coutarrayij“ “; coutendl; /输出每行后换行 int sum(0); for(i=0; i5; i+) for(int j=0; j5; j+) sum+=arrayij; cout“和=“sumendl; ,执行程序: 按行输入5行5列数组: 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 按行输出数组 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 和=125,例3.6 输入一串字符,统计其中小写字母e出现的次数, 并将该字符串输出。,#include 放大 void main( ) char str80; int i(0), ne(0); coutstr; /输入字符串 while
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号