C++程序设计教程--面向对象分册(郑秋生)完整答案

合集下载

C面向对象程序设计课后习题答案1~14章

C面向对象程序设计课后习题答案1~14章
c1=getchar(); //将输入的第一个字符赋给c1
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>

面向对象程序设计课后答案(完整版)

面向对象程序设计课后答案(完整版)

面向对象程序设计课后答案(完整版)第二章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++程序设计教程--面向对象分册完整答案

C++程序设计教程--面向对象分册完整答案

第1章类和对象一、选择题8 C 9A 10 C二、阅读题1.x=2,y=32.x=2,y=3x!=y3.Cstatic::va1=0=1=2=4=4四、改错题#include <>#include <>class person{public:person(int n,char* nam,char s) {num=n;strcpy(name,nam);sex=s;cout<<"Constructor called."<<endl;}~person( ){cout<<"Destructor called."<<endl;}void display( ){cout<<"num: "<<num<<endl;cout<<"name: "<<name<<endl;cout<<"sex: "<<sex<<endl<<endl;}private:int num;char name[10];char sex;};int main( ){person s1(10010,"'Wang_li",'f');( );person s2(10011,"Zhang_fun",'m');( );return 0;}五、编程题5.1#include <iostream>using namespace std;class CBox{public :CBox(double l=0,double w=0,double h=0);double area();double volume ();private :double lengh;double width;double high;};CBox::CBox(double l,double w,double h){lengh=l;width=w;high=h;}double CBox::area(){return 2*(lengh*width+lengh*high+width*high); }double CBox::volume (){return lengh*width*high;}void main(){CBox box1(4,5,6);cout<<()<<endl;cout<<()<<endl;}#include <iostream>using namespace std;class CPoint{public :CPoint(double a=0,double b=0){x=a;y=b;}CPoint(CPoint & p){x=;y=;}void print(){cout<<"("<<x<<","<<y<<")";}private :double x,y;};class CLine{public:CLine(double x1=0,double y1=0,double x2=0,double y2=0):p1(x1,y1),p2(x2,y2) {}CLine(CPoint x,CPoint y):p1(x),p2(y){}CLine(CLine &lin){p1=;p2=;}void DrawLine(){cout<<"Line form";();cout<<"to";();cout<<endl;}void Linedel(){cout<<"delete line"<<endl;}void move(CPoint &x,CPoint &y){cout<<"move line"<<endl;p1=x;p2=y;}private :CPoint p1,p2;};void main(){CPoint point1(1,5),point2(5,8),point3(20,30),point4(40,50);CLine line1(point1,point2);CLine line2(2,3,8,12);();();(point3,point4);();line2=line1;();();}#include <iostream>using namespace std;class CComplex{public:CComplex(double, double);CComplex(CComplex &c); <<endl;}char CString::GetAt(int nindex) const{if(nindex>1&&nindex<=GetLength()+1)return s[ nindex-1];elsereturn '0';}void CString::Setat(int nindex,char ch){if(nindex>1&&nindex<=GetLength()+1)s[ nindex-1]=ch;}void CString::Print(){cout<<s<<endl;}int CString::compare(CString& string){if(strcmp(s,>0)return 1;else if(strcmp(s,<0)return -1;elsereturn 0;}int CString::compare(const char* psz)const {if(strcmp(s,psz)>0)return 1;else if(strcmp(s,psz)<0)return -1;else return 0;}CString::~CString(){<<endl;elsecout<<"String isn't empty."<<endl;cout<<"下面是判断字符串c1清空"<<endl;();cout<<"清空后输出字符串c1:"<<" \n";();cout<<"字符串已被清空"<<endl;cout<<"请按任意键继续"<<endl;cin>>b;D一、阅读程序题四、编程题#include <>#include<>#define PAIclass Circle{public:Circle(){r=0;}Circle (double d){r=d;}double area(){return(PAI*r*r);}void display1(){cout<<"桌子的面积:"<<area()<<endl;}private:double r;};class Table{public:Table(){heig=0;}Table (double h) {heig=h;}void display2(){cout<<"桌子的高度:"<<heig<<endl;}private:double heig;};class Roundtable : public Circle,public Table{public:Roundtable(){strcpy(color,"白色");}Roundtable(double a,double b,char* c):Circle(a),Table(b){strcpy(color,c);}void display (){ display1();display2();cout<<"桌子的颜色:"<<color<<endl; }private:char color[20];};void main(){Roundtable s,,"黑色");();}如果Age在基类中被定义为私有的,SetAge(int n)不能直接给Age赋值,如果Age是基类的公有成员变量,则可以直接赋值。

C语言程序设计郑莉课后习题答案

C语言程序设计郑莉课后习题答案

C++语言程序设计(清华大学郑莉)课后习题答案第一章概述1-1 简述计算机程序设计语言的发展历程。

解:迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。

1-2 面向对象的编程语言有哪些特点解:面向对象的编程语言与以往各种编程语言有根本的不同,它设计的出发点就是为了能更直接的描述客观世界中存在的事物以及它们之间的关系。

面向对象的编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),形成类。

通过类的继承与多态可以很方便地实现代码重用,大大缩短了软件开发周期,并使得软件风格统一。

因此,面向对象的编程语言使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。

C++语言是目前应用最广的面向对象的编程语言。

1-3 什么是结构化程序设计方法这种方法有哪些优点和缺点解:结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。

结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。

虽然结构化程序设计方法具有很多的优点,但它仍是一种面向过程的程序设计方法,它把数据和处理数据的过程分离为相互独立的实体。

当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。

由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。

c面向对象程序设计课后习题答案

c面向对象程序设计课后习题答案

c面向对象程序设计课后习题答案C面向对象程序设计课后习题答案在学习C面向对象程序设计课程的过程中,课后习题是巩固知识、提升能力的重要途径。

通过认真完成习题,我们可以更好地理解课程内容,掌握编程技巧,提高解决问题的能力。

下面我们将针对一些常见的C面向对象程序设计课后习题进行答案解析。

1. 请编写一个C++程序,实现一个简单的学生信息管理系统,包括学生姓名、学号、成绩等信息的录入、查询和修改功能。

答案解析:首先,我们需要定义一个学生类,包括姓名、学号、成绩等属性,并实现相应的方法来实现信息的录入、查询和修改功能。

然后在主函数中创建学生对象,调用相应的方法即可实现学生信息管理系统。

2. 编写一个C++程序,实现一个简单的图书管理系统,包括图书名称、作者、出版社等信息的录入、查询和删除功能。

答案解析:同样地,我们需要定义一个图书类,包括图书名称、作者、出版社等属性,并实现相应的方法来实现信息的录入、查询和删除功能。

在主函数中创建图书对象,调用相应的方法即可实现图书管理系统。

3. 设计一个C++程序,模拟实现一个简单的银行账户管理系统,包括账户余额、存款、取款等功能。

答案解析:在这个问题中,我们需要定义一个银行账户类,包括账户余额、存款、取款等属性,并实现相应的方法来实现账户管理系统。

在主函数中创建账户对象,调用相应的方法即可实现银行账户管理系统。

通过以上习题的解答,我们可以看到C面向对象程序设计的重要性和实际应用。

通过不断地练习和实践,我们可以更好地掌握面向对象程序设计的知识和技能,提高编程能力,为今后的工作和学习打下坚实的基础。

希望同学们能够认真对待课后习题,不断提升自己的编程水平。

面向对象程序设计C课后题答案

面向对象程序设计C课后题答案

第一章:面向对象程序设计概述[1_1]什么是面向对象程序设计?面向对象程序设计是一种新型的程序设计范型。

这种范型的主要特征是:程序=对象+消息。

面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。

第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。

面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。

这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。

[1_2]什么是类?什么是对象?对象与类的关系是什么?在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。

对象可以认为是:数据+操作在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。

类和对象之间的关系是抽象和具体的关系。

类是多个对象进行综合抽象的结果,一个对象是类的一个实例。

在面向对象程序设计中,总是先声明类,再由类生成对象。

类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。

[1_3]现实世界中的对象有哪些特征?请举例说明。

