1、电子与信息工程系实验报告 C+面向对象程序设计实验报告专 业: 计算机科学与技术 班 级: 2012 级软件方向 学 号: 2012020244 姓 名: 孙 浩 实验报告 1 代码组织案例 1C+面向对象程序设计实验卡片实验编号: 3280121301 实验名称及学时: 代码组织案例 1姓 名: 孙浩 班 级:2 班 计本二班学 号: 2012020244 实 验 室:实验情况评价(教师填写):建议实验成绩(教师填写):1.实验内容(1)熟悉 VC+6.0 开发环境,能进行项目和相关文件的建立,程序的编译和调试.(2)复数是个很有用的概念,在数字信号处理等方面发挥了重要作用.在 C+的标准程
2、序库中对它进行了实现.本次任务:(A)以 C 的程序结构来实现进行复数的基本运算,两个复数加,减,乘,除.(B)根据面向对象的程序设计方法,创建相关复数类实现复数的相关运算.(C)分析自己的复数类,有那些方面有待改进.2.预习内容VC 开发环境的使用,回顾 C 语言解决问题的基本流程,面向对象分析,使用抽象,封装实现类的编写测试.3.实验类型验证型4.实验目的(1)掌握 VC+ 6.0 开发环境的使用,程序的调试方法.(2)回顾复习 C 的结构体及函数的使用,来解决数学问题.(3)掌握面向对象的分析方法,会从问题域中抽象出相关的类,及在 VC6.0 中使用 C+规则描述类的属性和行为.(4)使
3、用面向对象的分析方法,对程序进行分析电子与信息工程系实验报告 5.实验要求(1)打开 VC 环境直接创建源文件进行编码测试,请使用 C 和 C+两种方式解决问题.(2)完成实验内容要求并进行测试,分析结果,对比两种方式优缺点。6.实验过程(源文件、步骤及结果分析)#include #include typedef struct fushu/抽象数据类型定义 float real;/数据对象float image; fushu;fushu ComplexNumberInput(float a,float b)/构造二元组 fushu c; c.real=a;/实部c.image=b;/虚部ret
4、urn(c); fushu ComplexNumberAdd(fushu c1,fushu c2)/求和运算 fushu sum; sum.real=c1.real+c2.real; sum.image=c1.image+c2.image; return (sum); fushu ComplexNumberSub(fushu c1,fushu c2)/求差运算 fushu sub; sub.real=c1.real-c2.real; sub.image=c1.image-c2.image; return (sub); fushu ComplexNumberMul(fushu c1,fushu
5、c2)/求积运算 fushu Mul; Mul.real=c1.real*c2.real-c1.image*c2.image; Mul.image=c1.real*c2.image+c1.image*c2.real; return (Mul); fushu ComplexNumberDiv(fushu c1,fushu c2)/求商运算 fushu div; float d1,d2,d3,d4; d1=c1.real*c2.real+c1.image*c2.image; d2=c2.real*c2.real+c2.image*c2.image; d3=c1.image*c2.real-c1.r
6、eal*c2.image; d4=c2.real*c2.real+c2.image*c2.image; if(d2!=0div.image=d3/d4; return(div); else div.real=0; div.image=0; return(div); 实验报告 1 代码组织案例 1 void ComplexNumberOutput(fushu c)/输出运算结果 if(c.real=0.0 if(c.real=0.0 if(c.real!=0.0 if(c.real!=0.0 void main()/主函数 int choice; int k; float a1,a2,b1,b2
7、; struct fushu c1,c2,sum,sub,mult,div; printf(“欢迎进行复数的基本代数运算n“); printf(“1: 复数加法运算n“); printf(“2: 复数减法运算n“); printf(“3: 复数乘法运算n“); printf(“4: 复数除法运算n“); printf(“0: 推出系统n“); printf(“请分别输入第一个复数的实部和虚部: “); scanf(“%f%f“, c1 = ComplexNumberInput(a1,b1); printf(“第一个复数为: “);ComplexNumberOutput(c1); printf(
8、“请分别输入第二个复数的实部和虚部: “); scanf(“%f%f“, c2 = ComplexNumberInput(a2,b2); printf(“第二个复数为: “); ComplexNumberOutput(c2); for(;) printf(“请输入你选择的功能: “); scanf(“%d“, switch(choice) case 0:exit(0); break; case 1:sum = ComplexNumberAdd(c1,c2); printf(“求和后结果为: “); ComplexNumberOutput(sum); break; case 2:sub = Co
9、mplexNumberSub(c1,c2); printf(“求差后结果为: “); ComplexNumberOutput(sub); break; case 3:mult = ComplexNumberMul(c1,c2); printf(“求积后结果为: “); ComplexNumberOutput(mult ); break; case 4:div=ComplexNumberDiv(c1,c2); if(div.real!=0 ComplexNumberOutput(div); break; 电子与信息工程系实验报告 else printf(“除零错误,请重新输入第二个复数;n“);
10、 k=0; exit(k); #include #include #include using namespace std;class Complexpublic:double real,imag;Complex()real=0.0;imag=0.0;Complex(double r,double i) /构造函数 real=r; imag=i; Complex()Complex operator+(Complex sum.real=real+c.real; /实部相加sum.imag=imag+c.imag; /虚部相加return sum; Complex operator-(Comple
11、x sub.real=real-c.real; /实部相减sub.imag=imag-c.imag; /虚部相减return sub; Complex operator*(Complex multi.real=real*c.real-imag*c.imag; /实部乘积multi.imag=real*c.imag+imag*c.real; /虚部乘积return multi; Complex operator/(Complex div.real=(real*c.real+imag*c.imag)/(c.real*c.real+c.imag*c.imag); /实部除积div.imag=(ima
12、g*c.real-real*c.imag)/(c.real*c.real+c.imag*c.imag); /虚部除积return div; int Complex: operator=(Complex 实验报告 1 代码组织案例 1elsereturn 0;int Complex: operator!=(Complex elsereturn 1; void Add() /复数加法运算函数 double a,b,c,d;coutab; coutcd; Complex num1(a,b),num2(c,d),sum,zero(0,0); sum=num1+num2; double x,y;cout
13、xy;Complex num(x,y);int i=4;while(!(num=zero) sum=sum+num; coutab;num.real =a;num.imag =b;i+; if(sum.imag 0)coutab; coutcd; Complex num1(a,b),num2(c,d),sub,zero(0,0); sub=num1-num2; double x,y;coutxy;Complex num(x,y);int i=4;while(!(num=zero) sub=sub-num; coutab;num.real =a;num.imag =b;i+; if(sub.im
14、ag0)coutab; coutcd; Complex num1(a,b),num2(c,d),mul,zero(0,0); mul=num1*num2; double x,y;coutxy;Complex num(x,y);int i=4;while(!(num=zero) mul=mul*num; coutab; num.real =a;num.imag =b;i+; if(mul.imag 0)coutab; coutcd; Complex num1(a,b),num2(c,d),div,zero(0,0); div=num1/num2; double x,y;coutxy;Comple
15、x num(x,y);int i=4;while(num!=zero) div=div/num; coutab; num.real =a;num.imag =b;i+; if(div.imag0)coutstrChoise; if(strcmp(strChoise,“1“)=0) /用户选 1 则调用 Add()函数Add(); else if(strcmp(strChoise,“2“)=0) /用户选 2 则调用 Sub()函数 Sub(); else if(strcmp(strChoise,“3“)=0) /用户选 3 则调用 Mul()函数Mul(); else if(strcmp(strChoise,“4“)=0) /用户选 4 则调用 Div()函数Div(); else if(strcmp(strChoise,“0“)=0) /用户选 0 则结束调用函数 cout“nnt 欢迎下次继续使用复数计算器!nn“; else cout“nt 输入错误,请按任意键继续!n“; 7.实验总结(程序调试体会、收获)通过本次试验 对面性对象有了进一步了解