在电子电路学科领域中,相量法是分析研究正弦电流电路稳定状态的一种简单易行的方法。相量法与复数有直接的联系。而在普通计算器中,一般不能对复数和相量进行直接的四则运算和相互转化,本文将介绍使用C语言编写程序实现复数和相量直接的四则运算和相互转化,编写后的exe应用程序可以直接使用,能够方便同学们在做题或研究时实现便捷计算。

一、源代码及注释

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#define pi 3.1415926void menu()//主菜单界面
{printf("*********************************************\n");printf("***Calculator of complex number and phasor***\n");printf("*********************************************\n");printf("*****1.Complex four principle operation *****\n");//选1进入复数四则运算printf("*****2.Phasor four principle operation  *****\n");//选2进入相量四则运算printf("*****        3.complex->phasor          *****\n");//选3将复数转化为相量printf("*****        4.phasor->complex          *****\n");//选4将相量转化为复数printf("*****              0.EXIT               *****\n");//选0退出程序printf("*********************************************\n");
}
void menu1()//复数四则运算菜单界面
{printf("********************************************\n");printf("***** Complex four principle operation *****\n");printf("********************************************\n");printf("*****     1.Addition    2.Subtract     *****\n");printf("*****     3.Multiply    4.Divide       *****\n");printf("*****              0.EXIT              *****\n");printf("********************************************\n");
}
void menu2()//相量四则运算菜单界面
{printf("********************************************\n");printf("***** Phasor four principle operation  *****\n");printf("********************************************\n");printf("*****     1.Addition    2.Subtract     *****\n");printf("*****     3.Multiply    4.Divide       *****\n");printf("*****              0.EXIT              *****\n");printf("********************************************\n");
}
void con_pha(float a, float b)//将复数转化为相量
{float num, rad;num = sqrt(a * a + b * b);rad = atan(b / a) * 180 / pi;printf("ans=%f∠%f°\n", num, rad);
}
void con_com(float a, float b)//将相量转化为复数
{float re, im;re = a * cos(b * pi / 180);im = a * sin(b * pi / 180);printf("ans=(%f)+(%f)i\n", re, im);
}
void cadd(float a1, float b1, float a2, float b2)//复数加法
{float ra, ia;ra = a1 + a2;ia = b1 + b2;printf("ans=(%f)+(%f)i\n", ra, ia);
}
void csub(float a1, float b1, float a2, float b2)//复数减法
{float ra, ia;ra = a1 - a2;ia = b1 - b2;printf("ans=(%f)+(%f)i\n", ra, ia);
}
void cmul(float a1, float b1, float a2, float b2)//复数乘法
{float ra, ia;ra = a1 * a2 - b1 * b2;ia = a1 * b2 + a2 * b1;printf("ans=(%f)+(%f)i\n", ra, ia);
}
void cdiv(float a1, float b1, float a2, float b2)//复数除法
{float ra, ia;ra = (a1 * a2 + b1 * b2) / (a2 * a2 + b2 * b2);ia = (-a1 * b2 + a2 * b1) / (a2 * a2 + b2 * b2);printf("ans=(%f)+(%f)i\n", ra, ia);
}
void padd(float u1, float p1, float u2, float p2)//相量加法
{float a1, b1, a2, b2, ra, ia;a1 = u1 * cos(p1 * pi / 180);//先将两个相量转化为两个复数b1 = u1 * sin(p1 * pi / 180);a2 = u2 * cos(p2 * pi / 180);b2 = u2 * sin(p2 * pi / 180);ra = a1 + a2;//进行复数加法运算ia = b1 + b2;con_pha(ra, ia);//调用另一函数将复数转化为相量
}//以下函数大致思路同上
void psub(float u1, float p1, float u2, float p2)//相量减法
{float a1, b1, a2, b2, ra, ia;a1 = u1 * cos(p1 * pi / 180);b1 = u1 * sin(p1 * pi / 180);a2 = u2 * cos(p2 * pi / 180);b2 = u2 * sin(p2 * pi / 180);ra = a1 - a2;ia = b1 - b2;con_pha(ra, ia);
}
void pmul(float u1, float p1, float u2, float p2)//相量乘法
{float a1, b1, a2, b2, ra, ia;a1 = u1 * cos(p1 * pi / 180);b1 = u1 * sin(p1 * pi / 180);a2 = u2 * cos(p2 * pi / 180);b2 = u2 * sin(p2 * pi / 180);ra = a1 * a2 - b1 * b2;ia = a1 * b2 + a2 * b1;con_pha(ra, ia);
}
void pdiv(float u1, float p1, float u2, float p2)//相量除法
{float a1, b1, a2, b2, ra, ia;a1 = u1 * cos(p1 * pi / 180);b1 = u1 * sin(p1 * pi / 180);a2 = u2 * cos(p2 * pi / 180);b2 = u2 * sin(p2 * pi / 180);ra = (a1 * a2 + b1 * b2) / (a2 * a2 + b2 * b2);ia = (-a1 * b2 + a2 * b1) / (a2 * a2 + b2 * b2);con_pha(ra, ia);
}int main()
{float a1, b1, a2, b2, a, b, result;int input = 1, funch = 1;void(*pc[4 + 1])(float a1, float b1, float a2, float b2) = { NULL,cadd,csub,cmul,cdiv };//函数指针数组,用于存放4种复数运算void(*pp[4 + 1])(float u1, float p1, float u2, float p2) = { NULL,padd,psub,pmul,pdiv };//函数指针数组,用于存放4种相量运算void(*pmenu[2 + 1])() = { NULL,menu1,menu2 };//函数指针数组,用于存放2个菜单界面do{system("cls");//清屏menu();//显示主菜单printf("Please choose the model:>");scanf("%d", &input);//选择模式if (input == 1 || input == 2){if (input == 1)//进入复数四则运算模式{system("cls");//清屏pmenu[input]();//显示分菜单printf("Please choose the function:>");scanf("%d", &funch);//选择功能if (funch >= 1 && funch <= 4){system("cls");//清屏printf("Please input:\na1+b1i\ta2+b2i\n");scanf("%f%f%f%f", &a1, &b1, &a2, &b2);//输入两个复数的实部和虚部pc[funch](a1, b1, a2, b2);//执行system("pause");//程序运行暂停,便于查看结果}else if (funch == 0){system("cls");printf("The program has exited.\n");exit(0);//退出程序}else{system("cls");printf("INPUT ERROR!\n");//提示输入错误system("pause");}}else//进入相量四则运算模式{system("cls");//清屏pmenu[input]();//显示分菜单printf("Please choose the function:>");scanf("%d", &funch);//选择功能if (funch >= 1 && funch <= 4){system("cls");//清屏printf("Please input:\nu1 p1\tu2 p2\n");scanf("%f%f%f%f", &a1, &b1, &a2, &b2);//输入两个相量的模和辐角pp[funch](a1, b1, a2, b2);//执行system("pause");//程序运行暂停,便于查看结果}else if (funch == 0){system("cls");printf("The program has exited.\n");exit(0);//退出程序}else{system("cls");printf("INPUT ERROR!\n");//提示输入错误system("pause");}}}else if (input == 3)//进入将复数转化为相量模式{system("cls");printf("Please input the complex number:\na+bi\n");scanf("%f%f", &a, &b);//输入复数的实部和虚部con_pha(a, b);//执行system("pause");//程序运行暂停,便于查看结果}else if (input == 4)//进入将相量转化为复数模式{system("cls");printf("Please input the phasor:\na/_b\n");scanf("%f%f", &a, &b);//输入相量的模和辐角con_com(a, b);//执行system("pause");//程序运行暂停,便于查看结果}else if (input == 0){system("cls");printf("The program has exited.\n");exit(0);//退出程序}else{system("cls");printf("INPUT ERROR!\n");//提示输入错误system("pause");}} while (input);return 0;
}

