面向对象程序设计第8讲二维指针结构体课件_第1页
面向对象程序设计第8讲二维指针结构体课件_第2页
面向对象程序设计第8讲二维指针结构体课件_第3页
面向对象程序设计第8讲二维指针结构体课件_第4页
面向对象程序设计第8讲二维指针结构体课件_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多维数组及数组应用赵红2024/1/61作业写出程序运行结果。用行指针操作二维数组,找出最大值。voidmain(){inta[2][3]={1,2,9,4,5,6};cout<<print(a,2,3)<<endl;}P167自测题7.5P164例7.5本周上机测试结构体2024/1/62例如:比较两个字符串的大小。写出运算结果#include<iostream.h>#include<string.h>voidmain(){chars1[]="aBC",s2[]="abc";if(strcmp(s1,s2)==0)cout<<"s1=s2";elseif(strcmp(s1,s2)>0)cout<<"s1>s2";elsecout<<"s1<s2";}程序输出结果:s1<s2思考:若有语句if(s1==s2)printf("s1=s2");比较的是什么?2024/1/63x[0]是数组名,是元素x[0][0]的地址x[1]是数组名,

是元素x[1][0]的地址二维数组可看作是一种特殊的一维数组x[0]----x[0][0],x[0][1],x[0][2]x[1]----x[1][0],x[1][1],x[1][2]例如,可以把x数组看作是包含二个元素的一维数组,每个元素又是一个含有三个元素一维数组。x为行指针,x[0]为元素指针2024/1/6401020111212122231323a⑴二维数组的地址例如:inta[3][4];

二维数组名a是数组的首地址。

②二维数组a包含三个行元素:a[0]、a[1]、a[2]

。a[0]a[1]a[2]a三个行元素的地址分别是:a、a+1、a+2。而a[0]、a[1]、a[2]也是地址量,是一维数组名,即*(a+0)、*(a+1)、*(a+2)是一维数组首个元素地址。10.3指针与数组10.3.1指向数组的指针2.二维数组的指针

a+1a+22024/1/65⑵二维数组元素的地址

a[0]、a[1]、a[2]是一维数组名,所以a[i]+j是数组元素的地址。数组元素a[i][j]的地址可以表示为下列形式:

&a[i][j]、a[i]+j

、*(a+i)+j01020111212122231323a[0]数组a[1]数组a[2]数组10.3指针与数组10.3.1指向数组的指针2.二维数组的指针

a[2]+1a[2]+2a[2]+3a[0]+1a[0]+2a[0]+32024/1/66【例10.6】用指向一维数组的指针变量输出数组元素。#include<iostream.h>voidmain(){inta[3][4]={{0,1,2,3},{10,11,12,13},{20,21,22,23}};int(*lp)[4],j;for(lp=a;lp<a+3;lp++){for(j=0;j<4;j++)cout<<*(*lp+j)<<""; cout<<endl;

}10.3指针与数组10.3.1指向数组的指针2.二维数组的指针

01020111212122231323alplplplp

0123

10111213

20212223

2024/1/69指针数组定义的一般形式:数据类型标识符

*数组名[元素个数];在这个定义中由于“[

]”比“*”的优先级高,所以数组名先与“[元素个数]”结合,形成数组的定义形式,“*”表示数组中每个元素是指针类型,“数据类型标识符”说明指针的目标变量的数据类型。例如:int*ip[10];char*cp[5];10.7指针与数组10.7指针数组1.指针数组的定义

指针数组就是数组中的每个元素均为指针类型

2024/1/610例如:P191charc[4][8]={"Fortran","COBOL","BASIC","Pascal"};char*cp[4]={c[0],c[1],c[2],c[3]};char*str[5]={"int","long","char","float","double"};

cpC数组cp[0]Fortran\0cp[1]COBOL\0cp[2]BASIC\0cp[3]Pascal\0str[0]int\0str[1]long\0str[2]char\0str[3]float\0str[4]double\02024/1/6118.3指针与函数2.数组的指针作函数参数

二维数组的指针作函数参数

二维数组的行指针作函数参数例如被调函数abc的定义形式有以下三种:voidabc(intb[2][4]){……}voidabc(intb[][4]){……}voidabc(int(*b)[4]){……}在主调函数有如下定义:inta[2][4],(*p)[4]=a;则调用abc函数时可用abc(a)或

abc(p)8.3.3指针变量作函数参数2024/1/6127.2.4二维数组应用举例(续)【作业2】有一个N×M矩阵,编程序求出其中最大的那个元素的值及其所在的行、列位置。

