数据结构实验之实现两个复数的四则运算
2013-08-15 17:11
281 查看
1.实验目的
了解并掌握用c语言来编写数据结构源程序的方法。
2.需求分析
首先建立一个复数,然后根据提示用户输入两个复数,使得能同时进行两个复数的加、减、乘、除运算。
输入形式和输入值的范围:分别输入两个复数,其格式为:a+bi用enter结束输入。
输出的形式:按程序规定输出其运算值,如:运算后只有实数时只输出实数虚数部分不表示,反之一样。
3.概要设计
(1)为了实现上述程序的功能,需要定义一个表示复数的抽象数据类型。
(2)本程序包含的函数:
l 主函数 main()
l 构造函数typedef struct {};
l 调用函数: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 <stdio.h>
typedef structComplex //构造一个复数Complex
{
float real; //定义实数为 real
float imag; //定义虚数为 image
}fushu;
fushuceartfushu(float a,float b); //调用函数的宏定义
fushu add(fushuc1,fushu c2);
fushu sub(fushuc1,fushu c2);
fushu mul(fushuc1,fushu c2);
fushu div(fushucv1,fushu c2);
void print_Z(fushuz);
fushuceartfushu(float a,float b) //复数调用函数
{
fushu z; //定义一个复数z
z.real=a; //将a付给z的实部
z.imag=b; //将b付给z的虚部
return z;
}
fushu add(fushuc1,fushu c2) //加法调用函数
{
fushu sum;
sum.real=c1.real+c2.real; //实部加法运算
sum.imag=c1.imag+c2.imag; //虚部加法运算
return sum;
}
fushu sub(fushuc1,fushu c2) //减法调用函数
{
fushu cha;
cha.real=c1.real-c2.real; //实部减法运算
cha.imag=c1.imag-c2.imag; //虚部减法运算
return cha;
}
fushu mul(fushuc1,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(fushuc1,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(fushuz) //输出调用函数
{
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 fushunumber:"); //提示输入第一个复数
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;
default: printf("enterdata error!\n"); printf("\n");
printf("please choiceoperation: +, -, * or /:"); //提示输入运算符
}
ch=getchar();
}
}
了解并掌握用c语言来编写数据结构源程序的方法。
2.需求分析
首先建立一个复数,然后根据提示用户输入两个复数,使得能同时进行两个复数的加、减、乘、除运算。
输入形式和输入值的范围:分别输入两个复数,其格式为:a+bi用enter结束输入。
输出的形式:按程序规定输出其运算值,如:运算后只有实数时只输出实数虚数部分不表示,反之一样。
3.概要设计
(1)为了实现上述程序的功能,需要定义一个表示复数的抽象数据类型。
(2)本程序包含的函数:
l 主函数 main()
l 构造函数typedef struct {};
l 调用函数: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 <stdio.h>
typedef structComplex //构造一个复数Complex
{
float real; //定义实数为 real
float imag; //定义虚数为 image
}fushu;
fushuceartfushu(float a,float b); //调用函数的宏定义
fushu add(fushuc1,fushu c2);
fushu sub(fushuc1,fushu c2);
fushu mul(fushuc1,fushu c2);
fushu div(fushucv1,fushu c2);
void print_Z(fushuz);
fushuceartfushu(float a,float b) //复数调用函数
{
fushu z; //定义一个复数z
z.real=a; //将a付给z的实部
z.imag=b; //将b付给z的虚部
return z;
}
fushu add(fushuc1,fushu c2) //加法调用函数
{
fushu sum;
sum.real=c1.real+c2.real; //实部加法运算
sum.imag=c1.imag+c2.imag; //虚部加法运算
return sum;
}
fushu sub(fushuc1,fushu c2) //减法调用函数
{
fushu cha;
cha.real=c1.real-c2.real; //实部减法运算
cha.imag=c1.imag-c2.imag; //虚部减法运算
return cha;
}
fushu mul(fushuc1,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(fushuc1,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(fushuz) //输出调用函数
{
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 fushunumber:"); //提示输入第一个复数
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;
default: printf("enterdata error!\n"); printf("\n");
printf("please choiceoperation: +, -, * or /:"); //提示输入运算符
}
ch=getchar();
}
}
相关文章推荐
- 数据结构与算法-实验3-自定义栈,并实现走迷宫问题
- 数据图像实验三:图像统计与结构c++实现
- 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
- 【数据结构与算法】实现四则运算
- 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
- 实现两个链表的合并 可变长顺序表设计 数据结构
- 数据结构实验2(二叉链表实现二叉树的基本运算)
- 数据结构实验2---表达式求值(“栈”实现)
- 程序员面试宝典之数据结构基础----C++两个栈实现一个队列功能
- 数据结构:题目(5)找两个字符串的最长公共子串(非递归实现方法)
- 数据结构实验1---约瑟夫环(“链表”实现)
- 数据结构:实验六(单循环链表实现链式队列)
- 数据结构实验课程----实验二(利用链表实现学生健康系统)
- 数据结构实验1 链表 实现学生信息存储,功能 增删改查,实现 结构类型
- 数据结构实验:栈实现计算器(表达式计算)
- 3345-数据结构实验之二叉树六:哈夫曼编码(优先队列实现)
- oracle triggers 实现两个结构相同的表的数据级联更新操作
- 20145205 java语言实现数据结构实验一
- 【数据结构实验】约瑟夫环的实现
- C/C++,数据结构实现两个链表的合并(尾插法建立单链表,求链表长度,直接插入排序)