《数据结构》实验报告
目:复数的四则运算
专业: 计算1191
学号: 2011957032
姓名:孙幸杰
2012-2013学年第一学期
一 实验内容
实验1 抽象数据类型复数的实现
二 实验目的
1.
一个可以进行复数运算的演示程序
三 需求
实现下列六种基本预算:
1) 由输入的实部虚部生成一个复数;
2) 两个复数求和;
3) 两个复数求差;
4) 两个复数求积;
5) 从已知复数中分离出实部;
6) 从已知复数中分离出虚部;
四 详细设计
源程序:
# include "stdio.h"
# include "stdlib.h"
struct complex{
float real;
float imaginary;
};
void InitComplex(complex &c,float r1,float r2)
{
c.real=r1;
c.imaginary=r2;
}
void AddComplex(complex &c,complex c1,complex c2)
{
c.real=c1.real+c2.real;
c.imaginary=c1.imaginary+c2.imaginary;
}
void SubComplex(complex &c,complex c1,complex c2)
{
c.real=c1.real-c2.real;
c.imaginary=c1.imaginary-c2.imaginary;
}
void MulComplex(complex &c,complex c1,complex c2)
{
c.real=(c1.real*c2.real)-(c1.imaginary*c2.imaginary);
c.imaginary=(c1.real*c2.imaginary)+(c2.real*c1.imaginary);
}
void RealComplex(complex c,float &r)
{
r=c.real;
}
void ImaComplex(complex c,float &r)
{
r=c.imaginary;
}
void main()
{
complex c,c1,c2;
float r,r1,r2,r11,r12,r21,r22;
int node;
printf("请?输o?入¨?序¨°号?:\n");
printf("1:构1造¨?复??数oy;2:复??数oy求¨?和¨a;3:复??数oy求¨?差?\n");
printf("4:复??数oy求¨?积y;5:返¤|ì回?实o|ì部?;6:返¤|ì回?虚¨|部?\n");
scanf("%d",&node);
while(node!=0)
{
switch(node){
case 1: printf("请?输o?入¨?复??数oy:êo实o|ì部?,ê?虚¨|部?\n");
scanf("%f,%f",&r1,&r2);
InitComplex(c,r1,r2);
printf("构1造¨?复??数oy:c=%f+i%f\n",c.real,c.imaginary);
break;
case 2: printf("请?输o?入¨?复??数oyc1的ì?:êo实o|ì部?,ê?虚¨|部?\n");
scanf("%f,%f",&r11,&r12);
InitComplex(c1,r11,r12);
printf("请?输o?入¨?复??数oyc2的ì?:êo实o|ì部?,ê?虚¨|部?\n");
scanf("%f,%f",&r21,&r22);
InitComplex(c2,r21,r22);
AddComplex(c,c1,c2);
printf("结¨¢果?为a:c=%f+i%f\n",c.real,c.imaginary);
break;
case 3: printf("请?输o?入¨?复??数oyc1的ì?:êo实o|ì部?,ê?虚¨|部?\n");
scanf("%f,%f",&r11,&r12);
InitComplex(c1,r11,r12);
printf("请?输o?入¨?复??数oyc2的ì?:êo实o|ì部?,ê?虚¨|部?\n");
scanf("%f,%f",&r21,&r22);
InitComplex(c2,r21,r22);
SubComplex(c,c1,c2);
printf("结¨¢果?为a:c=%f+i%f\n",c.real,c.imaginary);
break;
case 4: printf("请?输o?入¨?复??数oyc1的ì?:êo实o|ì部?,ê?虚¨|部?\n");
scanf("%f,%f",&r11,&r12);
InitComplex(c1,r11,r12);
printf("请?输o?入¨?复??数oyc2的ì?:êo实o|ì部?,ê?虚¨|部?\n");
scanf("%f,%f",&r21,&r22);
InitComplex(c2,r21,r22);
MulComplex(c,c1,c2);
printf("结¨¢果?为a:c=%f+i%f\n",c.real,c.imaginary);
break;
case 5: printf("请?输o?入¨?复??数oyc的ì?:êo实o|ì部?,ê?虚¨|部?\n");
scanf("%f,%f",&r1,&r2);
InitComplex(c,r1,r2);
RealComplex(c,r);
printf("结¨¢果?为a:%f\n",r);
break;
case 6: printf("请?输o?入¨?复??数oyc的ì?:êo实o|ì部?,ê?虚¨|部?\n");
scanf("%f,%f",&r1,&r2);
InitComplex(c,r1,r2);
ImaComplex(c,r);
printf("结¨¢果?为a:%f\n",r);
break;
default:printf("结¨¢束o?");
}
}
}
加法程序展示:
减法程序展示:
求积程序展示:
分离出实部;
分离出虚部:
步骤五:实验总结
1. 通过本次实验,基本掌握抽象数据类型的定义方法及
;
2. 基本掌握C语言程序设计的规范操作
;
3. 编程过程中有些地方考虑不全面,程序不够健壮,;