C语言复数的运算(实验报告)
实验一复数四则运算.doc
![实验一复数四则运算.doc](https://img.taocdn.com/s3/m/681784397f1922791688e8e8.png)
实验一复数四则运算一、实验目的本次实验的主要目的在于帮助读者熟悉抽象数据类型的表示和实现方法。
抽象数据类型需借助固有数据类型来表示和实现,即利用高级程序设计语言中已存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作,具体实现细节则依赖于所用语言的功能.通过本次实习还可以帮助读者复习高级语言的使用方法.二、实验内容设计一个可进行复数运算的演示程序。
要求实现下列六种基本运算: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语言中的复数](https://img.taocdn.com/s3/m/1535d6344a35eefdc8d376eeaeaad1f3469311a4.png)
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++语言对复数的四则运算的实现](https://img.taocdn.com/s3/m/89a0dc32376baf1ffc4fad73.png)
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<<"分母为零,不可以进行运算。
数据结构实验抽象数据类型——复数运算报告
![数据结构实验抽象数据类型——复数运算报告](https://img.taocdn.com/s3/m/6bb4a38ecc22bcd126ff0c5a.png)
【实验题目】实验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语言(加减乘除)](https://img.taocdn.com/s3/m/090f7f50804d2b160b4ec032.png)
# 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++实验报告](https://img.taocdn.com/s3/m/24ab1dc104a1b0717fd5dd82.png)
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语言复数的运算](https://img.taocdn.com/s3/m/a42771997e192279168884868762caaedd33ba2c.png)
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语言编程计算复数](https://img.taocdn.com/s3/m/65f5c979a26925c52cc5bf4b.png)
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);}}}按顺序点击三个图标,编译完成并执行程序。
复数的运算 实验报告
![复数的运算 实验报告](https://img.taocdn.com/s3/m/edcabbe2551810a6f52486c8.png)
复数的运算实验报告一、实验要求:设计题:设计一个可进行复数运算的演示程序。
基本要求:实现以下四种基本运算:1)由输入的实部和虚部生成一个复数。
2)两个复数求和3)两个复数求差4)两个复数求积运算结果以相应的复数或实数的表示形式显示二、实验思路:1、设计一个复数数据类型;2、设计函数复数初始化函数initcpx(complex &y,float m,float n), 复数输出函数cpxprint(complex a), 复数求和函数sumcpx(complex&b,complex b1,complex b2 ), 复数求差函数subcpx(complex &c,complexc1,complex c2),复数乘积函数mltcpx(complex &d,complex d1,complexd2)三、源代码:#include<stdio.h>typedef struct complex{float realprt;float imgprt;}complex;void initcpx(complex &y,float m,float n){y.realprt=m;y.imgprt=n;}void cpxprint(complex a){if (a.realprt==0.0)printf("复数是:%5.2fi",a.imgprt);elseprintf("复数是:%5.2f+%5.2fi",a.realprt,a.imgprt);}void sumcpx(complex &b,complex b1,complex b2 ){b.realprt=b1.realprt+b2.realprt;b.imgprt=b1.imgprt+b2.imgprt;printf("复数的和为:%5.2f+%5.2fi",b.realprt,b.imgprt); }void subcpx(complex &c,complex c1,complex c2) {c.realprt=c1.realprt-c2.realprt;c.imgprt=c1.imgprt-c2.imgprt;printf("复数的差是:%5.2f+%5.2fi",c.realprt,c.imgprt); }void mltcpx(complex &d,complex d1,complex d2) {d.realprt=d1.realprt*d2.realprt-d1.imgprt*d2.imgprt;d.imgprt=d1.realprt*d2.imgprt+d1.imgprt*d2.realprt; printf("复数的积是:%5.2f+%5.2fi",d.realprt,d.imgprt); }void main(){float a,b,c,d;complex x1,x2,sum,sub,mlt;printf("输入第一个复数的实部:\n");scanf("%f",&a);printf("输入复数的虚部:\n");scanf("%f",&b);initcpx(x1,a,b);printf("第一个复数是:\n");cpxprint(x1);printf("\n");printf("\n");printf("输入第二个复数的实部:\n");scanf("%f",&c);printf("输入复数的虚部:\n");scanf("%f",&d);initcpx(x2,c,d);printf("第二个复数是:\n");cpxprint(x2);printf("\n");printf("\n");sumcpx(sum,x1,x2);printf("\n"); subcpx(sub,x1,x2); printf("\n"); mltcpx(mlt,x1,x2); printf("\n");printf("\n");}四、实验结果:。
复数运算的实验报告
![复数运算的实验报告](https://img.taocdn.com/s3/m/3bc69942c381e53a580216fc700abb68a982ada6.png)
一、实验目的1. 理解复数的概念及其表示方法。
2. 掌握复数的加、减、乘、除等基本运算。
3. 运用复数运算解决实际问题。
二、实验原理复数是由实部和虚部组成的数,表示为a+bi,其中a为实部,b为虚部,i为虚数单位,满足i^2=-1。
复数运算遵循以下规则:1. 加法:a+bi + c+di = (a+c) + (b+d)i2. 减法:a+bi - c+di = (a-c) + (b-d)i3. 乘法:(a+bi) × (c+di) = (ac-bd) + (ad+bc)i4. 除法:(a+bi) ÷ (c+di) = [(ac+bd) + (bc-ad)i] ÷ (c^2+d^2)三、实验仪器与材料1. 计算器2. 笔3. 纸四、实验步骤1. 实验一:复数的加法与减法(1)取两个复数:2+3i和4-5i。
(2)计算它们的和:2+3i + 4-5i = (2+4) + (3-5)i = 6-2i。
(3)计算它们的差:2+3i - 4-5i = (2-4) + (3+5)i = -2+8i。
2. 实验二:复数的乘法(1)取两个复数:3+4i和2-3i。
(2)计算它们的乘积:3+4i × 2-3i = (3×2-4×3) + (3×(-3)+4×2)i = -3+2i。
3. 实验三:复数的除法(1)取两个复数:4+3i和2-i。
(2)计算它们的商:4+3i ÷ 2-i = [(4+3i)×(2+i)] ÷ [(2-i)×(2+i)] = (8+10i-3) ÷ (4+1) = 5+2.5i。
五、实验结果与分析1. 通过实验一,我们掌握了复数的加法与减法运算,可以得出结论:复数加法与实数加法类似,只需将实部与虚部分别相加;复数减法只需将减数的实部与虚部分别减去被减数的实部与虚部。
C语言复数的运算(实验报告)
![C语言复数的运算(实验报告)](https://img.taocdn.com/s3/m/ebb1d83e83c4bb4cf7ecd129.png)
实验报告题目:复数的四则运算班级: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.定义结构体时,最后一个“}”后忘记加“;”,导致程序出现错误,以后应多加注意。
复数运算实验报告
![复数运算实验报告](https://img.taocdn.com/s3/m/dfa0d0e39b89680203d82538.png)
复数加减乘除的实验报告一、实验目的:了解类和对象的概念,利用类来解决问题,同时熟悉运算符重载的定义,并学会使用运算符重载。
二、实验内容及流程1、定义一个复数类Compex,公有成员为7个成员函数,构①造函数Compex(double=0.0,double=0.0)实现了对象的初始化,Compex operator+(const Compex&)const;Compex operator-(const Compex&)const;Compex operator*(const Compex&)const;Compex operator/(const Compex&)const;Compex &operator=(const Compex&);符号+-*/不用定义函数,就能够实现整形、浮点型、等一些预定义类型的加减乘除的运算,是因为在文件内部已将定义好这些函数对这些符号进行重载,对象是类的实例化,是新的数据类型,所以要定义函数对利用这些符号进行对象的加减乘除。
void print()const;是现实复数的函数,包括复数的实部和虚部是否为零,正负等情况②私有成员为两个数据包括实部real和虚部imaginary。
2、程序的设计流程图三、程序源代码#include"stdafx.h" #include<iostream>using namespace std;class Compex{public:Compex(double=0.0,double=0.0);Compex operator+(const Compex&)const;Compex operator-(const Compex&)const;Compex operator*(const Compex&)const;Compex operator/(const Compex&)const;Compex &operator=(const Compex&);void print()const;private:double real;double imaginary;};Compex::Compex(double r,double i){real=r;imaginary=i;}//析构函数void Compex::print()const{ if(real<0){ if(imaginary<0)cout<<" ("<<real<<")+("<<imaginary<<")i";else{if(imaginary==0)cout<<" "<<real;elsecout<<" ("<<real<<")+"<<imaginary<<"i"; }}else{if(real==0)if(imaginary==0)cout<<"没有此复数"<<endl;elsecout<<imaginary<<"i";elseif(imaginary<0)cout<<" "<<real<<"+("<<imaginary<<")i";elseif(imaginary==0)cout<<" "<<real;elsecout<<" "<<real<<"+"<<imaginary<<"i";}}//显示复数Compex Compex::operator+(const Compex&operand2)const {Compex sum;sum.real=real+operand2.real;sum.imaginary=imaginary+operand2.imaginary;return sum;}//+运算符的重载Compex Compex::operator-(const Compex&operand2)const {Compex diff;diff.real=real-operand2.real;diff.imaginary=imaginary-operand2.imaginary;return diff;}//见运算符的重载Compex Compex::operator*(const Compex&operand2)const {Compex diff;diff.real=real*operand2.real-imaginary*operand2.imaginary; diff.imaginary=real*operand2.imaginary+operand2.real*imagin ary;return diff;}//乘运算符的重载Compex Compex::operator/(const Compex&operand2)const{Compex diff;diff.real=(real*operand2.real+imaginary*operand2.imaginary) /(operand2.real*operand2.real+operand2.imaginary*operand2.i maginary);diff.imaginary=(imaginary*operand2.real-real*operand2.imagi nary)/(operand2.real*operand2.real+operand2.imaginary*opera nd2.imaginary);return diff;}//除的重载Compex &Compex::operator=(const Compex&right){real=right.real;imaginary=right.imaginary;return *this;}int _tmain(int argc, _TCHAR* argv[]){ cout<<"1---进行复数的运算"<<endl;cout<<"2---退出程序"<<endl;int i;cin>>i;while(i){ fflush(stdin);if(i==1){double a[2]={0.0};double b[2]={0.0};cout<<"输入第一个复数的实部和虚部"<<endl;cin>>a[0];cin>>a[1];cout<<"输入第二个复数的实部和虚部"<<endl;cin>>b[0]>>b[1];Compex x,y(a[0],a[1]),z(b[0],b[1]);cout<<"\n复数y:";y.print();cout<<"\n复数z:";z.print();x=y+z;cout<<"\n\nx=y+z:\n";x.print();cout<<"=";y.print();cout<<" +";z.print();x=y-z;cout<<"\n\nx=y-z:\n"; x.print();cout<<"=";y.print();cout<<" -";z.print();cout<<'\n';x=y*z;cout<<"\n\nx=y*z:\n"; x.print();cout<<"=";y.print();cout<<" *";z.print();cout<<'\n';x=y/z;cout<<"\n\nx=y/z:\n"; x.print();cout<<"=";y.print();cout<<" /";z.print();cout<<'\n';cout<<"1---进行复数的运算"<<endl;cout<<"2---退出程序"<<endl;cin>>i;}elseif(i==2)return 0;else{cin.clear();cout<<"加减不清楚请重新输入"<<endl;cin>>i;}}}四、运行结果1、如果输入的为1,任意输入两个复数显示结果如下2、如果输入的为2,结果如下3、如果输入的为其他任意值或者为字符情况,结果显示如下五、实验总结1、通过编写复数类,更进一步加深了对类和对象的了解,类是对象的抽象数据类型,是对象的特性和操作,对象是类的实例化,是具体的。
复数运算实验报告
![复数运算实验报告](https://img.taocdn.com/s3/m/cabc644bf7ec4afe04a1df85.png)
两个复数运算实验报告一、实验目的1、理解运算符重载的概念和意义。
2、了解运算符重载的限制。
3、掌握一游原函数的方式重载运算符的方法。
4、用运算符重载的方式实现复数的加、减、乘、除运算。
二、功能实现:1、定义复数类程序中,在类complex中定义了5个特殊的成员函数(运算符重载函数):operator+、operator-、operator*、operator/、operator=,这3个函数分别实现的复数的加、减、乘、除和赋值运算,他们都是运算符重载函数。
还定义了一个友元函数a,来实现对x、y运算值的改变。
class complex{public:complex(double a=0.0,double b=0.0);complex operator+(complex &);complex operator-(complex &);complex operator*(complex &);complex operator/(complex &);complex &operator=(complex &);void print();private:double real;double imaginary;};2、构造函数的实现复数的构造函数用默认参数的构造函数。
当不给函数赋初值的话函数默认为0。
算法实现如下:complex::complex(double m,double n){real=m;imaginary=n;}3、加法功能复数的加法为 (a+bi)+(c+di)=(a+c)+(b+d)i,算法实现如下:complex complex::operator +(complex &a){complex b;b.real=real+a.real;b.imaginary= imaginary+a.imaginary;return b;}4、减法功能实现复数的减法运算为(a+bi)-(c+di)=(a-c)+(b-d)i,算法实现如下:complex complex::operator -(complex &a){complex b;b.real=real-a.real;b.imaginary=imaginary-a.imaginary;return b;}5、乘法功能实现复数的乘法运算为(a+bi)(c+di)=(ac-bd)+(bc+ad)i,算法实现如下:complex complex::operator *(complex &a){complex b;b.real=real*a.real-imaginary*a.imaginary;b.imaginary=real*a.imaginary+imaginary*a.real;return b;}6、除法功能的实验复数的除法运算为:(a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i,运算除法还应虑除数为零的情况,所以除法运算的算法如下:complex complex::operator /(complex &a){complex b;if(a.real*a.real-a.imaginary*a.imaginary==0){cout<<"这个复数不能进行除法。
C语言复数实验报告
![C语言复数实验报告](https://img.taocdn.com/s3/m/b929ec2f4b73f242336c5f59.png)
一 实验题目1.抽象数据类型复数的表示及基本运算的实现 2.数学意义的整数抽象数据类型描述及运算实现 二 实验目的1.通过本次实习,了解抽象数据类型[1](ADT )的基本概念;2.掌握在用计算机编程进行问题求解中,如何用抽象数据类型建立问题的模型——问题的抽象数据类型。
三 实习要求1.复数复数是由意大利米兰学者卡尔达诺[2](Girolamo Cardano ,1501年9月24日—1576年9月21日)在十六世纪首次引入,经过达朗贝尔、棣莫弗、欧拉、高斯等人的工作,此概念逐渐为数学家所接受。
复数(complex number )为,形如a +bi 的数。
式中a ,b 为实数,i 是一个满足i 2=-1的数,因为任何实数的平方不等于-1,所以i 不是实数,而是实数集以外的数。
在复数a +bi 中,a 称为复数的实部,b 称为复数的虚部,i 称为虚数单位。
当虚部等于零时,这个复数就是实数;当虚部不等于零时,这个复数称为虚数,虚数的实部如果等于零,则称为纯虚数。
复数的四则运算规定为:(1) d)i (b c)(a di)(c bi)(a +++=+++ (1-1) 复数加法 (2) d)i (b c)(a di)(c bi)(a -+-=+-+ (1-2) 复数减法 (3) )i (bc )-(ac di)(c bi)(a ad bd ++=+⨯+ (1-3) 复数乘法 (4) i dc adbc d c bd ac 2222di)(c bi)(a +-+++=+÷+ (c 与d 不同时为零)(1-4) 复数除法 复数的表示形式:复数有多种表示形式,常用形式z =a +bi 叫做代数式。
请你用抽象数据类型来表示复数,并完成复数的四则运算及复数的输出操作。
2.整数像-2,-1,0,1,2这样的数称为整数。
(整数是表示物体个数的数,0表示有0个物体)整数是人类能够掌握的最基本的数学工具。
整数的全体构成整数集,整数集合是一个数环。
C语言实验报告(四)
![C语言实验报告(四)](https://img.taocdn.com/s3/m/3dfc5058c950ad02de80d4d8d15abe23482f033e.png)
C语⾔实验报告(四)C语⾔实验报告(四)⼀、实验⽬的1.掌握C语⾔中函数和模块2.掌握怎样定义函数,如何调⽤或使⽤函数,如何声明函数3.掌握函数的参数,了解在函数调⽤时,参数是如何传递的4.在使⽤函数的过程中怎样确定函数的参数5.如何使⽤局部变量和全局变量⼆、实验内容1. 偶数判断描述: 编写⼀个⽤户⾃定义函数,该函数有⼀个整型参数,函数的功能是:当这个整型数的值是偶数时,函数的返回值为0,当这个整型数的值是奇数时,返回值为1 。
编写⼀个程序,从键盘输⼊m个整数,分别调⽤⽤户⾃定义函数来判断这m个整数的奇偶性。
输⼊: 第⼀⾏为⼀个整数m,表⽰要判断m个整数的奇偶性;紧接着是m⾏,每⾏⼀个整数。
输出:有m⾏,分别对应输⼊的第2到第m+1⾏的整数的奇偶性样例输⼊: 216样例输出: 奇数偶数·程序代码:#include"stdio.h"int isEven(int a){if(a%2==0)return 1;elsereturn 0;}int main(){int m,i,b;scanf("%d",&m);for(i=1;i<=m;i++){scanf("%d",&b);if(isEven(b)==1)printf("偶数\n");elseprintf("奇数\n");}return 0;}2.温度转换描述: 编写⼀个⽤户⾃定义函数,函数的功能是:将华⽒温度转F换为摄⽒温度C。
转换公式为:C=5*(F-32)/9。
编写⼀个程序,输出指定范围的华⽒温度与摄⽒温度的对照表,其中华⽒温度步长为4。
输⼊: 两个空格隔开的整数n,m(且0输出: 华⽒温度与摄⽒温度的对照表样例输⼊: 32 45样例输出: 32 0.0036 2.2240 4.4444 6.67·程序代码:#include "stdio.h"float conver(int f){return 5*(f-32)/9.0;}int main(){int n,m,i;scanf("%d%d",&n,&m);for(i=n;i<=m;i+=4)printf("%d%10.2f\n",i,conver(i));return 0;}3.最⼤值函数描述:编写⼀个⽤户⾃定义函数,该函数有三个整数参数,函数的功能是:求解这三个整数的最⼤值,函数的返回值为三个参数的最⼤值。
C#关于复数计算和年龄计算的实验报告
![C#关于复数计算和年龄计算的实验报告](https://img.taocdn.com/s3/m/0f547361783e0912a2162a87.png)
Console.WriteLine("{0}-{1}={2}", fs1, fs2, fs1 - fs2);
Console.WriteLine("{0}*{1}={2}", fs1, fs2, fs1 * fs2);
}
publicstaticComplexNumberoperator++(ComplexNumberc1)
{returnnewComplexNumber(c1.a + 1, c1.b + 1); }
publicstaticComplexNumberoperator--(ComplexNumberc2)
a =double.Parse(Console.ReadLine());
b =double.Parse(Console.ReadLine());
ComplexNumberfs1 =newComplexNumber(a, b);
Console.WriteLine("请输入第二个复数的实部与虚部:");
Console.WriteLine("{0}/{1}={2}", fs1, fs2, fs1 / fs2);
Console.WriteLine("比较两个数是否相等,如果相等则为true,不相等为false");
Console.WriteLine("{0}=={1}={2}", fs1, fs2, fs1 == fs2);
publicstaticbooloperator!=(ComplexNumberc1,ComplexNumberc2)
用c语言编程计算复数
![用c语言编程计算复数](https://img.taocdn.com/s3/m/90a010c58662caaedd3383c4bb4cf7ec4afeb63d.png)
用c语言编程计算复数一、复数的四则运算二、复数的头文件#include<complex.h>三、一些碎碎念(1)计算方法加法:(a+bi)+(c+di)=(a+c)+(c+d)i【实部与实部相加,虚部与虚步相加】减法:(a+bi)-(c+di)=(a-c)+(c-d)i【实部与实部相减,虚部与虚步相减】乘法:(a+bi)(c+di)=ac+adi+cdi+bdi*i=(ac-bd)+(bc+ad)i【普通的多项式相乘;i^2=-1】除法:(a+bi)/(c+di)=(a+bi)(c-di)/((c+di)(c+di))=((ac+bd)+(bc-ad)i)/(c^2+d^2)【分子分母同时乘以分母的共轭复数,然后上边是乘法,下边也是乘法】(2)例题:本题要求编写程序,计算2个复数的和、差、积、商。
输入在一行中按照a1 b1 a2 b2的格式给出2个复数C1=a1+b1i和C2=a2+b2i的实部和虚部。
题目保证C2不为0。
分别在4行中按照(a1+b1i) 运算符 (a2+b2i) = 结果的格式顺序输出2个复数的和、差、积、商,数字精确到小数点后1位。
如果结果的实部或者虚部为0,则不输出。
如果结果为0,则输出0.0。
(1)C语言中有三个类型可以存储复数float_Complex:实部和虚部都为float类型double_Complex:实部和虚部都为double类型long double_Complex:实部和虚部都为long类型例如:double_Complex x;注:C99对复数的支持,用这种定义方法不需要任何头文件。
(2)加入头文件#include <complex.h>,就可以用complex代替_Complex,这个头文件把虚部定义为'I',所以定义定义这样一个复数可以这样float complex z=a+bI;(3)宏宏名称值complex _Complex_Complex_I 虚数单位,类型为const float_ComplexI _Complex_I这里的I代替Complex_I可以类比bool(#include <stdbool>中的)和Bool一样复数的赋值方法如:doubel complex dc=2.0+3.5*I;(4)几个函数1.double real_part=creal(z);//得到Z的实部2.double imag_part=cimag(z)//得到Z的虚部在处理float和long double类型时,用crealf()和creall(),cimagf()和cimagl()。
C++课程设计(复数计算器实验报告)
![C++课程设计(复数计算器实验报告)](https://img.taocdn.com/s3/m/300fac97daef5ef7bb0d3c04.png)
**** 大学VC++课程设计报告课程:VC++课程设计系别:计算机科学与技术专业选题名称:复数计算器题目级别:A级姓名:njust_smalllion 班级:********学号:**********起止时间:2010年八月底到九月初指导教师:ZY目录一、目标与需求分析二、设计方案三、关键编程四、测试与改进五、回顾与总结一、目标与需求分析课程设计需求1、一开始运行程序,要有详细的菜单选项界面,用户不选择退出就可以反复运算;2、可以进行多个操作数的复数运算,输入0+0*i是为止;3、编写可以对输入的复数求模的成员函数;4、编写具有测试功能的函数,即计算机能够自动出题,并要求用户计算,同时计算机判断用户计算的对错并打分,要求十题为一个单元,每题一个运算符,运算符包括+,-,*三种,参与加减运算实部虚部可以是两位数,乘法运算的实部虚部为一位数;5、重载输入输出运算符,对复数的输入既可采用实部虚部分开提示输入吗,也可直接输入诸如a+bi这种形式,对复数的输出要考虑实部虚部的正负号,通过判断给出正确的输出结果。
对需求的分析1、题目需要有详细的菜单选项界面,让用户不选择退出就可以反复运算,所以可以用循环语句,一直到用户输入退出标志结束;2、题目要求多个操作数运算,可以设置一个中间值,读取一个复数,算一次;3、题目要求求复数的模,可以把求复数模的函数封装在复数类里;4、题目要求计算机能够自动出题,就需要计算机生产随机数和随机符号,一组十个单元,可以用for控制,要判断对错,就不仅需要计算机给出随机数和随机符号,也要计算结果,然后与用户给的结果进行比较,如果正确就拿满分,错误就不得分。
5、重载输入输出函数,对输入的复数要进行处理,这样既可以接受a+bi类型的复数,又可以接受a b类型的输入,对输出的复数也要处理,可以直接输出复数。
选择该题目的理由B级题虽然看上去很难,但是有原始代码可以参考,而A级题虽然也有难度,但是没有原始代码,一切都需要自己想。
一些复数运算的C语言实现
![一些复数运算的C语言实现](https://img.taocdn.com/s3/m/e49dfe1fcd7931b765ce0508763231126edb77a2.png)
⼀些复数运算的C语⾔实现 很久不写博客了。
第⼀次写博客是在04年,最近的⼀次还是在⼤学时,在学校时,甚⾄还有过⾃⼰去买虚拟主机搭WordPress写博客的经历。
现在⼯作时间越长,越发现积累的重要性。
那么就从这⾥开始吧,重新开始写博客。
最近打算写⼩算法,⾥⾯需要⽤到⼀些复数运算。
贴⼀点复数运算的C语⾔实现代码。
都是些很简单的东西。
包括以下运算: 复数加法、复数减法、复数乘法、复数除法、复数取模、复指数运算、复数取相⾓、模与相⾓合成复位。
本⼈专业本职做硬件的,写程序没受过专业训练,勿吐槽。
1/*file ComplexCalculation.h2 *author Vincent Cui3 *e-mail whcui1987@4 *version 0.15 *data 20-Oct-20146 *brief ⽤于复数运算的⼀些函数头和定义7*/891011 #ifndef _COMPLEXCALCULATION_H_12#define _COMPLEXCALCULATION_H_1314#define ASSERT_ENABLE 11516#define IS_COMPLEX_DIVISOR_CORRENT(DIVISOR_REAL, DIVISOR_IMAG) ((DIVISOR_REAL != 0) || (DIVISOR_IMAG != 0))1718 typedef double mathDouble;19 typedef unsigned char mathUint_8;20 typedef unsigned short int mathUint_16;21 typedef unsigned int mathUint_32;222324 typedef struct _ReDefcomplex25 {26 mathDouble Real;27 mathDouble Imag;28 }complexType;293031 complexType complexAdd(complexType a, complexType b);32 complexType complexSubtract(complexType minuend, complexType subtrahend);33 complexType complexMultiply(complexType a, complexType b);34 complexType complexDivision(complexType dividend, complexType divisor);35 mathDouble complexAbs(complexType a);36 mathDouble complexAngle(complexType a);37 complexType complexByAbsAngle(mathDouble r, mathDouble theta);38 complexType complexExp(complexType a);3940#if ASSERT_ENABLE41#define assert_param(expr) ((expr) ? (void)0 : assert_failed((mathUint_8 *)__FILE__, __LINE__))42void assert_failed(mathUint_8* file, mathUint_32 line);43#else44#define assert_param(expr) ((void)0)45#endif46474849#endifComplexCalculation.h1/*file ComplexCalculation.c2 *author Vincent Cui3 *e-mail whcui1987@4 *version 0.15 *data 20-Oct-20146 *brief ⽤于复数运算的⼀些函数7*/8910 #include "ComplexCalculation.h"11 #include "math.h"12 #include "stdio.h"131415/*函数名:complexAdd16 *说明:复数加法17 *输⼊:a,b两个复数18 *输出:19 *返回:a + b20 *调⽤:21 *其它:22*/23 complexType complexAdd(complexType a, complexType b)24 {25 complexType result;2627 result.Real = a.Real + b.Real;28 result.Imag = a.Imag + b.Imag;2930return result;31 }3233/*函数名:complexSubtract34 *说明:复数减法35 *输⼊:minuend被减数,subtrahend减数36 *输出:37 *返回:a - b38 *调⽤:39 *其它:40*/41 complexType complexSubtract(complexType minuend, complexType subtrahend)42 {43 complexType result;4445 result.Real = minuend.Real - subtrahend.Real;46 result.Imag = minuend.Imag - subtrahend.Imag;4748return result;49 }5051/*函数名:complexMultiply52 *说明:复数乘法53 *输⼊:a,b两个复数54 *输出:55 *返回:a * b56 *调⽤:57 *其它:58*/59 complexType complexMultiply(complexType a, complexType b)60 {61 complexType result;6263 result.Real = a.Real * b.Real - a.Imag * b.Imag;64 result.Imag = a.Imag * b.Real + a.Real * b.Imag;6566return result;67 }686970/*函数名:complexDivision71 *说明:复数除法72 *输⼊:dividend被除数,divisor除数73 *输出:74 *返回:a / b75 *调⽤:76 *其它:divisor的实部和虚部不能同时为077*/78 complexType complexDivision(complexType dividend, complexType divisor)79 {80 complexType result;8182/*断⾔,被除数的实部和虚部不能同时为零*/83 assert_param(IS_COMPLEX_DIVISOR_CORRENT(divisor.Real, divisor.Imag));8485 result.Real = (mathDouble)(dividend.Real * divisor.Real + dividend.Imag * divisor.Imag) / \86 (divisor.Real * divisor.Real + divisor.Imag * divisor.Imag);87 result.Imag = (mathDouble)(dividend.Imag * divisor.Real - dividend.Real * divisor.Imag) / \88 (divisor.Real * divisor.Real + divisor.Imag * divisor.Imag);89return result;90 }9192/*函数名:complexAbs93 *说明:复数取模94 *输⼊:a复数95 *输出:96 *返回:复数的模97 *调⽤:98 *其它:99*/100 mathDouble complexAbs(complexType a)101 {102return (sqrt( pow(a.Real,2) + pow(a.Imag,2) ));103 }104105106/*函数名:complexAngle107 *说明:复数取相⾓108 *输⼊:a复数109 *输出:110 *返回:复数的相⾓111 *调⽤:112 *其它:113*/114 mathDouble complexAngle(complexType a)115 {116/*是atan2⽽⾮atan,(-PI,PI] */117return (atan2(a.Imag, a.Real));118 }119120/*函数名:complexByAbsAngle121 *说明:通过模和相⾓合成复数122 *输⼊:r 模, theta 相⾓123 *输出:124 *返回:复数125 *调⽤:126 *其它:127*/128 complexType complexByAbsAngle(mathDouble r, mathDouble theta) 129 {130 complexType tmp_1,tmp_2;131132 tmp_1.Real = 0;133 tmp_1.Imag = theta;134 tmp_2 = complexExp(tmp_1);135 tmp_2.Real *= r;136 tmp_2.Imag *= r;137138return tmp_2;139 }140141/*函数名:complexExp142 *说明:复指数运算143 *输⼊:a 复指数144 *输出:145 *返回:e的a次⽅146 *调⽤:147 *其它:使⽤欧拉公式 e^(jw) = cos(w) + j * sin(w)148*/149 complexType complexExp(complexType a)150 {151 complexType result;152153 result.Real = exp(a.Real) * cos(a.Imag);154 result.Imag = exp(a.Real) * sin(a.Imag);155156return result;157 }158159160#if ASSERT_ENABLE161/*函数名:assert_failed162 *说明:断⾔函数163 *输⼊:164 *输出:打印出错的位置165 *返回:166 *调⽤:167 *其它:168*/169void assert_failed(mathUint_8* file, mathUint_32 line)170 {171 printf("Assert Error in File: %s \r\nLine: %d \r\n",file,line);172 }173174#endifComplexCalculation.c1 #include "ComplexCalculation.h"2 #include "stdio.h"34int main(void)5 {6 complexType a,b,c;7 a.Imag = 0.5;8 a.Real = 2.5;9 b.Real = 1;10 b.Imag = -5;1112 c = complexAdd(a,b);13 printf("complexAdd: c.Real %f, c.Imag %f \r\n",c.Real,c.Imag);14 c = complexSubtract(a,b);15 printf("complexSubtract: c.Real %f, c.Imag %f \r\n",c.Real,c.Imag);16 c = complexMultiply(a,b);17 printf("complexMultiply: c.Real %f, c.Imag %f \r\n",c.Real,c.Imag);18 c = complexDivision(a,b);19 printf("complexDivision: c.Real %f, c.Imag %f \r\n",c.Real,c.Imag);20 printf("Abs(c): %f\r\n",complexAbs(a));21 printf("Angle(c): %f\r\n",complexAngle(a));22 c = complexByAbsAngle(complexAbs(a),complexAngle(a));23 printf("complexByAbsAngle: a.Real %f, a.Imag %f \r\n",c.Real,c.Imag); 2425while(1);26 }main.c下⾯是运⾏结果,在VS2012上运⾏的。
C++综合实验报告-复数类设计(含代码)
![C++综合实验报告-复数类设计(含代码)](https://img.taocdn.com/s3/m/c87be5e1ba0d4a7302763aaf.png)
XXXXXX计算机系综合性实验实验报告课程名称面向对象程序设计(C++)实验学期 XXXX 至 XXXX 学年第 X 学期学生所在系部计算机系年级 XXXX 专业班级 XXXXXX 学生姓名 XXX 学号 XXXXXXXXXXXX 任课教师 XXX 实验成绩计算机系制《面向对象程序设计(C++)》课程综合性实验报告附代码:#include <iostream.h>class MyComplex{private:double a,b;public:MyComplex();MyComplex(double x);MyComplex(double x,double y);MyComplex(const MyComplex &v);MyComplex& operator=(const MyComplex& t);MyComplex& operator+=(const MyComplex& rhs);MyComplex& operator-=(const MyComplex& rhs);MyComplex& operator*=(const MyComplex& rhs);MyComplex& operator/=(const MyComplex& rhs);friend MyComplex operator+(MyComplex m,MyComplex n);friend MyComplex operator-(MyComplex m,MyComplex n);friend MyComplex operator*(MyComplex m,MyComplex n);friend MyComplex operator/(MyComplex m,MyComplex n);friend ostream& operator<<(ostream& os, MyComplex s);friend istream& operator>>(istream& is, MyComplex& s);};MyComplex::MyComplex() { a=0;b=0; }MyComplex::MyComplex(double x) { a=x,b=2; } MyComplex::MyComplex(double x,double y):a(x),b(y) {} MyComplex::MyComplex(const MyComplex &v) { a=v.a;b=v.b; } MyComplex& MyComplex::operator=(const MyComplex& rhs){if(this==&rhs) return *this;else a=rhs.a;b=rhs.b;return *this;}MyComplex &MyComplex::operator+=( const MyComplex &rhs){a+=rhs.a;b+=rhs.b;return *this;}MyComplex &MyComplex::operator-=(const MyComplex &rhs){a-=rhs.a;b-=rhs.b;MyComplex &MyComplex::operator*=(const MyComplex &rhs){double x=a,y=rhs.a;a=a*rhs.a-b*rhs.b;b=x*rhs.b+b*y;return *this;}MyComplex &MyComplex::operator/=(const MyComplex &rhs){double t;double x=a,y=rhs.a;t=1/(rhs.a*rhs.a+rhs.b*rhs.b);a=t*(a*rhs.a+b*rhs.b);b=t*(a*y-x*rhs.b);return *this;}MyComplex operator+(MyComplex m,MyComplex n) { return MyComplex(m.a+n.a,m.b+n.b); }MyComplex operator-(MyComplex m,MyComplex n) { return MyComplex(m.a-n.a,m.b-n.b); }MyComplex operator*(MyComplex m,MyComplex n){MyComplex t;t.a=m.a*n.a-m.b*n.b;t.b=m.a*n.b+m.b*n.a;return t;}MyComplex operator/(MyComplex m,MyComplex n){MyComplex t;double k;k=1/(n.a*n.a+n.b*n.b);t.a=k*(m.a*n.a+m.b*n.b);t.b=k*(m.b*n.a-m.a*n.b);return t;}ostream& operator<<(ostream& os, MyComplex s){os<<s.a;if(s.b>0) os<<"+";if(s.b!=0){os<<s.b<<"i";}istream& operator>>(istream& is, MyComplex& s){cout<<"请输入复数的实部和虚部:"<<endl;is>>s.a>>s.b;return is;}void main(){MyComplex p1(6,4),p2(4,3),p3,p4(8),c1,c2,c3,c4,m1=p1,m2=p1,m3=p1,m4;m4.operator=(p1);cout<<"p4="<<p4<<"\t "<<"m1=m2=m3=m4="<<m1<<endl;cout<<"p1="<<p1<<"\t "<<"p2="<<p2<<endl;cout<<"-----------------------"<<endl;c1=p1+p2;c2=p1-p2;c3=p1*p2;c4=p1/p2;cout<<"p1+p2="<<c1<<endl;cout<<"p1-p2="<<c2<<endl;cout<<"p1*p2="<<c3<<endl;cout<<"p1/p2="<<c4<<endl;cout<<"-----------------------"<<endl;cin>>p3;cout<<"p3="<<p3<<endl;cout<<"-----------------------"<<endl;m1+=p3;m2-=p3;m3*=p3;m4/=p3;cout<<"m1="<<m1<<endl<<"m2="<<m2<<endl<<"m3="<<m3<<endl<<"m4="<<m 4<<endl;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.定义结构体时,最后一个“}”后忘记加“;”,导致程序出现错误,以后应多加注意。