




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机程序设计 顾 刚 计算机教学实验中心 第5-6章 指针与函数 F动态存储分配 n指针作为函数参数 n指针作为函数返回值 n指向函数的指针 n递归函数 n函数重载 n带参数的main()函数 F程序中使用的变量、数组和函数必须先声明 后使用,编译系统根据声明语句开辟内存空 间,因此数据占用的存储空间是固定的。这 种内存储器分配方法被称为静态存储分配 F动态存储分配(dynamic allocation)是在程 序运行过程中随机获得内存存储空间的方法 FC+用运算符new和delete实现动态存储分配 动态存储分配 F运算符new用来申请所需的内存 = new (); 例如:int *pw; pw = new int; *pw = 100; 合并成一条语句:int *pw = new int (100); /动态、堆区 等价于:int i = 100; /静态分配,在函数区域 F也可为数组申请内存: = new ; 例如 double *pk; pk = new double50; 合并成一条语句:double *pk = new double50; 等价于:double a50; new的使用 F运算符delete用于释放先前申请到的存储块 delete ; 例如: int *pi = new int; delete pw; F若要释放数组的空间,必须放一个空的方括 号在操作符delete和指向该类对象数组的 指针之间 例如:int *p = new int size; delete p; delete的使用 #include using namespace std; int main() int p10000; int n; coutn; p0=0;p1=1; cout using namespace std; int main() int n; coutn; int *p =new intn; /申请数组空间 if ( p=0 | n /没有动态存储分配的求解 using namespace std; void print(double a,int n) if (a00) cout0) cout0;i-) sum=(sum+ai)*x; sum=sum+a0; return sum; int main() double a100,a1100; double x; int n,k; coutn; coutai; a1i=ai; coutk; if (k=n) coutx; cout=n) cout0) str1+; str2+; n-; return *str1-*str2; F选择排序与冒泡排序方法较为相似 F循环N-1趟 F每趟挑选最小元素放到数组“最”左边 F举例如下: F初始状态:2 7 2 2 3 1 F第一趟: 1 7 2 2 3 2 F第二趟: 1 2 7 2 3 2 F第三趟: 1 2 2 7 3 2 F第四趟: 1 2 2 2 3 7 F第五趟: 1 2 2 2 3 7 F注意挑选最小元素时,先记录最小元素下标 ,然后将最小元素与“最”左边元素交换 选择排序方法 #include using namespace std; void selectsort(int *list,int count) for(int i=0;i using namespace std; void swap(int *xp,int *yp) /交换函数,参数用指针 int tmp; tmp = *xp; *xp = *yp; *yp = tmp; void sort(int *x,int *y,int *z) /排序函数,参数用指针 if(*x*y) swap(x,y); if(*x*z) swap(x,z); if(*y*z) swap(y,z); main() int x1=2,y1=3,z1=1; cout using namespace std; char *mystrchr(char *string,int c)/返回指针,若返回下标 while(*string!=c if(*string=c) return string; else return NULL; int main() char s=“International Labor Day“; char *p1; p1=mystrchr(s,L); cout=1 Fint(*p)();/ p为指向返回值为整型的函数的指针 Ffloat(*q)(float,int);/ q为指向返回值为浮点型函数的指针 F注意指针变量名前后的圆扩号不能少 Fint *p();/与函数原型混淆,二义性 Ffloat *q (float,int); /与函数原型混淆,二义性 通用数值积分函数 #include #include using namespace std; double integral(double a, double b, double (*fun)(double), int n) double h = (b-a)/n; double sum = (*fun)(a)+(*fun)(b)/2; int i; for(i=1; i /递归函数永无休止的运行示例 using namespace std; int digui(int a, int b) /递归函数 b=b+a; cout /递归函数永无休止的运行示例 using namespace std; int digui(int a, int b) /递归函数 b=b+a; cout using namespace std; int fac(int n) if(nn; factorial=f(n); coutn; factorial=f(n); cout using namespace std; int f(int n); int main() cout using namespace std; int max_element(int array,int begin,int end) /注意改写成指针int *array int maximum; if(begin=end) return arraybegin; else maximum=max_element(array,begin+1,end); if(arraybeginmaximum)return arraybegin; else return maximum; main() int a=19,33,69,55,77,12,52; cout1时,就需要借助另外一个针来移动。将n片金 片由A移到C上可以分解为以下几个步骤: (1)将A上的n1片金片借助C针移到B针上; (2)把A针上剩下的一片金片由A针移到C针上; (3)最后将剩下的n1个金片借助A针由B针移到C针上 n步骤(1)和(3)与整个任务类似,但涉及的金片只有 n1个了。这是一个典型递归算法 #include using namespace std; const int N=3;/考察当金片数为3个时的情况 void move(char from, char to) / 函数move():将金片由一根针移到另一根针上 cout using namespace std; int abs(int x) return x=0?x:-x; double abs(double x) return x=0?x:-x; long abs(long x) return x=0?x:-x; #include using namespace std; int max_element(int *array,int begin,int end) int maximum; if(begin=end)return arraybegin; else maximum=max_element(array,begin+1,end); if(arraybeginmaximum) return arraybegin; else return aximum; double max_element(double array,int begin,int end) double maximum; if(begin=end)return arraybegin; else maximum=max_element(array,begin+1,end); if(arraybeginmaximum) return arraybegin; else return maximum; main() int a=19,33,69,55,77,12,52; double b=10.1,21.3,12.4,321.42,5.2,7.1,8.3,12.31,70.0; cout using namespace std; int main(int a, char *ar) if(a!=2) cout“0) ,计算 Xk 。 2、(必做题) 使用递归算法编写求斐波那契数列的第 n 项的函数,并编出 主函数进行验证。 3、 (必做题)第7章第18题(增加重载字符型)。 4、(必做题)编写一个函数,用于去掉字符串前面的空格,其原型为 : char *myltrim(char *string); 其中参数 string 为字符串,返回值为指向 string 的指针。 5、(必做题) 用牛顿迭代法求任意一元方程: anXn+an-1Xn- 1+a1X1+a0 0 的根。 提示:迭代公式:Xn+1 = Xn + f(Xn) / f(Xn) 结束迭代过程的条件为(|f(Xn+1)| )与(|Xn+1 - Xn| )同时成 立,其中 为预先给定的精度要求。 6、(必做题)将数字、小数点、正负号组成的字符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 诸葛亮简介教学课件
- 装载机安全培训习题课件
- 2025年鲁能集团有限公司新疆新能源分公司校园招聘笔试模拟试题及答案详解(夺冠系列)
- 广东轻工职业技术学院单招《物理》常考点试卷带答案详解(B卷)
- 2025年执业药师之《西药学专业一》题库必刷题附完整答案详解【夺冠】
- 饲料行业培训课件
- 2024年江苏省泰兴市中考数学考点攻克及完整答案详解(名校卷)
- 2025年河南省(安阳市)事业单位招聘1148人联考工作的笔试备考题库及参考答案详解
- 2025年河南南阳市教育局直属学校校园招聘教育紧缺人才333人笔试备考题库带答案详解
- 2024自考专业(计算机网络)考前冲刺练习题含完整答案详解【各地真题】
- GB/T 21063.4-2007政务信息资源目录体系第4部分:政务信息资源分类
- 机修车间岗位廉洁风险点及防范措施表
- 全新版尹定邦设计学概论1课件
- 牙及牙槽外科
- 文物建筑保护修缮专项方案
- 万用表 钳形表 摇表的使用课件
- 63T折弯机使用说明书
- 170位真实有效投资人邮箱
- 工程力学ppt课件(完整版)
- 《区域经济学》讲义(1)课件
- 船模制作教程(课堂PPT)课件(PPT 85页)
评论
0/150
提交评论