实验报告
题目:复数的四则运算
班级: 13信管 姓名:白浩然 学号:201340403034 完成日期:2014.05.21
一、需求分析
1.本演示程序中复数由两个相互之间存在次序关系的实数构成。
2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据和运算结果显示在其后。
3.程序执行的命令包括:
1)由输入的实部和虚部生成一个复数;2)两个复数求和;3)两个复数求差;4)两个复数求积;5)从已知复数中分离出实部;6)从已知复数中分离出虚部。
4.测试数据:
1)构造复数:
2) 复数求和:
3) 复数求差:
4) 复数求积:
5) 提取实部:
6) 提取虚部:
2、 编码实现
#include "stdio.h"
#include "stdlib.h"
struct complex{
float real;//实部
float imag;//虚部
};
//构造复数
void InitComplex(complex &c,float r1,float r2)
{
c.real=r1;//r1为实部
c.imag=r2;//r2为虚部
}
//复数求和
void AddComplex(complex &c,complex c1,complex c2)
{
c.real=c1.real+c2.real;//实部相加
c.imag=c1.imag+c2.imag;//虚部相加
}
//复数求差
void SubComplex(complex &c,complex c1,complex c2)
{
c.real=c1.real-c2.real;//实部相减
c.imag=c1.imag-c2.imag;//虚部相减
}
//复数求积
void MulComplex(complex &c,complex c1,complex c2)
{
c.real=(c1.real*c2.real)-(c1.imag*c2.imag);
c.imag=(c1.real*c2.imag)+(c2.real*c1.imag);
}
//分离实部
void RealComplex(complex c,float &r)
{
r=c.real;
}
//分离虚部
void ImagComplex(complex c,float &r)
{
r=c.imag;
}
//主程序
void main()
{
complex c,c1,c2;
float r,r1,r2,r11,r22,r12,r21;
int node;
printf("请输入要操作的序号:\n");
printf("1.构造一个复数 2.两个复数求和 3.两个复数求差\n");
printf("4.两个复数求积 5.分离出实部 6.分离出虚部\n");
scanf("%d",&node);
while(node!=0)
{
switch(node){
case 1:printf("输入复数的实部和虚部:\n");
scanf("%f %f",&r1,&r2);
InitComplex(c,r1,r2);
printf("构造的复数为:%f+%fi\n",c.real,c.imag);
break;
case 2:printf("输入c1的实部和虚部:\n");
scanf("%f %f",&r11,&r12);
InitComplex(c1,r11,r12);
printf("输入c2的实部和虚部:\n");
scanf("%f %f",&r21,&r22);
InitComplex(c2,r21,r22);
AddComplex(c,c1,c2);
printf("结果为:%f+%fi\n",c.real,c.imag);
break;
case 3:printf("输入c1的实部和虚部:\n");
scanf("%f %f",&r11,&r12);
InitComplex(c1,r11,r12);
printf("输入c2的实部和虚部:\n");
scanf("%f %f",&r21,&r22);
InitComplex(c2,r21,r22);
SubComplex(c,c1,c2);
printf("结果为:%f+%fi\n",c.real,c.imag);
break;
case 4:printf("输入c1的实部和虚部:\n");
scanf("%f %f",&r11,&r12);
InitComplex(c1,r11,r12);
printf("输入c2的实部和虚部:\n");
scanf("%f %f",&r21,&r22);
InitComplex(c2,r21,r22);
MulComplex(c,c1,c2);
printf("结果为:%f+%fi\n",c.real,c.imag);
break;
case 5:printf("输入复数的实部和虚部:\n");
scanf("%f %f",&r1,&r2);
InitComplex(c,r1,r2);
RealComplex(c,r);
printf("实部为:%f\n",r);
break;
case 6:printf("输入复数的实部和虚部:\n");
scanf("%f %f",&r1,&r2);
InitComplex(c,r1,r2);
ImagComplex(c,r);
printf("虚部为:%f\n",r);
break;
default:printf("结束");
}
scanf("%d",node);
}
}
3、 调试分析
1. 开始时文件后缀写成了“.c”,导致调试多次无法运行,后来改为“.cpp”;
2. 多处“%f”写成了“%d”,导致程序不能正常运行;
3. 定义结构体时,最后一个“}”后忘记加“;”,导致程序出现错误,以后应多加注意。
展开阅读全文