1. 本学期的报告均发到csdn博客。周一上机,周四前要完成本周上机任务并发布博文。代码应该用代码工具插入,见http://blog.csdn.net/sxhelijian/article/details/7203086
2. 本学期起程序头部的注释请自行加入,从本学期起不再统一给出。这是一个程序员良好习惯中的一部分,养成这个习惯。这也是展示个人专业品质的一个重要途径。另外,在程序中需要的地方,也请加注释。
下面是我们一直在用的注释模板。
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者: 董宝文
* 完成日期: 2012 年 4 月 3 日
* 版 本 号:
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
#include <iostream>
using namespace std;
template <class numtype>
class Complex
{
public:
Complex( ){real = 0;imag = 0;}
Complex(numtype r,numtype i){real = r;imag = i;}
Complex complex_add(Complex &c2);
Complex complex_jian(Complex &c2);
Complex complex_cheng(Complex &c2);
Complex complex_chu(Complex &c2);
void display( );
private:
double real;
double imag;
};
template <class numtype>
Complex<numtype> Complex<numtype>::complex_add(Complex<numtype> &c2)
{
Complex<numtype> c;
c.real = real + c2.real;
c.imag = imag + c2.imag;
return c;
}
template <class numtype>
Complex<numtype> Complex<numtype>::complex_jian(Complex<numtype> &c2)
{
Complex<numtype> c;
c.real = real - c2.real;
c.imag = imag - c2.imag;
return c;
}
template <class numtype>
Complex<numtype> Complex<numtype>::complex_cheng(Complex<numtype> &c2)
{
Complex<numtype> c;
c.real = real * c2.real - imag * c2.imag;
c.imag = imag * c2.real + real * c2.imag;
return c;
}
template <class numtype>
Complex<numtype> Complex<numtype>::complex_chu(Complex<numtype> &c2)
{
Complex<numtype> c;
c.real = (real * c2.real + imag * c2.imag)/(c2.real * c2.real + c2.imag * c2.imag);
c.imag = (real * c2.imag - imag * c2.real)/(c2.real * c2.real + c2.imag * c2.imag);
return c;
}
template <class numtype>
void Complex<numtype>::display( )
{
cout << "(" << real << "," << imag << "i)" << endl;
}
int main( )
{ Complex<int> c1(3,4),c2(5,-10),c3;
c3 = c1.complex_add(c2);
cout << "c1 + c2 = ";
c3.display( );
Complex<double> c4(3.1,4.4),c5(5.34,-10.21),c6;
c6 = c4.complex_add(c5);
cout << "c4 + c5 = ";
c6.display( );
c3 = c1.complex_jian(c2);
cout << "c1 - c2 = ";
c3.display( );
c6 = c4.complex_jian(c5);
cout << "c4 - c5 = ";
c6.display( );
c3 = c1.complex_cheng(c2);
cout << "c1 * c2 = ";
c3.display( );
c6 = c4.complex_cheng(c5);
cout << "c4 * c5 = ";
c6.display( );
c3 = c1.complex_chu(c2);
cout << "c1 / c2 = ";
c3.display( );
c6 = c4.complex_chu(c5);
cout << "c4 / c5 = ";
c6.display( );
system("pause");
return 0;
}
经验积累:
1.在类外定义类模板函数原来这么麻烦....格式要求很多,稍微疏忽一点就会出错,比如display函数之前要加一行template <class numtype>,还有各个函数的形参的类型一定要是Complex<numtype>,很容易丢掉<numtype>。
2.关于复数相乘相除的算法,我认为是类似于两个多项式相乘与相除的方法计算,当然,计算公式在这里不怎么重要。