二、部分运行界面

三、总结

该程序的特点有两个:1.使用函数指针数组,将相同类型(返回值与形式参数相同)的函数的指针存放于一个数组中,而不用大量的分支语句,使代码更加简洁。2.运用数学库函数中的三角函数,使复数与相量之间的转化更加便捷。3.大量使用system函数,构造沉浸式用户体验界面,避免了控制台显示语句过多。

该程序可以直接进行复数和相量的四则运算以及相互转化,在电子电工行业中进行相关计算比较快捷,也充分体现了将C语言学以致用,对专业学习产生帮助。

由于编者水平有限,程序中肯定有一些不完善的地方,欢迎大家批评指正。

用C语言实现复数和相量的四则运算和相互转化相关推荐

  1. lsqcurvefit拟合结果为复数_使用科学计算器计算复数与相量(提高篇)

    [作者声明] 本文所有文字均为作者原创,所有图片均为作者本人亲自拍摄或制作. 版权所有,仅供阅读欣赏,禁止任何单位或个人以任何形式对本文的文字或图片进行包括但不限于复制.转载.引用.抄袭.截图.模仿. ...

  2. j90度度复数运算_复数和相量运算复数定义及案例转换汇总

    电气工程中使用的数学将电阻,电流或直流电压加在一起使用所谓的"实数",用作整数或分数. 但实数不是我们需要使用的那种数字,特别是在处理频率相关的正弦源和矢量时.除了使用正常数字或实 ...

  3. C语言极坐标转换为代数式,相量的代数式转化为极坐标怎么用计算器啊

    满意答案 一.使用方法 1.利用计算器进行复数计算必须要用计算器的度,按DRG键,使计算器显示窗中要有"DEG"标致(表示计算器进行所有带角度的运算均以"度"为 ...

  4. 电子技术基础(三)__电路分析基础__正弦交流电的相量表示法

    通过前面的介绍, 回忆一下正弦量, 正弦量包括电压.电流.电动势. 一  正弦量的相量表示法 相量表示法是以复数运算为基础的. 为了与一般的复数相区别, 我们把表示正弦量的复数称为相量,并在大写字母上 ...

  5. C语言复数代数式转化成极坐标式,问题:正弦量的相量是复数。 复数有四种表示形式,四种形式可以相互转换。其中代数式和极坐标形式应用得最为广泛。...

    问题:正弦量的相量是复数. 复数有四种表示形式,四种形式可以相互转换.其中代数式和极坐标形式应用得最为广泛. 更多相关问题 有3个整数a.b.c,由键盘输入,利用条件表达式,输出其中最大的数. #in ...

  6. 用MATLAB编程正弦稳态相量图,matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析...

    matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析 课程设计任务书 学生姓名: 专业班级: 指导教师: 刘 新 华 工作单位:信息工程学院 题 目: 利用MATLAB对线性电路正弦稳态 ...

  7. 相量除法能用计算机吗,电路相量的加减乘除运算

    直接应用相量法画图就可以求解,也可以通过代数运算的方法.同频的正弦量相加仍得到同频的正弦量.同频正弦量的加减运算变为对应相量的加减运算. 电路相量2∠45+1∠30计算 相量有两种表示形式:1.模+幅 ...

  8. 一阶电路暂态响应的结果分析。_《电路原理》——相量法

    [作文原因]: 记得刚学习到电路原理正弦稳态分析这一板块的时候,当时我的内心是崩溃的.走马观花的在高处随手胡乱用头上加点的电流电压求解相关未知量并没有使我感到一丝成就.相反,我在运用"科技黑 ...

  9. 使用c语言实现复数运算的程序,用C语言实现的复数运算程序设计

    用C语言实现的复数运算程序设计 电大理工 2009年3月 Study of Science and Engineering at RTVU. 第1期 总第238期 用C语言实现的复数运算程序设计 王彦 ...

最新文章

  1. Android 中几个常用的分析工具的下载地址
  2. [Linux]Shell的运算符和特殊变量
  3. 【PC工具】更新免费文库文档下载器,免费下载文库文档
  4. OpenCV 距离变换的笔记
  5. 网络协议之:还在用HTTP代理?过时了,快试试SOCKS5
  6. 10通信端口感叹号_工程现场通信总线布线、压接规范
  7. mysql脚本的制作_制作脚本实现mysql自动备份
  8. 取当前进程对应之静态映像文件的绝对路径/proc/self/exe
  9. python和java学哪个好-Python和Java该学哪个?还在纠结的你看过来呀~
  10. C语言基础教程之如何定义变量
  11. paip.解决access出现 -2147467259 无效的参数量
  12. 在淘宝规则不断变化的形式下,该如何让店铺更好地发展
  13. 计算机原理与结构 实验1《实验工具使用》
  14. 单目标跟踪算法:SiamRPN++
  15. mysql前台工具下载_phpmyadmin工具下载
  16. 京交会将首设“一主多辅”场馆 展览面积较往届倍增
  17. SAP F1 无法显示该网页 完美解决方案(不用重装SAP)
  18. Grid ++ MIME 类型配置 载入报表数据,检查此URL及其数据,错误提示 网络服务器响应不成功
  19. 谁拿了奖金?HID2020竞赛、研讨会及颁奖典礼
  20. The First :使用Anaconda+pycharm学习图像处理

热门文章

  1. 实例4,循迹模块的使用和循迹小车的实现
  2. UID-08-PS-海报(招贴)2
  3. oracle 特殊字符转义
  4. 西澳推出两大创新型住宅太阳能加存储项目
  5. ggplot作图设置双坐标轴-各行其是
  6. 碰到个阿里p8,终于知道了别人为什么这么强,算是见识到了基础的天花板
  7. 迭代算法集锦(倒推法)
  8. 使用Burp Suite对登录页面进行字典攻击
  9. 计算机电子表格today函数,【在线等:EXCEL中=today返回当前日期怎么用?】显示当前月份的函数...
  10. NX/UG二次开发—装配—克隆相关知识总结