栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

一、源代码及注释

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#define pi 3.1415926

void 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)in", 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)in", 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)in", 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)in", 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)in", 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+b1ita2+b2in");
					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 p1tu2 p2n");
					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+bin");
			scanf("%f%f", &a, &b);//输入复数的实部和虚部
			con_pha(a, b);//执行
			system("pause");//程序运行暂停,便于查看结果
		}
		else if (input == 4)//进入将相量转化为复数模式
		{
			system("cls");
			printf("Please input the phasor:na/_bn");
			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语言学以致用,对专业学习产生帮助。

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948275.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号