最近没什么心情整理零散的知识点,就整理一下第四章的课后习题答案。

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++面向程序设计(第二版)课后习题答案解析的更多相关文章

  1. Java语言程序设计(第三版)第二章课后习题答案(仅供参考)

    2.1   注意不同类型转换 import java.util.Scanner; public class Ch02 { public static void main(String[] args) ...

  2. python 核心编程第二版 课后习题 第11章

    11-3 函数.在这个练习中,我们将实现 max()和 min()内建函数. (a) 写分别带两个元素返回一个较大和较小元素,简单的 max2()核 min2()函数.他们应该可以用任意的 pytho ...

  3. C++面向对象程序设计第三章习题答案解析

    整理一下自己写的作业,供考试前复习用,哈哈 进入正题!!! 题目: 2.分析下面的程序,写出其运行时的输出结果 这里就不展示课本源代码,直接给出修改后的代码,错误部分代码已给出具体的注释 #inclu ...

  4. C语言程序设计:现代方法(第2版)第二章全部习题答案

    前言 本人在通过<C语言程序设计:现代方法(第2版)>自学C语言时,发现国内并没有该书完整的课后习题答案,所以就想把自己在学习过程中所做出的答案分享出来,以供大家参考.这些答案是本人自己解 ...

  5. C程序设计(谭浩强)第五版课后题答案 第一章

    大家好,这篇文章分享了C程序设计(谭浩强)第五版课后题答案,所有程序已经测试能够正常运行,如果小伙伴发现有错误的的地方,欢迎留言告诉我,我会及时改正!感谢大家的观看!!! 1.什么是程序?什么是程序设 ...

  6. C语言程序设计·谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂

    C语言程序小练习 1.用C语言设计程序算出1-1/2+1/3-14+1/5...+1/99-1/100的值 #include<stdio.h> int main() { ; double ...

  7. C程序设计(第四版)课后习题完整版 谭浩强编著

    //复习过程中,纯手打,持续更新,觉得好就点个赞吧. 第一章:程序设计和C语言 习题 1.什么是程序?什么是程序设计? 答:程序就是一组计算机能识别和执行的指令.程序设计是指从确定任务到得到结果,写出 ...

  8. 实验七 《FBG》—-小学生课后习题答案原型设计

    一.实验目的与要求 1.掌握软件原型开发技术 2.学习使用软件原型开发工具 二.实验内容与步骤 1.开发工具: 使用的工具:墨刀(APP端开发原型) 工具简介: 墨刀(MockingBot)是一款简单 ...

  9. C程序设计语言(第二版)习题:第一章

    第一章虽然感觉不像是个习题.但是我还是认真去做,去想,仅此而已! 练习 1-1 Run the "hello, world" program on your system. Exp ...

随机推荐

  1. linux 环境搭建

    1.安装jdk 上传tar包,解压缩 vim /etc/profile JAVA_HOME=/usr/local/jdk1.8.0_152CLASSPATH=$JAVA_HOME/lib/PATH=$ ...

  2. KAFA 监测| Kafka监测的方法和工具

    1.目标 在我们上一篇Kafka教程中,我们讨论了Kafka Tools.今天,我们将看到Kafka Monitoring.在此,我们将学习如何监控Apache Kafka的概念.此外,我们将涵盖在故 ...

  3. Kafka工具教程 - Apache Kafka中的2个重要工具

    1.目标 - 卡夫卡工具 在我们上一期的Kafka教程中,我们讨论了Kafka Workflow.今天,我们将讨论Kafka Tool.首先,我们将看到卡夫卡的意义.此外,我们将了解两个Kafka工具 ...

  4. Java开发笔记(一百三十三)Swing的菜单

    传统的桌面程序基本是对某种类型的文件进行加工,例如Window自带的记事本用来读写文本文件,自带的画图程序用来查看和修改位图文件.为了方便用户切换各种操作,这些程序在窗口顶端放了一排菜单栏,单击菜单栏 ...

  5. fastjson框架如何处理boolean?CURRENT_TIMESTAMP使用报错?什么是 ONLINE DDL 及 pt-online-schema-change ? getBytes引起的乱码问题?

    一.使用fastjson框架进行序列化时,若莫个参数为Boolean类型,而json里的值是其它类型时,框架如何处理? 1.true, false,正常赋值2.int类型,若为1,则为true,否则为 ...

  6. WCF NetTcpBinding

    服务端: <system.serviceModel> <bindings> <netTcpBinding> <binding portSharingEnabl ...

  7. 7.1 为什么bulk使用奇特的json格式?

    回顾: bulk的语法要求:每个json串都不能换行,不同json串之间,必须换行   为什么不用标准json数组呢?如: [     {         "create":{.. ...

  8. Ubuntu linux安装完成后隐藏linux磁盘挂载点

    方案1 打开注册表 , 找到这个位置: 计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explore ...

  9. Python——元组

    是为了满足,某些值当被定义以后就不可修改或删除而出现的元组形式. 特点: 元组中的元素不可被修改或删除 没有独立的功能 可以进行嵌套,当嵌套方可以修改删除时,可以对嵌套方进行. 元组可以进行公共功能中 ...

  10. go工程组织规范

    go编码以workspace形式管理,一个workspace包含所有的Go编码,包含多个版本控制仓库(例如使用git管理的多个仓库).每个仓库包含多个包package,每个package是一个单独的路 ...