




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计II学习内容复习总结part1、结构体与递归程序设计方法1、结构体类型-用户(就是我们)可以根据问题需要自己构造的一种具有反映事物内部关联属性的构造性数据类型。比如,时间struct Timeint hour;int min;int sec;Time t1,t2;Time *tp;t1.hour=8;t1.min=8;t1.sec=8;t2=t1;/2个结果体变量可以直接整体赋值。和同一个类的2个对象可以直接赋值一样。(考虑如果成员里面有数组呢?)tp=&t2;tp-hour+;/实际上是让t2的时间属性中的小时到9点。/ to test struct 2 objects assign value globally#include #define N10struct mystructint no;int idN;void main()struct mystruct t1=1,1,2,3,4,5,6,t2;struct mystruct* tp1,*tp2;int i;printf(now output t1 :n);for(i=0;iN;i+)printf(%d ,t1.idi);t2=t1;printf(n now output t2 :n);for(i=0;iN;i+)printf(%d ,t2.idi);tp1=&t1;tp2=&t2;for(i=0;iidi+;printf(n now output t1 :n);for(i=0;iN;i+)printf(%d ,t1.idi);printf(n now output t2 :n);for(i=0;iN;i+)printf(%d ,t2.idi);for(i=0;iidi+=2;printf(n now output t1 :n);for(i=0;iN;i+)printf(%d ,t1.idi);printf(n now output t2 :n);for(i=0;iN;i+)printf(%d ,t2.idi);2、关于递归:靠悟性。但也有一般的方法,就是找到规模为N的问题和规模为N+1 或N-1之间的递推关系式。实例回顾:hanoi塔问题:把A塔上(源头from)的N个盘子借助B(using)移到C(目的to).故可以定义如下函数:Hanoi(int n,char from,char using,char to);在main函数里调用hanoi(6,A,B,C);现在回顾N个盘子和N-1个盘子移动的关系:(1)、先把N-1个盘子当一个整体从A借助C移到B上;hanoi(n-1,from,to,using);(2)、接着把N号盘子把A直接移到C上;printf(“%c %c”,from,to);(3)、最后把N-1个盘从B借助A移到C上。大功告成!Hanoi(n-1,using,from,to);实训:0-1背包问题:N个物品放入一个背包,背包的最大负载M,每个物品的重量为weightk,价值为valuek;问怎样装载可以使装入背包的物品的总价值最大?定义函数:int knapsack(int n,int m)(n个物品,背包负载为m时候所装入物品的最大价值)考虑它与n-1种物品的关系:knapsack(n,m)=maxknapsack(n-1,m),/不装入第n中物品knapsack(n-1,m-weightn)+valuen/装入第n种物品;这样假设实例化上述问题,有8种物品,背包最大负载为100是所能装入的物品的最大价值为knapsack(8,100)(main函数里调用)。int knapsack(int n,int m)int max1,max2;if(n=0) return 0;if(mmax2) return max1;else return max2;part2、类、对象、继承、动态性、运算符重载1、 类与对象类也是用户根据问题需要自己定义的复合数据类型,为了封装、移植、重用的需要。它与结构体最大的不同是里面提供了接口函数,如果没有接口函数就不用类了。再一点就是它能够派生儿子和孙子,而结构体不能。最后,结构体的成员都是public,而多数类数据成员都是private.2、 定义一个类。class PersoncharName20;charSex;int Age;public:voidRegister(char *name, int age, char sex)strcpy(Name, name);Age = age;Sex = (sex = m?m:f);voidShowMe() cout Name t Age t Sex = 1 & mm = 1900 & yy = 1 & dd = 31 ) ? dd : 1;/使用2个不同的重载构造函数创建2个日期类对象Date date1, date2(2006,3,28);除构造函数外,还可以用在构造函数头部使用参数初始化表对数据成员进行初始化。如下面的3种初始化方式:Date():year(1900), month(1), day(1)/构造函数,无参数,使用参数初始化表Date(int yy, int mm=1, int dd=1);/构造函数,3个参数,2个有默认值Date(Date& d) /拷贝构造函数year = d.year;month = d.month;day = d.day;5、 指向对象的指针#include using namespace std;class Datepublic:int day, month, year;void init(int,int,int);void print_ymd();void Date:init(int yy, int mm, int dd)year = yy;month = mm;day = dd;void Date:print_ymd()cout year - month - day init(2006,3,28);p1-print_ymd();int * p2;p2 = &date1.year;/指向对象数据成员的指针cout *p2 endl;void (Date:*p3)(int,int,int);/指向对象成员函数的指针void (Date:*p4)(); /指向对象成员函数的指针p3 = Date:init;p4 = Date:print_ymd;(date1.*p3)(2006,4,8);(date1.*p4)();return 0;6、 运算符重载与this 指针#include using namespace std;class Complexdouble real, imag;public:Complex(double r = 0, double i = 0): real(r), imag(i)double Real()return real;double Imag()return imag;Complex operator +(Complex&);Complex operator +(double);Complex operator =(Complex);Complex Complex:operator + (Complex &c)/ 重载运算符 Complex temp;temp.real = real+c.real;temp.imag = imag+c.imag;return temp;Complex Complex:operator + (double d)/ 重载运算符Complex temp;temp.real = real+d;temp.imag = imag;return temp;Complex Complex:operator = (Complex c)/ 重载运算符real = c.real;imag = c.imag;return *this;/ 测试主函数int main()Complex c1(3,4),c2(5,6),c3;cout c1 = c1.Real() +j c1.Imag() endl;cout c2 = c2.Real() +j c2.Imag() endl;c3 = c1+c2;cout c3 = c3.Real() +j c3.Imag() endl;c3 = c3+6.5;cout c3 + 6.5 = c3.Real() +j c3.Imag() endl;return 0;7、基类与派生类不可直接访问 不可直接访问 private 不可直接访问 private protected 不可直接访问 private public 私有派生 不可直接访问 不可直接访问 private 不可直接访问 protected protected 可直接访问 public public 公有派生 外部函数void main ( )在派生类中对基类成员的访问限定 基类中的访问限定 派生方式 保护派生Public,protectedprotected不可直接访问private不可直接访问派生类要从基类继承除构造函数和析构函数之外的所有其他成员。动态性通过基类的指针访问各派生类的虚函数接口来实现。实训例子:1) 写出图形类的申明,要求求面积和打印输出的成员函数使用纯虚函数2) 写出点类的申明,要求点坐标的输出使用虚函数3) 写出长方形类的申明,要求由左上和右下角的坐标求其长度、宽度和面积(使用虚函数)4) 写出圆形类的申明,增加半径成语5) 写出圆形类中求面积、设置圆半径和获得半径的成员函数6) 写一主函数,使用上面的类,求下图的面积图 形点矩形圆形0,00,64,04,6解答:1、/shape.h#ifndef SHAPE_H#define SHAPE_Hclass Shapepublic:virtual double area()=0;virtual void print()=0;#endif2、/point.h#ifndef POINT_H#define POINT_Hclass Point:public Shapeprivate:int x,y;public:Point():x(0),y(0)void setpoint(int,int);int getx(void)return x;int gety(void)return y;virtual double area(void)return 0;virtual void print(int,int);#endif/ point.c#include void Point:setpoint(int r,int c)x=r;y=c;void Point:print(void)cout“【 ”x“,”y“】”;3、/ rectangle.h#ifndef RECTANGLE_H#define RECTANGLE_Hclass Rectangle:public Pointprotected:Point lefttop;Point rightbottom;public:Rectangle(lefttop,rightbottom):Shape(x,y),x(0),y(0),lefttop(Point ltp1),rightbottom(Point,rbp2)double getlength(void);double getwidth(void);double area(void);virtual void print(void);#endif/ rectangle.c#include double Rectangle:getlength(void)int tx1,tx2;tx1=lefttop.getx();tx2=rightbottom.getx();return tx2-tx1;double Rectangle:getwidth(void)int ty1,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 承包装修木工合同3篇
- 食堂托管管理合同营养健康方面的补充协议3篇
- 绿化合伙人协议书5篇
- 合作合同范本哪里卖
- 委托加工油合同范本
- 合同范本开头怎么写
- 场地出租合同书范文3篇
- 钢材买卖中介合同范本
- 超市商品经销合同范本
- 代理信息咨询合同范本
- 砂石料供应、运输、售后服务方案-1
- BYK色差仪使用方法简介
- 文献检索与科技论文写作入门-第2章
- 无损探伤工(技师、高级技师)技能鉴定考试题库大全-下(多选、判断题汇总)
- 大陆与台湾《建筑抗震设计规范》的比较
- 辩论赛PPT模板模板
- 陶瓷材料基础-陶瓷力学性能-课件
- 开展VIP商务旅客服务的项目策划书
- 广东省封开县金装神梧黄金开采有限公司金矿矿山地质环境保护与土地复垦方案评审意见
- 一年级下册竖式计算题大全
- 大学英语六级(CET-6)试卷模拟真题及答案
评论
0/150
提交评论