C++面向程序设计(第二版)课后习题答案解析
最近没什么心情整理零散的知识点,就整理一下第四章的课后习题答案。
1.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数重载为非成员函数,非友元的普通函数。编程序,求两个复数之和。
源代码:
#include <iostream>
#include<stdlib.h>
using namespace std;
class Complex
{public:
Complex(){real=;imag=;}
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(,),c2(,-),c3;
c3=c1+c2;
cout<<"c3=";
c3.display();
system("pause");
return ;
}
2.定义一个复数类Complex,重载运算符“+”,“-”,“*”,“/”,使之能用于复数的加,减,乘,除。运算符重载函数作为Complex类的成员函数。编程序,分别求两个复数之和、差、积和商。
源程序:
#include<iostream>
#include<stdlib.h>
using namespace std;
class Complex
{
public:
Complex(){real=;imag=;}
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(,),c2(,-),c3;
c3=c1+c2;
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();
system("pause");
return ;
}
3.定义一个复数类函数Complex,重载运算符“+”,使之能用于复数的加法运算。参加运算的两个运算量都可以是类对象,也可以其中有一个是整数,顺序任意。如c1+c2,i+c1,c1+i均合法(设i为整数,c1,c2为复数)。编程序,分别求两个复数之和、整数和复数之和。
源代码:
#include <iostream>
#include<stdlib.h>
using namespace std;
class Complex
{
public:
Complex(){real=;imag=;}
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(,),c2(,-),c3;
int i=;
c3=c1+c2;
cout<<"c1+c2=";
c3.display();
c3=i+c1;
cout<<"i+c1=";
c3.display();
c3=c1+i;
cout<<"c1+i=";
c3.display();
system("pause");
return ;
}
4.有两个矩阵a和b,均为2行3列。求两个矩阵之和,重载运算符“+”,使之能用于矩阵相加。如c=a+b。
源代码:
#include <iostream>
#include<stdlib.h>
using namespace std;
class Matrix
{
public:
Matrix();
//定义友元类加法重载函数
friend Matrix operator+(Matrix &,Matrix &);
//定义矩阵输入函数
void input();
//定义矩阵输出函数
void display();
private:
//定义两行三列的矩阵
int mat[][];
};
Matrix::Matrix()
{
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
mat[i][j]=;
} } }
//矩阵加法运算函数
Matrix operator+(Matrix &a,Matrix &b)
{
Matrix c;
for(int i=;i<;i++)
{
for(int j=;j<;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=;i<;i++)
{
for(int j=;j<;j++)
{
cin>>mat[i][j];
} } }
//显示矩阵数据函数
void Matrix::display()
{
for (int i=;i<;i++)
{
for(int j=;j<;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();
system("pause");
return ;
}
5.在第四题的基础上,重载流插入运算符“<<”和流提取运算符“>>”,使之能用于矩阵的输入和输出。
源程序:
#include <iostream>
#include<stdlib.h>
using namespace std;
class Matrix
{
public:
Matrix();
//定义重载运算符“+”函数
friend Matrix operator+(Matrix &,Matrix &);
//定义重载流插入运算符“<<”函数
friend ostream& operator<<(ostream&,Matrix&);
//定义重载流提取运算符“>>”函数
friend istream& operator>>(istream&,Matrix&);
private:
//定义2行3列矩阵
int mat[][];
};
//初始化矩阵
Matrix::Matrix()
{
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
mat[i][j]=;
} }
}
//重载运算符“+”函数
Matrix operator+(Matrix &a,Matrix &b)
{
Matrix c;
for(int i=;i<;i++)
{
for(int j=;j<;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=;i<;i++)
{
for(int j=;j<;j++)
{
in>>m.mat[i][j];
} } return in;
}
//重载流插入运算符“<<”函数,输出矩阵数据
ostream& operator<<(ostream &out,Matrix &m)
{
for (int i=;i<;i++)
{for(int j=;j<;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;
system("pause");
return ;
}
6.请编写程序,处理一个复数与一个double数相加的运算,结果存放在一个double型的变量dl中,输出dl的值,再以复数的形式输出此值。定义Complex(复数)类,在成员函数中包含重载类型转换运算符:
operator double() {return real;}
源代码:
#include <iostream>
#include<stdlib.h>
using namespace std;
class Complex
{
public:
Complex(){real=;imag=;}
Complex(double r){real=r;imag=;}
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(,),c2;
double d1;
d1=2.5+c1;
cout<<"d1="<<d1<<endl;
c2=Complex(d1);
cout<<"c2=";
c2.display();
system("pause");
return ;
}
7.扩展:有两个3行3列的矩阵,求两个矩阵的和、差、积,重载运算符“+”,“-”,“*”。
源代码:
#include <iostream>
#include<stdlib.h>
using namespace std;
class Matrix
{
public:
Matrix();
//定义重载加法运算函数
friend Matrix operator+(Matrix &,Matrix &);
//定义重载减法运算函数
friend Matrix operator-(Matrix &,Matrix &);
//定义重载乘法运算函数
friend Matrix operator*(Matrix &,Matrix &);
void input();
void display();
private:
//定义3行3列矩阵
int mat[][];
};
//初始化矩阵
Matrix::Matrix()
{
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
mat[i][j]=;
} } }
//重载加法运算函数,
Matrix operator+(Matrix &a,Matrix &b)
{
Matrix c;
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
//矩阵加法为行列号相同的元素相加为该位置的数据
c.mat[i][j]=a.mat[i][j]+b.mat[i][j];
}
} return c;
}
//重载减法运算函数,矩阵减法为行列号相同的元素相减为该位置的数据
Matrix operator-(Matrix &a,Matrix &b)
{
Matrix c;
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
c.mat[i][j]=a.mat[i][j]-b.mat[i][j];
}
} return c;
}
//重载乘法运算函数,第一个矩阵的第i行的第一个元素,逐一与第二个矩阵的i行的j列上的所有元素之积的和,为该i行j列的数据
Matrix operator*(Matrix &a,Matrix &b)
{
//int mat;
Matrix c;
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
//矩阵乘法运算的核心步骤,k为控制列乘的数据
for(int k=;k<;k++)
c.mat[i][j]=c.mat[i][j]+a.mat[i][k]*b.mat[k][j];
}
} return c;
}
//矩阵输入函数
void Matrix::input()
{
cout<<"input value of matrix:"<<endl;
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
cin>>mat[i][j];
} } }
//矩阵输出函数
void Matrix::display()
{
for (int i=;i<;i++)
{
for(int j=;j<;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();
c=a-b;
cout<<endl<<"Matrix c = Matrix a - Matrix b :"<<endl;
c.display();
c=a*b;
cout<<endl<<"Matrix c = Matrix a * Matrix b :"<<endl;
c.display();
system("pause");
return ;
}
小结:
熟练掌握复数运算,重载运算符(+,-,*,/,<<,>>)函数的使用方法,矩阵的输入及输出函数封装,矩阵的加、减和乘法的运算。
C++面向程序设计(第二版)课后习题答案解析的更多相关文章
- Java语言程序设计(第三版)第二章课后习题答案(仅供参考)
2.1 注意不同类型转换 import java.util.Scanner; public class Ch02 { public static void main(String[] args) ...
- python 核心编程第二版 课后习题 第11章
11-3 函数.在这个练习中,我们将实现 max()和 min()内建函数. (a) 写分别带两个元素返回一个较大和较小元素,简单的 max2()核 min2()函数.他们应该可以用任意的 pytho ...
- C++面向对象程序设计第三章习题答案解析
整理一下自己写的作业,供考试前复习用,哈哈 进入正题!!! 题目: 2.分析下面的程序,写出其运行时的输出结果 这里就不展示课本源代码,直接给出修改后的代码,错误部分代码已给出具体的注释 #inclu ...
- C语言程序设计:现代方法(第2版)第二章全部习题答案
前言 本人在通过<C语言程序设计:现代方法(第2版)>自学C语言时,发现国内并没有该书完整的课后习题答案,所以就想把自己在学习过程中所做出的答案分享出来,以供大家参考.这些答案是本人自己解 ...
- C程序设计(谭浩强)第五版课后题答案 第一章
大家好,这篇文章分享了C程序设计(谭浩强)第五版课后题答案,所有程序已经测试能够正常运行,如果小伙伴发现有错误的的地方,欢迎留言告诉我,我会及时改正!感谢大家的观看!!! 1.什么是程序?什么是程序设 ...
- C语言程序设计·谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂
C语言程序小练习 1.用C语言设计程序算出1-1/2+1/3-14+1/5...+1/99-1/100的值 #include<stdio.h> int main() { ; double ...
- C程序设计(第四版)课后习题完整版 谭浩强编著
//复习过程中,纯手打,持续更新,觉得好就点个赞吧. 第一章:程序设计和C语言 习题 1.什么是程序?什么是程序设计? 答:程序就是一组计算机能识别和执行的指令.程序设计是指从确定任务到得到结果,写出 ...
- 实验七 《FBG》—-小学生课后习题答案原型设计
一.实验目的与要求 1.掌握软件原型开发技术 2.学习使用软件原型开发工具 二.实验内容与步骤 1.开发工具: 使用的工具:墨刀(APP端开发原型) 工具简介: 墨刀(MockingBot)是一款简单 ...
- C程序设计语言(第二版)习题:第一章
第一章虽然感觉不像是个习题.但是我还是认真去做,去想,仅此而已! 练习 1-1 Run the "hello, world" program on your system. Exp ...
随机推荐
- SQL 向表中添加字段
如果要在数据表中添加一个字段,应该如何表示呢?下面就为您介绍表添加字段的SQL语句的写法,希望可以让您对SQL语句有更深的认识. 通用式: alter table [表名] add [字段名] 字段属 ...
- Java中Date时区的转换
1.Date中保存的是什么? 在java中,只要我们执行 Date date = new Date(); 就可以得到当前时间.如: Date date = new Date(); System.ou ...
- C# vb .net实现HSL调整特效滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的HSL调整呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一 ...
- NIO开发Http服务器(1):项目下载、打包和部署
最近学习了Java NIO技术,觉得不能再去写一些Hello World的学习demo了,而且也不想再像学习IO时那样编写一个控制台(或者带界面)聊天室.我们是做WEB开发的,整天围着tomcat.n ...
- Flask初识之安装及HelloWord程序
Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不管你用 ...
- UCOSIII优先级反转
反转现象 任务优先级:H>M>L 绿色部分:任务占用共享资源 理想状态:7释放信号量后,最高优先级H任务抢占CPU 反转原因:H和L等待同一个信号量,H的任务优先级被降至和L相同优先级,此 ...
- Core Animation笔记(特殊图层)
1.shapeLayer: 渲染快速,内存占用小,不会被图层边界裁掉(可以在边界之外绘制),不会像素化(当做3D变化如缩放是不会失真) CGRect rect = self.containerView ...
- 导出带图片的Excel——OOXML文件分析
需求: 普通js导出文件excel具有兼容性问题,通过js-xsl导出文件API未找到导出图片的方案,实例过少,因此针对07年后以.xlsx后缀的excel文件,通过修改后缀.zip参考文件模板来实现 ...
- 12.安装olny office服务---不成功
安装olny office服务 在01.centos7环境准备的基础上安装olny office服务 参考博客:https://blog.csdn.net/networken/article/deta ...
- Linux操作系统的文件查找工具locate和find命令常用参数介绍
Linux操作系统的文件查找工具locate和find命令常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.非实时查找(数据库查找)locate工具 locate命 ...