C语言复数的运算(实验报告)

合集下载

实验一复数四则运算.doc

实验一复数四则运算.doc

实验一复数四则运算一、实验目的本次实验的主要目的在于帮助读者熟悉抽象数据类型的表示和实现方法。

抽象数据类型需借助固有数据类型来表示和实现,即利用高级程序设计语言中已存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作,具体实现细节则依赖于所用语言的功能.通过本次实习还可以帮助读者复习高级语言的使用方法.二、实验内容设计一个可进行复数运算的演示程序。

要求实现下列六种基本运算:1)由输入的实部和虚部生成一个复数;2)两个复数求和;3)两个复数求差;4)两个复数求积,5)从已知复数中分离出实部;6)从已知复数中分离出虚部。

运算结果以相应的复数或实数的表示形式显示。

三、实验仪器、设备及材料586以上微机四、实验原理复数在计算机中的表示及复数的四则运算规则.五、实验步骤1。

问题分析和任务定义;2。

数据类型和系统设计;3. 编码实现和静态检查;4。

上机准备和上机调试;5.总结和整理实验报告。

六、实验报告要求实验报告开头就给出题目、班级、姓名、学号和完成日期,并包括以下七个内容:1. 需求分析;2.概要设计;3.详细设计;4. 调试分析;5。

经验和体会等;6。

测试结果;7.附录。

七、实验注意事项实验前先预习,完成问题分析和任务定义的工作。

实验二集合的并、交和差运算一、实验目的本次实验的主要目的在于帮助学生熟练掌握线性表的基本操作在两种存储结构上的实现,其中以各种链表的操作和应用作为重点内容.二、实验内容编制一个能演示执行集合的并、交和差运算的程序。

三、实验仪器、设备及材料586以上微机四、实验原理利用链表的基本运算(插入、删除、查找及合并等)实现集合的基本运算。

五、实验步骤1。

问题分析和任务定义;2.数据类型和系统设计;3。

编码实现和静态检查;4。

上机准备和上机调试;5。

总结和整理实验报告。

六、实验报告要求实验报告开头就给出题目、班级、姓名、学号和完成日期,并包括以下七个内容:1.需求分析;2。

概要设计;3.详细设计;4.调试分析;5. 经验和体会等;6.测试结果;7. 附录。

C语言中的复数

C语言中的复数

C语⾔中的复数
上学时,⽼师布置了⼀个作业,就是⽤C写段程序,画功率谱谱图。

由于有好⼏个公式⾥都有复数的情况,⽽当时不知如何表⽰复数,就⽤实数代替了。

最近⼀段时间学习C,知道了C中也有复数类型,所以贴出来和⼤家分享。

⼀、C中有三个类型可以储存复数:
float _Complex:实部和虚部都为float类型;
double _Complex:实部和虚部都为double类型;
long double _Complex:实部和虚部都为long double类型;
⼆、_Complex不免有些复杂,只要加⼊头⽂件<complex.h>即可,⽤complex代替_Complex,该头⽂件把虚部定义成‘I’,所以定义⼀个复数可以这样:
float complex z=a+bI; //a,b都为float类型
三、两个函数(其他函数还未学习)
double real_part=creal(z);//得到Z的实部
double imag_part=cimag(z);//得到Z的虚部
在处理float和long double类型时,⽤crealf()和creall(),cimagf()和cimagl()。

四、定义纯虚数
double imaginary z=5.3I;。

c++语言对复数的四则运算的实现

c++语言对复数的四则运算的实现

