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

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. 酷!微软发布新终端工具,Win 10 将自带 Linux 内核

    原创:技术最前线(id:TopITNews) 北京时间 5 月 7 日,2019 年微软 Build 开发者大会在雷德蒙德召开.今年大会上亮点很多,本文汇总一些和开发者相关的内容. 1. Window ...

  2. Scala 条件控制与循环

    Scala if表达式 ·if表达式的定义:在Scala中,if表达式是有值的,就是if或者else中最后一行语句返回的值. ·例如,val age = 30; if (age > 18) 1 ...

  3. 【LEETCODE】54、数组分类,简单级别,题目:605、532

    数组类,简单级别完结.... 不容易啊,基本都是靠百度答案.... 希望做过之后后面可以自己复习,自己学会这个解法 package y2019.Algorithm.array; /** * @Proj ...

  4. 【LEETCODE】42、922. Sort Array By Parity II

    package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...

  5. Java线程的等待与唤醒完整示例代码

    项目结构: 资源类: 输入线程:  输出线程: 测试: 人妖问题发生: 线程安全问题的解决方法: 调用Object的wait()和notify()方法时需注意:必须是锁对象方可调用,否则将抛出无效的监 ...

  6. Elasticsearch-6.7.0系列(七)SpringCloud连接ES集群,使用ES用户名密码

    pom.xml代码: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...

  7. kafka服务端实验记录

    kafka单机实验: 环境准备: 1.下载kafka,zookeeper,并解压 wget http://mirror.bit.edu.cn/apache/kafka/2.3.0/kafka_2.11 ...

  8. go 学习笔记(4) import

    package main import ( f "fmt" ) const NAME string = "imooc" var a string = " ...

  9. [unity]GPU Instance学习

    前言我们之前研究过为什么Unity的UI可以合批,是因为使用了相同的材质进行渲染,UI上不同图片渲染是通过把图片打成一张图集后,使用Image组件对顶点填充了不同的UV值实现的.那么有没有什么办法可以 ...

  10. .net 调用存储过程

    语言:C# 一.调用带输入参数的存储过程 首先自然是在查询分析器里创建一个存储过程喽~~   如下所示: create proc proc_1 @uid int, @pwd varchar(255) ...