《C++程序设计(第2版)》ch14_习题课v2.ppt_第1页
《C++程序设计(第2版)》ch14_习题课v2.ppt_第2页
《C++程序设计(第2版)》ch14_习题课v2.ppt_第3页
《C++程序设计(第2版)》ch14_习题课v2.ppt_第4页
《C++程序设计(第2版)》ch14_习题课v2.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第614章习题课,杨琦 计算机教学实验中心 西安交通大学,第6章指针,习题6-1 用指针重新编写冒泡排序程序。 习题6-2 编写程序,将某一个输入的位数不确定的正整数按照标准的三位分节格式输出,例如,当用户输入82668634时,程序应该输出82,668,634。 习题6-3 编写程序,把10个整数1、2、10赋予某个int型数组,然后用int型指针输出该数组元素的值。 习题6-4 用指针编写一个程序,当输入一个字符串后,要求不仅能够统计其中字符的个数,还能分别指出其中大、小写字母、数字以及其他字符的个数。,第6章指针,习题6-5 编写一个函数, 用于将一个字符串转换为整型数值。其原型为: i

2、nt atoi(char *string); 习题6-6 编写一个函数,用于生成一个空白字符串,其原型为: char *mystrspc(char *string, int n);,习题6-1冒泡排序程序,void bubble_up(int *ptr, int count) for(int i=0; ii; j=j-1) if(*(ptr+j-1)*(ptr+j) int tmp = *(ptr+j-1); *(ptr+j-1) = *(ptr+j); *(ptr+j) = tmp; ,ptr为指针,int main() const int COUNT=16; int listCOUNT=

3、503, 87, 512, 61, 908, 170, 897, 275, 653, 426, 154, 509, 612, 677, 765, 703 ; bubble_up(list, 16); cout The result is : endl; for(int i=0; i16; i+) cout listi ; coutendl; return 0; ,习题6-2,例如,当用户输入82668634时,程序应该输出82,668,634。,int main() int num; char array50;char *ptr=array; coutnum; int k=0; while(n

4、um!=0) *ptr=num%10+0; num=num/10; ptr+; k+; if(k%3=0) *ptr=,; ptr+; ; *ptr=0; strrev(array); cout该整数按照标准的三位分节格式输出为:; coutarrayendl; return 0; ,习题6-5,编写一个函数,将一个数字字符串转换为一个整数 函数原型: int atoi(char *string);,输入与输出: 请输入待转换的字符串值:-529 转换后的整型数值是:-529,习题6-5,int atoi(char *string) int num=0;int s=1; if(*string=

5、-) s=-1; string+; if(*string=+) s=1;string+; while(*string!=0 ,习题6-6 char *mystrspc(char *string, int n);,char *mystrspc(char * string, int n) char * ptr = string; while (n0) *string= ; string+; n-; *string = 0; return ptr; ,int main() char *str; int n; coutn; str=new charn; cout“n结果如下,注意观察#之间的空格数:n

6、endl; cout#mystrspc(str,n)#endl; cout ; for(int i=0;in;i+) couti%10; coutendlendl; return 0; ,第7章 函数与指针,习题7-1 使用递归算法编写如下程序:对于任意给定的实数X和整数k0,计算Xk。 习题7-2 Ackermann函数ack(m,n)由以下递归定义: 习题7-3 使用递归算法编写求斐波那契数列的第n项的函数,并编出主函数进行验证。,第7章 函数与指针,习题7-4 编写一个求立方的函数cube,并重载它,使之可以对输入的整型量和实型量数值求立方。 习题7-5 重载判断两个数值大小的函数max

7、,这些数值可能是整型数、实型数和字符型,函数的返回值为两个数值中的最大值。 习题7-6 编写一个函数,用于去掉字符串尾部的空格符,其原型为: char *mytrim(char *string); 习题7-7 编写一个函数,用于去掉字符串前面的空格,其原型为: char *myltrim(char *string);,第7章 函数与指针,习题7-8 编写一个程序,当输入一个整数以后,可以转换成相应的英文单词输出。如:123转换成one hundred twenty three。 习题7-9 用牛顿法或者二分法编写一个求方程f(x)=0在区间a, b中的实根的函数, 其原型为: double e

8、quation(double (*func)(double), double a, double b, double eps);,习题7-2,#include using namespace std; int ack(int m, int n) if(m=0)return n+1; else if(n=0)return ack(m-1, 1); return ack(m-1, ack(m, n-1); ,结果:ack (0,0)=1 ack(2,3)=9 ack(2,4)=11,习题7- mytrim(char *string);,char *mytrim(char *string) char

9、 *ptr=string; while(*ptr!=0) ptr+; do ptr-; while(*ptr= ); *(+ptr)=0; return string; ,int main() char str = The art of computer programming ; cout 截取前的原始字符串是: strendl; cout 截取空格后的字符串是: mytrim(str); return 0; ,习题7-7 myltrim(char *string);,char *myltrim(char * string) char *ptr=string; while(*ptr= ) p

10、tr+; strcpy(string, ptr); return string; ,第8章 结构化设计方法,1输入某小组5个人的姓名、性别、出生年份等信息,统计男女人数以及1988年以后(含1988年)出生的人数。 2定义一个名为Circle(圆)的结构体,其数据成员是圆的外接矩形的左上角和右下角两点的坐标,计算该圆的面积。 3读入5个用户的姓名和电话号码,按姓名的字典顺序排列后,输出每个用户的姓名和电话号码。 4口袋中有红、黄、蓝、白、黑五种颜色的小球若干个。如果每次都从口袋中取出3个不同颜色的小球,共有多少种组合,请打印出每种组合的3种颜色。要求使用枚举类型来表示小球的颜色。 5用自顶向下

11、、逐步求精的程序设计方法找出210000之内的所有完全数(所谓完全数,即其各因子之和正好等于本身的数。如6=1+2+3,28=1+2+4+7+14,所以6,28都是完全数),第9章 类和对象,习题9-1设计一个Dog类,包含name、age、sex和weight等属性以及对这些属性操作的方法。实现并测试这个类。 习题9-2设计并测试一个名为Ellipse的椭圆类,其属性为外接矩形的左上角与右下角两个点的坐标,并能计算出椭圆的面积。 习题9-3仿照Date类设计一个Time类,可以设置时间、进行时间的加减运算、按各种可能的格式输出时间。,习题9-1设计一个Dog类,#include #inclu

12、de using namespace std; class Dog string name;intage;char sex; float weight; public: Dog(string Name, int Age, char Sex, float Weight); string GetName() return name; int GetAge() return age; char GetSex() return sex; float GetWeight() return weight; void Speak() coutArf!Arf!endl; ;,Dog:Dog(string Na

13、me, int Age, char Sex, float Weight) name=Name;age = Age; sex = Sex;weight = Weight; int main() Dog dog1(ahuang, 3, m, 2.4); coutDogs name: dog1.GetName()endl; coutDogs age: dog1.GetAge()endl; coutDogs sex: dog1.GetSex()endl; coutDogs weight: dog1.GetWeight()endl; coutDog speak: ; dog1.Speak(); retu

14、rn 0; ,习题9-3设计一个Time类,class Time int hour,minute,second; public: int SecCalc(); Time( int h = 0, int m = 0, int s = 0 );/构造函数 void SetTime(int h = 0, int m = 0, int s = 0 );/时间设置 void print_12(); void print_24(); Time Add(Time,第9章 类和对象,习题9-4合并Date类和Time类为一个DateAndTime类,修改相应的成员函数,当时间递增到新的一天时,应能够修改日期值

15、。,#include #include class CDateTime CTime t; public: CDateTime(int y,int m,int d,int h,int mm, int s) t=CTime(y,m,d,h,mm,s); void AddDay(int days) t=t+CTimeSpan(days,0,0,0); void IncDay() t=t+CTimeSpan(1,0,0,0); void print_ymd() CString s=t.Format(%Y, %m %d); coutsendl; ;,int main() CDateTime x(2007

16、,4,27,1,2,3); x.print_ymd(); x.AddDay(5); x.print_ymd(); return 0; ,第10章 类和对象(二),1定义一个Dog类,包含name、age、sex、weight等属性,设计一个构造函数,可以对这些属性进行初始化。实现并测试这个类。 2设计并测试一个名为Ellipse的椭圆类,其属性为其圆心坐标以及半长轴和半短轴的长度。设计一个构造函数对这些属性进行初始化,并通过成员函数计算出椭圆的面积。 3仿照Date类设计一个Time类,设计多个重载的构造函数,可以设置时间、进行时间的加减运算、按各种可能的格式输出时间。 4合并Date类和Ti

17、me类为一个DateAndTime类,修改相应的成员函数,当时间递增到新的一天时,应能够修改日期值。,习题10-1 定义一个Dog类,class Dog char name20; intage; char sex; double weight; public: Dog(char *Name=, int Age=0, char Sex=m, double Weight=0) strcpy(name,Name); age = Age; sex = Sex; weight = Weight; char * GetName() return name; int GetAge() return age;

18、 char GetSex() return sex; double GetWeight() return weight; void Speak() coutArf!Arf!endl; ;,习题10-2 设计Ellipse类,class Ellipse int x1,y1,x2,y2; public: Ellipse(int a=0,int b=0,int c=0,int d=0): x1(a),y1(b),x2(c),y2(d) void GetPosition(int ,习题10-3 设计Time类,class Time int hour,minute,second; public: int

19、 SecCalc(); Time( int h = 0, int m = 0, int s = 0 );/构造函数 void SetTime(int h = 0, int m = 0, int s = 0 );/时间设置 void print_12(); void print_24(); Time Add(Time,第11章 继承,习题11-1从类Person中派生出一个教师类,新增的属性有:专业、职称和主讲课程(一门),并为这些属性定义相应的方法。 习题11-2许多研究生既有学生的属性,又有教师的属性。试通过多重继承说明一个研究生类。 习题11-3修改例10-4,从Point类中派生出一个L

20、ine类。Line类增加一个数据成员EndPoint,计算线的长度。试比较一下与直接使用Point类来构造Line类的不同之处。 习题11-4从Date类和Time类派生一个DateAndTime类,修改相应的成员函数,当时间递增到新的一天时,应能够修改日期值。,习题11-1从类Person派生Teacher类,class Person protected: char Name10; intAge; intSex; public: Person(char *name=, int age=0, char sex=m) strcpy(Name, name); Age = age; Sex=(sex

21、=m?0:1); void ShowMe() coutNametSextAget; ;,习题11-1从类Person派生Teacher类,class Teacher: public Person char Specialty20; char Position20; char MajorCourse20; public: Teacher(char *name=xxx,int age=0,char sex=m,char *spec=x,char *pos=x,char *maj=x):Person(name,age,sex) strcpy(Specialty,spec); strcpy(Posit

22、ion,pos); strcpy(MajorCourse,maj); void Teacher:ShowMe () Person:ShowMe(); coutSpecialtytPositiontMajorCourseendl; ;,第12章 多态性,习题12-2扩充例11-6,从中派生出一个正方形类和圆柱体类,写一个测试程序,输出正方形的面积和圆柱体的体积。提示:正方形数据成员:一个顶点和边长;圆柱体数据成员:圆和高。,Point,Square,Circle,Cylinder,第12章 多态性,习题12-3扩充实例编程中的日期类,为Date类增加一个成员函数,可以判断一个日期是否是系统当前日

23、期。从键盘输入你的生日,如果今天是你的生日则显示:“Happy Birthday!”,否则显示“还有xx天是你的生日”或“你的生日已经过去了xx天,明年的生日要再等yy天”。,第13章 模板与异常处理,习题13-1 编写一个求绝对值的函数模板,并测试。 习题13-2 请将例4-5的冒泡排序函数改写成为模板函数并编写一个程序进行测试。 习题13-3 例13-6中所定义的通用栈类实际上是不完善的,如无法根据用户需求改变栈的大小,没有提供栈满溢出无法压入和空栈无法弹出提示等,请改进该程序。 习题13-5例6-1给出的求阶乘n!的函数,当用户的输入太大时(如51),会出现错误,请编写一个程序,使用异常处理机制来解决这一问题。,第14章 标准库和输入/输出流,习题14-1编写一个程序,分别用不同的域宽(010)打印出整数12345和浮点数1.234

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论