对象是现实世界中的一个实体,其具有以下一些特征:(1)每一个对象必须有一个名字以区别于其他对象。

(2)需要用属性来描述它的某些特性。

(3)有一组操作,每一个操作决定了对象的一种行为。

(4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。

例如:雇员刘名是一个对象对象名:刘名对象的属性:年龄:36 生日:1966.10.1 工资:2000 部门:人事部对象的操作:吃饭开车[1_4]什么是消息?消息具有什么性质?在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。

C语言程序设计教程_李含光_郑关胜_清华大学出版社习题答案习题答案[完美打印版]

C语言程序设计教程_李含光_郑关胜_清华大学出版社习题答案习题答案[完美打印版]

第1章习题参考答案1.单项选择题(1)A (2)C (3)D (4)C (5)B 2.填空题(1)函数(2)主函数(main)(3)printf() , scanf()第2章习题参考答案1.单项选择题1-5 CBCCC 6-10 CDCDC 11-13 DBB2.填空题(10)11(11)((m/10)%10)*100+(m/100)*10+m%10(12)0(13)10 ,9 ,11(15)(x<0&&y<0)||(x<0&&z<0)||(y<0||z<0)(16)double (17)x==0(18)sqrt(fabs(a-b))/(3*(a+b))(19)sqrt((x*x+y*y)/(a+b))第3章习题参考答案1.单项选择题1-5 CCCDD 6-10 BCDBC 11-15 BCBBB 16 A 2.填空题(1)用;暗示停止(2){ }(3)y=x<0?1:x==0?0:-1(4)y%4==0&&y%100!=0||y%400==0(5)上面未配对(6)default标号(7)while , do while , for(8)do while(9)本次(10)本层3.浏览程序,指出成果(1)yes(2)*&(3)ABother(4)28 70(5)2,0(6)8(7)36(8)1(9)3,1,-1,3,1,-1(10)a=12 ,y=12(11)i=6,k=4(12)1,-24.程序填空(1)x:y, u:z(2)m=n , m!=0 ,m=m/10(3)t<eps , t*n/(2*n+1) , printf(“%lf\n”,2*s)(4)m%5==0 , printf(“%d\n”,k)(5)cx=getchar() , cx!=front , cx(6)double s=0 , 1.0/k , %lf(7)s>=0 , s<gmin ,5.编程题(1).#include <stdio.h>int main(){double x,y;scanf("%lf",&x);if(x<1)y=x;else if(x>=1.0&&x<10)y=2*x-11;elsey=3*x-11;printf("%lf\n",y);return 0;}(2).#include <stdio.h>int main(){double x,y,z,min;scanf("%lf%lf%lf",&x,&y,&z); if(x>y)min=y;elsemin=x;if(min>z)min=z;printf("min=%lf\n",min);return 0;} (3).#include <stdio.h>int main(){int y,m,d,flag,s=0,w,i;scanf("%d%d%d",&y,&m,&d);flag=(y%4==0&&y%100!=0||y%400 ==0);w=((y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400)%7;for(i=1;i<=m;i++){switch(i){case 1:s=d;break;case 2:s=31+d;break;case 3:s=59+d;break;case 4:s=90+d;break;case 5:s=120+d;break;case 6:s=151+d;break;case 7:s=181+d;break;case 8:s=212+d;break;case 9:s=243+d;break;case 10:s=273+d;break;case 11:s=304+d;break;case 12:s=334+d;break;}}if(flag==1&&m>2)s=s+1;s=(w+s)%7;if(s==0)printf("礼拜日\n");elseprintf("礼拜%d\n",s);return 0;}(4).#include <stdio.h>int main(){float p,r;scanf("%f",&p);if(p<=10)r=p*0.1;else if(p>10&&p<=20)r=10*0.1+(p-10)*0.075;else if(p>20&&p<=40)r=10*0.1+10*0.075+(p-20)*0.05; else if(p>40&&p<=60)r=10*0.1+10*0.075+20*0.05+(p-40)*0.03;else if(p>60&&p<=100)r=10*0.1+10*0.075+20*0.05+20*0. 03+(p-60)*0.015;else if(p>100)r=10*0.1+10*0.075+20*0.05+20*0. 03+40*0.015+(p-100)*0.01;printf("%f\n",r);return 0;}(5).#include <stdio.h>int main(){ char c;while((c=getchar())!='\n'){if(c>='a'&&c<='z')c=c-32;putchar(c);}return 0;}(6).#include<stdio.h>int main(){int m,k=2;printf("输入一个正整数:\n"); scanf("%d",&m);while(k<m)if(m%k==0){printf("%4d",k);m=m/k;}elsek++;printf("%4d\n",m);return 0;}(7).#include<stdio.h>int main(){int a,n,s=0,p=0,i;scanf("%d %d",&n,&a);for(i=1;i<=n;i++){p=p*10+a;s=s+p;}printf("%d\n",s);return 0;}(8).#include<stdio.h>int main(){int i,j,k;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++)printf("%5d",100*i+10*j+k); return 0;}(9).#include<stdio.h>#include<math.h>int main(){float a=-10,b=10,x,f1,f2,f; f1=(((2*a-4)*a+3)*a)-6;f2=(((2*b-4)*b+3)*b)-6;do{x=(a+b)/2;f=(((2*x-4)*x+3)*x)-6;if(f*f1<0){b=x;f2=f;}else{a=x;f1=f;}}while(fabs(f)>=1e-6);printf("%6.2f\n",x); return 0;}(10).#include<stdio.h>#include<math.h>int main(){int n=2;double eps,t,s=0,x;scanf("%lf %lf",&x,&eps); t=x;s=t;while(fabs(t)>=eps){t=-t*(2*n-3)*x*x/(2*n-2); s=s+t/(2*n);n++;}printf("%d,%lf\n",n,s);return 0;}(11).#include<stdio.h>int main(){unsigned long s,t=0,p=1; scanf("%u",&s);while(s!=0){if((s%10)%2!=0){t=t+(s%10)*p;p=p*10;}s=s/10;}printf("%u\n",t);return 0;}第4章习题参考答案1.单项选择题1-5 DDDBD 6-10 BADCD 11-14 BDAB2.填空题(1)2(2)嵌套 , 递归(3)全局变量 , 局部变量 , 静态变量 , 动态变量(4)auto , static , register , extern(5)外部变量(6)编译 ,运行3.浏览程序,指出成果(1)15(2)5(3)5,4,3(4)i=5i=2i=2i=4i=2(5)求水仙花数(6)-5*5*5(7)30(8)0 101 112 124.程序填空(1)float fun(float , float) , x+y,x-y , z+y,z-y(2)x , x*x+1(3)s=0 , a=a+b5.编程题(1).#include<stdio.h>unsigned int fun(unsigned int); int main(){unsigned int s;scanf("%u",&s);printf("%u\n",fun(s));return 0;}unsigned int fun(unsigned int s) { unsigned int p=0; while(s!=0){p=p+s%10;s=s/10;}return p;}(2).#include<stdio.h> #include<stdlib.h> #include<math.h>void f1(float,float,float,float);void f2(float,float,float,float);void f3(float,float,float,float);int main(){float a,b,c,d;scanf("%f %f %f",&a,&b,&c);if(a==0){printf("不是一元二次方程\n"); exit(0);}d=b*b-4*a*c;if(d>0)f1(a,b,c,d);else if(d==0)f2(a,b,c,d);elsef3(a,b,c,d);return 0;}void f1(float a,float b,float c,float d){float x1,x2;{x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf("%.2f ,%.2f\n",x1,x2);}}void f2(float a,float b,float c,float d){float x1,x2;{x1=-b/(2*a);x2=-b/(2*a);printf("%.2f ,%.2f\n",x1,x2);} }void f3(float a,float b,float c,float d){float x1,x2;{x1=-b/(2*a);x2=sqrt(-d)/(2*a);printf("%.2f+i*%.2f\n",x1,x2); printf("%.2f-i*%.2f\n",x1,x2);}}(3).#include<stdio.h>double p(int,double);int main(){int n;double x;do{scanf("%d",&n);}while(n<0);scanf("%lf",&x);printf("%lf\n",p(n,x));return 0;}double p(int n,double x){double pn;if(n==0)pn=1;else if(n==1)pn=x;elsepn=((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n;return pn;}(4).#include<stdio.h>double fun(float);void display(float,int);int main(){float dep;int season;scanf("%f %d",&dep,&season);display(dep,season);return 0;}double fun(float d){return d*RATE;}void display(float d,int s){int i;printf("季度利余额\n"); printf("-------------------------------\n");for(i=1;i<=s;i++){printf("%-4d %-.2f %-.2f\n",i,fun(d),fun(d)*i+d);printf("-------------------------------\n");}}(5).#include<stdio.h>double fun(void); int main(){printf("%lf\n",fun()); return 0;}double fun(void){double s=0;int n=1;while((double)(2*n-1)/((2*n)*(2*n))>1e-4) {s=s+(double)(2*n-1)/((2*n)*(2*n));n++;}return s;}(6).#include<stdio.h>int fun(int);int main(){int w;scanf("%d",&w);printf("%d\n",fun(w)); return 0;}int fun(int w){int n=1,p=1,m;m=w;while(m>10){m=m/10; p=p*10; n++;}return w%p; }第5章习题参考答案1.选择题:1-5 C (B C) BBA 6-8 DDB2.填空题(1) 0,9(2) float realArray[100],char strArray[16],int intArray[1000] (3)运算符 sizeof(4) 6字节3.浏览程序,写出下面程序的运行成果(1) aabbcc dd(2) abcd(3)ahAMa(4)0010(5) 1 3 4 5(6)This is the title.Name 1 is RosalindaName 2 is ZekeThe biggest name alpabetically is ZekeBoth names are Rosalinda Zeke(7)0 0 0 0 0 0 0 00 1 2 3 4 5 6 70 2 5 6 8 10 748 140 3 6 9 12 15 18 210 4 8 12 16 20 24 280 5 10 15 20 177 30 350 6 12 18 24 30 36 420 7 14 21 28 35 42 494.程序填空(1) a[i][j] != a[j][i] , 1(2) 0, a[i] < a[mini] , maxi = i , a[maxi] = a[mini](3) int a[], int b[], b[i] = a[i], -999, arraycopy(a,b), b[i++](4) a<sizeof(ch), if5.编程题(1)#include<stdio.h>int main ( ){1 int a[3][4] = {0, 2,9,7,5,13,6,8,27,11,1,3};int i,j,temp;for(i=0,j=0;j<4;j++){temp = a[2-i][j];a[2-i][j] = a[i][j];a[i][j] = temp;}for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%3d",a[i][j]);printf("\n");}return 0;}(2)#include<stdio.h>int main ( ){static int a[6][6];int i,j,t=1;for(i=0;i<6;i++){t = i+1;for(j=0;j<i+1;j++)a[i][j] = t--;}for(i=0;i<6;i++){for(j=0;j<6;j++)printf("%3d",a[i][j]);printf("\n");}return 0;}(3)#include <stdio.h>#define M 3#define N 4#define R 5int main( ){static int a[M][N],b[N][R],c[M][R]; int i,j,k;2 printf("Matrix a:\n");for( i = 0; i < M; i++ )for( j = 0; j < N; j++ )scanf( "%d",&a[i][j] );printf("Matrix b:\n");for( i = 0; i < N; i++ )for( j = 0; j < R; j++ )scanf( "%d",&b[i][j] );for( i = 0; i < M; i ++ )for( j = 0; j < N; j++ )for( k = 0; k < R; k++)c[i][k] += a[i][j]*b[j][k];for( i = 0; i < M; i++ ){for( j = 0; j < R; j++ )printf( "%3d",c[i][j] );printf("\n");}return 0;}(4)#include <stdio.h>#define M 5int main( ){static int a[M];int i,max = -1,min = 100,maxi,mini,temp;for( i = 0; i < M; i++ )scanf( "%d",&a[i] ); //0~99间的值for( i = 0; i < M; i++ ){if( max < a[i] ){max = a[i];maxi = i;}if( min > a[i] ){min = a[i];mini = i;}}temp = a[maxi];a[maxi] = a[mini];a[mini] = temp;for( i = 0; i < M; i++ )printf( "%3d",a[i] );return 0;}3(5)#include <stdio.h>#define M 3#define N 4int main( ){static int a[M][N];int max = -1,sumcol=0,sumrow=0;int i,j,maxi,col;for( i = 0; i < M; i++ ){sumrow = 0;for( j = 0; j < N; j++ ){scanf( "%d",&a[i][j] );sumrow += a[i][j];}if ( max < sumrow ){max = sumrow;maxi = i;}}printf("which col sum will be caculated?(>0)");scanf("%d",&col);for( i = 0; i < M; i ++ )sumcol += a[i][col-1];printf("The %dth row's sum is max, max=%d\n",maxi+1,max);printf("The %dth column's sum=%d\n",col,sumcol);return 0;}(6)#include <stdio.h>#define M 81int main( ){static char str[M];int i,count = 0;char ch;gets(str);fflush(stdin); //清空输入缓冲区,以便读入字符数据printf("Which character will be found?");ch = getchar();for( i = 0; i < strlen(str); i++ )if( ch == str[i] )count++;printf( "The number of character '%c' is %d\n",ch,count );4 return 0;}(7)#include <stdio.h>#include <stdlib.h>#define N 10 //同窗人数#define M 5 //课程数void enter_scores(void);void sort_scores(int score[][M], int average[N][3]);void disp_scores(int score[][M]);void histogram(int n, int score[][M]);void printchar(int n);static int score[N][M];static int aver[N][3]; //第1列为均值,第2列原始次序,第3列为均值逆序int main(){int course;enter_scores();printf("\n===========Oringenal Score Start=========\n");disp_scores(score);printf("\n===========Oringenal Score End===========\n");printf("\n===========Sorted Score Start============\n");sort_scores(score,aver);printf("\n===========Sorted Score End==============\n");printf("\nWhich class will be statisticed?\n");scanf("%d",&course);histogram(course, score);system("Pause");return 0;}/* 输入成绩 */void enter_scores(){int i, j;for(i=0; i<N; i++) {for(j=0; j<M; j++){scanf("%d",&score[i][j]);aver[i][0] += score[i][j];}}for( i = 0; i < N; i++ )for ( j = 1; j < 3; j++ )5 aver[i][j] = i;}/* 成绩排序. */void sort_scores(int score[][M], int average[N][3]){int i,j,t;int temp,tempindex;for( i = 0; i < N - 1; i++ )for( j = 0; j < N - 1 - i; j++ )if ( average[j][0] < average[j+1][0] ){temp = average[j][0];average[j][0] = average[j+1][0];average[j+1][0] = temp;tempindex = average[j][2];average[j][2] = average[j+1][2];average[j+1][2] = tempindex;}printf("\n Score1 Score2 Score3 Score4 Score5\n"); for( i = 0; i < N; i++ ){t = average[i][2];for( j = 0;j < M; j++ ){printf("%8d", score[t][j]);}printf("\n");}}/* 输出成绩 */void disp_scores(int score[][M]){int i, j;printf("\n Score1 Score2 Score3 Score4 Score5\n"); for( i = 0; i < N; i++ ){for( j = 0;j < M; j++ )printf("%8d", score[i][j]);printf("\n");}}void printchar(int n){6 int i;for (i = 0; i < n; ++i) putchar('*');}void histogram(int course, int score[][M]){int i,temp;int segs[5] = {0};int sc[N];for( i = 0; i < N; i++ )sc[i] = score[i][course];for (i = 0; i < N; i++)/* 统计各分段人数 */{temp = (int)sc[i]/10;segs[ temp<6?0:temp-5]++; /* 成绩/10,将成绩分段 */ }printf("\nSegment Number\n");for (i = 0; i < 5; i++) /* 输出直方图,每段的人数 */{printf("<%3d: %5d| ", (i+1)*10+50, segs[i]);printchar(segs[i]);putchar('\n');}putchar('\n');}(8)#include <stdio.h>#define M 81int main( ){static char str[M];int i,count = 0;char ch = 0;gets(str);for( i = 0; i < strlen(str); i++ )if( ch < str[i] )ch = str[i];for( i = 0; i < strlen(str); i++ )if( ch == str[i] )count++;printf( " max = '%c' ,count = %d\n",ch,count );return 0;}7第6章习题参考答案1.选择题:1-5 BBDDA 6-10 CCABD 11-15 CBCDA 16A2.填空题(1)常量,变量(2)指针(3)2(4)12,12(5) a[0],a[3] 3.浏览程序,写出下面程序的运行成果(1)5(2)6(3) abcdefglkjih(4) 976531(5)5,9(6)2,4,5,7,6,0,11,9,7,3,(7)string_a=I am a teacher.string_b=You are a student.string_a=I am a teacher.string_b=I am a teacher.4.程序填空(1) *p != '\0', *p-'0', j—(2) i <strlen(str), j=i, k+1(3)a+i, (char)(n%10) + '0'(4)*pk = i, a,n,i+1,pk(5) s1++, *s2, s1=p5.编程题(1)#include <stdio.h>int main(){int a=3,b=7,c=2;int *ptra = &a,*ptrb = &b,*ptrc = &c;int temp;printf("a=%d,b=%d,c=%d\n",a,b,c);printf("*ptra=%d,*ptrb=%d,*ptrc=%d\n",*ptra,*ptrb,*ptrc); if ( *ptra > *ptrb ){temp = *ptra;*ptra = *ptrb;1 *ptrb = temp;}if ( *ptra > *ptrc ){temp = *ptra;*ptra = *ptrc;*ptrc = temp;}if ( *ptrb > *ptrc ){temp = *ptrb;*ptrb = *ptrc;*ptrc = temp;}printf("a=%d,b=%d,c=%d\n",a,b,c);printf("*ptra=%d,*ptrb=%d,*ptrc=%d\n",*ptra,*ptrb,*ptrc);return 0;}(2)#include <stdio.h>#include <stdlib.h>void inputdata(int a[],int n);void process(int a[],int n);void outputdata(int a[],int n);int main(){int a[10],n=10;inputdata(a,n);outputdata(a,n);process(a,n);outputdata(a,n);system("Pause");return 0;}void inputdata(int a[],int n) //0~99之间的数{int i;for( i = 0; i < n; i++ )scanf("%d",a+i);}void outputdata(int *ptr,int n){int i;2 printf("\n==========OutPut Data Start=============\n"); for( i = 0; i < n; i++ )printf("%4d",*ptr++);printf("\n==========OutPut Data End================\n");} void process(int *ptr,int n){int i,maxi,mini;int max=-1,min=101;for( i = 0; i < n; i++ ){if ( max < *(ptr+i) ){max = *(ptr+i);maxi= i;}if ( min > *(ptr+i) ){min = ptr[i];mini= i;}}if ( mini != 0){i = ptr[0];ptr[0] = ptr[mini];ptr[mini] = i;}if (maxi != n-1){i = ptr[n-1];ptr[n-1] = ptr[maxi];ptr[maxi] = i;}if (maxi == 0 && mini == n-1){i = ptr[maxi];ptr[maxi] = ptr[mini];ptr[mini] = i;}}(3)#include<stdio.h>3int strLength (char *);int main(){static char str[81];gets(str);printf("string "%s" length:%3d\n",str,strLength(str)) ; system("Pause");return 0;}int strLength (char *s){char *p=s;while (*p) p++ ;return (p-s) ;}(4)#include <stdio.h>#define M 3#define N 4void Transpose (int (*a)[N],int (*T)[M]);int main( ){static int a[M][N],T[N][M];int i,j;for( i = 0; i < M; i++ )for( j = 0; j < N; j++ )scanf( "%d",&a[i][j] );printf("\n======Oringinal Matrix Start=========\n");for( i = 0; i < M; i ++ ){for( j = 0; j < N; j++ )printf( "%4d",a[i][j] );printf("\n");}printf("\n======Oringinal Matrix End===========\n");Transpose(a, T);printf("\n======Transpose Matrix Start=========\n");for( i = 0; i < N; i ++ ){for( j = 0; j < M; j++ )printf( "%4d",T[i][j] );printf("\n");}4 printf("\n======Transpose Matrix End===========\n"); return 0;}void Transpose (int (*a)[N],int (*T)[M]){int i,j;for( i = 0; i < N; i++ )for( j =0; j < M; j++ )T[i][j] = a[j][i];}(5)#include <stdio.h>int main(){static char source[81],target[81];int result;gets(source);gets(target);result = Strcmp(source,target);if (result){if( result < 0 )printf("%s < %s\n",source,target); elseprintf("%s > %s\n",source,target); }elseprintf("%s = %s\n",source,target); return 0;}int Strcmp(char *s,char *t){while (*s && *t && (*s == *t)) {s++;t++;}return *s - *t;}(6)#include <stdio.h>5#define M 5#define N 3int sum (int *a)int main()。

面向对象程序设计教程-答案

面向对象程序设计教程-答案

面向对象程序设计教程-答案(共19页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--面向对象程序设计教程(C++语言描述)题解与课程设计指导第1章面向对象程序设计概论一、名词解释抽象封装消息【问题解答】面向对象方法中的抽象是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。

面向对象方法中的封装就是把抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。

消息是面向对象程序设计用来描述对象之间通信的机制。

一个消息就是一个对象要求另一个对象实施某种操作的一个请求。

二、填空题(1)目前有面向过程的结构化程序设计方法和面向对象的程序设计方法两种重要的程序设计方法。

(2)结构化程序设计方法中的模块由顺序、选择和循环3种基本结构组成。

(3)在结构化程序设计方法中,程序可表示为程序=数据结构+算法;而面向对象的程序设计方法,程序可表示为程序=对象+消息。

(4)结构化程序设计方法中的基本模块是过程;而面向对象程序设计方法中的基本模块是类。

(5)面向对象程序设计方法具有抽象性、封装性、继承性和多态性等特点。

三、选择题(至少选一个,可以多选)(1)面向对象程序设计着重于( B )的设计。

A. 对象B. 类C. 算法D. 数据(2)面向对象程序设计中,把对象的属性和行为组织在同一个模块内的机制叫做( C )。

A. 抽象B. 继承C. 封装D. 多态(3)在面向对象程序设计中,类通过( D )与外界发生关系。

A. 对象B. 类C. 消息D. 接口(4)面向对象程序设计中,对象与对象之间的通信机制是( C )。

A. 对象B. 类C. 消息D. 接口(5)关于C++与C语言的关系的描述中,( D )是错误的。

A. C语言是C++的一个子集B. C语言与C++是兼容的C. C++对C语言进行了一些改进D. C++和C语言都是面向对象的【结果分析】C语言是面向过程的。

c 面向对象程序设计教程习题答案

c 面向对象程序设计教程习题答案

c 面向对象程序设计教程习题答案C面向对象程序设计教程习题答案在学习C面向对象程序设计的过程中,习题答案是非常重要的一部分。

通过练习习题,可以加深对知识点的理解,提高编程能力。

下面我们就来看一些常见的C面向对象程序设计习题及其答案。

1. 什么是面向对象程序设计?面向对象程序设计是一种程序设计范式,它以对象为中心,通过封装、继承和多态等特性来组织和管理代码。

面向对象程序设计可以提高代码的可维护性和可重用性,是现代软件开发中非常重要的一部分。

2. 什么是类和对象?类是一种抽象的数据类型,它描述了一类对象的共同特征和行为。

对象是类的实例,它具体描述了一个具体的实体。

在C面向对象程序设计中,类和对象是非常重要的概念。

3. 请编写一个简单的类和对象的例子。

```c#include <stdio.h>// 定义一个简单的类class Person {public:int age;char name[20];void display() {printf("Name: %s, Age: %d\n", name, age);}};int main() {// 创建一个对象Person p;p.age = 25;strcpy(, "Alice");p.display();return 0;}```4. 什么是封装?封装是面向对象程序设计中的一种重要特性,它将数据和行为封装在一个类中,对外部隐藏了内部的实现细节。

封装可以保护数据的安全性,同时提供了简单的接口供外部访问。

5. 请编写一个简单的封装例子。

```c#include <stdio.h>// 定义一个简单的类class Circle {private:double radius;public:void setRadius(double r) {radius = r;}double getArea() {return 3.14 * radius * radius;}};int main() {// 创建一个对象Circle c;c.setRadius(5.0);printf("Area: %f\n", c.getArea());return 0;}```以上就是一些常见的C面向对象程序设计习题及其答案。

程序设计基础教程(c语言版)课后答案

程序设计基础教程(c语言版)课后答案

z习题解答目录1.2 习题解答 (3)1.2.1 选择题 (3)1.2.2 填空题 (3)1.2.3 编程题 (4)2.2 习题解答 (5)2.2.1 选择题 (5)2.2.2 填空题 (7)2.2.3 编程题 (8)3.2 习题解答 (11)3.2.1 选择题 (11)3.2.2 填空题 (12)3.2.3 编程题 (12)4.2 习题解答 (15)4.2.1 选择题 (15)4.2.2 填空题 (17)4.2.3 编程题 (18)5.2 习题解答 (29)5.2.1 选择题 (29)5.2.2 填空题 (31)5.2.3 编程题 (33)6.2 习题解答 (37)6.2.1 选择题 (37)6.2.2 填空题 (41)6.2.3 编程题 (43)7.2 习题解答 (67)7.2.1 选择题 (67)7.2.2 填空题 (68)7.2.3 编程题 (68)21.2 习题解答1.2.1 选择题1、B【分析】在一个C程序中必须有且只能有一个main函数,而且main函数可以在任何地方出现.2、C【分析】C 语言中合法以的标识符组成为:字母,数字,下划线,且数字不能打头,亦不能为关键字。

A中,-sub 不合法。

B 中4d不合法。

D 中void 为关键字。

3、【分析】4、C【分析】转义字符中,第一个\”输出“,第二\\输出\,第三个\b退格,把前一个\去掉了,第四个\’输出’,第五个\t跳格,第六个\”输出”,第七个\n输出换行。

5、C【分析】本题将10进制17,分别按8、16进制输出。

8的进制21=2*8+1*1=17(10, 16制11=1*16+1*1=17(10)1.2.2 填空题1、主【分析】一个C源程序中至少包括一个主函数,其他函数没有限制。

2、双引号。

【分析】两种写法都是允许的,使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找.使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。

C++程序设计教程面向对象分册(郑秋生主编) 第一章 答案

C++程序设计教程面向对象分册(郑秋生主编)  第一章 答案

第1章参考答案一、选择题1.C2.B3.C4.A5.C6.A7.C 8 C 9A 10 C二、阅读题1.x=2,y=32.x=2,y=3x!=y3.Cstatic::va1=0cs1.vaI=1cs2.val=2cs1.val=4cs2.vaI=4四、改错题#include <string.h>#include <iostream.h>class person{public:person(int n,char* nam,char s){num=n;strcpy(name,nam);sex=s;cout<<"Constructor called."<<endl;}~person( ){cout<<"Destructor called."<<endl;}void display( ){cout<<"num: "<<num<<endl;cout<<"name: "<<name<<endl;cout<<"sex: "<<sex<<endl<<endl;}private:int num;char name[10];char sex;};int main( ){person s1(10010,"'Wang_li",'f');s1.display( );person s2(10011,"Zhang_fun",'m');s2.display( );return 0;}五、编程题5.1#include <iostream>using namespace std;class CBox{public :CBox(double l=0,double w=0,double h=0);double area();double volume ();private :double lengh;double width;double high;};CBox::CBox(double l,double w,double h){lengh=l;width=w;high=h;}double CBox::area(){return 2*(lengh*width+lengh*high+width*high); }double CBox::volume (){return lengh*width*high;}void main(){CBox box1(4,5,6);cout<<box1.area()<<endl;cout<<box1.volume()<<endl;}5.2#include <iostream>using namespace std;class CPoint{public :CPoint(double a=0,double b=0){x=a;y=b;}CPoint(CPoint & p){x=p.x;y=p.y;}void print(){cout<<"("<<x<<","<<y<<")";}private :double x,y;};class CLine{public:CLine(double x1=0,double y1=0,double x2=0,double y2=0):p1(x1,y1),p2(x2,y2) {}CLine(CPoint x,CPoint y):p1(x),p2(y){}CLine(CLine &lin){p1=lin.p1;p2=lin.p2;}void DrawLine(){cout<<"Line form";p1.print();cout<<"to";p2.print();cout<<endl;}void Linedel(){cout<<"delete line"<<endl;}void move(CPoint &x,CPoint &y){cout<<"move line"<<endl;p1=x;p2=y;}private :CPoint p1,p2;};void main(){CPoint point1(1,5),point2(5,8),point3(20,30),point4(40,50);CLine line1(point1,point2);CLine line2(2,3,8,12);line1.DrawLine ();line2.DrawLine ();line2.move(point3,point4);line2.DrawLine ();line2=line1;line2.DrawLine ();line1.Linedel ();}5.3#include <iostream>using namespace std;class CComplex{public:CComplex(double, double);CComplex(CComplex &c); //复数类的拷贝构造函数声明double GetReal();double GetImag();void Print();private:double real;double imag;};CComplex::CComplex (double r=0.0, double i=0.0){real = r;imag = i;cout<<"调用两个参数的构造函数"<<endl;}CComplex::CComplex (CComplex &c) //复数类的拷贝构造函数定义{real = c.real;imag = c.imag;cout<<"调用拷贝构造函数"<<endl;}double CComplex::GetReal(){return real;}double CComplex::GetImag(){return imag;}void CComplex::Print() // 显示复数值{cout << "(" << real << "," << imag << ")" << endl;}CComplex add(CComplex &x,CComplex &y) //普通函数完成两个数的加法,对象作为函数参数,{return CComplex(x.GetReal() +y.GetReal() ,x.GetImag ()+y.GetImag ());}void main(void){CComplex a(3.0,4.0), b(5.6,7.9);CComplex c(a); //调用复数类的拷贝构造函数cout << "a = ";a.Print();cout << "b = ";b.Print();cout << "c = ";c.Print();cout<<"c=a+b"<<endl;c=add(a,b);cout << "c = ";c.Print ();}5.4#include <iostream>#include <string>using namespace std;class CStudent //类声明{public:CStudent(char *,float,float,float);CStudent(CStudent &s);~CStudent();void display();friend float avg(CStudent &s);private:char *name;float grad[3];};CStudent::CStudent(char *na,float a,float b,float c) {name=new char[strlen(na)+1];strcpy(name,na);grad[0]=a;grad[1]=b;grad[2]=c;}CStudent::CStudent(CStudent &s){name=new char[strlen()+1];strcpy(name,);grad[0]=s.grad[0];grad[1]=s.grad [1];grad[2]=s.grad [2];}CStudent::~CStudent(){delete []name;}void CStudent::display( ){int i;cout<<"name:"<<name<<endl;for(i=0;i<3;i++)cout<<"grad["<<i<<"]:"<<grad[i]<<endl;}float avg(CStudent &s) //普通函数,需要引用私有成员,声明为学生类的友元函数{return (s.grad[0]+s.grad[1] +s.grad[2])/3;}int main( ){CStudent stud1("张三",79,98,82); //定义对象stud1.display();cout <<"平均成绩:"<<avg(stud1)<<endl;return 0;}5.5#include <iostream>using namespace std;class CString{public :CString(); //缺省构造函数,初始化为空串CString(char ch,int nRepeat);//用一个字符重复n次,初始化字符串CString(const char*psz); //用一个字符串初始化CString(CString &stringser); //拷贝构造函数~CString();int GetLength() const;bool IsEmpty() const;char GetAt(int nindex) const;void Setat(int nindex,char ch);void Print();int compare(CString& string);int compare(const char* psz)const;void Vacate();private :char *s;};CString::CString(){s=NULL;}CString::CString(CString& stringser) {s=new char[strlen(stringser.s)+1];if(s!=0)strcpy(s,stringser.s);}CString::CString(char ch,int nRepeat) {s=new char[nRepeat+1];for(int i=0;i<nRepeat;i++)s[i]=ch;s[nRepeat]='\0';}CString::CString(const char*psz) {s=new char[strlen(psz)+1];if(s!=0)strcpy(s,psz);}int CString::GetLength() const{ int i=0;while (s[i]!='\0')i++;return i;}bool CString::IsEmpty() const{if(s==NULL)return 1;elsereturn 0;}void CString::Vacate(){s[0]='\0';cout<<"Now have vacated string."<<endl; }char CString::GetAt(int nindex) const{if(nindex>1&&nindex<=GetLength()+1) return s[ nindex-1];elsereturn '0';}void CString::Setat(int nindex,char ch){if(nindex>1&&nindex<=GetLength()+1)s[ nindex-1]=ch;}void CString::Print(){cout<<s<<endl;}int CString::compare(CString& string){if(strcmp(s,string.s)>0)return 1;else if(strcmp(s,string.s)<0)return -1;elsereturn 0;}int CString::compare(const char* psz)const {if(strcmp(s,psz)>0)return 1;else if(strcmp(s,psz)<0)return -1;else return 0;}CString::~CString(){//cout<<endl<<"析构:"<<s<<endl;if(s!=NULL)delete[]s;}void main(){char a[4]="y";char b[4];CString c1("Hellow"),c2(c1);cout<<"Stringc1 is:"<<" "; c1.Print();cout<<endl;cout<<"Stringc2 is:"<<" "; c2.Print();cout<<endl;CString c3('b',3);cout<<"Stringc3 is:"<<" "; c3.Print();cout<<endl;cout<<"*******************以下是对串的基本操作****************"<<endl;int num=c1.GetLength();char ch;cout<<"c1的长度是:"<<" "<<num<<endl;ch=c1.GetAt(5);cout<<"获得字符串c1中第"<<5<<"个字符是:"<<ch<<endl;cout<<"下面是插入字符串c1中一个特殊字符'd'"<<endl;c1.Setat(5,'d');cout<<"插入后字符串c1变为:"<<" ";c1.Print();//////////////////////cout<<endl;if(c1.IsEmpty()==1)cout<<"String is empty."<<endl;elsecout<<"String isn't empty."<<endl;cout<<"下面是判断字符串c1清空"<<endl;c1.Vacate();cout<<"清空后输出字符串c1:"<<" \n";c1.Print();cout<<"字符串已被清空"<<endl;cout<<"请按任意键继续"<<endl;cin>>b;///////////////////////////cout<<"****************以下是对串的赋值******************"<<endl;CString c5=c2;cout<<"String c5=c2 is:"<<" ";c5.Print();cout<<endl;cout<<"****************以下是对串的比较******************"<<endl;int temp=pare(c3);cout<<"以下比较c2与c3"<<endl;if(temp>0)cout<<"Stringc2>Stringc3"<<endl;else if(temp<0)cout<<"Stringc2<Stringc3"<<endl;elsecout<<"Stringc9==Stringc4"<<endl;cout<<endl;cout<<"以下比较c2与任意字符串Goodboy!"<<endl;if(pare("Goodboy!")>0)cout<<"Stringc2>'Goodboy!'"<<endl;else if(pare("Goodboy!")<0)cout<<"Stringc2<'Goodboy!"<<endl;elsecout<<"Stringc2 =='Goodboy!'"<<endl;}。

C--程序设计教程--面向对象分册(郑秋生)完整答案

C--程序设计教程--面向对象分册(郑秋生)完整答案

第1章类和对象一、选择题1.C2.B3.C4.A5.C6.A7.C 8 C 9A 10 C二、阅读题1.x=2,y=32.x=2,y=3x!=y3.Cstatic::va1=0cs1.vaI=1cs2.val=2cs1.val=4cs2.vaI=4四、改错题#include <string.h>#include <iostream.h>class person{public:person(int n,char* nam,char s{num=n;strcpy(name,nam;sex=s;cout<<"Constructor called."<<endl; }~person({cout<<"Destructor called."<<endl; }void display({cout<<"num: "< endl ;cout<<"name: "< endl ;cout<<"sex: "< endl << endl ;}private:int num;char name[10];char sex;};int main({person s1(10010,"'Wang_li",'f';s1.display( ;person s2(10011,"Zhang_fun",'m'; s2.display( ;return 0;}五、编程题5.1#include <iostream>using namespace std;class CBox{public :CBox(double l=0,double w=0,double h=0; double area(;double volume (;private :double lengh;double width;double high;};CBox::CBox(double l,double w,double h{lengh=l;width=w;high=h;}double CBox::area({return 2*(lengh*width+lengh*high+width*high; }double CBox::volume ({return lengh*width*high;}void main({CBox box1(4,5,6;cout< endl ;cout< endl ;}5.2#include <iostream>using namespace std;class CPoint{public :CPoint(double a=0,double b=0 {x=a;y=b;}CPoint(CPoint & p{x=p.x;y=p.y;}void print({cout<<"("<}private :double x,y;};class CLine{public:CLine(double x1=0,double y1=0,double x2=0,double y2=0:p1(x1,y1,p2(x2,y2 {}CLine(CPoint x,CPoint y:p1(x,p2(y{}CLine(CLine &lin{p1=lin.p1;p2=lin.p2;}void DrawLine({cout<<"Line form";p1.print(;cout<<"to";p2.print(;cout<<endl;}void Linedel({cout<<"delete line"<<endl;}void move(CPoint &x,CPoint &y{cout<<"move line"<<endl;p1=x;p2=y;}private :CPoint p1,p2;};void main({CPoint point1(1,5,point2(5,8,point3(20,30,point4(40,50; CLine line1(point1,point2;CLine line2(2,3,8,12;line1.DrawLine (;line2.DrawLine (;line2.move(point3,point4;line2.DrawLine (;line2=line1;line2.DrawLine (;line1.Linedel (;}5.3#include <iostream>using namespace std;class CComplex{public:CComplex(double, double;CComplex(CComplex &c; //复数类的拷贝构造函数声明double GetReal(;double GetImag(;void Print(;private:double real;double imag;};CComplex::CComplex (double r=0.0, double i=0.0{real = r;imag = i;cout<<"调用两个参数的构造函数"<<endl;}CComplex::CComplex (CComplex &c //复数类的拷贝构造函数定义{real = c.real;imag = c.imag;cout<<"调用拷贝构造函数"<<endl;}double CComplex::GetReal({return real;}double CComplex::GetImag({return imag;}void CComplex::Print( // 显示复数值{cout << "(" << real << "," << imag << "" << endl;}CComplex add(CComplex &x,CComplex &y //普通函数完成两个数的加法,对象作为函数参数,{return CComplex(x.GetReal( +y.GetReal( ,x.GetImag (+y.GetImag (;}void main(void{CComplex a(3.0,4.0, b(5.6,7.9;CComplex c(a; //调用复数类的拷贝构造函数cout << "a = ";a.Print(;cout << "b = ";b.Print(;cout << "c = ";c.Print(;cout<<"c=a+b"<<endl;c=add(a,b;cout << "c = ";c.Print (;}5.4#include <iostream>#includeusing namespace std;class CStudent //类声明{public:CStudent(char *,float,float,float;CStudent(CStudent &s;~CStudent(;void display(;friend float avg(CStudent &s;private:char *name;float grad[3];};CStudent::CStudent(char *na,float a,float b,float c {name=new char[strlen(na+1];strcpy(name,na;grad[0]=a;grad[1]=b;grad[2]=c;CStudent::CStudent(CStudent &s{name=new char[strlen(+1];strcpy(name,;grad[0]=s.grad[0];grad[1]=s.grad [1];grad[2]=s.grad [2];}CStudent::~CStudent({delete []name;}void CStudent::display({int i;cout<<"name:"< endl ;for(i=0;i<3;i++cout<<"grad["<<i<<"]:"< i ]<< endl ;}float avg(CStudent &s //普通函数,需要引用私有成员,声明为学生类的友元函数{return (s.grad[0]+s.grad[1] +s.grad[2]/3;}int main(CStudent stud1("张三",79,98,82; //定义对象stud1.display(;cout <<"平均成绩:"<<avg(stud1<<endl;return 0;}5.5#include <iostream>using namespace std;class CString{public :CString(; //缺省构造函数,初始化为空串CString(char ch,int nRepeat;//用一个字符重复n次,初始化字符串CString(const char*psz; //用一个字符串初始化CString(CString &stringser; //拷贝构造函数~CString(;int GetLength( const;bool IsEmpty( const;char GetAt(int nindex const;void Setat(int nindex,char ch;void Print(;int compare(CString& string;int compare(const char* pszconst;void Vacate(;private :char *s;};CString::CString({s=NULL;}CString::CString(CString& stringser {s=new char[strlen(stringser.s+1];if(s!=0strcpy(s,stringser.s;}CString::CString(char ch,int nRepeat {s=new char[nRepeat+1];for(int i=0;i<nRepeat;i++s[i]=ch;s[nRepeat]='\0';}CString::CString(const char*psz {s=new char[strlen(psz+1];if(s!=0strcpy(s,psz;int CString::GetLength( const{ int i=0;while (s[i]!='\0'i++;return i;}bool CString::IsEmpty( const{if(s==NULLreturn 1;elsereturn 0;}void CString::Vacate({s[0]='\0';cout<<"Now have vacated string."<<endl; }char CString::GetAt(int nindex const {if(nindex>1&&nindex<=GetLength(+1 return s[ nindex-1];elsereturn '0';void CString::Setat(int nindex,char ch {if(nindex>1&&nindex<=GetLength(+1s[ nindex-1]=ch;}void CString::Print({cout< endl ;}int CString::compare(CString& string {if(strcmp(s,string.s>0return 1;else if(strcmp(s,string.s<0return -1;elsereturn 0;}int CString::compare(const char* pszconst {if(strcmp(s,psz>0return 1;else if(strcmp(s,psz<0return -1;else return 0;}CString::~CString({//cout<<endl<<"析构:"< endl ;if(s!=NULLdelete[]s;}void main({char a[4]="y";char b[4];CString c1("Hellow",c2(c1;cout<<"Stringc1 is:"<<" "; c1.Print(;cout<<endl;cout<<"Stringc2 is:"<<" "; c2.Print(;cout<<endl;CString c3('b',3;cout<<"Stringc3 is:"<<" "; c3.Print(;cout<<endl;cout<<"*******************以下是对串的基本操作****************"<<endl; int num=c1.GetLength(;char ch;cout<<"c1的长度是:"<<" "< endl ;ch=c1.GetAt(5;cout<<"获得字符串c1中第"<<5<<"个字符是:"<<ch<<endl;cout<<"下面是插入字符串c1中一个特殊字符'd'"<<endl;c1.Setat(5,'d';cout<<"插入后字符串c1变为:"<<" ";c1.Print(;//////////////////////cout<<endl;if(c1.IsEmpty(==1cout<<"String is empty."<<endl;elsecout<<"String isn't empty."<<endl;cout<<"下面是判断字符串c1清空"<<endl;c1.Vacate(;cout<<"清空后输出字符串c1:"<<" \n";c1.Print(;cout<<"字符串已被清空"<<endl;cout<<"请按任意键继续"<<endl;cin>>b;///////////////////////////cout<<"****************以下是对串的赋值******************"<<endl; CString c5=c2;cout<<"String c5=c2 is:"<<" ";c5.Print(;cout<<endl;cout<<"****************以下是对串的比较******************"<<endl; int temp=pare(c3;cout<<"以下比较c2与c3"<<endl;if(temp>0cout<<"Stringc2>Stringc3"<<endl;else if(temp<0cout<<"Stringc2 endl ;elsecout<<"Stringc9==Stringc4"<<endl;cout<<endl;cout<<"以下比较c2与任意字符串Goodboy!"<<endl; if(pare("Goodboy!">0cout<<"Stringc2>'Goodboy!'"<<endl;else if(pare("Goodboy!"<0cout<<"Stringc2<'Goodboy!"<<endl;elsecout<<"Stringc2 =='Goodboy!'"<<endl;}第二章继承和派生一、选择题1.D 2.B 3. D一、阅读程序题四、编程题4.1#include <iostream.h>#include<string.h>#define PAI 3.14class Circle{public:Circle({r=0;}Circle (double d{r=d;}double area({return(PAI*r*r;}void display1({cout<<"桌子的面积:"< endl ;} private:double r;};class Table{public:Table({heig=0;}Table (double h {heig=h;}void display2({cout<<"桌子的高度:"<<heig<<endl;} private:double heig;};class Roundtable : public Circle,public Table{public:Roundtable({strcpy(color,"白色";}Roundtable(double a,double b,char* c:Circle(a,Table(b{strcpy(color,c;}void display ({ display1(;display2(;cout<<"桌子的颜色:"< endl ; }private:char color[20];};void main({Roundtable s(2.0,3.0,"黑色";s.display(;}4.2如果Age在基类中被定义为私有的,SetAge(int n不能直接给Age赋值,如果Age 是基类的公有成员变量,则可以直接赋值。

c语言,面向过程,课后答案,郑秋生

c语言,面向过程,课后答案,郑秋生

《C/C++程序设计教程——面向过程分册》郑秋生课后答案第一章C++概述习题答案//P13一、选择题答案:1 A 2 A 3 B 4B二、简答题1、C与C++语言的关系是什么?答案:C++包含了整个C,C是建立C++的基础。

C++包括C的全部特征、属性和优点,同时添加了对面向对象编程(OOP)的完全支持。

2、结构化程序设计与面向对象程序设计有什么异同点?答案:结构化的程序设计的主要思想是功能分解并逐步求精。

面向对象程序设计的本质是把数据和处理数据的过程当成一个整体——对象。

3、+C++程序开发步骤:答案:建立一个工程;编辑或者导入源文件;编译源文件,产生目标代码;目标代码和其他库文件连接为可执行文件。

运行可执行文件。

第二章数据类型和表达式习题答案//P32一、选择题(1)B (2)C (3)B (4)B (5)BD二、简答题1、下列变量名不合法的有哪些?为什么?A12-3、123、m123、_ 123、While答案: A12-3:变量名中不能有…-…符号123:变量名不能一数字开始_ 123、、While变量名合法。

2、下列表达式不正确的有哪些?为什么?int a=‟a‟; char c=102; char c="abc"; char c=‟\n‟;答案: char c="abc";是不正确的,因为"abc"是字符串不能赋值给字符变量。

3、分析常量和变量的异同点?答案:常量是常数或代表固定不变值的名字,常量的内容初始化以后一直保持不变。

变量的内容可以在运行过程中随时改变。

变量要占用固定的内存地址,常量一般不占用内存,但是用const定义的常量也要占用内存。

4、字符串"ab\\\n"在机器中占多少字节?答案: 5个字节。

分别是‟a‟;‟b‟;‟\\‟;‟\n‟;‟\0‟这五个字符。

5、运算结果2.5。

第三章C++流程控制习题答案//P63一、选择题(1)C (2)A (3)D (4)C (5)C二、简答题1、C++语言中while和do-while循环的主要区别是_________。

C 语言程序设计郑莉课后习题答案

C  语言程序设计郑莉课后习题答案

C++语言程序设计(清华大学郑莉)课后习题答案第一章概述1-1 简述计算机程序设计语言的发展历程。

解:迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。

1-2 面向对象的编程语言有哪些特点?解:面向对象的编程语言与以往各种编程语言有根本的不同,它设计的出发点就是为了能更直接的描述客观世界中存在的事物以及它们之间的关系。

面向对象的编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),形成类。

通过类的继承与多态可以很方便地实现代码重用,大大缩短了软件开发周期,并使得软件风格统一。

因此,面向对象的编程语言使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。

C++语言是目前应用最广的面向对象的编程语言。

1-3 什么是结构化程序设计方法?这种方法有哪些优点和缺点?解:结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。

结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。

虽然结构化程序设计方法具有很多的优点,但它仍是一种面向过程的程序设计方法,它把数据和处理数据的过程分离为相互独立的实体。

当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。

由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。

C++程序设计教程习题答案(郑秋生版)

C++程序设计教程习题答案(郑秋生版)

参考答案:1.面向对象方法把对象作为由数据及可以施加在这些数据上的操作所构成的统一体。

对象与传统的数据有本质区别,它不是被动地等待外界对它施加操作,相反,它必须发消息请求对象主动地执行它的某些操作,处理它的私有数据,但不能从外界直接对它的私有数据进行操作。

面向对象方法是一种新的思维方法,它不是把程序看作是工作在数据上的一系列过程或函数的集合,而是把程序看作是相互协作而又彼此独立的对象的集合。

2,面向对象开发技术分三个阶段:(1)面向对象分析就是抽取和整理用户需求并建立问题域精确模型的过程(2)面向对象设计可直接继承分析阶段的类图和交互图等分析结果,然后确定每个类内部的数据和方法,以及每个方法的处理算法、过程和接口等。

面向对象设计过程一般仍分为结构设计和详细设计。

(3)面向对象实现主要包括两项工作:第一项工作是把面向对象设计结果,翻译成用某种程序设计语言书写的面向对象程序;第二项工作是测试并调试面向对象的程序。

3.UML 是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示。

它:.不是一种可视化的程序设计语言而是一种可视化的建模语言.不是工具或知识库的规格说明而是一种建模语言规格说明是一种表示的标准.不是过程也不是方法但允许任何一种过程和方法使用它它用若干个视图构造系统的模型,每个视图描述系统的一个方面。

视图用图描述,图用模型元素的图示符号表示。

图中包含的模型元素可以有类、对象、节点、包、构件、关系和消息等。

UML的图包括:用例图、类图、对象图、状态图、活动图、顺序图、协作图、构件图和配置图。

4. floorButton和elevatorButton这两个类都是按钮类的子类,拥有共同的特性,如:按下按钮的方法void pressButton()和松开按钮的方法void resetButton();可归纳出其父类按钮类的定义如下:class Button{public:Button( Elevator & ); //constructor~Button(); // destructorvoid pressButton(); // sets button onvoid resetButton(); // resets button offprotected:Elevator &elevatorRef;bool pressed; // state of button};Button::Button( Elevator &elevatorHandle ): elevatorRef( elevatorHandle ), pressed( false ){cout << "创建按钮" << endl;}Button::~Button(){cout << "释放按钮" << endl;}void Button::pressButton() { pressed = true; }void Button::resetButton() { pressed = false; }两个子类电梯按钮和楼层按钮的定义如下:class ElevatorButton : public Button //电梯按钮类{public:ElevatorButton( Elevator & ); // constructor~ElevatorButton(); // destructorvoid pressButton(); // press the buttonvoid resetButton();};ElevatorButton::ElevatorButton(Elevator &elevatorHandle ): Button( elevatorHandle ){cout << "电梯按钮创建" << endl;}ElevatorButton::~ElevatorButton(){cout << "释放电梯按钮" << endl;}void ElevatorButton::pressButton(){Button::pressButton();cout << "电梯按钮通知电梯准备离开" << endl;elevatorRef.prepareToLeave( true ); //调用电梯的方法准备上升或下降};class FloorButton : public Button //楼层按钮的定义{public:FloorButton( int, Elevator & ); // constructor~FloorButton(); // destructorvoid pressButton(); // press the buttonvoid resetButton();private:int floorNumber; // number of the button's floorbool pressed; //楼层的状态Elevator& elevatorRef; //};FloorButton::FloorButton( int number, Elevator &elevatorHandle ): Button( elevatorHandle ), floorNumber( number ){Button::pressButton();cout << "第几层" << floorNumber << "楼层按钮创建" <<endl;}FloorButton::~FloorButton(){cout << "floor " << floorNumber << " button destroyed"<<endl;}void FloorButton::pressButton(){Button::pressButton();cout << "第几楼层的按钮" << floorNumber <<”按下.”<<end;elevatorRef.summonElevator( floorNumber ); //通知电梯响应}void ElevatorButton::resetButton(){pressed = false;}5.将4种的父类Button的方法pressButton()和resetButton()改为纯虚函数即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
class CBox
{
public :
CBox(double l=0,double w=0,double h=0);
double area();
double volume ();
private :
double lengh;
double width;
double high;
};
CBox::CBox(double l,double w,double h)
#include <iostream.h>
class person
{
public:
person(int n,char* nam,char s)
{
num=n;
strcpy(name,nam);
sex=s;
cout<<"Constructor called."<<endl;
}
~person( )
{
cout<<"Destructor called."<<endl;
CLine line1(point1,point2);
CLine line2(2,3,8,12);
line1.DrawLine ();
line2.DrawLine ();
line2.move(point3,point4);
line2.DrawLine ();
line2=line1;
line2.DrawLine ();
}
void Linedel()
{
cout<<"delete line"<<endl;
}
void move(CPoint &x,CPoint &y)
{
cout<<"move line"<<endl;
p1=x;
p2=y;
}
private :
CPoint p1,p2;
};
void main()
{
CPoint point1(1,5),point2(5,8),point3(20,30),point4(40,50);
{
x=a;
y=b;
}
CPoint(CPoint & p)
{
x=p.x;
y=p.y;
}
void print()
{
cout<<"("<<x<<","<<y<<")";
}
private :
double x,y;
};
class CLine
{
public:
CLine(double x1=0,double y1=0,double x2=0,double y2=0):p1(x1,y1),p2(x2,y2)
{
CBox box1(4,5,6);
cout<<box1.area()<<endl;
cout<<box1.volume()<<endl;
}
5.2
#include <iostream>
using namespace std;
class CPoint
{
public :
CPoint(double a=0,double b=0)
{
}
CLine(CPoint x,CPoint y):p1(x),p2(y)
{
}
CLine(CLine &lin)
{
p1=lin.p1;
p2=lin.p2;
}
void DrawLine()
{
cout<<"Line form";
p1.print();
cout<<"to";
p2.print();
cout<<endl;
{
lengh=l;
width=w;
high=h;
}
double CBox::area()
{
return 2*(lengh*width+lengh*high+width*high);
}
double CBox::volume ()
{
return lengh*width*high;
}
void main()
第1章类和对象
一、选择题
1.C 2.B 3.C 4.A 5.C
6.A 7.C8 C9A10 C
二、阅读题
1.x=2,y=3
2.x=2,y=3
x!=y
3.
Cstatic::va1=0
cs1.vaI=1
cs2.val=2
cs1.val=4
cs2.vaI=4
四、改错题
#include <string.h>
{
person s1(10010,"'Wang_li",'f');
s1.display( );
person s2(10011,"Zhang_fun",'m');
s2.display( );
return 0;
}
五、编程题
5.1
#include <iostream>
using namespace std;
void CComplex::Print()//显示复数值
{
cout << "(" << real << "," << imag << ")" << endl;
}
CComplex add(CComplex &x,CComplex &y) //普通函数完成两个数的加法,对象作为函数参数,
{
return CComplex(x.GetReal() +y.GetReal() ,x.GetImag ()+y.GetImag ());
}
void display( )
{
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl<<endl;
}
private:
int num;
char name[10];
char sex;
};
int main( )
double GetImag();
void Print();
private:
double real;
double imag;
};
CComplex::CComplex (double r=0.0, double i=0.0)
{
real = r;
imag = i;
cout<<"调用两个参数的构造函数"<<endl;
}
CComplex::CComplex (CComplex &c)//复数类的拷贝构造函数定义
{
real = c.real;
imag = c.imag;
cout<<"调用拷贝构造函数"<<endl;
}
doublቤተ መጻሕፍቲ ባይዱ CComplex::GetReal(){return real;}
double CComplex::GetImag(){return imag;}
line1.Linedel ();
}
5.3
#include <iostream>
using namespace std;
class CComplex
{
public:
CComplex(double, double);
CComplex(CComplex &c);//复数类的拷贝构造函数声明
double GetReal();
相关文档
最新文档