zl程序教程

您现在的位置是:首页 >  Java

当前栏目

数据结构基础篇》》用c语言实现复数的八个基本运算

2023-02-18 16:33:59 时间

数据结构开讲啦!!!??? 本专栏包括:

  • 抽象数据类型
  • 线性表及其应用
  • 栈和队列及其应用
  • 串及其应用
  • 数组和广义表
  • 树、图及其应用
  • 存储管理、查找和排序

将从简单的抽象数据类型出发,深入浅出地讲解复数,海龟作图 到第二讲线性表及其应用中会讲解,运动会分数统计,约瑟夫环,集合的并、交和差运算,一元稀疏多项式计算器,池塘夜降彩色雨 到最后一步一步学会利用数据结构和算法知识独立完成校园导航咨询的程序。 希望我们在学习的过程中一起见证彼此的成长。???

目录

问题描述:

基本要求:

实现提示:

数据结构定义:

输出代码规范化:

初始化提示界面:

复数求和:

复数求差:

复数相乘:

共轭复数:

复数相除:

实部,虚部:

完整代码演示:


问题描述:

        设计一个可进行复数运算的演示程序

基本要求:

        实现下列八种基本运算:

  • 由输入的实部和虚部生成一个复数;
  • 两个复数求和;
  • 两个复数球差;
  • 两个复数求积;
  • 从已知复数中分离出实部;
  • 从已知复数中分离出虚部;
  • 求已知复数的共轭复数;
  • 两个复数相除;

实现提示:

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

数据结构定义:

//定义一个结构体数组  struct complex{     double a=0;     double b=0; }C[100];

这里一定要初始化,不然输入0时候,程序会出错。

输出代码规范化:

complex beautiful(complex c){     if(c.a==0&&c.b==0){             printf("0\n");         }else{             if(c.a == 0){                 printf("%lfi\n",c.b);             }else if(c.b == 0){                 printf("%lf\n",c.a);             }else{                 if(c.b<0){                     printf("%lf%lfi\n",c.a,c.b);                 }else{                     printf("%lf%+lfi\n",c.a,c.b);                 }             }         }  }

因为考虑到输出结果,尽量规范化,所以这里把不同的复数的输出格式放到一个函数里。

初始化提示界面:

  •  用户输入的格式为:

        3.1,0;4.22,8.9;就可得到两个不同的复数3.1 4.22+8.9i。

  • 用户输入的格式为:

        0;0;就得到两个实部虚部都为0的复数。

复数求和:

复数求差:

复数相乘:

共轭复数:

复数相除:

实部,虚部:

完整代码演示:

#include<stdio.h>
#include<math.h>

//定义一个结构体数组 
struct complex{
	double a=0;
	double b=0;
}C[100];


complex beautiful(complex c){
	if(c.a==0&&c.b==0){
			printf("0\n");
		}else{
			if(c.a == 0){
				printf("%lfi\n",c.b);
			}else if(c.b == 0){
				printf("%lf\n",c.a);
			}else{
				if(c.b<0){
					printf("%lf%lfi\n",c.a,c.b);
				}else{
					printf("%lf%+lfi\n",c.a,c.b);
				}
			}
		} 
}

complex create(complex C[2]){
	for(int i = 0;i<2;i++){
//		printf("%lf,%lf,%lf,%lf",C[0].a,C[0].b,C[1].a,C[1].b);
		if(int(C[i].a)==0&&int(C[i].b)==0){
			printf("0\n");
		}else{
			if(C[i].a == 0){
				printf("%lfi\n",C[i].b);
			}else if(C[i].b == 0){
				printf("%lf\n",C[i].a);
			}else{
				if(C[i].b<0){
					printf("%.1lf%lfi\n",C[i].a,C[i].b);
				}else{
					printf("%lf% + lfi\n",C[i].a,C[i].b);
				}
			}
		} 
	}
	return C[1];
} 

complex sum(complex C[2]){
	complex res;
	res.a = C[0].a+C[1].a;
	res.b = C[0].b+C[1].b;
	printf("两个复数相加的结果为:") ;
	beautiful(res); //调用beautiful方法来实现复数的标准输出,一下方法同理 
	return res;
} 

complex mins(complex C[2]){
	complex res;
	res.a = C[0].a-C[1].a;
	res.b = C[0].b-C[1].b;
    printf("两个复数相减的结果为:") ;
//	printf("%lf",res.a); 
	beautiful(res); 
	return res;
} 

complex multiple(complex C[2]){
	complex res;
	res.a = C[0].a*C[1].a-C[0].b*C[1].b;
	res.b = C[0].a*C[1].b+C[0].b*C[1].a;
	printf("两个复数相乘的结果为:") ;
	beautiful(res); 
	return res;
	
}

complex gongge(complex c){
	complex res;
	res.a = c.a;
	res.b = -1*c.b;
	printf("共轭复数为:") ;
	beautiful(res); 
	return res;
} 

complex divide(complex C[2]){
	complex res;
	double z = C[1].a*C[1].a+C[1].b*C[1].b; 
	res.a = (C[0].a*C[1].a+C[0].b*C[1].b)/z;
	res.b = (C[0].b*C[1].a-C[1].b*C[0].a)/z;
//	printf("%lf %lf",res.a,res.b) ;
	printf("两个复数相除的结果为:");
	beautiful(res); 
	return res;
}

int  real(complex c){
	printf("实部为:%lf\n",c.a);
	return c.a;
}

int virtuals(complex c){
	printf("虚部为:%lf\n",c.b);
	return c.b;
}

int main(){
	printf("请输入两个复数的实部和虚部:\n");
	printf("示例:\n3.1,0;4.22,8.9;\n");
	printf("你输入的第一个复数为:3.1\n");
	printf("你输入的第二个复数为:4.22+8.9i\n"); 
	printf("----------请开始输入吧!----------\n");
	//定义两个复数 
	complex C[2];
	scanf("%lf,%lf;%lf,%lf;",&C[0].a,&C[0].b,&C[1].a,&C[1].b);
	create(C);
//	printf("%lf,%lf,%lf,%lf",C[0].a,C[0].b,C[1].a,C[1].b);//这一行的主要目的是检验输入的数据是不是符合要求的。 
	sum(C);//两个复数求和
	mins(C);//两个复数求差
	multiple(C);//两个复数求积
	//分离出两个实部 
	real(C[0]);
	real(C[1]);
	//分离出两个虚部
	virtuals(C[0]);
	virtuals(C[1]);
	//求出两个复数的共轭
	gongge(C[0]);
	gongge(C[1]);
	//两个复数相除
	divide(C);
	 
	return  0;

} 

本文的代码仍然存在不足的地方,如有错误,请指出。。。