内蒙古大学《算法与数据结构》讲义01C++程序设计
29页1、下载第1章C + +程序设计大家好!现在我们将要开始一个穿越“数据结构、算法和程序”这个抽象世界的特殊旅程,以解决现实生活中的许多难题。在程序开发过程中通常需要做到如下两点:一是高效地描述数据;二是设计一个好的算法,该算法最终可用程序来实现。要想高效地描述数据,必须具备数据结构领域的专门知识;而要想设计一个好的算法,则需要算法设计领域的专门知识。在着手研究数据结构和算法设计方法之前,需要你能够熟练地运用 C + +编程并分析程序,这些基本的技能通常是从C + +课程以及其他分散的课程中学到的。本书的前两章旨在帮助你回顾一下这些技能,其中的许多内容你可能已经很熟悉了。本章我们将回顾C+ 的一些特性。因为不是针对C+ 新手,因此没有介绍诸如赋值语句、if 语句和循环语句(如for 和w h i l e)等基本结构,而是主要介绍一些可能已经被你忽略的 C + +特性: 参数传递方式(如传值、引用和常量引用) 。 函数返回方式(如返值、引用和常量引用) 。 模板函数。 递归函数。 常量函数。 内存分配和释放函数:n e w与d e l e t e。 异常处理结构:t r y, c a t c
2、h和t h r o w。 类与模板类。 类的共享成员、保护成员和私有成员。 友元。 操作符重载。本章中没有涉及的其他C + +特性将在后续章节中在需要的时候加以介绍。本章还给出了如下应用程序的代码: 一维和二维数组的动态分配与释放。 求解二次方程。 生成n 个元素的所有排列方式。 寻找n个元素中的最大值。此外,本章还给出了如何测试和调试程序的一些技巧。1.1 引言在检查程序的时候我们应该问一问: 它正确吗?第一部分预 备 知 识 它容易读懂吗? 它有完善的文档吗? 它容易修改吗? 它在运行时需要多大内存? 它的运行时间有多长? 它的通用性如何?能不能不加修改就可以用它来解决更大范围的问题? 它可以在多种机器上编译和运行吗?或者说需要经过修改才能在不同的机器上运行吗?上述问题的相对重要性取决于具体的应用环境。比如,如果我们正在编写一个只需运行一次即可丢弃的程序,那么主要关心的应是程序的正确性、内存需求、运行时间以及能否在一台机器上编译和运行。不管具体的应用环境是什么,正确性总是程序的一个最重要的特性。一个不正确的程序,不管它有多快、有多么好的通用性、有多么完善的文档,都是毫无意义的(除非
3、它变正确了) 。尽管我们无法详细地介绍提高程序正确性的技术,但可以为大家提供一些程序正确性的验证方法以及公认的一些良好的程序设计习惯,它们可以帮助你编写正确的代码。我们的目标是教会你如何开发正确的、精致的、高效的程序。1.2 函数与参数1.2.1 传值参数考察函数A b c(见程序1 - 1) 。该函数用来计算表达式 a+b+b*c+ (a+b-c) / (a+b) + 4,其中a,b和c 是整数,结果也是一个整数。程序1-1 计算一个整数表达式int Abc(int a, int b, int c)return a+b+b*c+(a+b-c)/(a+b)+4;在程序1 - 1中,a,b和c 是函数Abc 的形式参数(formal parameter) ,类型均为整型。如果在如下语句中调用函数A b c:z = Abc(2,x,y)那么,2,x 和y 分别是对应于a,b 和c 的实际参数(actual parameter) 。当A bc( 2 ,x,y) 被执行时,a 被赋值为2;b 被赋值为x;c 被赋值为y。如果x 和 / 或y 不是int 类型,那么在把它们的值赋给b 和c 之前
4、,将首先对它们进行类型转换。例如,如果x 是float 类型,其值为3 . 8,那么b 将被赋值为3。在程序1 - 1中,形式参数a,b 和c 都是传值参数(value parameter) 。运行时,与传值形式参数相对应的实际参数的值将在函数执行之前被复制给形式参数,复制过程是由该形式参数所属数据类型的复制构造函数( copy constructor)完成的。如果实际参数与形式参数的数据类型不同,必须进行类型转换,从实际参数的类型转换为形式参数的类型,当然,假定这样的类型转换是允许的。当函数运行结束时,形式参数所属数据类型的析构函数(d e s t r u c t o r)负责释放该形式参数。当一个函数返回时,形式参数的值不会被复制到对应的实际参数中。因此,函数调用不会修改实际参数的值。2第一部分预 备 知 识下载1.2.2 模板函数假定我们希望编写另外一个函数来计算与程序 1 - 1相同的表达式,不过这次a,b和c是f l o a t类型,结果也是f l o a t类型。程序1 - 2中给出了具体的代码。程序1 - 1和1 - 2的区别仅在于形式参数以及函数返回值的数据类型。程序1
5、-2 计算一个浮点数表达式float Abc(float a, float b, float c)return a+b+b*c+(a+b-c)/(a+b)+4;实际上不必对每一种可能的形式参数的类型都重新编写一个相应的函数。可以编写一段通用的代码,将参数的数据类型作为一个变量,它的值由编译器来确定。程序 1 - 3中给出了这样一段使用t e m p l a t e语句编写的通用代码。程序1-3 利用模板函数计算一个表达式templateT Abc(T a, T b, T c)return a+b+b*c+(a+b-c)/(a+b)+4;利用这段通用代码,通过把T替换为i n t,编译器可以立即构造出程序1 - 1,把T 替换为f l o a t又可以立即构造出程序1 - 2。事实上,通过把T替换为d o u b l e或l o n g,编译器又可以构造出函数A b c的双精度型版本和长整型版本。把函数 Abc 编写成模板函数可以让我们不必了解形式参数的数据类型。1.2.3 引用参数程序1 - 3中形式参数的用法会增加程序的运行开销。例如,我们来考察一下函数被调用以及返回时所涉及的操作。
《内蒙古大学《算法与数据结构》讲义01C++程序设计》由会员东***分享,可在线阅读,更多相关《内蒙古大学《算法与数据结构》讲义01C++程序设计》请在金锄头文库上搜索。
幼儿园大班科学活动《智能留言机》课件
幼儿园大班语言绘本阅读《手电筒看见了什么》PPT
幼儿园小班科学《教宝宝认识动物》课件
幼儿园中班语言《灰狼家的小饭桶们》教案
【国家审计报告】审计报告W-06审计处罚决定书
【企业财务管理办法】会计档案管理办法
【员工主动离职-风险防范】劳动争议判决书
【员工被动离职-后续工作】70-070员工违反有关商业秘密的约定可以索赔吗
【员工被动离职-辞退申请】第六节 员工任免通知书
【员工被动离职-后续工作】70-050因员工的原因使服务期无法完成可以索赔吗
企业岗位管理制度12办公室行为规范
企业岗位管理制度30离职人员薪资发放通知单
幼儿园春游活动美丽的公园教案
呼职院电力机车制动机讲义11高速列车和重载列车制动
武理工《运输管理》教案第1章 运输系统
中海大海洋化学讲义02海洋的形成和海水的组成——兼论地球上水的起源、变迁和循环
武理工船舶柴油机习题库及答案04燃油喷射和燃烧
厦大海洋生态学课件07海洋初级生产力
华北理工水声学课件05声波在目标上的反射和散射-1目标强度及常见声纳目标的目标强度的一般特征
武理工船舶结构与设备课件02船体结构与管系-4专用船特殊船体结构特点
2023-09-25 37页
2023-09-25 10页
2023-09-25 33页
2023-09-25 26页
2023-04-03 8页
2023-04-03 4页
2023-04-03 8页
2023-03-29 10页
2023-03-22 10页
2023-03-20 8页