c++语言对复数的四则运算的实现要求:1.定义复数的结构体2.定义四则运算四种运算函数3.利用函数的调用和参数传递,通过键盘输入(cin的方式)进行运算的两个复数4.结果的输出必须用cout的方式c++语言对复数的四则运算的实现要求:1.定义复数的结构体2.定义四则运算四种运算函数3.利用函数的调用和参数传递,通过键盘输入(cin的方式)进行运算的两个复数4.结果的输出必须用cout的方式#include <iostream.h>struct complex{double real;//复数的实部double image;//复数的虚部};void main(){int i;char calu;complex num1;complex num2;cout<<"请输入第一个复数:"<<endl;cout<<"第一个复数的实部:num1.real=";cin>>num1.real;cout<<"第一个实数的虚部:num1.image=";cin>>num1.image;cout<<"请输入第二个复数:"<<endl;cout<<"第二个实数的实部:num2.real=";cin>>num2.real;cout<<"第二个实数的虚部:num2,image=";cin>>num2.image;loop:cout<<"输入所进行运算的运算符(+,-,*,/):"<<endl;cin>>calu;switch (calu){case'+':double m;double n;m=num1.real+num2.real;n=num1.image+num2.image;cout<<"两个复数的和是:"<<endl;if (n==0)cout<<m<<endl;else if (m==0)cout<<n<<'i'<<endl;else if (n<0)cout<<m<<n<<'i'<<endl;elsecout<<m<<'+'<<n<<'i'<<endl;break;case'-':m=num1.real-num2.real;n=num1.image-num2.image;cout<<"两个复数的差是:"<<endl;if (n==0)cout<<m<<endl;else if (m==0)cout<<n<<'i'<<endl;else if (n<0)cout<<m<<n<<'i'<<endl;elsecout<<m<<'+'<<n<<'i'<<endl;break;case'*':m=(num1.real*num2.real)-(num1.image*num2.image);n=(num1.real*num2.image)+(num2.real*num1.image);cout<<"两个复数的积是:"<<endl;if (n==0)cout<<m<<endl;else if (m==0)cout<<n<<'i'<<endl;else if (n<0)cout<<m<<n<<'i'<<endl;elsecout<<m<<'+'<<n<<'i'<<endl;break;case'/':m=(num1.real*num2.real+num1.image*num2.image)/(num2.real*num2.real+num2.image*num2.image);n=(num1.image*num2.real-num1.real*num2.image)/(num2.real*num2.real+num2.image*nu m2.image);;cout<<"两个复数的商是:"<<endl;if(num2.real==0&&num2.image==0)cout<<"分母为零,不可以进行运算。

数据结构实验抽象数据类型——复数运算报告

数据结构实验抽象数据类型——复数运算报告

【实验题目】实验1. 抽象数据类型. 【问题描述】用C 或C++语言设计并实现一个可进行复数运算的演示程序。

【基本要求】1.由输入的实部和虚部生成一个复数2.两个复数求和3.两个复数求差4.从已知复数中分离出实部和虚部5.复数及相应运算结果以相应的表现形式显示。

【实现提示】定义复数为由两个相互之间存在次序关系的实数构成的抽象数据类型,则可以利用实数的操作来实现复数的操作。

(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四) 一、【实验构思(Conceive )】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)1. 首先构造结构体数组接受储存数据2. 构造函数进行模块运算3. 应用到了算法中的抽象数据类型ADT (即数据+操作),数据部分包括实部和虚部;操作部分包括加分Plus 、减法Minus 、乘法Multiply 、除法Divide 4. 运用到了复数的基本知识及四则运算法则:设 z 1=a + bi ,z 2=c + di ,(a ,b ,c ,d ∈R ,)加减法:(a + bi )±(c + di )=(a ± c )+(b ± d )i 乘法:(a + bi )*(c + di )=(ac - bd )+(ad + bc )i除法: 2222()()()()a bi a bi c di ac bd bc ad ic di cd c d++-+-==+++ 二、【实验设计(Design)】(15%) (本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系) 解答:抽象数据类型 数据部分:用结构体(数组)实现复数的储存结构 操作部分:实现复数的输入、存储、运算及输出 程序模块伪码说明: #define N 2int n=0; //控制选择语句,及检验输入是否正确 typedef struct{double real;//复数的实部double imag;//复数的虚部}paramater; //paramater是结构体变量的类型表示“复数”,声明复数的存储结构paramater cpxNum[N];//构造结构体数组储存数据paramater result;//构造result结构体储存结果int main(){//实现第一个复数的输入储存cout<<"\t请输入第一个复数的实部和虚部:";cin>>real>>imag;outs(c[0].real,c[0].imag)//初始化复数c[0]并实现输出//实现第二个复数的输入储存cout<<"\t请输入第二个复数的实部和虚部:";cin>>real>>imag;puts( c[0].real,c[0].imag);//初始化复数c[1]并实现输出//复数运算cout << "c1 + c2的结果是: "; puts(plus(c[0],c[1])); cout << endl; //调用plus函数运算加法,再用puts函数输出结果复数cout << "c1 - c2的结果是: "; puts(milus(c[0],c[1])); cout << endl; //调用mlius函数运算减法,再用puts函数输出结果复数cout << "c1 * c2的结果是: "; puts(multiply(c[0],c[1])); cout << endl; //调用multiply函数运算乘法,再用puts函数输出结果复数cout << "c1 / c2的结果是: "; puts(divide(c[0],c[1])); cout << endl; //调用divide函数运算除法,再用puts函数输出结果复数return 0;}三、【实现描述(Implement)】(25%)(本部分应包括:抽象数据类型具体实现的函数原型说明、关键操作实现的伪码算法、函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。

