《数据结构》实验报告
院系应用科技学院专业电子信息工程姓名陈高雪学号120352010054
电话150********
10 级电信班2011 年10 月11日
1.实验目的
了解并掌握用c语言来编写数据结构源程序的方法。
2.需求分析
首先建立一个复数,然后根据提示用户输入两个复数,
使得能同时进行两个复数的加、减、乘、除运算。
输入形式和输入值的范围:分别输入两个复数,其格
式为:a+bi用enter结束输入。
输出的形式:按程序规定输出其运算值,如:运算后
只有实数时只输出实数虚数部分不表示,反之一样。
3.概要设计
(1)为了实现上述程序的功能,需要定义一个表示复数
的抽象数据类型。
(2)本程序包含的函数:
●主函数main()
●构造函数typedef struct {};
●调用函数:fushu ceartfushu(float a,float
b)
fushu add(fushu c1,fushu c2)
fushu sub(fushu c1,fushu c2)
fushu mul(fushu c1,fushu c2)
fushu div(fushu cv1,fushu c2)
void print_Z(fushu z)
各函数关系如下:
(3)主函数的伪码
main()
{
说明一个构造函数fushu;
定义两个实数和虚数分别为z1,z2;
定义符号变量ch;
提示输入实数和虚数z1,z2;
调用子函数;
提示输入+ - * /;
循环做下面处理直至输入“0”:
{
判断输入的符号做下面处理:
{
输入+时,调用加法子函数,打印
输出;
输入-时,调用减法子函数,打印
输出;
输入*时,调用乘法子函数,打印
输出;
输入/时,调用除法子函数,打印
输出;
提示输入+-*/;
}
}
}
4.详细设计
#include
typedef struct Complex //构造一个复数Complex
{
float real; //定义实数为real float imag; //定义虚数为image
}fushu;
fushu ceartfushu(float a,float b); //调用函数的宏定义
fushu add(fushu c1,fushu c2);
fushu sub(fushu c1,fushu c2);
fushu mul(fushu c1,fushu c2);
fushu div(fushu cv1,fushu c2);
void print_Z(fushu z);
fushu ceartfushu(float a,float b) //复数调用函数{
fushu z; //定义一个复数z
z.real=a; //将a付给z的实部
z.imag=b; //将b付给z的虚部
return z;
}
fushu add(fushu c1,fushu c2) //加法调用函数{
fushu sum;
sum.real=c1.real+c2.real; //实部加法运算
sum.imag=c1.imag+c2.imag; //虚部加法运算return sum;
}
fushu sub(fushu c1,fushu c2) //减法调用函数{
fushu cha;
cha.real=c1.real-c2.real; //实部减法运算
cha.imag=c1.imag-c2.imag; //虚部减法运算
return cha;
}
fushu mul(fushu c1,fushu c2) //乘法调用函数
{
fushu ji;
ji.real=c1.real*c2.real-c1.imag*c2.imag; //实部乘法运算
ji.imag=c1.imag*c2.real+c1.real*c2.imag; //虚部乘法运算
return ji;
}
fushu div(fushu c1,fushu c2) //除法调用函数
{
fushu shang;
shang.real=(c1.real*c2.real+c1.imag*c2.imag)/(c2. real*c2.real+c2.imag*c2.imag); //实部除法运算shang.imag=(c1.imag*c2.real-c1.real*c2.imag)/(c2 .real*c2.real+c2.imag*c2.imag); //虚部除法运算return shang;
}
void print_Z(fushu z) //输出调用函数
{
if (z.imag==0) //判断运算后虚数部分是否为0
printf("结果为:%0.2f\n",z.real); //是,就输出实部
else
if(z.real==0) //判断运算后实数部分是否为0
printf("结果为:%0.2fi\n",z.imag); //是,就输出虚部
else
printf("结果为:%0.2f+%0.2fi\n",z.real,z.imag); //否则输出实数和虚部
}
void main()
{
fushu v1,v2,sum,cha,ji,shang;
float z1,z2; //定义实部和虚部
char ch; //定义符号
printf("please inpur first fushu number:"); //提示输入第一个复数
scanf("%f+%fi",&z1,&z2); //输入语句
v1=ceartfushu(z1,z2); //赋值语句
printf("the other one:"); //提示输入
scanf("%f+%fi",&z1,&z2);
v2=ceartfushu(z1,z2);
printf("please choice operation: +, -, * or /:");//提示输入运算符号
getchar(); //收集运算符ch=getchar(); //将收集到的符号赋给ch while(ch!='0') //循环语句
{
switch(ch) //判断语句
{
case'+': sum=add(v1,v2);print_Z(sum);break; /*调用子函数运算语句*/
case'-': cha=sub(v1,v2);print_Z(cha);break;
case'*': ji=mul(v1,v2);print_Z(ji);break;
case'/':
shang=div(v1,v2);print_Z(shang);break;