欢迎来到优知文库! | 帮助中心 分享价值,成长自我!
优知文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 优知文库 > 资源分类 > PPT文档下载
    分享到微信 分享到微博 分享到QQ空间

    高级语言程序设计教学课件第8章.ppt

    • 资源ID:506628       资源大小:4.43MB        全文页数:69页
    • 资源格式: PPT        下载积分:9金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录
    二维码
    扫码关注公众号登录
    下载资源需要9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    高级语言程序设计教学课件第8章.ppt

    n理解内存单元的双重属性理解内存单元的双重属性300130023006300330053007n变量与地址变量与地址内存中每个字节有一个编号内存中每个字节有一个编号地址地址 名称名称类型类型地址地址值值xint3000随机随机pint*3004随机随机n直接访问与间接访问直接访问与间接访问 直接访问直接访问:按变量地址存取变量值:按变量地址存取变量值 间接访问间接访问:通过存放变量地址的变量去访问变量:通过存放变量地址的变量去访问变量300130023006300330053007名称名称类型类型地址地址iint3000pint*3004n直接访问是用简单变量来访问内存单元的直接访问是用简单变量来访问内存单元的地址地址n间接访问是通过存放简单变量地址(指针)间接访问是通过存放简单变量地址(指针)的变量去访问内存单元的地址的变量去访问内存单元的地址300130023006300330053007-9-n指针的主要应用:指针的主要应用:指针作形参可以在指针作形参可以在的值的值 利用指针作形参可以使子利用指针作形参可以使子 利用指针可以实现利用指针可以实现 利用指针可以实现利用指针可以实现(链表、队列、(链表、队列、堆栈、树等)的操作堆栈、树等)的操作 指针可以指针可以单向值传递单向值传递单向单向值传递值传递 形参是变量,实参可以是常量、变量或表达式。形参是变量,实参可以是常量、变量或表达式。形参与实参占用不同的内存单元。形参与实参占用不同的内存单元。单向值传递单向值传递(形参的改变并不影响实参)。(形参的改变并不影响实参)。地址传递地址传递 形式参数为指针变量,实际参数为变量的地址。形式参数为指针变量,实际参数为变量的地址。形参指向实参。形参指向实参。地址传递地址传递13ff7613ff7813ff7a13ff7c3 5&a=13ff7c,&b=13ff78调用前:调用前:a=3,b=5-swap-x=13ff7c,y=13ff78-swap-调用后:调用后:a=5,b=313ff8213ff8413ff8613fe88n在该例题中,我们利用指针作形参实现了在该例题中,我们利用指针作形参实现了修改实参变量修改实参变量的值。的值。n指针变量的说明指针变量的说明指针运算符指针运算符&取变量或存储单元的地址取变量或存储单元的地址 *取指针所指向的单元(变量)取指针所指向的单元(变量)结论:结论:*ptpt相当于相当于a a (*pt)+pt)+相当于相当于a+a+&*pt=&a=ptpt=&a=pt *&a=&a=*pt=a pt=a&aapt *pta=1;a=1;n指针变量的初始化指针变量的初始化 一般形式一般形式 -22-xpx&x8运行结果为:运行结果为:16 1616 16)04()04()04(242,2422242,2422222221212221acbacbacbiabacabxiabacabxabxxaacbabxaacbabx if(flag 0)printf(Two real solutions:x1=%f,x2=%fn,t1+t2,t1-t2);else if(flag=0)printf(One solution:x1=x2=%fn,t1);else printf(Two complex solutions:x1=%f+%fi,x2=%f-%fin,t1,t2,t1,t2);int solvroot(float a,float b,float c,float*r1,float*r2)float delta;*r1=-b/(2*a);delta=b*b-4*a*c;if(delta=0)*r2=sqrt(delta)/(2*a);else *r2=sqrt(-delta)/(2*a);return(int)delta;n在该例题中,我们利用指针作形参实现了在该例题中,我们利用指针作形参实现了子函数有三个的返回值。子函数通过返回子函数有三个的返回值。子函数通过返回值返回值返回(int)delta的值,通过形参的值,通过形参*r1、*r2与实参与实参&t1、&t2结合返回另外结合返回另外两个值两个值n函数定义形式:函数定义形式:例例 int*f(int *x,int*y)#include void main()int a,b,*p;scanf(%d%d,&a,&b);p=printf(较大的数是较大的数是%dn,*p);if(*x*y)return x;elsereturn y;一、指向数组元素的指针一、指向数组元素的指针 数组元素是内存的一个单元,故数组元素是内存的一个单元,故指向数组元素的指针变量的性质指向数组元素的指针变量的性质和指向变量的指针变量是一样的和指向变量的指针变量是一样的 例如:例如:int a10,*p;也可以在定义时对指针赋初值:也可以在定义时对指针赋初值:int a10,二、通过指针引用数组元素二、通过指针引用数组元素n指针的运算指针的运算 指针变量的赋值运算指针变量的赋值运算p=&a;p=array;p=&arrayi;p1=p;int i,a,*p,*p1;int array10;指针的算术运算指针的算术运算p i 表示的表示的p向前或向后移动向前或向后移动i个元素个元素(i为整型数为整型数)p+,p-,p+=i,p-=i等等若若p1与与p2指向同一数组,指向同一数组,p1-p2=两指针间元素个数两指针间元素个数p1+p2无意义无意义a0a1a2a3a4a5a6a7a8a9a数组数组 指针的关系运算指针的关系运算若若p1和和p2指向同一数组,则指向同一数组,则l p1p2 表示表示p1指的元素在后指的元素在后l p1=p2 表示表示p1与与p2指向同一元素指向同一元素若若p1与与p2不指向同一数组,比较无意义不指向同一数组,比较无意义a0a1a2a3a4a5a6a7a8a9a数组数组nint a10,*p=a;则我们要使用数组中第则我们要使用数组中第i个元素,可以用如下的个元素,可以用如下的方法表示:方法表示:-36-ai*(a+i)pi*(p+i)数组元素表示法数组元素表示法数组元素地址表示法数组元素地址表示法&ai a+i&pi p+i下标法下标法main()int a10;i;for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i10;i+)printf(%d,ai);数组名计算地址法数组名计算地址法main()int a10;i;for(i=0;i10;i+)scanf(%d,a+i);for(i=0;i10;i+)printf(%d,*(a+i);例例:输入输出整型数组:输入输出整型数组a a的全部元素。的全部元素。(假有假有1010个元素个元素)指针法指针法main()int a10,i,*p;p=&a0;for(i=0;i10;i+)scanf(%d,p+i);for(i=0;i10;i+)printf(%d,*(p+i);-38-39-main()int i,*p,a10;p=a;for(i=0;i10;i+)scanf(%d,p);p+;for(i=0;i10;i+)printf(%d,*(p+i);p pp pp pp pp pp pp pp pp pp pp p p p 1.1.数组名是数组的首地址,数组名是数组的首地址,p=&a0p=&a0与与p=ap=a等价等价。2.2.指针变量可以使本身的值改变,数组名不可以。指针变量可以使本身的值改变,数组名不可以。p+p+正确正确 a+a+不正确不正确 3 3指针变量可以指到数组后的内存单元。指针变量可以指到数组后的内存单元。4 4要注意指针变量的当前值。要注意指针变量的当前值。指针变量的复杂运算指针变量的复杂运算void main()/*冒泡冒泡*/int n=10,a10=3,2,4,5,6,8,9,25,21,10;int i,j,temp;int*p 与与 int a10 p 是指针是指针数组名数组名a 是指针(地址)是指针(地址)若若p=a,则,则p+i是是ai的地址的地址(即即p+i=&ai)数组元素的表示方法数组元素的表示方法:和和,即即:若若p=a,则则 系统只给系统只给p分配能保存一个指针值的内存区分配能保存一个指针值的内存区(一般一般);而给);而给a分配分配4*10字节的内存区字节的内存区,即即:q作为形参时:作为形参时:int a34;把把理解成理解成由由#include void main()int a22=1,2,3,4;int i;45 for(i=0;i2;i+)printf(a+%d=%x,i,a+i);printf(t*(a+%d)=%x,i,*(a+i);printf(t a%d=%x,i,ai);printf(t*(*(a+%d)=%dn,i,*(*(a+i);for(i=0;i2;i+)printf(a0+%d=%x,i,a0+i);printf(t*(a0+%d)=%dn,i,*(a0+i);a+0=13ff70 *(a+0)=13ff70 a0=13ff70 *(*(a+0)=1a+1=13ff78 *(a+1)=13ff78 a1=13ff78 *(*(a+1)=3a0+0=13ff70*(a0+0)=1a0+1=13ff74*(a0+1)=2n对于二维数组对于二维数组a22,指针常量,指针常量a和和a0是不是不同类型的指针。通过运行结果我们可以看到:同类型的指针。通过运行结果我们可以看到:指向二维数组的第指向二维数组的第0行;行;指向二维数组第指向二维数组第0行第行第0个元素个元素47*(a+0)和和*(a+1)*(*(a+0)和和*(*(a+1)*(a0+0)和和*(a0+1)a0+2指向谁呢?指向谁呢?a11有多少表示法呢?有多少表示法呢?*(a0+3)、*(a1+1)*(*(a+1)+1)int a22;例例:求二维数组求二维数组a34所有元素的和以及平均值。所有元素的和以及平均值。main()int a34=1,2,3,4,5,6,7,8,9,10,11,12;int i,sum=0,*p;p=&a00;for(i=0;i12;i+,p+)sum=sum+*p;printf(“sum=%d,aver=%f”,sum,sum/12.0)数列的中位数是数列中按照数值数列的中位数是数列中按照数值大小排在中间位置的数。例如:数列大小排在中间位置的数。例如:数列1,2,3,4,5的中位数为的中位数为3。n算法算法:先对数列排序,然后寻找排序序列的先对数列排序,然后寻找排序序列的中位数。中位数。49#include void main()int ser100;int i,num;printf(Input length of serial:n);scanf(%d,&num);printf(input serial elements:n);for(i=0;inum;i+)scanf(%d,ser+i);printf(The median of serial is%dn,*(ser+num/2);void sort(int a,int n)int i,temp;int*p;for(i=0;in-1;i+)for(p=a;p*(p+1)temp=*p;*p=*(p+1);*(p+1)=temp;51Input length of serial:5input serial elements:1-3 23 67 15The median of serial is 23#include#define M 3#define N 2int maxarray(int aMN,int m,int n,int*pmaxi,int*pmaxj);void main()int aMN=1,2,3,4,5,6;int max,maxi,maxj;printf(“a%d%d=%d”,max,maxi,maxj);int i,j,max=a00;for(i=0;im;i+)f

    注意事项

    本文(高级语言程序设计教学课件第8章.ppt)为本站会员(王**)主动上传,优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知优知文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 yzwku网站版权所有

    经营许可证编号:宁ICP备2022001189号-2

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知优知文库网,我们立即给予删除!

    收起
    展开