复数四则运算c语言(加减乘除)

复数四则运算c语言(加减乘除)

# 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 multiplyComplex (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 divideComplex(complex &c,complex c1,complex c2){c.real=(c1.real*c2.real+c1.imaginary*c2.imaginary)/(c2.real*c2.real+c2.imaginary*c2.imaginary);c.imaginary=(c1.imaginary*c2.real-c1.real*c2.imaginary)/(c2.real*c2.real+c2.imaginary*c2.imagi nary);}void main(){complex c,c1,c2;float r,r1,r2,r11,r12,r21,r22;int node;printf("qing shu ru xu hao:\n");printf("1:Read complex number;2: Print the complex number;3: Calculates the sum \n");printf("4: Calculates the difference;5: Calculates the product;6: Calculates the division \n");scanf("%d",&node);while(node!=0){switch(node){case 1: printf("please input the real part and the imaginary part \n");scanf("%f%f",&r1,&r2);InitComplex(c,r1,r2);printf("the complex number:c=%f+i%f\n",c.real,c.imaginary);break;case 2: printf("the complex number:c=%f+i%f\n",c.real,c.imaginary);break;case 3: printf("please input the real part and the imaginary part of number 1\n");scanf("%f%f",&r11,&r12);InitComplex(c1,r11,r12);printf("please input the real part and the imaginary part of number 2\n");scanf("%f%f",&r21,&r22);InitComplex(c2,r21,r22);AddComplex(c,c1,c2);printf("Sum:c=%f+i%f\n",c.real,c.imaginary);break;case 4: printf("please input the real part and the imaginary part of number 1\n");scanf("%f%f",&r11,&r12);InitComplex(c1,r11,r12);printf("please input the real part and the imaginary part of number 2\n");scanf("%f%f",&r21,&r22);InitComplex(c2,r21,r22);SubComplex(c,c1,c2);printf("Difference:c=%f+i%f\n",c.real,c.imaginary);break;case 5: printf("please input the real part and the imaginary part of number 1\n");scanf("%f%f",&r11,&r12);InitComplex(c1,r11,r12);printf("please input the real part and the imaginary part of number 2\n");scanf("%f%f",&r21,&r22);InitComplex(c2,r21,r22);multiplyComplex (c,c1,c2);printf("Product:c=%f+i%f\n",c.real,c.imaginary);break;case 6: printf("please input the real part and the imaginary part of number 1\n");scanf("%f%f",&r11,&r12);InitComplex(c1,r11,r12);printf("please input the real part and the imaginary part of number 2\n");scanf("%f%f",&r21,&r22);InitComplex(c2,r21,r22);divideComplex(c,c1,c2);printf("Division:c=%f+i%f\n",c.real,c.imaginary);break;default:printf("Over");}scanf("%d",&node);}}。

(完整word版)C++实验报告

(完整word版)C++实验报告

C++课程设计报告课程设计题目:复数计算器目录一.概述 (3)二.设计分析 (3)1.问题分析 (3)2.结构分析 (3)3.结构图 (3)4.类结构分析 (4)5.类结构图 (4)三.主程序 (5)1.程序源代码 (5)2.测试结果 (7)四.不足之处 (8)五.设计中遇到的问题及解决办法 (8)六.心得体会 (9)一.概述:程序功能介绍:该程序是一个数学问题求解程序,运用程序对复数进行四则运算。

设计要求:一开始运行程序,要求有菜单选项界面,用户不选择退出就可以反复进行运算。

二.设计分析:1.问题分析:要求实现复数计算的功能,因此,建立一个复数类complex,定义复数类,四则运算。

