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 ...
随机推荐
- ubuntu12下安装unixODBC(mysql)
转自:https://blog.51cto.com/dreamylights/1321678 1. 需要的包 unixODBC源码包unixODBC-2.2.14.tar.gz mysql 驱动 my ...
- 【LeetCode】四数之和【排序,固定k1,k2,二分寻找k3和k4】
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满 ...
- flask 表单填充数据报错!AttributeError: 'dict' object has no attribute 'getlist'
报错信息: AttributeError: 'dict' object has no attribute 'getlist' 解决: 虽然是小毛病,不得不说还是自己太粗心大意了.
- 协议——UART(RS232)
一.UART简介 UART(universal asynchronous receiver-transmitter)是一种采用异步串行通信方式的通用异步收发传输器.一般来说,UART总是和RS232成 ...
- docekr安装mysql,redis,git和maven 脚本
编写脚本 images_install.sh #!/bin/bash # author:qiao # 安装脚本 # reids:3.2(自启) mysql:5.7(自启)或者JDK:1.8 tomca ...
- Mybatis @One注解使用
@One注解:一对一关联查询
- (转)AS3正则:元子符,元序列,标志,数量表达符
(转)AS3正则:元子符,元序列,标志,数量表达符: AS3正则:元子符,元序列,标志,数量表达符 七月 4th, 2010 归类于 AS3前端技术 作者Linkjun 进行评论 as3正则:元子符, ...
- ssh密码正确无法连接
新建了一个虚拟机,准备用ssh 连接管理,提示权限不足, 账号密码没问题,防火墙没有开 打开ssh服务的配置文件,默认在 /etc/ssh/sshd_config (不是 ssh_config) 检 ...
- go liteIDE 快捷键
Goland常用快捷键文件相关快捷键: CTRL+E,打开最近浏览过的文件.CTRL+SHIFT+E,打开最近更改的文件.CTRL+N,可以快速打开struct结构体.CTRL+SHIFT+N,可以快 ...
- redis HyperLogLog的使用
一.概念1.redis在2.8.9版本添加了HyperLogLog结构.2.redis HyperLogLog是用来做基数统计的算法,HyperLogLog的优点是:在输入元素的数量或者体积非常非常大 ...