云南大学软件学院数据结构实验1

  • 格式:doc
  • 大小:277.00 KB
  • 文档页数:8

下载文档原格式

  / 8
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验难度: A □ B □ C □

学期:2017秋季学期

任课教师: 刘宇

实验题目:

组员及组长:

承担工作:

联系电话:

电子邮件:

完成提交时间:2017年10月24日

一、【实验构思(Conceive)】(10%)

(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析)

实验要求制作一个复数计算器,要求能进行实数和虚数的混合运算,首先要解决的问题是复数的四则运算,确保运算正确无误。然后要解决的就是分离复数这个问题。分离复数最简单的方法就是输入复数的时候分别输入实部虚部,然后打印。但这过于简单,于是采取输入一个字符串来接入这个复数,然后用数组的方法进行实部虚部的分离。

用到的数学知识:复数四则运算,与或非运算,进行分支判断;

程序设计知识:目标分析->设计算法->程序编写->后期调试。

二、【实验设计(Design)】(20%)

(本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等)

抽象数据类型的定义:

typedef struct Complex //构造复数结构Complex

{

float real; //定义实部为real

float imag; //定义虚部为imag

}Complex;

基本操作:

功能一可以字符串形式输入一个复数,用数组的方法从字符串中分离出实部和虚部;功能二可以对输入的两个复数进行简单的加减乘除的四则运算。

模块:

加法函数:Complex Add(Complex z1, Complex z2)

减法函数:Complex Sub(Complex z1, Complex z2)

乘法函数:Complex Mul(Complex z1, Complex z2)

除法函数:Complex Div(Complex z1, Complex z2)

打印函数:void print_Complex(Complex z)

分离实部函数:float Getreal(Complex z)

分离虚部函数:float Getimag(Complex z)

分离函数:void spread_Complex()

算法伪码描述(分离函数):

输入一个复数字符串;实部标志为flag1,虚部标志为flag2,得到flag1和flag2的取值,判断该复数是否是完整的复数,或是纯实数、纯虚数;用符号来判断一个完整的复数的实部虚部,

如果判断出字符串中接收到了‘+’或者‘-’,则符号前面的算实部,将符号舍去,后面的即为虚部,直到遇上‘i’。

程序流程图:

三、【实现(Implement)】(30%)

(本部分应包括:抽象数据类型各操作的具体实现代码、关键操作的具体算法实现、函数实现,主程序实现等,并给出关键算法的时间复杂度分析。如有界面则需包括界面的关键实现方法等。)

主程序实现:打印功能选择的DOS窗口界面,输入功能选择,选择功能一调用复数分离函数,选择功能二则输入两个复数的实部和虚部,选择运算,+则调用加法函数,-号调用减法函数,*号调用乘法函数,/号调用除法函数,否则错误提示。

各主要函数实现:

1.加法函数:z.real = z1.real + z

2.real;

z.imag = z1.imag + z2.imag;

2.减法函数:z.real = z1.real - z2.real;

z.imag = z1.imag - z2.imag;

3.乘法函数:z.real = z1.real * z2.real+z1.imag*z2.imag;

z.imag = z1.real * z2.imag+z1.imag*z2.real;

4.除法函数:if( z2.real == 0 && z2.imag == 0) {

printf("ERROR! z2 is 0!\n");//判断除数是否为零

system("pause");

exit(0);

}else

z.real = (z1.real*z2.real-z1.imag*z2.imag)/(z1.real*z1.real-z1.imag*z1.imag);

z.imag = (z1.imag*z2.real-z1.real*z2.imag)/(z1.real*z1.real-z1.imag*z1.imag); 5.分离函数:

void spread_Complex()

{

char fushu[20] = { '\0' }, real[10] = { '\0' }, imag[10] = { '\0' };

int i = 0, j = 0, n = 0, k = 0, flag1 = 0, flag2 = 0;

printf("请输入一个复数字符串:");

getchar();

gets(fushu);

while (fushu[n] == ' ')

{

n++;

}

if (fushu[n] >= '0' && fushu[n] <= '9' || fushu[n] == '-' || fushu[n] == '+')

{

real[i] = fushu[n]; /*把第一个字符处理掉*/

i++;

n++;

for (k = i; k<20; k++)

{

if (fushu[k] == '+' || fushu[k] == '-')//判断是否为完整复数

flag1++;

else if (fushu[k] == 'i') /*判断是否为纯实数*/

flag2++;

}

if (flag2 > 1)

{

printf("ERROR!");

system("pause");

exit(0);

}

else if (flag2 == 0) /*判断为纯实数*/

{

printf("该复数实部为%s\n", fushu);

printf("该复数虚部为0\n");

system("pause");

exit(0);

}

else if (flag1 == 0) /*判断为纯虚数*/

{

imag[j] = real[0];

j++;

相关主题