本程序的基本思想就是复数公式的应用:(a+bi)+(c+di)=(a+c)+(b+d)i;(a+bi)-(c+di)=(a-c)+(b-d)i;(a+bi)*(c+di)=(ac-bd)+(bc+ad)i;(a+bi)/(c+di)=(ac+bd)/(c^2+d^2)+(bc-ad)/(c^2+d^2);2..流程分析:1.执行main函数,选择执行的功能;2.输入选项,系统自动输出运算的结果;3.可不退出,继续进行下次选择。

3..流程图4.类结构分析:5.类结构图:三.主程序: 1.程序源代码:#include<iostream> #include<stdlib.h> using namespace std; class Complex{ private: double x,y; public: Complex(int xx=0,int yy=0):x(xx),y(yy){} ~Complex(){} double GetX(){return x;} double GetY(){return y;} Complex operator+(Complex cc); Complex operator-(Complex cc); Complex operator*(Complex cc); Complex operator/(Complex cc); void show(); };Complex Complex::operator+(Complex cc)//复数加法 { Complex temp; temp.x=x+cc.x; temp.y=y+cc.y;return temp;}Complex Complex::operator-(Complex cc)//复数减法{Complex temp;temp.x=x-cc.x;temp.y=y-cc.y;return temp;}Complex Complex::operator*(Complex cc)//复数乘法{Complex temp;temp.x=x*cc.x-y*cc.y;temp.y=x*cc.y+y*cc.x;return temp;}Complex Complex::operator/(Complex cc)//复数除法{Complex temp;double d=(cc.x*cc.x+cc.y*cc.y);temp.x=(double)(x*cc.y+y*cc.x)/d;temp.y=(double)(x*cc.x-y*cc.y)/d;return temp;}void Complex::show(){cout<<"The Complex Is: ("<<GetX()<<","<<GetY()<<")"<<endl; }void menu(){cout<<"1.+"<<endl;cout<<"2.-"<<endl;cout<<"3.*"<<endl;cout<<"4./"<<endl;cout<<"0.Exit"<<endl;cout<<"Your choice:";}int main(){Complex cc1(1,2),cc2(3,4);Complex cc3;,int sel;while(1){menu();cin>>sel;switch(sel){case 1:cc3=cc1+cc2;cc3.show();break;case 2:cc3=cc1-cc2;cc3.show();break;case 3:cc3=cc1*cc2;cc3.show();break;case 4:cc3=cc1/cc2;cc3.show();break;case 0:exit(0);break;default:cout<<"Error Input ...";break;}}return 0;}2.测试结果:四.不足之处:1.给流程图不能输入任意数字计算;2.不能同时进行多个多项式的四则运算;3.缺少测试功能,通过该功能可以考察用户是否会计算复数(系统会提供算式,用户自己填写答案,最后会得出答案,告知用户是否正确)。

C语言复数的运算

C语言复数的运算

C语言复数的运算实验名称:C语言复数的运算实验目的:1.理解复数的概念及其在数学上的运算规则;2.掌握在C语言中实现复数运算的方法;3.通过编写程序实现复数加减乘除等运算。

实验原理:复数是由实部和虚部组成的数字,可表示为 a + bi,其中a为实部,b为虚部。

复数的运算包括加法、减法、乘法和除法四种基本运算。

1.复数的加法:两个复数a1+b1i和a2+b2i的和为(a1+a2)+(b1+b2)i。

2.复数的减法:两个复数a1+b1i和a2+b2i的差为(a1-a2)+(b1-b2)i。

3.复数的乘法:两个复数a1+b1i和a2+b2i的乘积为(a1a2-b1b2)+(a1b2+a2b1)i。

4.复数的除法:两个复数a1+b1i和a2+b2i的商为[(a1a2+b1b2)/(a2^2+b2^2)]+[(a2b1-a1b2)/(a2^2+b2^2)]i。

实验器材:计算机、C语言编译器。

实验步骤:2. 在源文件中引入头文件<math.h>,该头文件包含了数学函数的声明和宏定义。

3.定义一个复数的结构体,包括实部和虚部两个成员变量。

```cdouble real; // 实部double imag; // 虚部```4.编写函数实现复数加法运算。

```cresult.real = c1.real + c2.real;result.imag = c1.imag + c2.imag;return result;```5.编写函数实现复数减法运算。

```cresult.real = c1.real - c2.real;result.imag = c1.imag - c2.imag;return result;```6.编写函数实现复数乘法运算。

```cresult.real = c1.real * c2.real - c1.imag * c2.imag;result.imag = c1.real * c2.imag + c2.real * c1.imag;return result;```7.编写函数实现复数除法运算。