图7.6

查找最大元素max=a[0][0],row=0,colum=0for(i=0;i<N;i++)for(j=0;j<M;j++)a[i][j]>maxTFmax=a[i][j]row=icolum=j输出绝对值最大的元素及行列下标2024/1/613#defineN2#defineM3main(){inti,j,row,colum,max,a[N][M];

……/*输入数据*/max=a[0][0];row=colum=0;for(i=0;i<N;i++)for(j=0;j<M;j++)if(a[i][j]>max){max=a[i][j];row=i;colum=j;}……/*输出数据*/}程序运行情况如下:345612

126743max=67,row=1,colum=12024/1/614作业:1、读P160例7.42、求一个2行3列的二维数组的转置数组。3、有一个N×M矩阵,编程序求出其中最大的那个元素的值及其所在的行、列位置。4、从键盘接收数据并存入数组a[10],并调用函数sort(a,n)对其进行排序,在主程序中输出结果。(排序方法不限)5、编写两个子函数:insert(a,n,i,x)完成在第i个位置上插入数据x,del(a,n,i)完成删除数组中第i个位置的元素。2024/1/615一个学生的信息有学号、姓名、性别、年龄、住址、成绩等。一本图书的信息有分类编号、书名、作者、出版社、出版日期、价格、库存量等。如何描述这些类型不同的相关数据?结构体与结构体类型的定义?信息管理结构体——一种构造类型数据

结构体由若干不同类型的数据项组成,构成结构体的各个数据项称为结构体成员。第7章结构体P1622024/1/616

struct结构体名{数据类型1成员名1;数据类型2成员名2;……数据类型n成员名n;

};结构体结构体与结构体类型的定义结构体类型定义的一般形式:

struct为关键字;结构体名是用户定义的类型标识。{}中是组成该结构体的成员。成员的数据类型可以是C语言所允许的任何数据类型。2024/1/617例如学生类型的定义:structstudent{charnum[8];/*学号是字符数组类型*/charname[30];/*姓名是字符数组类型*/charsex;/*性别是字符型

*/intage;/*年龄是整型

*/

charaddr[60];/*住址是字符数组类型*/intscore[6];/*成绩是整型数组类型*/

};结构体结构体与结构体类型的定义2024/1/618结构体结构体类型与变量的说明类型与变量是不同的概念。应先定义一个结构体类型,而后再定义结构体变量。系统对类型不分配空间,仅对变量分配空间。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。成员也可以是结构变量。P167成员名可与程序中的变量名相同时,也可与不同结构体类型的成员名相同,二者代表不同的对象。2024/1/619

structdate{intyear,month,day;};structstudent{charnum[8];charname[30];charsex;datebirthday;/*成员为结构体类型*/

charaddr[60];intscore[6];

};num8个字节name30个字节sex1个字节birthdayyear4个字节month4个字节day4个字节addr60个字节score24个字节用sizeof运算符计算结构体变量所占内存空间sizeof(date)

2024/1/620“.”是分量运算符,运算级别最高。结构体结构体变量成员的引用

结构体变量成员引用的一般形式:结构体变量名.成员名

结构体变量a的各成员可分别表示为a.num、a.name、a.sex、a.birthday、a.score

structdate{intyear,month,day;};structstudent{charnum[8],name[20],sex;structdatebirthday;floatscore;};studenta;a.birthday.year

a.birthday.month

a.birthday.day

2024/1/621结构体P163结构体变量的定义与初始化在定义结构体类型的同时定义变量例如:structstudent{charnum[8],name[20],sex;intage;floatscore;

};studentst1,st[30];struct结构体名{

成员定义表;

};结构体名变量名表;2024/1/622结构体结构体变量的赋值运算同类型结构体变量之间的赋值运算结构体变量之间进行赋值时,系统将按成员一一对应赋值。structdate{intyear,month,day;};structstudent{charnum[8],name[20],sex;structdatebirthday;floatscore;};datea={"9606011","Liming",'M',{1977,12,9},83},b,c;c=a;2024/1/623结构体指针2.结构体成员的三种引用形式

用结构体变量名的引用形式:

d.year

d.month

d.daystructdate{intyear,month,day;};dated,*p=&d;

用结构体指针变量的引用形式:(*p).year(*p).month(*p).dayp->yearp->monthp->day“->”是指向结构体成员运算符,优先级为一级

p=&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论