面向对象与程序设计实验课后答案
C面向对象程序设计课后习题答案1~14章
c2=getchar(); //将输入的第二个字符赋给c2
cout<<"用putchar函数输出结果为:";
putchar(c1);
putchar(44);
putchar(c2);
cout<<endl;
cout<<"用cout语句输出结果为:";
putchar(c2);
cout<<endl;
cout<<"用cout语句输出结果为:";
cout<<c1<<c2<<endl;
return 0;
}
3-4-1、#include <iostream>
using namespace std;
int main ( )
{char c1,c2;
cout<<"请输入两个字符c1,c2:";
cout<<"please enter score of student:";
cin>>score;
while (score>100||score<0)
{cout<<"data error,enter data again.";
cin>>score;
}
switch(int(score/10))
{case 10:
else m=y;
if (z<m) m=z;
return(m);
}
1-8、#include <iostream>
Visual C++面向对象程序设计教程与实验(第二版)清华大学出版社第3章习题参考答案
1.为什么要引入构造函数和析构函数?对象的初始化是指对象数据成员的初始化,在使用对象前,一定要初始化。
由于数据成员一般为私有的(private),所以不能直接赋值。
对对象初始化有以下两种方法:类中提供一个普通成员函数来初始化,但是会造成使用上的不便(使用对象前必须显式调用该函数)和不安全(未调用初始化函数就使用对象)。
当定义对象时,编译程序自动调用构造函数。
析构函数的功能是当对象被撤消时,释放该对象占用的内存空间。
析构函数的作用与构造函数正好相反,一般情况下,析构函数执行构造函数的逆操作。
在对象消亡时,系统将自动调用析构函数,执行一些在对象撤消前必须执行的清理任务。
2. 类的公有、私有和保护成员之间的区别是什么?①私有成员private: 私有成员是在类中被隐藏的部分,它往往是用来描述该类对象属性的一些数据成员,私有成员只能由本类的成员函数或某些特殊说明的函数(如第4章讲到的友员函数)访问,而类的外部根本就无法访问,实现了访问权限的有效控制,使数据得到有效的保护,有利于数据的隐藏,使内部数据不能被任意的访问和修改,也不会对该类以外的其余部分造成影响,使模块之间的相互作用被降低到最小。
private成员若处于类声明中的第一部分,可省略关键字private。
②公有成员public:公有成员对外是完全开放的,公有成员一般是成员函数,它提供了外部程序与类的接口功能,用户通过公有成员访问该类对象中的数据。
③保护成员protected: 只能由该类的成员函数,友元,公有派生类成员函数访问的成员。
保护成员与私有成员在一般情况下含义相同,它们的区别体现在类的继承中对产生的新类的影响不同,具体内容将在第5章中介绍。
缺省访问控制(未指定private、protected、public访问权限)时,系统认为是私有private 成员。
3. 什么是拷贝构造函数,它何时被调用?拷贝构造函数的功能是用一个已有的对象来初始化一个被创建的同类对象,是一种特殊的构造函数,具有一般构造函数的所有特性,当创建一个新对象时系统自动调用它;其形参是本类对象的引用,它的特殊功能是将参数代表的对象逐域拷贝到新创建的对象中。
面向对象程序设计课后答案(完整版)
面向对象程序设计课后答案(完整版)第二章2-4#includeusing namespace std;Add(int a,int b);int main(){int x,y,sum;cout>x>>y;sum = add(x,y);cout >*p;p++;}p = p-20;for( i=0;i0) countp++;if(*p>age ;try{checkagescore(name,age);}catch( string){cout<<"exception :name is exit"<<endl;continue;}catch(int){cout<<"exception :age is not proper"<<endl;continue;}cout<<"name:"<<name<<" age :"< }return 0;}第三章3-1(1)A (2)C (3)B (4)C (5)C(6)B (7)B (8)C (9)C3-7(1)main()函数中p1.age = 30;语句是错误的。
age 是类的私有成员(2)构造函数应当给常数据成员和引用成员初始化,将构造函数改为:A(int a1,int b1):a(a1),b(b1){}或A(int a1 ):a(a1),b(a){}再将main中的A a(1,2); 改为A a(1);(3)(1)在Test 类中添加语句:void print();void Print(){cout<<x<<"-"<<y<<"="<<x-y<<endl;}改为void Test::Print(){cout<<x<<"-"<<y<<"="<<x-y<<endl;}main函数中Init(38,15);改为:A.Init(38,15);Print();改为:A.Print();3-8(1)Constructing AConstructing BDestructing BDestructing A(2)double a,double bpoint & pp.x3-9class box{int len1,len2,len3;public:box(int l1,int l2,int l3){len1 = l1;len2 = l2; len3 = l3;} long volumn(){return len1*len2*len3;}};3-10class Test{int m1,m2;public:void Init(int a,int b){m1 = a;m2 = b;}void Pring(){cout<<m1<<" "<<m2<<endl;}};3-11略3-12}第四章4-6(1)D (2)D (3)D (4)D (5)B(6)D4-7(1)static int count = 0;这样初始化静态成员值是不对的将其改为static int count;在类外,main函数前加int Sample::count = 0;(2)#include//#includeusing namespace std;class Ctest{private:int x; const int y1;public:const int y2;Ctest(int i1,int i2):y1(i1),y2(i2) {y1 =10;//y1 为常量不能赋值x = y1;}int readme() const;};int Ctest::readme ()const{int i;i = x;x++; //常函数内不能改变成员值return x;}int main(){Ctest c(2,8);int i = c.y2;c.y2 = i;//y2为常量,不能改值i = c.y1;//y1私有,类外不能访问return 0;}将出错语句全部注释4-8(1)题中印刷错误,将class C构造函数改为: C(){cout<<"constructor C:";}运行结果为:constructor Aconstructor Bconstructor C(2)40(3)3434-9#include#includeclass Date{int year;int month;int day;public:Date(int y,int m,int d){year=y;month=m;day=d;}void disp(){cout<<year<<" "<<month<<" "<<day<<endl;}friend int count_day(Date &d,int k);friend int l(int year);friend int h(Date &d1,Date &d2);};int count_day(Date &d,int k){static int day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,3 1},{31,29,31,30,31,30,31,31,30,31,30,31}};// 使用二维数组存放各月天数,第一行对应非闰年,第二行对应闰年int j,i,s;if(l(d.year))j=1;//闰年,取1else j=0;//非闰年,取0if(k)//K非0时{s=d.day;for(i=1;i<d.month;i++)//d.month为输入的月份s+=day_tab[j][i-1];}else//K为0时{s=day_tab[j][d.month]-d.day;for(i=d.month+1; i<=12; i++)s+=day_tab[j][i-1];}return s;//S为相差的天数}int l(int year){if(year%4==0&&year%100!=0||year%400==0) // 是闰年return 1;else // 不是闰年return 0;}int h(Date &d1,Date &d2){int days,day1,day2,y;if(d1.year<d2.year)//第一个日期年份小于第二个日期年份{days=count_day(d1,0);for(y=d1.year+1;y<d2.year;y++)if(l(y))//闰年。
c--面向对象程序设计课后习题解答-谭浩强
第1章C++ 的初步知识1.请根据你的了解,叙述C++的特点。
C++对C有哪些发展?【解】略。
2.一个C++的程序是由哪几部分构成的?其中的每一部分起什么作用?【解】略。
3.从拿到一个任务到得到最终结果,一般要经过几个步骤?【解】略.4.请说明编辑、编译、连接的作用。
在编译后得到的目标文件为什么不能直接运行?【解】编译是以源程序文件为单位进行的,而一个完整的程序可能包含若干个程序文件,在分别对它们编译之后,得到若干个目标文件(后缀一般为.obj),然后要将它们连接为一个整体.此外,还需要与编译系统提供的标准库相连接,才能生成一个可执行文件(后缀为。
exe)。
不能直接运行后缀为。
obj的目标文件,只能运行后缀为。
exe的可执行文件.5.分析下面程序运行的结果。
#includeusing namespace std;int main({cout<<” This "<〈” is ";cout〈<” a "<<” C++”;cout〈〈”program。
” <〈 endl;return 0;}【解】输出的结果为Thisisa C++program。
6.分析下面程序运行的结果。
#includeusing namespace std;int main({int a,b,c;a=10;b=23;c=a+b;cout〈〈” a+b=”;cout<cout<return 0;}【解】前两个cout语句在输出数据后不换行,第3个cout语句输出一个换行,因此输出的结果为a+b=337.分析下面程序运行的结果.请先阅读程序写出程序运行时应输出的结果,然后上机运行程序,验证自己分析的结果是否正确.以下各题同。
#includeusing namespace std;int main({int a,b,c;int f(int x,int y,int z;cin〉>a〉〉b>>c;c=f(a,b,c;cout<}int f(int x,int y,int z{int m;if (xelse m=y;if (zreturn(m;}【解】程序的作用是:输入3个整数,然后输出其中值最小的数。
面向对象程序设计实验项目及答案
面向对象程序设计实验项目及答案实验一 C++面向过程练习(一)(2学时) ? 实验目的和要求:1.掌握C ++程序的基本格式与规范,学会编写简单的C ++程序。
2.理解C ++程序的结构和特点。
3.熟悉C ++程序基本的输入和输出操作。
4.掌握C ++数据类型、常量和变量以及修饰符的使用方法。
5.掌握C ++的各种流程控制语句的使用。
6. 熟悉C ++语言实验环境,能够在VC6.0环境下调试与运行程序。
? 实验内容:1. 求解方程02=++c bx ax 在复数域上的解,a,b,c 由终端输入。
注意分析的全面性。
#include#includeusing namespace std;int main(){double a,b,c,d,e,m,n;cout<<"a=";cin>>a;cout<<"b=";cin>>b;cout<<"c=";cin>>c;while(1){if(a==0){m=-b/c;cout<<"x1=x2="<<m<<endl;< bdsfid="119" p=""></m<<endl;<>}else{d=b*b-4*a*c;if(d>=0){e=sqrt(d);m=(-b+e)/(2*a);n=(-b-e)/(2*a);if(m!=n)cout<<"x1="<<m<<endl<<"x2="<<n<<endl;<bdsfid="131" p=""></m<<endl<<"x2="<<n<<endl;<> elsecout<<"x1=x2="<<m<<endl;< bdsfid="134" p=""></m<<endl;<>}else{e=sqrt(-d);m=-b/(2*a);n=e/(2*a);cout<<"x1="<<m<<"+"<<n<<"i"<<endl;< bdsfid="143" p=""></m<<"+"<<n<<"i"<<endl;<>cout<<"x2="<<m<<"-"<<n<<"i"<<endl;< bdsfid="145" p=""></m<<"-"<<n<<"i"<<endl;<>}}cout<<"a=";cin>>a;cout<<"b=";cin>>b;cout<<"c=";cin>>c;}return 0; }2. 猴子吃桃子问题:一天一只小猴子摘下一堆桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。
java面向对象程序设计第二版课后答案.doc
java 面向对象程序设计第二版课后答案【篇一:java 面向对象程序设计课后答案】s=txt>java 面向对象程序设计清华大学出版社(编著耿祥义张跃平)习题解答建议使用文档结构图(选择word 菜单→视图→文档结构图)习题11.james gosling、、、、2.(1)使用一个文本编辑器编写源文件。
(2)使用java 编译器(javac.exe )编译java 源程序,得到字节码文件。
(3)使用java 解释器(java.exe )运行java 程序3.java 的源文件是由若干个书写形式互相独立的类组成的。
应用程序中可以没有public 类,若有的话至多可以有一个public 类。
4.系统环境path d\jdk\bin;系统环境classpath d\jdk\jre\lib\rt.jar;.;5. b6.java 源文件的扩展名是.java 。
java 字节码的扩展名是.class 。
7. d8.(1)speak.java(2)生成两个字节码文件,这些字节码文件的名字speak.class 和xiti8.class ava xiti8(4)执行java speak 的错误提示exception in thread main ng.nosuchmethoderror: main 执行java xiti8 得到的错误提示exception in thread main ng.noclassdeffounderror: xiti8 (wrong name: xiti8) 执行java xiti8.class 得到的错误提示exception in thread main ng.noclassdeffounderror:xiti8/class 执行java xiti8 得到的输出结果im glad to meet you9.属于操作题,解答略。
习题21. d2.【代码1】【代码2】错误//【代码3】更正为float z=6.89f; 3.float 型常量后面必须要有后缀“f或”“f。
C#面向对象程序设计课后答案
习题参考答案Chapter 11_1 对象客观世界中的事物都是对象,包括有形的物理对象,可感知的逻辑实体,以及概念化的抽象实体。
它有自己的属性,能够执行特定的操作。
类具有相同属性和操作的一组对象的集合;它描述的不是单个对象,而是“一类”对象的共同特征。
其重要性在于它是面向对象技术中最重要的结构,它支持信息隐藏和封装,进而支持对抽象数据类型(ADT)的实现。
1_2略1_3参考图如下图11_4 UML与面向对象UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。
它溶入了软件工程领域的新思想、新方法和新技术。
它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。
标准建模语言UML 适用于以面向对象技术来描述任何类型的系统,而且适用于系统开发的不同阶段,从需求规格描述直至系统完成后的测试和维护。
Chapter 22_1 程序的功能一般通过方法代码来实现。
每个方法都是从其第一行代码开始执行,直至最后一行代码结束,期间可以通过代码来调用其他的方法,从而完成各式各样的操作。
C#程序的起点是由Main方法定义的,程序总是从Main方法的第一行代码开始执行,在Main方法结束时停止运行。
2_2略(注:不同版本的V isual Studio的菜单项有所区别)2_3 略(注:不同版本的V isual Studio引用的程序集有所区别)2_4C#源代码会被编译为一种通用的中间语言(IL)代码,该语言类似于低级语言,但其代码与具体的硬件平台无关;之后CLR再针对特定的平台将IL程序翻译为机器指令,加载所需要的资源并管理执行。
2_5//动态链接库程序using System;namespace p2_5{class Adder{public static int Add(int a, int b){return a+b;}}}//控制台应用程序using System;using p2_5;namespace P2_6{class Program{static void Main(){Console.WriteLine("请输入两个数:");int a = int.Parse(Console.ReadLine());int b = int.Parse(Console.ReadLine());Console.WriteLine("{0}+{1}={2}", a, b, Adder.Add(a+b));}}}Chapter 33_1 略3_2第一:值类型的变量直接包含自身的所有数据,每创建一个变量,就在内存中开辟一块区域;只有通过变量才能修改它所包含的数据。
VISUAL_C 面向对象程序设计教程与实验(第二版)清华大学出版社1 8章答案
① 私有成员 priva数据成员,私有成员只能由本类的成员函数或某些特殊说 明的函数(如第 4 章讲到的友员函数)访问,而类的外部根本就无法访问,实现 了访问权限的有效控制,使数据得到有效的保护,有利于数据的隐藏,使内部数 据不能被任意的访问和修改,也不会对该类以外的其余部分造成影响,使模块之 间的相互作用被降低到最小。private 成员若处于类声明中的第一部分,可省略 关键字 private。
所谓模板是一种使用无类型参数来产生一系列函数或类的机制,是 C++的一 个重要特征。通过模板可以产生类或函数的集合,使它们操作不同的数据类型, 从而避免为每一种数据类型产生一个单独的类或函数。
函数模板提供了传递类型的机制。函数模板定义不是一个实实在在的函数, 编译系统不为其产生任何执行代码。该定义只是对函数的描述,表示它每次能单
用协议;方法体则是实现某种操作的一系列计算步骤,也就是一段程序。消息和方法的关
系是:对象根据接收到的消息,调用相应的方法;反过来,有了方法,对象才能响应相应的 消息。所以消息模式与方法界面应该是一致的。同时,只要方法界面保持不变,方法体的改 动不会影响方法的调用。在 C++语言中方法是通过函数来实现的,称为成员函数。
3. 面向对象系统有哪些特性?分别加以解释。
(1) 抽象性(abstract) 抽象是一种从一般的观点看待事物的方法,它要求程序员集中于事物的本质 特征,而不是具体细节或具体实现。类的概念来自人们认识自然、认识社会的过 程。在这一过程中,人们主要使用两种方法:从特殊到一般的归纳法和从一般到 特殊的演绎法。在归纳的过程中,我们从一个个具体的事物中把共同的特征抽取 出来,形成一个一般的概念,这就是“归类”;在演绎的过程中,我们又把同类 的事物,根据不同的特征分成不同的小类,这就是“分类”。对于一个具体的类, 它有许多具体的个体,我们称这些个体叫做“对象”。 (2) 封装性(encapsulation)
面向对象程序设计java程序设计课后习题答案
第一章1.public class BegintoLearn{public static void main(String args[]) {System.out.println("I’d like to study Java ! ");}}2.public class TraStar{public static void main(String args[]) {System.out.println("*");System.out.println("* *");System.out.println("* * *");System.out.println("* * * *");System.out.println("* * * * *");}}第二章1.public class ProNum{public static void main(String args[]) {float p;long q;int m=10,n=5;System.out.println("m="+m+" n="+n);m=m+3;n=n+5;System.out.println("m="+m+" n="+n);p=(float)(m+n)/2;System.out.println("p="+p);q=(m*m*n*n);System.out.println("q="+q);}}2.class SphereClass {public static void main(String args[]) {int r=3;double v;v=3.14*r*r*r*4/3;System.out.println("V="+v)}}第三章1. import java.io.*;public class InNum{public static void main(String args[]) throws IOException{ int num1,num2;String str;BufferedReader buf;buf=new BufferedReader(new InputStreamReader(System.in));System.out.print("Input first integer:");str=buf.readLine();num1=Integer.parseInt(str);System.out.print("Input second integer:");str=buf.readLine();num2=Integer.parseInt(str);System.out.println("The sum is "+(num1+num2));}}2.import java.io.*;public class Grade{public static void main(String args[]) throws IOException{ int score;char ch;String str;BufferedReader buf;buf=new BufferedReader(new InputStreamReader(System.in));System.out.print("Input the score(0-100):");str=buf.readLine();score=Integer.parseInt(str);if (score>=90)ch='A';else if (score>=75)ch='B';else if (score>=60)ch='C';elsech='D';System.out.print("The Grade is "+ch);}}3.public class ShuLie{public static void main(String args[]){int a ,q ,n;q=(150-135)/5;a=(135-20*q)/5;for (n=0;n<10;n++)System.out.print((a+n*q)+" ");}}4.public class Pyramid{public static void main(String args[]){int i,j,k;for(i=0;i<=4;i++){for ( j=0;j<20-i;j++)System.out.print(" ");for (k=0;k<=2*i;k++)if (k<=i)System.out.print(" "+(2*k+1));elseSystem.out.print(" "+(2*(2*i-k)+1));System.out.println();}}}5.import java.io.*;public class PrimeNumber{public static void main(String args[]) throws IOException{ int n=0;int m;String str;boolean mark=false;BufferedReader buf;buf=new BufferedReader(new InputStreamReader(System.in));System.out.print("Input the m:");str=buf.readLine();m=Integer.parseInt(str);for(int i=3;i<=m;i+=2){for(int j=2;j<i;j++){if(i%j==0){mark=true;break;}}if (!mark){System.out.print(" "+i);n++; //outputanewlineif(n%10==0) //after10numbersSystem.out.println();}mark=false;}System.out.println();}}6.import java.io.*;public class Factor12{public static void main(String args[]) throws IOException{ int m;String str;BufferedReader buf;buf=new BufferedReader(new InputStreamReader(System.in));System.out.print("Input the m:");str=buf.readLine();m=Integer.parseInt(str);System.out.print(m+"\'s factors are: ");System.out.println( );for(int i=1;i<=m;i++)if (m%i==0)System.out.print(" "+i);}}7.public class MSteel{public static void main(String args[]){int d=0;float m=2000;while (m>=5) {m=m/2;d++;System.out.print(d+": ");System.out.println(m);}System.out.print("You need "+d+" days");}}8.public class AlmostPi{public static void main(String args[]){int n;long m;double s,t;n=1;m=0;s=0;do{t=(double)n/(2*m+1);m++;n=-n;s=s+t;} while (4*s-3.14159> 0.0000001 || 4*s-3.14159< -0.0000001);System.out.println(m);}}9.public class LSRnd{public static void main(String args[]){int mun,n,max1,min1;max1=0;min1=100;for (n=1;n<=10;n++){mun=(int)(100*Math.random());System.out.print(mun+" ");if (mun>max1)max1=mun;if (mun<min1)min1=mun;}System.out.println();System.out.println("The largest number is: "+max1);System.out.println("The smallest number is: "+min1);}}10.import java.io.*;public class StrArry{public static void main(String args[]) throws IOException{int m;String str;Stringmonth[]={"January","February","March","April","May","June","July","August","september","October","November","December"};BufferedReader buf;buf=new BufferedReader(new InputStreamReader(System.in));System.out.print("Input the m:");str=buf.readLine();m=Integer.parseInt(str);if (m>=1 && m<=12)System.out.println(month[m-1]);elseSystem.out.print("Your Input is wrong");}}第四章1.import java.util.*;public class Person{private String name;private char sex;private int year,month;public Person( ){}public Person(String nm,char sx,int y,int m) {name=nm;sex=sx;year=y;month=m;}public void printPerson( ) {Calendar now=Calendar.getInstance();int age=now.get(Calendar.YEAR)-year;System.out.println("Name: "+name+",Sex: "+sex+", Age: "+age);}public static void main(String args[]){Person pe1=new Person("Tom",'m',1980,10);pe1.printPerson();}}2.public class Rectangle{double width,length,girth,area;public Rectangle(){};public Rectangle(double wd,double le) {width=wd;length=le;}public void setWidth(double wd) {width=wd;}public void setLength(double le) {length=le;}public double getWidth( ) {return width;}public double getLength( ) {return length;}public double girth(){return 2*(width+length);}public double area(){return width*length;}public void printRectangle(){System.out.println("Width="+width+" ,Length="+length);}public static void main(String args[]){Rectangle re1=new Rectangle(10,20);Rectangle re2=new Rectangle();re2.setWidth(3);re2.setLength(4);re1.printRectangle();System.out.println("Girth="+re1.girth()+",Area="+re1.area());re2.printRectangle();System.out.println("Girth="+re2.girth()+",Area="+re2.area());}}3.public class Matrix{ private int mx[][],m,n; public Matrix(int r,int c) { m=r;n=c;mx=new int[m][n];iniMatrix();}public Matrix(){m=3;n=3;mx=new int[3][3];iniMatrix();}public void iniMatrix(){ int i,j;for(i=0;i<=m-1;i++)for(j=0;j<=n-1;j++)mx[i][j]=(int)(Math.random()*100); }public void tranMatrix(){int i,j,t;int mt[][]=new int[m][n];for(i=0;i<=m-1;i++)for(j=0;j<=n-1;j++)mt[i][j]=mx[i][j];t=m;m=n;n=t;mx=new int[m][n];for(i=0;i<=m-1;i++)for(j=0;j<=n-1;j++)mx[i][j]=mt[j][i];}public void printMatrix(){int i,j;for(i=0;i<=m-1;i++){for(j=0;j<=n-1;j++)System.out.print(" "+mx[i][j]);System.out.println();}}public void addMatrix(Matrix b) {int i,j;for(i=0;i<=m-1;i++)for(j=0;j<=n-1;j++)mx[i][j]=mx[i][j]+b.mx[i][j];} public static void main(String args[]){Matrix ma=new Matrix(4,3);Matrix mb=new Matrix(4,3);System.out.println("The matrix_A:"); ma.printMatrix();System.out.println("The matrix_B:"); mb.printMatrix();System.out.println("Matrix_A +Matrix_B:");ma.addMatrix(mb);ma.printMatrix();System.out.println("Transpose Matrix_B:");mb.tranMatrix();mb.printMatrix();}}4.public class Substring{public static void main(String args[]){String str1=new String("addActionListener");String str2=new String("Action");int n;n=str1.indexOf(str2);if(n>=0){System.out.println("String_2 is in String_1");System.out.println("The substring before String_2 is "+str1.substring(0,n));System.out.println("The substring behind String_2 is "+str1.substring(n+str2.length( )));}}} 五、写出程序运行后的结果1. 2.。
Java面向对象程序设计课后习题参考答案
public class San_4 {// 编写一个应用程序求1!+2!+ (20)/*** @param args//本题考查对循环的运用和对算法的编写*/public static void main(String[] args) {// TODO Auto-generated method stubint a;double b = 1, sum = 0;// 定义变量for (a = 1; a <= 20; a++) {// for循环实现该功能b = b * a;// 当a=1时,b=b*a=1,依此类推sum = sum + b;// 当a=1时,sum=sum+b=1,依次类推}for (int w = 1; w <= 19; w++) {// for循环打印出阶乘之和的形式来System.out.print(w + "!" + "+");}System.out.println("20!" + "=" + sum);// 最终输出阶乘之和double sum1 = 0, a1 = 1;int i = 1;while (i <= 20)// 用while循环实现该功能{sum1 = sum1 + a1;i++;a1 = a1 * i;}System.out.println("sum1=" + sum1);}}输出结果:1!+2!+3!+4!+5!+6!+7!+8!+9!+10!+11!+12!+13!+14!+15!+16!+17!+18!+19!+20!=2.18203E18sum1=2.18203E18习题3_5public class San_5 {// 求100以内的素数/*** @param args//本题考查对for循环、break语句、if语句的运用*/public static void main(String[] args) {// TODO Auto-generated method stubint i, j;for (i = 2; i <= 100; i++) {// for循环从2开始,逐渐增1for (j = 2; j <= i / 2; j++) {// for循环从2开始,逐步增1if (i % j == 0) {// 如果i除以j的余数为0,则终止本次for循环break;}}if (j > i / 2) {// 如果j>i/2,输出iSystem.out.print(" " + i);}}}}2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 8389 97习题3_6public class San_6 {// 分别用while和for循环计算1+1/2!+1/3!+1/4!...的前20项和/*** @param args//本题考查同学们对while循环、for循环以及对输出字符串格式的运用 */public static void main(String[] args) {// TODO Auto-generated method stubint i = 1, k;double j = 1, m = 1, sum1 = 0, sum2 = 0;while (i <= 20) {// 用while循环实现sum1 = sum1 + j;i++;j = j * (1.0 / i);}System.out.print("1+");for (int r = 2; r <= 19; r++) {System.out.print("1/" + r + "!" + "+");}System.out.print("1/20!" + "=" + sum1);System.out.println();System.out.print("1+");for (int r = 2; r <= 19; r++) {System.out.print("1/" + r + "!" + "+");}for (k = 1; k <= 20; k++) {// 用for循环实现m *= (1.0 / k);sum2 += m;}System.out.println("1/20!" + "=" + sum2);}}计算结果:1+1/2!+1/3!+1/4!+1/5!+1/6!+1/7!+1/8!+1/9!+1/10!+1/11!+1/12!+1/13!+1/14!+1/15!+1/16!+1/17!+1/18!+1/19!+1/20!=1.904551+1/2!+1/3!+1/4!+1/5!+1/6!+1/7!+1/8!+1/9!+1/10!+1/11!+1/12!+1/13!+1/14!+1/15!+1/16!+1/17!+1/18!+1/19!+1/20!=1.90455习题3_7public class San_7 {// 一个数如果恰好等于它的因子之和,这个数就成为”完数“。
C++面向对象程序设计课后答案
C++面向对象程序设计课后答案习题11-1面向对象程序设计与面向过程程序设计相比有什么优点?答:优点有:(1)写程序不再是从计算机的角度考虑问题,而是站在人类思维的角度;(2)程序的可拓展性比其他不是面向对象的好;(3)能最大限度波爱护已有程序的代码。
1-2简述C++语言程序的特点。
答:C++语言是在C语言的基础上发展而来,但它比C语言更容易学习和掌握,它与C的最大区别是把函数放进了结构中,并引入了新的关键词类。
C++完美的体现了面向对象的各种特性。
1-3 C++与C语言的关系如何?它们的本质区别是什么?答:C++语言是基于C语言的基础上发展起来的。
它们的关系十分密切,很多语句之间是通用的。
它们的本质区别是C语言是面向过程的编程语言,而C++是面向对象的编程语言。
1-3组件编程有什么优点?答:组件编程的优点是它把对象技术应用于系统设计,对面向对象的程序设计的实现过程做了进一步抽象。
它强调真正的软件可重用性和高度的互操作性。
习题22-1 结构与联合有何区别?答:联合是有别于以前任何一种数据类型的特殊数据类型,它是多个成员的一个组合体,但与结构体不同,联合体的成员被分配在同一段内存空间中,它们的开始地址相同,使得同一段内存由不同的变量共享。
2-2 struct和class区别是什么?答:C++中,struct和class基本是一直的,唯一不同在于,struct中缺省权限public,class缺省权限private,即在struct和class没有写public 时,struct默认为public,class默认为private。
2-3 什么是内联函数?内联函数的优点是什么?答:C++提供一种提高效率的方法,即变异时将调用函数的代码直接嵌入到主函数中,而不是将流程转出去,这种嵌入到主函数的函数叫内联函数。
使用内联函数可以节省运行时间,提高函数的执行效率。
2-4 什么是函数重载?编译系统如何区别同名函数的不同版本?答:C++允许用同一函数名定义多个函数,这函数的参数个数和参数类型不同,这就是函数的重载。
面向对象程序设计C课后题答案
第一章:面向对象程序设计概述[1_1]什么是面向对象程序设计?面向对象程序设计是一种新型的程序设计范型。
这种范型的主要特征是:程序=对象+消息。
面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。
第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。
面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。
这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。
[1_2]什么是类?什么是对象?对象与类的关系是什么?在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。
对象可以认为是:数据+操作在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。
类和对象之间的关系是抽象和具体的关系。
类是多个对象进行综合抽象的结果,一个对象是类的一个实例。
在面向对象程序设计中,总是先声明类,再由类生成对象。
类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。
[1_3]现实世界中的对象有哪些特征?请举例说明。
对象是现实世界中的一个实体,其具有以下一些特征:(1)每一个对象必须有一个名字以区别于其他对象。
(2)需要用属性来描述它的某些特性。
(3)有一组操作,每一个操作决定了对象的一种行为。
(4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。
例如:雇员刘名是一个对象对象名:刘名对象的属性:年龄:36 生日:1966.10.1 工资:2000 部门:人事部对象的操作:吃饭开车[1_4]什么是消息?消息具有什么性质?在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。
李爱华、程磊_面向对象程序设计课后答案(完整版)之欧阳德创编
第二章2-4#include <iostream>using namespace std;Add(int a,int b);int main(){int x,y,sum;cout<<"please input x and y:"; cin>>x>>y;sum = add(x,y);cout <<x<<"+"<<y<<"="<<sum<<endl; }Add(int a,int b){return a+b;}2-5(1)this is a C++ program.(2)x=50.6 y=10 z=Ax=216.34 y=10 z=Ax=216.34 y=2 z=Ax=216.34 y=2 z=E (3)x y z500 1000 0500 1500 1500500 200 15002-6#include <iostream> using namespace std; int main(){int *p,*init;int countp=0;int countn=0;p = new int[20];init = p;for(int i=0;i<20;i++){cin>>*p;p++;}p = p-20;for( i=0;i<20;i++){if(*p>0) countp++;if(*p<0) countn++;cout<<*p<<" ";p++;}cout<<"正数有:"<<countp<<endl; cout<<"负数有:"<<countn<<endl; p = init;delete[] p;return 0;}2-7不做要求#include <iostream>//#include <string>using namespace std;void checkagescore(string name,int age) {if (name == "exit") throw name;if(age<0||age>50)throw age;}int main(){string name;int age;for(int i=0 ;i<5 ;i++ ){cin.ignore ();getline(cin,name );cin>>age ;try{checkagescore(name,age);}catch( string){cout<<"exception :name is exit"<<endl;continue;}catch(int){cout<<"exception :age is not proper"<<endl;continue;}cout<<"name:"<<name<<"age :"<<age<<endl;}return 0;}第三章3-1(1)A (2)C (3)B (4)C (5)C (6)B (7)B (8)C (9)C3-7(1)main()函数中p1.age = 30;语句是错误的。
(完整版)《面向对象程序设计》答案
实验一熟悉VC++IDE开发环境一、实验目的1、熟悉VC++6.0集成开发环境,熟练掌握VC++6.0项目工作区、各种编辑器、菜单栏和工具栏的使用。
2、掌握如何编辑、编译、连接和运行一个C++程序。
3、通过运行简单的C++程序,初步了解C++源程序的结构和特点。
二、实验要求1、分析下列程序运行的结果。
程序一:#include <iostream.h>int add(int x,int y=8);void main(){ int x=4;cout<<add(x)<<",";cout<<add(x,add(add(x,add(x))))<<endl;}int add(int x,int y){ return x+y;}//12,28程序二:#include <iostream.h>void main(){ int *p,i;i=5;p=&i;i=*p+10;cout<<"i="<<i<<endl;}//i=15程序三:#include <iostream.h>void main(void){ int i=10;int &r=i;r++;cout<<"i="<<i<<", r="<<r<<'\n';i=88;cout<<"i="<<i<<", r="<<r<<'\n';}//i=11,r=11i=88,r=88程序四:#include <iostream.h>int f(int i){ static int k=1;for(;i>0;i--)k +=i;return k;}void main(){ int i;for(i=0;i<5;i++)cout<<f(i)<<" ";}// 1 2 5 11 21程序五:#include <iostream.h>void func();int n=1;void main(){ static int a;int b= -9;cout <<"a:"<<a<<" b:"<<b<<" n:" <<n<<endl;b+=4;func();cout <<"a:"<<a<<" b:"<<b<<" n:"<<n<<endl;n+=10;func();}void func(){ static int a=2; int b=5;a+=2;n+=12;b+=5;cout <<"a:" <<a<<" b:" <<b<<" n:" <<n <<endl;}// a:0 b:-9 n:1a:4 b:10 n:13a:0 b:-5 n:13a:6 b:10 n:35实验二C++对C的扩充一、实验目的1、了解在面向对象程序设计过程中C++对C功能的扩充与增强,并善于在编写程序的过程中应用这些新功能。
面向对象程序设计教程 答案(2023最新版)
面向对象程序设计教程答案面向对象程序设计教程⒈简介⑴程序设计概述⑵面向对象编程概述⑶面向对象编程的优势⒉类和对象⑴类的定义⑵对象的创建和使用⑶类的继承和多态⑷抽象类和接口⒊封装和继承⑴封装的概念和作用⑵封装的实现方式⑶继承的概念和作用⑷继承的实现方式⒋多态和接口⑴多态的概念和作用⑵多态的实现方式⑶接口的概念和作用⑷接口的实现方式⒌组合和聚合⑴组合的概念和作用⑵组合的实现方式⑶聚合的概念和作用⑷聚合的实现方式⒍类和对象的关系⑴关联关系⑵依赖关系⑶简介关系⑷实现关系⒎对象的生命周期和内存管理⑴对象的创建和销毁⑵内存管理的概念和作用⑶垃圾回收机制⑷内存泄漏和内存溢出的概念⒏设计模式⑴设计模式的概念和作用⑵常见的设计模式⑶创建型模式⑷结构型模式⑸行为型模式⒐异常处理⑴异常的概念和作用⑵异常处理的机制⑶异常处理的实现方式⒑文件操作和输入输出⑴文件操作的概念和作用⑵文件读写的实现方式⑶输入输出流的概念和作用⑷输入输出流的实现方式1⒈线程和并发编程1⑴线程的概念和作用1⑵线程的创建和使用1⑶线程同步和互斥1⑷并发编程的概念和作用1⒉软件测试和调试1⑴软件测试的概念和作用1⑵单元测试和集成测试1⑶调试的概念和作用1⑷常见的调试工具和技巧1⒊版本控制和项目管理1⑴版本控制的概念和作用1⑵常见的版本控制工具1⑶项目管理的概念和作用1⑷项目管理工具和方法1⒋本文档涉及附件:附件1、面向对象程序设计示例代码附件2、面向对象程序设计练习题1⒌本文所涉及的法律名词及注释:1⑴版权:指对原创作品的独自权利,包括复制、修改、分发等权利。
1⑵商标:指用于区分商品或服务来源的标识,具有独特性和辨识度。
1⑶专利:指对发明、实用新型、外观设计等技术成果的独占权。
1⑷许可证:指授权他人使用某项权利的行为。
注:本文所涉及的法律名词及注释仅作为参考,具体以法律法规为准。
面向对象程序设计课后答案
面向对象程序设计课后答案面向对象程序设计是计算机科学领域的一门重要课程,通过学习这门课程,我们可以深入理解面向对象的编程思想和方法。
本文将针对面向对象程序设计的一些常见问题给出详细的答案,帮助读者更好地理解和掌握这门课程。
一、什么是面向对象程序设计?面向对象程序设计(Object-Oriented Programming,简称OOP)是一种软件开发的方法和思想,它将程序中的数据和操作数据的方法组合成一个对象,通过对象的相互调用来完成任务。
面向对象程序设计可以更好地模拟现实世界的事物和关系,提高软件的可维护性和可扩展性。
二、面向对象程序设计的基本特征有哪些?1. 封装(Encapsulation):将数据和操作封装在一个对象中,对外部隐藏内部的实现细节,提供统一的接口进行访问。
2. 继承(Inheritance):通过继承可以使一个类获取另一个类的属性和方法,减少代码的重复性,提高代码的复用性。
3. 多态(Polymorphism):不同的对象可以对相同的消息做出不同的响应,同一个方法可以根据具体的对象类型来执行不同的操作。
三、什么是类和对象?1. 类(Class):类是一种抽象的数据类型,它定义了对象共同具有的属性和方法。
类是面向对象程序设计的基础,用于描述对象的特征和行为。
2. 对象(Object):对象是类的一个实例,具有类定义的属性和方法。
对象是面向对象程序设计的基本单位,可以通过对象来访问和操作数据。
四、如何定义一个类?在面向对象程序设计中,可以通过以下步骤来定义一个类:1. 确定类的名称:类名通常使用大写字母开头,采用驼峰命名法。
2. 确定类的属性:类的属性是描述对象特征的变量,可以包括基本数据类型和其他对象。
3. 确定类的方法:类的方法是描述对象行为的函数,可以有参数和返回值,用于操作类的属性。
五、如何创建对象?在面向对象程序设计中,可以通过以下步骤来创建对象:1. 使用关键字new来实例化一个对象:Object obj = new Object();2. 调用对象的构造方法(Constructor):构造方法用于初始化对象的属性,在类中可以定义一个或多个构造方法。
Visual C++面向对象程序设计教程与实验(第二版)清华大学出版社第2章习题参考答案
1.分析下列程序的执行结果:输出随机数2. 分析下列程序的执行结果:i=03. C++语言对C语言在结构化程序设计方面进行了哪些扩充?主要在以下方面进行了扩充:文件扩展名、注释符、名字空间、输入输出、变量的定义、强制类型转换、动态内存的分配与释放、作用域运算符::、引用、const 修饰符、字符串、函数4. 下述C++程序有若干处错误,试找出并纠正之。
正确程序为:#include<iostream.h>const float PAI=3.14159265;float square(float r){return PAI*r*r;}float square(float high,float length=0 ){return high*length;}float (*fs)(float,float=0);void main(){fs=□cout<<"The circle's square is "<<fs(1.0)<<'\n';}5. 引用类型与指针类型有什么区别?指针的内容或值是某一变量的内存单元地址,而引用则与初始化它的变量具有相同的内存单元地址。
指针是个变量,可以把它再赋值成其它的地址,然而,建立引用时必须进行初始化并且决不会再指向其它不同的变量。
C++没有提供访问引用本身地址的方法,因为它与指针或其它变量的地址不同,它没有任何意义。
引用总是作为变量的别名使用,引用的地址也就是变量的地址。
引用一旦初始化,就不会与初始化它的变量分开。
6.函数、内联函数以及宏的区别。
程序的模块在C++中通过函数来实现,函数由函数说明和函数体2部分组成。
内联函数是C++语言特有的一种函数附加类别,是通过在函数声明之前插入“inline”关键字实现的。
编译器会将编译后的全部内联函数的目的机器代码复制到程序内所有的引用位置并把往返传送的数据也都溶合进引用位置的计算当中,用来避免函数调用机制所带来的开销,提高程序的执行效率。
c 面向对象程序设计课后习题答案(谭浩强版)
第一章5:#include <iostream> using namespace std;int main(){cout<<"This"<<"is"; cout<<"a"<<"C++";cout<<"program."<<endl; return 0;}6:#include <iostream> using namespace std;int main(){int a,b,c;a=10;b=23;c=a+b;cout<<"a+b=";cout<<c;cout<<endl;return 0;}7:#include <iostream> using namespace std;int main(){int a,b,c;int f(int x,int y,int z); cin>>a>>b>>c;c=f(a,b,c);cout<<c<<endl;return 0;}int f(int x,int y,int z){int m;else m=y;if (z<m) m=z;return(m);}8: #include <iostream> using namespace std;int main(){int a,b,c;cin>>a>>b;c=a+b;cout<<"a+b="<<a+b<<endl; return 0;}9:#include <iostream>using namespace std;int main(){int add(int x,int y);int a,b,c;cin>>a>>b;c=add(a,b);cout<<"a+b="<<c<<endl; return 0;}int add(int x,int y){int c;c=x+y;return(c);}10:#include <iostream>using namespace std;int main(){void sort(int x,int y,int z); int x,y,z;cin>>x>>y>>z;return 0;}void sort(int x, int y, int z){int temp;if (x>y) {temp=x;x=y;y=temp;} //{ }内3个语句的作用是将x和y的值互换) if (z<x) cout<<z<<','<<x<<','<<y<<endl;else if (z<y) cout<<x<<','<<z<<','<<y<<endl;else cout<<x<<','<<y<<','<<z<<endl;}11:#include <iostream>using namespace std;int main(){int max(int a,int b,int c=0);int a,b,c;cin>>a>>b>>c;cout<<"max(a,b,c)="<<max(a,b,c)<<endl;cout<<"max(a,b)="<<max(a,b)<<endl;return 0;}int max(int a,int b,int c){if(b>a) a=b;if(c>a) a=c;return a;}12:#include <iostream>using namespace std;int main(){void change(int ,int );int a,b;cin>>a>>b;if(a<b) change(a,b);cout<<"max="<<a<<" min="<<b<<endl;return 0;}void change(int ,int ){int r1,r2,temp;temp=r1;r1=r2;r2=temp;}13:#include <iostream>using namespace std;int main(){void sort(int &,int &,int &);int a,b,c,a1,b1,c1;cout<<"Please enter 3 integers:";cin>>a>>b>>c;a1=a;b1=b;c1=c;sort(a1,b1,c1);cout<<a<<" "<<b<<" "<<c<<" in sorted order is "; cout<<a1<<" "<<b1<<" "<<c1<<endl;return 0;}void sort(int &i,int &j,int &k){ void change(int &,int &);if (i>j) change(i,j);if (i>k) change(i,k);if (j>k) change(j,k);}void change(int &x,int &y){ int temp;temp=x;x=y;y=temp;}14:#include <iostream>#include <string>using namespace std;int main(){ string s1="week",s2="end";cout<<"s1="<<s1<<endl;cout<<"s2="<<s2<<endl;s1=s1+s2;cout<<"The new string is:"<<s1<<endl;return 0;}15:#include <iostream>#include <string>using namespace std;int main(){ string str;int i,n;char temp;cout<<"please input a string:";cin>>str;n=str.size();for(i=0;i<n/2;i++){temp=str[i];str[i]=str[n-i-1];str[n-i-1]=temp;}cout<<str<<endl;return 0;}16:#include <iostream>#include <string>using namespace std;int main(){ int i;string str[5]={"BASIC","C","FORTRAN","C++","PASCAL"}; void sort(string []);sort(str);cout<<"the sorted strings :"<<endl;for(i=0;i<5;i++)cout<<str[i]<<" ";cout<<endl;return 0;}void sort(string s[]){int i,j;string t;for (j=0;j<5;j++)for(i=0;i<5-j;i++)if (s[i]>s[i+1]){t=s[i];s[i]=s[i+1];s[i+1]=t;}}17: #include <iostream>#include <string>using namespace std;int main(){long c[5]={10100,-123567, 1198783,-165654, 3456}; int a[5]={1,9,0,23,-45};float b[5]={2.4, 7.6, 5.5, 6.6, -2.3 };void sort(int []);void sort(float []);void sort(long []);sort(a);sort(b);sort(c);return 0;}void sort(int a[]){int i,j,t;for (j=0;j<5;j++)for(i=0;i<5-j;i++)if (a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}cout<<"the sorted numbers :"<<endl;for(i=0;i<5;i++)cout<<a[i]<<" ";cout<<endl<<endl;}void sort(long a[]){int i,j;long t;for (j=0;j<5;j++)for(i=0;i<5-j;i++)if (a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}cout<<"the sorted numbers :"<<endl;for(i=0;i<5;i++)cout<<a[i]<<" ";cout<<endl<<endl;}void sort(float a[]){int i,j;float t;for (j=0;j<5;j++)for(i=0;i<5-j;i++)if (a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}cout<<"the sorted numbers :"<<endl;for(i=0;i<5;i++)cout<<a[i]<<" ";cout<<endl<<endl;}18: #include <iostream>#include <string>using namespace std;template <typename T>void sort(T a[]){int i,j,min;T t;for(i=0;i<5;i++){min=i;for (j=i+1;j<5;j++)if(a[min]>a[j]) min=j;t=a[i]; a[i]=a[min]; a[min]=t;}cout<<"the sorted numbers :"<<endl;for(i=0;i<5;i++)cout<<a[i]<<" ";cout<<endl<<endl;}int main(){ int a[5]={1,9,0,23,-45};float b[5]={2.4, 7.6, 5.5, 6.6, -2.3 };long c[5]={10100,-123567, 1198783,-165654, 3456}; sort(a);sort(b);sort(c);return 0;}第二章1#include <iostream>using namespace std;class Time{public:void set_time();void show_time();private: //成员改为公用的int hour;int minute;int sec;};void Time::set_time() //在main函数之前定义{cin>>hour;cin>>minute;cin>>sec;}void Time::show_time() //在main函数之前定义{cout<<hour<<":"<<minute<<":"<<sec<<endl;}int main(){Time t1;t1.set_time();t1.show_time();return 0;}2:#include <iostream>using namespace std;class Time{public:void set_time(void){cin>>hour;cin>>minute;cin>>sec;void show_time(void){cout<<hour<<":"<<minute<<":"<<sec<<endl;}private: int hour;int minute;int sec;};Time t;int main(){t.set_time();t.show_time();return 0;}3:#include <iostream>using namespace std;class Time{public:void set_time(void);void show_time(void);private:int hour;int minute;int sec;};void Time::set_time(void){cin>>hour;cin>>minute;cin>>sec;}void Time::show_time(void){cout<<hour<<":"<<minute<<":"<<sec<<endl;}Time t;int main(){ t.set_time();t.show_time();return 0;}//xt2-4-1.cpp(main.cpp)#include <iostream>using namespace std;#include "xt2-4.h"int main(){Student stud;stud.set_value();stud.display();return 0;}//xt2-4-2.cpp(即student.cpp)#include "xt2-4.h" //在此文件中进行函数的定义#include <iostream>using namespace std; //不要漏写此行void Student::display( ){ cout<<"num:"<<num<<endl;cout<<"name:"<<name<<endl;cout<<"sex:"<<sex<<endl;}void Student::set_value(){ cin>>num;cin>>name;cin>>sex;}5://xt2-5-1.cpp(file1.cpp)#include <iostream>#include "xt2-5.h"int main(){Array_max arrmax;arrmax.set_value();arrmax.max_value();arrmax.show_value();return 0;}//xt2-5-2.cpp(arraymax.cpp)#include <iostream>using namespace std;#include "xt2-5.h"void Array_max::set_value()for (i=0;i<10;i++)cin>>array[i];}void Array_max::max_value(){int i;max=array[0];for (i=1;i<10;i++)if(array[i]>max) max=array[i];}void Array_max::show_value(){cout<<"max="<<max<<endl;}6:解法一#include <iostream>using namespace std;class Box{public:void get_value();float volume();void display();public:float lengh;float width;float height;};void Box::get_value(){ cout<<"please input lengh, width,height:"; cin>>lengh;cin>>width;cin>>height;}float Box::volume(){ return(lengh*width*height);}void Box::display(){ cout<<volume()<<endl;}{Box box1,box2,box3;box1.get_value();cout<<"volmue of bax1 is ";box1.display();box2.get_value();cout<<"volmue of bax2 is ";box2.display();box3.get_value();cout<<"volmue of bax3 is ";box3.display();return 0;}解法二:#include <iostream>using namespace std;class Box{public:void get_value();void volume();void display();public:float lengh;float width;float height;float vol;};void Box::get_value(){ cout<<"please input lengh, width,height:"; cin>>lengh;cin>>width;cin>>height;}void Box::volume(){ vol=lengh*width*height;}void Box::display(){ cout<<vol<<endl;}int main(){Box box1,box2,box3;box1.get_value();box1.volume();cout<<"volmue of bax1 is ";box1.display();box2.get_value();box2.volume();cout<<"volmue of bax2 is ";box2.display();box3.get_value();box3.volume();cout<<"volmue of bax3 is ";box3.display();return 0;}第三章2:#include <iostream>using namespace std;class Date{public:Date(int,int,int);Date(int,int);Date(int);Date();void display();private:int month;int day;int year;};Date::Date(int m,int d,int y):month(m),day(d),year(y) { }Date::Date(int m,int d):month(m),day(d){year=2005;}Date::Date(int m):month(m){day=1;year=2005;}{month=1;day=1;year=2005;}void Date::display(){cout<<month<<"/"<<day<<"/"<<year<<endl;}int main(){Date d1(10,13,2005);Date d2(12,30);Date d3(10);Date d4;d1.display();d2.display();d3.display();d4.display();return 0;}3:#include <iostream>using namespace std;class Date{public:Date(int=1,int=1,int=2005);void display();private:int month;int day;int year;};Date::Date(int m,int d,int y):month(m),day(d),year(y) { }void Date::display(){cout<<month<<"/"<<day<<"/"<<year<<endl;}int main(){Date d1(10,13,2005);Date d2(12,30);Date d4;d1.display();d2.display();d3.display();d4.display();return 0;}4:#include <iostream>using namespace std;class Student{public:Student(int n,float s):num(n),score(s){}void display();private:int num;float score;};void Student::display(){cout<<num<<" "<<score<<endl;}int main(){Student stud[5]={Student(101,78.5),Student(102,85.5),Student(103,98.5), Student(104,100.0),Student(105,95.5)};Student *p=stud;for(int i=0;i<=2;p=p+2,i++)p->display();return 0;}5:#include <iostream>using namespace std;class Student{public:Student(int n,float s):num(n),score(s){}int num;float score;};void main(){Student stud[5]={Student(101,78.5),Student(102,85.5),Student(103,98.5), Student(104,100.0),Student(105,95.5)};void max(Student* );Student *p=&stud[0];max(p);}void max(Student *arr){float max_score=arr[0].score;int k=0;for(int i=1;i<5;i++)if(arr[i].score>max_score) {max_score=arr[i].score;k=i;} cout<<arr[k].num<<" "<<max_score<<endl;}6:#include <iostream>using namespace std;class Student{public:Student(int n,float s):num(n),score(s){}void change(int n,float s) {num=n;score=s;}void display(){cout<<num<<" "<<score<<endl;} private:int num;float score;};int main(){Student stud(101,78.5);stud.display();stud.change(101,80.5);stud.display();return 0;}7: 解法一#include <iostream>using namespace std;class Student{public:Student(int n,float s):num(n),score(s){}void change(int n,float s) {num=n;score=s;}void display() {cout<<num<<" "<<score<<endl;}//可改为:void display() const {cout<<num<<" "<<score<<endl;} private:int num;float score;};int main(){const Studentstud(101,78.5);stud.display();//stud.change(101,80.5);stud.display();return 0;}解法二:#include <iostream>using namespace std;class Student{public:Student(int n,float s):num(n),score(s){}void change(int n,float s) const {num=n;score=s;}void display() const {cout<<num<<" "<<score<<endl;}private:mutable int num;mutable float score;};int main(){const Student stud(101,78.5);stud.display();stud.change(101,80.5);stud.display();return 0;}解法三:#include <iostream>using namespace std;class Student{public:Student(int n,float s):num(n),score(s){}void change(int n,float s) {num=n;score=s;}void display() {cout<<num<<" "<<score<<endl;} private:int num;float score;};int main(){Student stud(101,78.5);Student *p=&stud;p->display();p->change(101,80.5);p->display();return 0;}8:#include <iostream>using namespace std;class Student{public:Student(int n,float s):num(n),score(s){}void change(int n,float s) {num=n;score=s;}void display() {cout<<num<<" "<<score<<endl;} private:int num;float score;};int main(){Student stud(101,78.5);void fun(Student&);fun(stud);return 0;}void fun(Student &stu){stu.display();stu.change(101,80.5);stu.display();}9:#include <iostream>using namespace std;class Product{public:Product(int n,int q,float p):num(n),quantity(q),price(p){};void total();static float average();static void display();private:int num;int quantity;float price;static float discount;static float sum;static int n;};void Product::total(){float rate=1.0;if(quantity>10) rate=0.98*rate;sum=sum+quantity*price*rate*(1-discount);n=n+quantity;}void Product::display(){cout<<sum<<endl;cout<<average()<<endl;}float Product::average(){return(sum/n);}float Product::discount=0.05;float Product::sum=0;int Product::n=0;int main(){Product Prod[3]={Product(101,5,23.5),Product(102,12,24.56),Product(103,100,21.5) };for(int i=0;i<3;i++)Prod[i].total();Product::display();return 0;}10:#include <iostream>using namespace std;class Date;class Time{public:Time(int,int,int);friend void display(const Date &,const Time &); private:int hour;int minute;int sec;};Time::Time(int h,int m,int s){hour=h;minute=m;sec=s;}class Date{public:Date(int,int,int);friend void display(const Date &,const Time &); private:int month;int day;int year;};Date::Date(int m,int d,int y){month=m;day=d;year=y;}void display(const Date &d,const Time &t){cout<<d.month<<"/"<<d.day<<"/"<<d.year<<endl; cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;}int main(){Time t1(10,13,56);Date d1(12,25,2004);display(d1,t1);return 0;}11:#include <iostream>using namespace std;class Time;class Date{public:Date(int,int,int);friend Time;private:int month;int day;int year;};Date::Date(int m,int d,int y):month(m),day(d),year(y){ }class Time{public:Time(int,int,int);void display(const Date &);private:int hour;int minute;int sec;};Time::Time(int h,int m,int s):hour(h),minute(m),sec(s){ }void Time::display(const Date &d){cout<<d.month<<"/"<<d.day<<"/"<<d.year<<endl;cout<<hour<<":"<<minute<<":"<<sec<<endl;}int main(){Time t1(10,13,56);Date d1(12,25,2004);t1.display(d1);return 0;}12:#include <iostream>using namespace std;template<class numtype>class Compare{public:Compare(numtype a,numtype b);numtype max();numtype min();private:numtype x,y;};template <class numtype>Compare<numtype>::Compare(numtype a,numtype b){x=a;y=b;}template <class numtype>numtype Compare<numtype>::max(){return (x>y)?x:y;}template <class numtype>numtype Compare<numtype>::min(){return (x<y)?x:y;}int main(){Compare<int> cmp1(3,7);cout<<cmp1.max()<<" is the Maximum of two integer numbers."<<endl;cout<<cmp1.min()<<" is the Minimum of two integer numbers."<<endl<<endl; Compare<float> cmp2(45.78,93.6);cout<<cmp2.max()<<" is the Maximum of two float numbers."<<endl;cout<<cmp2.min()<<" is the Minimum of two float numbers."<<endl<<endl; Compare<char> cmp3('a','A');cout<<cmp3.max()<<" is the Maximum of two characters."<<endl;cout<<cmp3.min()<<" is the Minimum of two characters."<<endl;return 0;}第四章1:#include <iostream>using namespace std;class Complex{public:Complex(){real=0;imag=0;}Complex(double r,double i){real=r;imag=i;}double get_real();double get_imag();void display();private:double real;double imag;};double Complex::get_real(){return real;}double Complex::get_imag(){return imag;}void Complex::display(){cout<<"("<<real<<","<<imag<<"i)"<<endl;}Complex operator + (Complex &c1,Complex &c2){return Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag()); }int main(){Complex c1(3,4),c2(5,-10),c3;c3=c1+c2;cout<<"c3=";c3.display();return 0;}2:#include <iostream>using namespace std;class Complex{public:Complex(){real=0;imag=0;}Complex(double r,double i){real=r;imag=i;}Complex operator+(Complex &c2);Complex operator-(Complex &c2);Complex operator*(Complex &c2);Complex operator/(Complex &c2);void display();private:double real;double imag;};Complex Complex::operator+(Complex &c2){Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;}Complex Complex::operator-(Complex &c2){Complex c;c.real=real-c2.real;c.imag=imag-c2.imag;return c;}Complex Complex::operator*(Complex &c2){Complex c;c.real=real*c2.real-imag*c2.imag;c.imag=imag*c2.real+real*c2.imag;return c;}Complex Complex::operator/(Complex &c2){Complex c;c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); return c;}void Complex::display(){cout<<"("<<real<<","<<imag<<"i)"<<endl;}int main(){Complex c1(3,4),c2(5,-10),c3;cout<<"c1+c2=";c3.display();c3=c1-c2;cout<<"c1-c2=";c3.display();c3=c1*c2;cout<<"c1*c2=";c3.display();c3=c1/c2;cout<<"c1/c2=";c3.display();return 0;}3:#include <iostream> //用VC++时改为∶#include <iostream.h> using namespace std; //用VC++时为取消此行class Complex{public:Complex(){real=0;imag=0;}Complex(double r,double i){real=r;imag=i;}Complex operator+(Complex &c2);Complex operator+(int &i);friend Complex operator+(int&,Complex &);void display();private:double real;double imag;};Complex Complex::operator+(Complex &c){return Complex(real+c.real,imag+c.imag);}Complex Complex::operator+(int &i){return Complex(real+i,imag);}void Complex::display(){cout<<"("<<real<<","<<imag<<"i)"<<endl;}Complex operator+(int &i,Complex &c){return Complex(i+c.real,c.imag);}int main(){Complex c1(3,4),c2(5,-10),c3;c3=c1+c2;cout<<"c1+c2=";c3.display();c3=i+c1;cout<<"i+c1=";c3.display();c3=c1+i;cout<<"c1+i=";c3.display();return 0;}4:#include <iostream>using namespace std;class Matrix //定义Matrix类{public:Matrix(); //默认构造函数friend Matrix operator+(Matrix &,Matrix &); //重载运算符“+”void input(); //输入数据函数void display(); //输出数据函数private:int mat[2][3];};Matrix::Matrix() //定义构造函数{for(int i=0;i<2;i++)for(int j=0;j<3;j++)mat[i][j]=0;}Matrix operator+(Matrix &a,Matrix &b) //定义重载运算符“+”函数{Matrix c;for(int i=0;i<2;i++)for(int j=0;j<3;j++){c.mat[i][j]=a.mat[i][j]+b.mat[i][j];}return c;}void Matrix::input() //定义输入数据函数{cout<<"input value of matrix:"<<endl;for(int i=0;i<2;i++)for(int j=0;j<3;j++)cin>>mat[i][j];}void Matrix::display() //定义输出数据函数{for (int i=0;i<2;i++){for(int j=0;j<3;j++){cout<<mat[i][j]<<" ";}cout<<endl;}}int main(){Matrix a,b,c;a.input();b.input();cout<<endl<<"Matrix a:"<<endl;a.display();cout<<endl<<"Matrix b:"<<endl;b.display();c=a+b; //用重载运算符“+”实现两个矩阵相加cout<<endl<<"Matrix c = Matrix a + Matrix b :"<<endl;c.display();return 0;}5:#include <iostream.h>//using namespace std;class Matrix{public:Matrix();friend Matrix operator+(Matrix &,Matrix &);friend ostream& operator<<(ostream&,Matrix&);friend istream& operator>>(istream&,Matrix&);private:int mat[2][3];};Matrix::Matrix(){for(int i=0;i<2;i++)for(int j=0;j<3;j++)mat[i][j]=0;}Matrix operator+(Matrix &a,Matrix &b){Matrix c;for(int i=0;i<2;i++)for(int j=0;j<3;j++){c.mat[i][j]=a.mat[i][j]+b.mat[i][j];}return c;}istream& operator>>(istream &in,Matrix &m){cout<<"input value of matrix:"<<endl;for(int i=0;i<2;i++)for(int j=0;j<3;j++)in>>m.mat[i][j];return in;}ostream& operator<<(ostream &out,Matrix &m){for (int i=0;i<2;i++){for(int j=0;j<3;j++){out<<m.mat[i][j]<<" ";}out<<endl;}return out;}int main(){ Matrix a,b,c;cin>>a;cin>>b;cout<<endl<<"Matrix a:"<<endl<<a<<endl;cout<<endl<<"Matrix b:"<<endl<<b<<endl;c=a+b;cout<<endl<<"Matrix c = Matrix a + Matrix b :"<<endl<<c<<endl; return 0;}6:#include <iostream>using namespace std;class Complex{public:Complex(){real=0;imag=0;}Complex(double r){real=r;imag=0;}Complex(double r,double i){real=r;imag=i;}operator double(){return real;}void display();private:double real;double imag;};void Complex::display(){cout<<"("<<real<<", "<<imag<<")"<<endl;}int main(){Complex c1(3,4),c2;double d1;d1=2.5+c1;cout<<"d1="<<d1<<endl;c2=Complex(d1);cout<<"c2=";c2.display();return 0;}7:#include <iostream>using namespace std;class Student{public:Student(int,char[],char,float);int get_num(){return num;}char * get_name(){return name;}char get_sex(){return sex;}void display(){cout<<"num:"<<num<<"\nname:"<<name<<"\nsex:"<<sex<<"\nscore:"<<score<<"\n\n";} private:int num;char name[20];char sex;float score;};Student::Student(int n,char nam[],char s,float so){num=n;strcpy(name,nam);sex=s;score=so;}class Teacher{public:Teacher(){}Teacher(Student&);Teacher(int n,char nam[],char sex,float pay);void display();private:int num;char name[20];char sex;float pay;};Teacher::Teacher(int n,char nam[],char s,float p){num=n;strcpy(name,nam);sex=s;pay=p;}Teacher::Teacher(Student& stud){num=stud.get_num();strcpy(name,stud.get_name());sex=stud.get_sex();pay=1500;}void Teacher::display(){cout<<"num:"<<num<<"\nname:"<<name<<"\nsex:"<<sex<<"\npay:"<<pay<<"\n\n";}int main(){Teacher teacher1(10001,"Li",'f',1234.5),teacher2;Student student1(20010,"Wang",'m',89.5);cout<<"student1:"<<endl;student1.display();teacher2=Teacher(student1);cout<<"teacher2:"<<endl;teacher2.display();return 0;}第五章1:#include <iostream>using namespace std;class Student。
李爱华、程磊_面向对象程序设计课后答案(完整版)
第二章之迟辟智美创作2-4#include <iostream>using namespace std;Add(int a,int b);int main(){int x,y,sum;cout<<"please input x and y:";cin>>x>>y;sum = add(x,y);cout <<x<<"+"<<y<<"="<<sum<<endl;}Add(int a,int b){return a+b;}2-5(1)this is a C++ program.(2)x=50.6 y=10 z=Ax=216.34 y=10 z=Ax=216.34 y=2 z=A x=216.34 y=2 z=E (3)x y z500 1000 0500 1500 1500 500 200 15002-6#include <iostream> using namespace std; int main(){int *p,*init;int countp=0;int countn=0;p = new int[20];init = p;for(int i=0;i<20;i++) {cin>>*p;p++;}p = p-20;for( i=0;i<20;i++){if(*p>0) countp++;if(*p<0) countn++;cout<<*p<<" ";p++;}cout<<"正数有:"<<countp<<endl;cout<<"负数有:"<<countn<<endl;p = init;delete[] p;return 0;}2-7不做要求#include <iostream>//#include <string>using namespace std;void checkagescore(string name,int age) {if (name == "exit") throw name;if(age<0||age>50)throw age;}int main(){string name;int age;for(int i=0 ;i<5 ;i++ ){cin.ignore ();getline(cin,name );cin>>age ;try{checkagescore(name,age);}catch( string){cout<<"exception :name is exit"<<endl;continue;}catch(int){cout<<"exception :age is not proper"<<endl;continue;}cout<<"name:"<<name<<" age :"<<age<<endl;}return 0;}第三章3-1(1)A (2)C (3)B (4)C (5)C(6)B (7)B (8)C (9)C3-7(1)main()函数中p1.age = 30;语句是毛病的.age 是类的私有成员(2)构造函数应当给常数据成员和引用成员初始化,将构造函数改为:A(int a1,int b1):a(a1),b(b1){}或A(int a1 ):a(a1),b(a){}再将main中的A a(1,2); 改为A a(1); (3)(1)在Test 类中添加语句:void print();void Print(){cout<<x<<"-"<<y<<"="<<x-y<<endl; }改为void Test::Print(){cout<<x<<"-"<<y<<"="<<x-y<<endl; }main函数中Init(38,15);改为:A.Init(38,15);Print();改为:A.Print();3-8(1)Constructing AConstructing BDestructing BDestructing A(2)double a,double bpoint & p3-9class box{int len1,len2,len3;public:box(int l1,int l2,int l3){len1 = l1;len2 = l2; len3 = l3;} long volumn(){return len1*len2*len3;}};3-10class Test{int m1,m2;public:void Init(int a,int b){m1 = a;m2 = b;}void Pring(){cout<<m1<<" "<<m2<<endl;}};3-11略3-12}第四章4-6(1)D (2)D (3)D (4)D (5)B(6)D4-7(1)static int count = 0;这样初始化静态成员值是分歧毛病的将其改为static int count;在类外,main函数前加int Sample::count = 0;(2)#include <iostream>//#include <cstdlib>using namespace std;class Ctest{private:int x; const int y1;public:const int y2;Ctest(int i1,int i2):y1(i1),y2(i2){y1 =10;//y1 为常量不能赋值x = y1;}int readme() const;};int Ctest::readme ()const{int i;i = x;x++; //常函数内不能改酿成员值return x;}int main(){Ctest c(2,8);int i = c.y2;c.y2 = i;//y2为常量,不能改值i = c.y1;//y1私有,类外不能访问return 0;}将犯错语句全部注释4-8(1)题中印刷毛病,将class C构造函数改为:C(){cout<<"constructor C:";}运行结果为:constructor A constructor B constructor C(2)40(3)3434-9#include<iostream.h> #include<stdio.h>class Date{int year;int month;int day;public:Date(int y,int m,int d) {year=y;month=m;day=d;}void disp(){cout<<year<<" "<<month<<" "<<day<<endl;}friend int count_day(Date &d,int k);friend int l(int year);friend int h(Date &d1,Date &d2);};int count_day(Date &d,int k){static int day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};// 使用二维数组寄存各月天数,第一行对应非闰年,第二行对应闰年int j,i,s;if(l(d.year))j=1;//闰年,取1else j=0;//非闰年,取0if(k)//K非0时{s=d.day;s+=day_tab[j][i-1];}else//K为0时{s=day_tab[j][d.month]-d.day;for(i=d.month+1; i<=12; i++)s+=day_tab[j][i-1];}return s;//S为相差的天数}int l(int year){if(year%4==0&&year%100!=0||year%400==0) // 是闰年 return 1;else // 不是闰年return 0;}int h(Date &d1,Date &d2){int days,day1,day2,y;if(d1.year<d2.year)//第一个日期年份小于第二个日期年份 {days=count_day(d1,0);for(y=d1.year+1;y<d2.year;y++)if(l(y))//闰年days+=366L;else//非闰年days+=365L;days+=count_day(d2,1);}else if(d1.year==d2.year){day1=count_day(d1,1);day2=count_day(d2,1);days=day2-day1;}elsedays=-1;return days;}void main(){ int year1,year2,month1,month2,day1,day2;cout<<"输入日期1"<<endl;cin>>year1>>month1>>day1;cout<<"输入日期2"<<endl;cin>>year2>>month2>>day2;Date d1( year1, month1, day1),d2( year2, month2, day2); int ds=h(d1,d2);{cout<<"输出结果:"<<endl;}if(ds>=0){d1.disp(); printf("与");d2.disp(); printf("之间有%d天\n\n",ds);}else//第一个日期小于第二个日期cout<<"时间毛病!"<<endl;}4-10#include<iostream.h>#include<string.h>class Student{int number;char name[20];public:Student(int i=0,char *s="\0") //构造学生对象{ number=i;strcpy(name,s);}void Print() //输出结果{ cout<<"Number:"<<number<<endl;cout<<"Name:"<<name<<endl;}friend bool greaterthan(Student &st1,Student &st2);};bool greaterthan(Student &st1,Student &st2){return st1.number>st2.number; //返回成员number 的比力结果}int main(){Studentst[5]={Student(65,"Li"),Student(78,"Zhang"),Student(80,"wang "),Student(92,"zhao"),Student(50,"zhen")};int max = 0;int min = 0;for(int i=1;i<5;i++){ if(!greaterthan(st[max],st[i]))max = i;if(!greaterthan(st[i],st[min]))min = i;}cout<<"最年夜成果:"<<endl;st[max].Print ();cout<<"最小成果:"<<endl;st[min].Print ();return 0;}4-11#include <iostream>#include <string>using namespace std;class Book{char *name;char*author;int sale;public:Book(){ name = '\0';author = '\0';sale = -1;}Book(char* a ,char* b,int c){name = new char[strlen(a)+1];strcpy(name,a);author = new char[strlen(b)+1];strcpy(author,b);sale = c;}void print(){cout<<"autor "<<author<<endl;cout<<"name "<<name<<endl;cout<<"price "<<sale<<endl;}~Book(){if(!name ) delete[] name;if(!author)delete[] author;}};int main(){Book b1("c++","li ai hua",12);Book b2;return 0;}第五章5-8改错题谜底不惟一(1) class DC {int x;public:DC(){x =100;}};(2)编译无错,但逻辑毛病,可改为: class BC{protected:int x;public:BC(int i=0){x = i} };class DC:private BC{public:DC(int i):BC(i){}};(3)将DC构造函数改为:DC(int i):BC(i){y = 0;} 5-9(1) base class(2) (10,5)(3,9-18,33)(13,19)(13,19-18,33)(13,19)5-10#include <iostream>using namespace std;class Shape{int x,y;public:Shape(int ix,int iy){x = ix; y = iy;}virtual void show(){cout<<"pos: "<<x<<' '<<y<<endl;} };class Circle :public Shape{int radius;public:Circle(int ix,int iy,int r):Shape(ix,iy),radius(r){}void show() {Shape::show ();cout<<"circle: "<<radius<<endl;}};class Rect :public Shape{int width,higth;public:Rect(int ix,int iy,int iw,int ih):Shape(ix,iy),width(iw),higth(ih){}void show() {Shape::show ();cout<<"width and higth: "<<width<<' '<<higth<<endl;}};int main(){Shape s1(1,1);Rect r1(2,2,8,8);Circle c1(3,3,9);r1.show ();c1.show();return 0;}5-11#include<iostream.h>class vehicle // 界说汽车类{protected:int date; // 年份float price; //价格public:vehicle(int date,float price);int get_date();float get_price();float date_load();void show();};class car:public vehicle // 界说小车类{int passenger_load; // 载人数public:car(int date,float price,int passengers=4);int get_passengers();void show();};class truck:public vehicle // 界说卡车类{float payload; // 载重量public:truck(int date,float price,float max_load=24000.00); float efficiency();void show();};vehicle::vehicle(int date,float price){vehicle::date=date;vehicle::price=price;}int vehicle::get_date(){return date;}float vehicle::get_price(){return price;}void vehicle::show(){cout << "年份:" << date << "年" << endl; cout << "价格:" << price << "元" << endl; }car::car(int date, float price,int passengers) :vehicle (date, price){passenger_load=passengers;}int car::get_passengers (){return passenger_load;}void car::show(){cout <<" 车型:小车" << endl;vehicle::show();cout << "载人:" << passenger_load << "人" << endl;cout << endl;}truck:: truck(int date, float price,float max_load):vehicle(date,price){payload=max_load;}float truck::efficiency(){return payload;}void truck::show(){cout <<"车型:卡车" << endl;vehicle:: show ();cout << "载重:" << efficiency() << endl;cout << endl;}void main (){car car1(2001,2000,5);truck tru1(2002,8000,340000);cout << "输出结果" << endl;car1. show ();tru1. show ();}第六章6-4d=3D::fun();6-5C::print(),cinfo=2C::print(),cinfo=2D::print(),dinfo=4B类不能界说对象,否则编译通不外,因为B未界说基类A中的虚函数print(),它也是个虚基类.6-6#include <iostream>using namespace std;class Mammal{public:virtual void Speak(){cout<<"in Mammal"<<endl;} };class Dog:public Mammal{public:void Speak(){cout<<"dog bark"<<endl;} };int main(){Dog dog;Mammal *pM;pM = &dog;pM->Speak ();return 0;}运行结果:dog bark6-7#include <iostream>using namespace std;class BaseClass{public:virtual ~BaseClass(){cout<<"destruct Base"<<endl;}};class Derived:public BaseClass{public:~Derived(){cout<<"destruct derived"<<endl;}};int main(){BaseClass *pbase;pbase = new Derived;delete pbase;}结果将不能正常执行子类析构6-8 #include <iostream>using namespace std;class Shape{public:virtual double Area() = 0;};class Circle :public Shape{double radius;public:Circle(double r):radius(r){}double Area() {return 3.14*radius*radius;} };class Square :public Shapedouble radius;public:Square(double r):radius(r){}double Area() {return 6*radius*radius;}};class Rectangle :public Shape{double width,radius;public:Rectangle(double w,double r):radius(r){width=w;}double Area() {return width*radius;}};class Trapezoid :public Shape{double height,radius,length;public:Trapezoid(double h,double r,double l):radius(r){height=h;length=l;}double Area() {return height*(radius+length)/2;}};class Triangle :public Shapedouble height,radius;public:Triangle(double h,double r):radius(r){height=h;} double Area() {return height*radius/2;}};int main(){double AreaSum= 0;Shape * pS[6];pS[1] = new Circle(1);pS[2] = new Square(2);pS[3] = new Rectangle(1,2);pS[4] = new Trapezoid(4,2,5);pS[5] = new Triangle(4,2);AreaSum += pS[1]->Area();AreaSum += pS[2]->Area();AreaSum += pS[3]->Area();AreaSum += pS[4]->Area();AreaSum += pS[5]->Area();cout<<"总面积是:"<<AreaSum<<endl;cout<<"各三维图形面积如下:"<<endl;cout<<"圆形:"<<pS[1]->Area()<<endl;cout<<"正方形:"<<pS[2]->Area()<<endl;cout<<"长方形:"<<pS[3]->Area()<<endl;cout<<"梯形:"<<pS[4]->Area()<<endl;cout<<"三角形:"<<pS[5]->Area()<<endl;return 0;}6-9#include <iostream>using namespace std;class Student{public:virtual void show() = 0;};class Junior :public Student{public:void show(){cout<<"this would be info for junior students"<<endl;}};class Senior :public Student{public:void show(){cout<<"this would be info for Senior students"<<endl;}};int main(){Student *pstu;pstu = new Junior;pstu->show ();pstu = new Senior;pstu->show ();return 0;}第七章7-1#include <iostream>#include <string>using namespace std;class vector{int x,y;public:vector(int ix=0,int iy=0){x =ix;y = iy;}vector operator+(vector& v1){return vector(x+v1.x,y+v1.y);}vector& operator+=(vector& v1){x +=v1.x;y +=v1.y;return *this;}void show(){cout<<'('<<x<<','<<y<<')'<<endl;}};int main(){vector v1(1,2),v2(3,4),v3;v3 = v1+v2;v1+=v2;v3.show();v1.show();return 0;}7-2#include <iostream.h>class Complex{private:double real,image;public:Complex(double x=0.0,double y=0.0){ real =x; image =y; }bool operator !=(const Complex &c); Complex operator -(const Complex &c); bool operator ==(const Complex &c); Complex operator -();Complex &operator +=(const Complex &c); void Print();};void Complex::Print(){cout<<real<<" + "<<image<<"i"<<endl;}Complex Complex ::operator -(const Complex &c){Complex temp(real-c.real,image-c.image);return temp;}bool Complex ::operator ==(const Complex &c){return (real==c.real && image==c.image);}bool Complex::operator !=(const Complex &c){return (real!=c.real || image!=c.image);}Complex Complex ::operator -(){return Complex(-real,-image);}Complex &Complex ::operator +=(const Complex &c) {real+=c.real;image+=c.image;return *this;}int main(){Complex c1(2,7),c2(4,2),c3;c3=c1-c2;c3.Print();if(c3==c1)cout<<"c3 equals to c1"<<endl;else cout<<"c3 doesn?ˉt equale to c1"<<endl;c3=-c2;c3.Print();c3+=c2;c3.Print();if(c3 != c1) cout<<"c3!=c1"<<endl;return 0;}7-3#include <iostream>using namespace std;bool rn(int y){bool flag = 0;if(y%400==0 || y%4 ==0&&y%100!=0) flag = 1;return flag;}class Date{ private:int month, day, year;public:Date(int m, int d, int y);Date& operator+(int days);void showDate();};Date::Date(int y, int m, int d){ if (m>0 && m<13)month=m;if (d>0 && d<32)day=d;if (y>0 && y<3000)year=y;}Date& Date::operator+(int days){int i;for(i = days;i>0;){int diff ;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12: diff = 31 -day;break;case 4:case 6:case 9:case 11: diff = 30 -day;break;case 2:if (rn(year))diff = 29 - day;else diff = 28 -day;break;}if(i>diff){i-= diff+1;day = 1;month++;if(month>12){year++;month = 1;}}else{day+= i;break;}}return *this;}void Date::showDate(){cout<<year<<"."<<month<<"."<<day<<endl; }int main(){Date obj(1996,1,1);obj.showDate ();obj = obj+59;obj.showDate();return 0;}7-4 以+,=为例#include<iostream>#include<string.h>using namespace std; class String{char *sbuf;int length;public:String(){length=0;sbuf=new char;sbuf[0]='\0';}String(char *s) //用字符串初始化{length=strlen(s);sbuf=new char[length+1];strcpy(sbuf,s);}String (String& str){length=str.length ;sbuf=new char[length+1];strcpy(sbuf,str.sbuf );}~String(){delete[] sbuf;}String & operator =(String& str){if(sbuf == str.sbuf )return *this;else{sbuf = new char[str.length +1];strcpy(sbuf,str.sbuf );return *this;}}String operator +(String& str)//此函数需配合拷贝构造函数{String st;st.length = length + str.length ;st.sbuf = new char[st.length+1 ];st.sbuf [0] = '\0';strcpy(st.sbuf,sbuf);strcat(st.sbuf,str.sbuf );return st;}char & operator[](int i){if(i<0||i>=length) //对下标进行检查,超越范围则报错退出法式{cout<<"下标越界毛病!"<<endl;exit(0);}return sbuf[i];}void Show(){cout<<sbuf<<endl;}};int main(){String s1("hello");String s2("world"),s3 ;s3 = s1+s2; //s3.Show ();return 0;}7-6int n,i;float *a;public:polynomial(int x){n=x;a=newfloat[n];}polynomial (const polynomial & p)//增加一个拷贝复制构造函数{n=p.n;a= newfloat [p.n];for (int i=0; i<p.n; i++){a[i]=p.a[i];}}polynomial(){}~polynomial(){delete[]a;}void seta(int y,float x){a[y]=x;}void print(){cout<<"y="<<a[n-1]<<"x^("<<n-1<<")";for(i=n-2;i>=0;i--)cout<<"+"<<a[i]<<"x^("<<i<<")";cout<<endl;}polynomial operator +(polynomial &x){if(n>=x.n){polynomial t(n);copy(t,*this);for(i=0;i<x.n;i++)t.a[i]=t.a[i]+x.a[i];return t;}else{polynomial t(x.n);copy(t,x);for(i=0;i<n;i++)t.a[i]=t.a[i]+a[i];return t;}}polynomial operator -(polynomial &x){if(n>=x.n){polynomial t(n);copy(t,*this);for(i=0;i<=x.n;i++)t.a[i]=t.a[i]-x.a[i];return t;}else{polynomial t(x.n);copy(t,x);for(i=0;i<=n;i++)t.a[i]=t.a[i]-a[i];return t;}}friend void copy(polynomial &x,polynomial &y);};void copy(polynomial &x,polynomial &y){int i;if(x.n<y.n){cout<<"无法复制"<<endl;x.print();y.print();//system("pause");}for(i=01;i++)x.a[i]=y.a[i];}第八章8-1(1)template<typename T> T fun(T a){....}(2) template<typename T>T test(T a){....}(3) template<typename T>class Array{public:void fun();}template<typename T>void Array<T>::fun(){.....}(4)Array<int> a1,a2,a3;8-4#include<iostream>using namespace std; template <typename T>T max(T a,T b,T c){T temp;temp=a>b?a:b;temp=temp>c?temp:c;return temp;}int main(){cout<<max(11,29,22)<<endl;cout<<max(,,)<<endl;cout<<max('c','b','a')<<endl;return 0;}8-5及8-6#include< iostream>#include<string>using namespace std;template <typename T >void sort_bubble(T arr[],int n){for(int i=0; i<n-1;i++){for(int j=0;j<n-1-i;j++)if( arr[j]<arr[j+1]){T temp; temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp;} }。
《面向对象编程与设计(Java)》课后作业及参考解答
《面向对象编程与设计(Java)》课后作业及参考解答《面向对象编程与设计(Java)》课后作业及参考解答1.1.1第一周课程(9月4日)的课后作业及参考解答1、请用Java程序示例说明什么是面向过程的程序设计方法、什么是面向对象的程序设计方法?面向过程就是分析出所需要开发的应用的系统在解决某个问题时所需要的步骤和工作流程,然后用代码(当然应该把这些代码设计为各个函数或者过程)来表示这些步骤的具体实现——面向过程是以过程为中心的编程思想。
而面向对象是把构成问题的各个方面分解成各个对象,并用代码来实现对象之间的交互——面向对象是以事物为中心的编程思想。
(1)面向过程程序设计方法的示例#include "stdio.h"int add(int a, int b){//对数据的操作(方法或者函数)return a+b;}int main(){//数据(属性或者状态)int x=1, y=1;int sum=add(x,y);print("Sum=%d",sum);}面向过程程序的程序中的数据与方法是相互分离的!而面向对象程序中的数据与方法是相互组合在一起的。
当数据(也就是问题的属性或者状态)发生变化,需要修改大量的关联的方法的程序模块。
(2)面向对象程序设计方法的示例import java.io.*;public class Add{//数据(属性或者状态)private int sum;public int add(int a, int b){//对数据的操作(方法或者函数)sum=a+b;return sum;}public void showSum() {//对数据的操作(方法或者函数)System.out.println("Sum="+sum);}public static void main(String args[]){Add oneAdd=new Add();oneAdd.add(1,2);oneAdd.showSum();}}2、谈谈你对开源的理解(可以是任何方面的主题),你熟悉J2EE平台中的哪些开源框架、对这些开源框架的熟悉程度怎样(包括在项目中的具体应用)(1)开源软件1)开源软件一定是源代码开放,任何人可以免费使用,任何人可以再开发;2)开源同时也是一种商业运营手段,软件免费提供但服务收费。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3-1Windows编程中窗口的含义是什么?
答:
窗口是Windows应用程序的基本操作单元,是应用程序与用户之间交互的接口环境,也是系统管理应用程序的基本单位。
3-2事件驱动的特点是什么?
答:
按下鼠标键时,系统就会产生一条特定的消息,标识鼠标按键事件的发生。Windows程序的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。程序员可以针对消息类型编写程序以处理接收的消息,或者发出其他消息以驱动其他程序,但是不必预先确定消息产生的次序。
)
5-3如何设置字体的颜色和背景色?
答:
设置字体颜色:SetTextColor(hdc,);
设置背景颜色:SetBkColor(hdc,crColor);
5-4文本是如何输出的?
答:
(1)获取字体信息
输出文本之前要获取字体的信息,如字符高度等,以确定输出格式和下一行字符的位置
GetTextMetrics (hdc,&tm);//tm为TEXTMETRICS结构
(2)只有当键盘驱动程序把键盘字符映射成ACSII码后才能产生WM_CHAR消息.
(3)TranslateMessage函数把键盘消息转化为字符消息.
6-2应用程序如何响应鼠标消息?
答:
鼠标作为定位输入设备,通过鼠标单击、双击和拖动功能,用户可以很容易地操作基于Windows图形界面的应用程序. Windows中通过光标来指示当前鼠标的位置.在Windows操作系统中预定义了几种光标.并在Windows.h头文件中加以定义.
break;
case WM_LBUTTONUP://释放鼠标左键
…
break; …
case WM_LBUTTONDOWN: //按下鼠标左键
…
break;
case WM_LBUTTONUP://释放鼠标左键
…
break;
…
鼠标双击:
Windows系统默认的时间间隔为0.5秒,也可以调用SetDoubleClickTime()重新设定间隔值
(2)单击Shift键时,窗口中显示“You had hitted the SHIFT key”;
(3)单击Ctrl键时,窗口中显示“You had hitted the CTRL key”;
(4)单击Ctrl+A键时,窗口中显示“You had hitted the CTRL+A key”;
(5)单击Shift+B时,窗口中显示“You had hitted the CTRL+B key”。
第七章资源在Windows编程中的应用
7-1简述菜单资源的创建过程
答:
(1)定义菜单
菜单名MENU [,选项]
{菜单项列表}
POPUP语句定义弹出式菜单,其形式为:
POPUP“菜单项名”[,选项];
在菜单项名中加入符号“&”可定义该菜单项的热键。例如:
POPUP“编辑(&E)”;
该菜单项使用Alt+E键作为热键。
3重新绘制图形,一般对于简单图形常采用重新绘制图形方法执行刷新。在应用程序中,将图形绘制处理程序放在消息WM_PAINT响应模块中,一旦程序接收到刷新请求即可重绘图形。
4-4如何定义映像模式?
答:
调用GetMapMode函数可获取当前设备环境的映射模式。
第五章文本的输出方法与字体的设置
5-1如何获取字体句柄?
答:
#include <windows.h>
long WINAPI WndProc(HWND hwnd,UINT iMessage,UINT wParam,LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hinstance,int nCmdShow);
3-4句柄的作用是什么?请举例说明。
答:
句柄是整个Windows编程的基础,一个句柄是指Windows使用的一个惟一的整数值,是一个4字节长的数值,用于标识应用程序中不同的对象和同类对象中不同的实例,诸如一个窗口、按钮、图标、滚动条、输出设备、控制或者文件等。
3-5一个Window应用程序最基本的构成应有哪些成分?
MENUIEM语句用于定义菜单项,其形式为:
MENUITEM“菜单项名”菜单项标识(ID)[,选项]
(2)加载菜单资源
…
WNDCLASS wndclass;
…
wndclass.lpszMenuName=lpszMenuName;
应用程序需先调用函数LoadMemu加载菜单
HMENU LoadMemu
BYTE tmItalic;//非0则表示字体为斜体
BYTE tmUnderlined;//非0则表示字体有下划线
BYTE tmStruckOut;//非0则表示字符为删除字体
BYTE tmPitchAndFamily;//字体间距和字体族
BYTE tmCharSet;//字符集
}TEXTMETRIC
(3)文本输出
常用的文本输出函数TextOut原型如下:
BOOL TextOut
(
HDC hdc,
int X, int Y,//X, Y为用户区中字符串的起始坐标
LPCTSTR lpstring, //lpstring为显示的字符串
int nCount//nCount为字符串中的字节数
);
第六章Windows应用程序对键盘与鼠标的响应
( hInstance,//当前程序的实例句柄
lpszMenuName//窗口菜单名
);
如:
hmenu=LoadMenu(hlnstance,"Menu");
hwnd=CreateWindow(…,hmenu,…,);
应用程序获取菜单句柄后,可通过SetMenu动态地加载菜单
BOLL SetMenu (// Hwnd为窗口句柄,hmenu为菜单句柄
LONG tmDigitizedAspectY;//为输出设备设计的Y轴尺寸
BCHAR tmFirstChar;//字体中第一个字符值
BCHAR tmLastChar;//字体中最后一个字符值
BCHAR tmDefaultChar;//代替不在字体中字符的字符
BCHAR tmBreakChar;//作为分割符的字符
答:
Windows应用程序由c语言源程序文件、头文件、模块定义文件、资源描述文件、项目文件构成。
第四章Windows的图形设备接口及Windows绘图
4-1什么是图形设备接口?
答:
图形设备接口是Windows系统的重要组成部分,负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上显示图形或文字。
鼠标的拖动操作:用户按下鼠标按钮并在不松开鼠标按钮的情况下移动鼠标,此动作一般可以用来选择菜单和移动有关内容.
对于鼠标消息的处理:
case WM_LBUTTONDOWN: //按下鼠标左键
if((wParam&MK_CONTROL)&&(wParam&MK_SHIFT))
…//Shift和Ctrl键都被按下
HMENU hmenu,
UlNT wIDEnableItem, //被禁止或激活的菜单项标识
UINT dwEnable)//dwEnable为菜单项操作标识
MF_BYCOMMAND以ID值标识菜单项
MF_ENABLED激活菜单项
MF_BYPOSITION以位置标识菜单项
MF_GRAYED禁止菜单项并使其变灰显示
(2)格式化文本
①确定后续文本坐标
确定后续文本的坐标,应先获取当前的字符串的宽度,该工作由GetTextExtentPoint32函数完成,并把它存储于一个SIZE结构中。
BooL GetTextExtentPoint32
(
HDC hdc,
LPCTSTR lpszString,//指定的字符串
int nLength,//字符串中的字符数
6-1应用程序如何响应键盘消息?
答:
按键消息:每当用户按下或松开一个键时,就产生了一个按键消息.
系统按键消息:Alt键与相关输入键的组合产生的消息,这些键一般由Windows系统内部直接处理,应用程序不处理.
非系统按键消息:不使用Alt键组合的按键消息.
产生字符消息的条件:
(1)一个按键的组合产生了一个可以显示的字符时,就产生了一个字符消息.WM_KEYDOWN和WM_KEYUP组合.
用户自定义光标
自定义光标保存在扩展名为.cur的文件中。
光标名CURSOR光标文件(.cur)
加载光标资源(常在定义窗口类时进行)
LoadCursor(hThisInst,lpszCursorname)
鼠标单击:用户按下鼠标按钮并松开的这一全过程.此过程可以用来选择对象.
鼠标双击:用户在很短时间内(操作系统的默认时间为0.5秒)进行两次单击鼠标的操作,此动作可以激活所选项的默认操作.
5-2如何创建自定义字体?
答:
程序员可以调用函数GreateFont创建自定义字体。该函数的调用形式如下:
HFont=CreateFont
(
int nHeight,
int nWidth,
int nEscapement,
int nOrientation,
int nWeight,
DWOARD fdwltalic,
系统定义的TEXTMETRICS的结构如下:
typedef struct tagTEXTMETRIC