用c语言编程计算复数

用c语言编程计算复数

VC++ 6.0下用c 语言编程计算复数(电气专业专用)欧拉公式:θθθθ∠=+=1sin cos j ej学过电路的人都知道,欧拉公式在电路中应用很广,特别是遇到正弦量的题,别说有多烦, 代数复数和极坐标复数的转化计算超级麻烦,不做过电路题的人是不能理解的,介于此,本人想通过c 语言来简化这一操作,如果是代数复数的直接输入实部和虚部,如果是极坐标的直接输入模和相角,转化和计算交给程序和计算机去做吧!要使用此程序必须要有c 的编程环境,这里推荐大家使用VC++系类的。

各位同学如果学过c 语言的应该不会陌生的。

下面教大家如何创建一个工程区—工程—源文件。

要先创建一个文件夹用来存放工程区,工程,和c语言,要有良好的习惯。

打开之后使用快捷键“Ctrl+n”打开新建目录对话框。

后点击ok,工程区创建完成。

再使用快捷键“Ctrl+n”,选中projects,名字自定义,其他的如图所示,点击ok。

点击完finish之后,再点击一次ok,工程创建完成。

选中工程,再来一次快捷键“Ctrl+n”。

跟前面操作差不多,就是输入个名字而已,我们编的是c语言,一定要加后缀名.c,否则默认为.cpp,点击ok完成源文件创建。

