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 ...
随机推荐
- markdown ——flow流程图
一个纯文本的语法怎么画图? 将流程图代码包含在```folw和`````之间即可 例子 st=>start: Start op=>operation: Your Operation sub ...
- Prometheus入门到放弃(4)之cadvisor监控docker容器
Prometheus监控docker容器运行状态,我们用到cadvisor服务,cadvisor我们这里也采用docker方式直接运行. 1.下载镜像 [root@prometheus-server ...
- linux安装go开发环境
1下载go wget https://studygolang.com/dl/golang/go1.12.7.linux-amd64.tar.gz执行此命令会将go1.12.7.linux-amd64. ...
- nginx配置比较杂乱的总结
常用变量 demo uri www.example.com/mock/interface?param1=203¶m2=test $args uri中的参数值 ?后面的部分 param1 ...
- twbsPagination.js分页插件
分页插件在使用时注意,如果页面中存在其他异步加载的数据,在运行分页方法第一次后,页面上的分页样式与分页中的data数据就是第一次的数据,如果异步加载重新在页面上录入数据,并希望分页继续在新的数据上实现 ...
- (转)WEB服务器_IIS配置优化指南
原文地址:https://www.cnblogs.com/heyuquan/p/deploy-iis-set-performance-guide.html 通常把站点发布到IIS上运行正常后,很少会去 ...
- Oracle.EntityFrameworkCore使用时报错:Specified cast is not valid
我用的是:Oracle.EntityframeworkCore 2.19.30 如果看到报错:System.InvalidCastException:“Specified cast is not va ...
- MySQL的ERROR 1205错误分析
一.错误发生及原因猜测 1.错误发生 在删除 t_user 表的一条数据时,Navicat 发生长时间的无响应,然后弹出一个对话框,提示:ERROR 1205: Lock wait timeout e ...
- SQL*Plus 格式化查询结果
为了在 SQL*Plus 环境中生成符合用户需要规范的报表,SQL*Plus 工具提供了多个用于格式化查询结果的命令,使用这些命令可以实现设置列的标题.定义输出值的显示格式和显示宽度.为报表增加头标题 ...
- git 命令提交项目到git服务器
1.先下载git,然后安装git https://git-scm.com/downloads 2.在电脑任意盘创建一个目录 3.在创建的目录下点击右键 4.初始化git 使用git init 初始化, ...