已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机程序设计,顾刚计算机教学实验中心,第5-6章指针与函数,动态存储分配指针作为函数参数指针作为函数返回值指向函数的指针递归函数函数重载带参数的main()函数,程序中使用的变量、数组和函数必须先声明后使用,编译系统根据声明语句开辟内存空间,因此数据占用的存储空间是固定的。这种内存储器分配方法被称为静态存储分配动态存储分配(dynamicallocation)是在程序运行过程中随机获得内存存储空间的方法C+用运算符new和delete实现动态存储分配,动态存储分配,运算符new用来申请所需的内存=new();例如:int*pw;pw=newint;*pw=100;合并成一条语句:int*pw=newint(100);/动态、堆区等价于:inti=100;/静态分配,在函数区域也可为数组申请内存:=new;例如double*pk;pk=newdouble50;合并成一条语句:double*pk=newdouble50;等价于:doublea50;,new的使用,运算符delete用于释放先前申请到的存储块delete;例如:int*pi=newint;deletepw;若要释放数组的空间,必须放一个空的方括号在操作符delete和指向该类对象数组的指针之间例如:int*p=newintsize;deletep;,delete的使用,#includeusingnamespacestd;intmain()intp10000;intn;coutn;p0=0;p1=1;coutp0endl;coutp1endl;for(inti=2;in;i+)pi=pi-2+pi-1;coutpin;int*p=newintn;/申请数组空间if(p=0|n=0)/如果没有申请到内存或数据输入有误,则返回coutError!endl;return-1;p0=0;p1=1;coutp0endl;coutp1endl;for(inti=2;in;i+)pi=pi-2+pi-1;coutpin;coutai;a1i=ai;coutk;if(k=n)coutx;cout=n)cout多项式的k阶导数的值为:endl;elsecout多项式的k阶导数的值为:fun(a1,x,n-k)endl;return0;/如何用动态存储分配方法求解?,授课提纲,动态存储分配指针作为函数参数指针作为函数返回值指向函数的指针递归函数函数重载带参数的main()函数,指针作为函数的参数,函数的参数不仅可以是基本数据类型的变量、数组名或常量表达式,而且可以是指针如果实参是单写的数组名,则是指针常量通过使实参与形参指针指向共同的内存空间或者说被调函数可以修改主调函数中的变量,intmystrcmp(chars1,chars2)inti=0;while(s1i=s2i,intmystrcmp(char*s1,char*s2)inti=0;while(*s1=*s2,如何编写部分字符串比较函数?,字符串比较函数,部分字符串比较函数,intmystrnicmp(char*str1,char*str2,intn)/部分字符串比较while(*str1=*str2,选择排序与冒泡排序方法较为相似循环N-1趟每趟挑选最小元素放到数组“最”左边举例如下:初始状态:272231第一趟:172232第二趟:127232第三趟:122732第四趟:122237第五趟:122237注意挑选最小元素时,先记录最小元素下标,然后将最小元素与“最”左边元素交换,选择排序方法,#includeusingnamespacestd;voidselectsort(int*list,intcount)for(inti=0;icount;i+)intk=i;/先记录最小元素的下标for(intj=i+1;jcount;j+)if(*(list+j)*(list+k)k=j;/先记录下标if(k!=i)/本趟找完最小元素,再交换inttmp=*(list+i);*(list+i)=*(list+k);*(list+k)=tmp;intmain()intlist6=2,7,2,2,3,1;selectsort(list,6);coutTheresultis:endl;for(inti=0;i6;i+)coutlisti;cout*z)swap(x,z);if(*y*z)swap(y,z);main()intx1=2,y1=3,z1=1;coutBeginsorting,thelistis:endl;coutx1ty1tz1=1,授课提纲,动态存储分配指针作为函数参数指针作为函数返回值指向函数的指针递归函数函数重载带参数的main()函数,指向函数的指针,任何函数在内存中存放都有首地址(第一字节地址)首地址是函数的入口地址。主函数在调用子函数时,就是让程序转移到函数的入口地址开始执行指向函数的指针:就是指针的值为该函数的入口地址指向函数的指针变量的说明格式为:(*)();int(*p)();/p为指向返回值为整型的函数的指针float(*q)(float,int);/q为指向返回值为浮点型函数的指针注意指针变量名前后的圆扩号不能少int*p();/与函数原型混淆,二义性float*q(float,int);/与函数原型混淆,二义性,通用数值积分函数,#include#includeusingnamespacestd;doubleintegral(doublea,doubleb,double(*fun)(double),intn)doubleh=(b-a)/n;doublesum=(*fun)(a)+(*fun)(b)/2;inti;for(i=1;in;i+)sum+=(*fun)(a+i*h);sum*=h;returnsum;intmain()double(*fp)(double);fp=cos;coutintegral(0.0,1.0,sin,1000)endl;coutintegral(0.0,1.0,fp,1000)endl;return0;,授课提纲,动态存储分配指针作为函数参数指针作为函数返回值指向函数的指针递归函数函数重载带参数的main()函数,什么是递归函数,如果某个函数的函数体内有调用其自身的语句,则该函数称为递归函数intabc(floata,floatb,floatc)floatx,y,z;ints;s=abc(x,y,z);,递归函数运行现象,递归函数运行有两种现象:一种是永无休止地调用自身,形成永久运行的现象,如同“死循环”另一种是加以控制,使函数经过有限次数的调用,程序便停止运行,永无休止运行的递归函数,#include/递归函数永无休止的运行示例usingnamespacestd;intdigui(inta,intb)/递归函数b=b+a;cout“递归函数输出b=:bendl;digui(a,b);/递归调用cout“递归函数输出a=:aendl;returnb;voidmain()intx,y;x=5;y=10;digui(x,y);/递归调用coutx=x;y=yendl;,有限次数地运行递归函数,#include/递归函数永无休止的运行示例usingnamespacestd;intdigui(inta,intb)/递归函数b=b+a;cout递归函数输出b=:bendl;if(a=0)returnb;digui(a-1,b);/递归调用cout递归函数输出a=:aendl;returnb;voidmain()intx,y;x=5;y=10;digui(x,y);/递归调用coutx=x;y=yendl;,采用递归函数求n!,算法分析:由阶乘的概念可以写出其递归定义0!=1n!=n*(n-1)!程序:intfac(intn)if(n0)/不能求负数的阶乘return1;elseif(n=0)/0的阶乘为1return1;elsereturnn*fac(n-1);/n!为(n-1)!乘以n,#includeusingnamespacestd;intfac(intn)if(n0)/不能求负数的阶乘return1;elseif(n=0)/0的阶乘为1return1;elsereturnn*fac(n-1);/n!为(n-1)!乘以nmian()coutfac(5)n;factorial=f(n);coutfactorialn;factorial=f(n);coutfactorialendl;return1;#设输入n=3,32,f(3)/n=3if(3=0)factorial=1;elsefactorial=3*f(3-1);returnfactorial;,f(2)/n=2if(2=0)factorial=1;elsefactorial=2*f(2-1);returnfactorial;,1,过程追踪,/#includeusingnamespacestd;intf(intn);intmain()coutf(5)endl;return0;,intf(intn)intfactorial=0;staticintk=1;cout第(k+)次调用n=nendl;if(n=0)factorial=1;elseinttmp;tmp=f(n-1);factorial=n*tmp;coutn*tmp;coutn!=factorialmaximum)returnarraybegin;elsereturnmaximum;main()inta=19,33,69,55,77,12,52;coutthemaxismax_element(a,0,6)1时,就需要借助另外一个针来移动。将n片金片由A移到C上可以分解为以下几个步骤:(1)将A上的n1片金片借助C针移到B针上;(2)把A针上剩下的一片金片由A针移到C针上;(3)最后将剩下的n1个金片借助A针由B针移到C针上步骤(1)和(3)与整个任务类似,但涉及的金片只有n1个了。这是一个典型递归算法,#includeusingnamespacestd;constintN=3;/考察当金片数为3个时的情况voidmove(charfrom,charto)/函数move():将金片由一根针移到另一根针上coutFromfromtoto=0?x:-x;longabs(longx)returnx=0?x:-x;,#includeusingnamespacestd;intmax_element(int*array,intbegin,intend)intmaximum;if(begin=end)returnarraybegin;elsemaximum=max_element(array,begin+1,end);if(arraybeginmaximum)returnarraybegin;elsereturnaximum;doublemax_element(doublearray,intbegin,intend)doublemaximum;if(begin=end)returnarraybegin;elsemaximum=max_element(array,begin+1,end);if(arraybeginmaximum)returnarraybegin;elsereturnmaximum;main()inta=19,33,69,55,77,12,52;doubleb=10.1,21.3,12.4,321.42,5.2,7.1,8.3,12.31,70.0;coutthemaxismax_element(a,0,6)endl;coutthemaxismax_element(b,0,8)endl;return0;,重载寻找最大元素,授课提纲,动态存储分配指针作为函数参数指针作为函数返回值指向函数的指针递归函数函数重载带参数的main()函数,带参数的main(),函数原型为:intmain(intargc,char*argv)第一个整型参数指明在以命令行方式执行本程序时所带的参数个数(包括程序名本身,故argc的值至少为1)第二个参数为一个字符型指针数组(其中第1个下标变量argv0指向本程序名,接下来的下标变量argv1,argv2.等分别指向命令行传递给程序的各个参数),用来存放命令行中命令字及各个参数的字符串,带参数的main函数的使用,/带参数的main函数的使用,假设文件名设为abc.cpp#includeusingnamespacestd;intmain(inta,char*ar)if(a!=2)coutendl;return1;coutHello,ar1.WelcometoC+!0),计算Xk。2、(必做题)使用递归算法编写求斐波那契数列的第n项的函数,并编出主函数进行验证。3、(必做题)第7章第18题(增加重载字符型)。4、(必做题)编写一个函数,用于去掉字符串前面的空格,其原型为:char*myltrim(char*string);其中参数string为字符串,返回值为指向string的指针。5、(必做题)用牛顿迭代法求任意一元方程:anXn+an-1Xn-1+.+a1X1+a00的根。提示:迭代公式:Xn+1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宝塔带轮课程设计
- 2025年上半年中小学教师资格考试教育知识与能力(中学)真题附答案解析
- 2026中国医用高值耗材市场供需格局及政策影响分析报告
- 2026医疗器械行业体外诊断产品发展研究及技术革新与市场需求预测分析报告
- 2026以色列网络安全行业市场现状供求分析及投资评估规划分析研究报告
- 2026畜禽种业知识产权保护与国际合作分析报告
- 2026散装塑料原料行业供需状况与投资机会评估报告
- 2026增材制造金属粉末制备技术与应用场景报告
- 2026中国医用高分子材料技术创新与进口依赖度分析报告
- 2026汽车智能钥匙行业市场发展分析及安全技术与用户体验优化报告
- Unit 1 Section A 1a-1d 课件(内嵌视频)2026-2027学年人教版英语九年级上册
- 新版小学英语新人教版PEP五年级上册全册教案(2026秋)合集
- 贵州省粮食储备集团有限公司招聘考试真题
- 部编版新教材道德与法治五年级上册第2课《探索中国革命道路》教学设计
- 四年级上数学学困生转化计划
- 2025年新员工三级安全培训考核试题之三级安全教育考试(班组级)及答案
- 2026国企中层干部竞岗笔试真题题库及标准答案(竞聘专用完整版)
- 苏轼自题金山画像 课件
- 河科大金属材料成形基础课件01工程材料的性质
- 2026小学教资教育科学研究方法课件
- RTCA∕DO-160G 机载设备环境条件和试验程序
评论
0/150
提交评论