下面把程序复制到源文件里面:#include<stdio.h>#include<math.h>#define PI 3.1415926double Re(double m,double zeta) /*极坐标转换实部*/{double r;r=m*cos(PI*zeta/180);return r;}double Im(double m,double zeta) /*极坐标转换虚部*/{double j;j=m*sin(PI*zeta/180);return j;}double Mo(double x,double y) /*复数转换为幅值*/{double m;m=sqrt(x*x+y*y);return m;}double Phi(double x,double y) /*复数输出相角*/{double zeta;zeta=180/PI*atan(y/x);if((x>=0&&y>=0)||(x>=0&&y<0)) /*第一、四限角*/return zeta;else if((x<0&&y<0)||(x<0&&y>=0)) /*第二、三限角*/return (zeta+180);return 0;}void input(double *one,double *two,int *pwn) /*选择复数输入形式,并输入该数,并返回3个值*/{int w;double u,v;printf("请选择数的输入类别:1为复数输入,0为极坐标方式输入\n");scanf("%d",&w);if(w){printf("以复数形式输入该数,先输入实部,再输入虚部:\n");scanf("%lf%lf",&u,&v);*one=u;*two=v;*pwn=1;}else{printf("以极坐标形式输入该数,先输入幅值,再输入相角:\n");scanf("%lf%lf",&u,&v);*one=u;*two=v;*pwn=0;}}void main(){double a1,a2,b1,b2,d1,d2,e1,e2,f1,f2,g1,g2;int pwn1,pwn2,c1,c2,c3; /*pwn为标志位,为1时表示以复数输入,为0时表示以极坐标形式输入*/printf("请输入第一个复数\n");input(&a1,&a2,&pwn1);printf("请输入第二个复数\n");input(&b1,&b2,&pwn2);printf("请选择算法种类:加法和减法为1;乘法和除法为0\n");scanf("%d",&c1);if(c1) /*c1为真执行加减法*/{printf("选择加法输入1,选择减法输入0\n");scanf("%d",&c2);if(!pwn1) //加减法用复数方便多了.{d1=Re(a1,a2);d2=Im(a1,a2);}else{d1=a1;d2=a2;}if(!pwn2){e1=Re(b1,b2);e2=Im(b1,b2);}else{e1=b1;e2=b2;}if(c2) //c2为真执行加法.{{f1=d1+e1;f2=d2+e2;g1=Mo(f1,f2);g2=Phi(f1,f2);}printf("输出结果为:\n");if(!pwn1&&!pwn2)printf("%.3f/_%.2f°+%.3f/_%.2f°=\n",a1,a2,b1,b2);if(!pwn1&&pwn2)printf("%.3f/_%.2f°+%.3f+%.3fi=\n",a1,a2,b1,b2);if(pwn1&&!pwn2)printf("%.3f+%.3fi+%.3f/_%.2f°=\n",a1,a2,b1,b2);if(pwn1&&pwn2)printf("%.3f+%.3fi+%.3f+%.3fi=\n",a1,a2,b1,b2);printf("复数形式为:%.3f+%.3fi\n",f1,f2);printf("极坐标形式为:%.3f/_%.2f\n",g1,g2);}else //c2为假执行减法.{{f1=d1-e1;f2=d2-e2;g1=Mo(f1,f2);g2=Phi(f1,f2);}printf("输出结果为:\n");if(!pwn1&&!pwn2)printf("%.3f/_%.2f°-%.3f/_%.2f°=\n",a1,a2,b1,b2);if(!pwn1&&pwn2)printf("%.3f/_%.2f°-%.3f+%.3fi=\n",a1,a2,b1,b2);if(pwn1&&!pwn2)printf("%.3f+%.3fi-%.3f/_%.2f°=\n",a1,a2,b1,b2);if(pwn1&&pwn2)printf("%.3f+%.3fi-%.3f+%.3fi=\n",a1,a2,b1,b2);printf("复数形式为:%.3f+%.3fi\n",f1,f2);printf("极坐标形式为:%.3f/_%.2f\n",g1,g2);}}else //乘除法化极坐标形式方便多啦.{printf("选择乘法输入1,选择除法输入0\n");scanf("%d",&c3);if(pwn1){d1=Mo(a1,a2);d2=Phi(a1,a2);}else{d1=a1;d2=a2;}if(pwn2){e1=Mo(b1,b2);e2=Phi(b1,b2);}else{e1=b1;e2=b2;}if(c3) //c3为真执行乘法.{{f1=d1*e1;f2=d2+e2;g1=Re(f1,f2);g2=Im(f1,f2);}printf("输出结果为:\n");if(!pwn1&&!pwn2)printf("%.3f/_%.2f°*%.3f/_%.2f°=\n",a1,a2,b1,b2);if(!pwn1&&pwn2)printf("%.3f/_%.2f°*(%.3f+%.3fi)=\n",a1,a2,b1,b2);if(pwn1&&!pwn2)printf("(%.3f+%.3fi)*%.3f/_%.2f°=\n",a1,a2,b1,b2);if(pwn1&&pwn2)printf("(%.3f+%.3fi)*(%.3f+%.3fi)=\n",a1,a2,b1,b2);printf("复数形式为:%.3f+%.3fi\n",g1,g2);printf("极坐标形式为:%.3f/_%.2f\n",f1,f2);}else //c3为假执行除法{{f1=d1/e1;f2=d2-e2;g1=Re(f1,f2);g2=Im(f1,f2);}printf("输出结果为:\n");if(pwn1&&pwn2)printf("%.3f/_%.2f°/%.3f/_%.2f°=\n",a1,a2,b1,b2);if(pwn1&&!pwn2)printf("%.3f/_%.2f°/(%.3f+%.3fi)=\n",a1,a2,b1,b2);if(!pwn1&&pwn2)printf("(%.3f+%.3fi)/%.3f/_%.2f°=\n",a1,a2,b1,b2);if(!pwn1&&!pwn2)printf("(%.3f+%.3fi)/(%.3f+%.3fi)=\n",a1,a2,b1,b2);printf("复数形式为:%.3f+%.3fi\n",g1,g2);printf("极坐标形式为:%.3f/_%.2f\n",f1,f2);}}}按顺序点击三个图标,编译完成并执行程序。

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

实验报告
题目:复数的四则运算
班级:13信管姓名:白浩然学号:201340403034 完成日期:2014.05.21
一、需求分析
1.本演示程序中复数由两个相互之间存在次序关系的实数构成。

2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据和运算结果显示在其后。

3.程序执行的命令包括:
1)由输入的实部和虚部生成一个复数;2)两个复数求和;3)两个复数求差;4)两个复数求积;5)从已知复数中分离出实部;6)从已知复数中分离出虚部。

4.测试数据:
1)构造复数:
2)复数求和:
3)复数求差:4)复数求积:
5)提取实部:6)提取虚部:
二、编码实现
#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);
}
}
三、调试分析
1.开始时文件后缀写成了“.c”,导致调试多次无法运行,后来改为“.cpp”;
2.多处“%f”写成了“%d”,导致程序不能正常运行;
3.定义结构体时,最后一个“}”后忘记加“;”,导致程序出现错误,以后应多加注意。

相关文档
最新文档