Titan笔记

  • 首页
  • Java
  • 数据结构
  • Web
  • C语言
  • Python
  • 杂谈
  • 逸笔挥墨
Titan笔记
分享学习、研究与开发过程中的点滴记忆
  1. 首页
  2. C语言
  3. 正文

[数据结构]结构体练习之复数运算

2020年2月29日 562点热度 3人点赞 0条评论

算结构题练习题吧

Talk is cheap,show you the code.

#include<stdio.h>
#include<math.h>
#include<string.h> 
typedef struct complex{
  double real;
  double virt;
}COM;

//复数求和的实现函数 
COM summation(COM num1,COM num2){ 
  COM result;
  result.real=num1.real+num2.real;
  result.virt=num1.virt+num2.virt;
  return result;
}

//复数乘积的实现函数 (a+bi)*(c+di) = (ac-bd)+(bc+ad)i
COM multiplication(COM num1,COM num2){
  COM result;
  result.real= num1.real*num2.real-num1.virt*num2.virt;
  result.virt= num1.virt*num2.real + num1.real*num2.virt;
  return result;
}
//复数除法的实现 (a+bi)/(c+di)=(ac+bd)/(c2+d2) +((bc-ad)/(c2+d2))i
COM division(COM num1,COM num2){
  COM result;
  result.real=(num1.real*num2.real+num1.virt*num2.virt)/(num2.real*num2.real+num2.virt*num2.virt);
  result.virt=(num1.virt*num2.real-num1.real*num2.virt)/(num2.real*num2.real+num2.virt*num2.virt);
  return result;
}

// 将结果进行输出 
void printResult(COM result){
  double virtPart=fabs(result.virt);
  char virtPartStr[100],realPartStr[100];
  sprintf(virtPartStr,"%lf",virtPart);
  sprintf(realPartStr,"%lf",result.real);
  
  //清除末尾0,如将1.16000输出为1.16 
  for(int i=strlen(virtPartStr);i>0;i--){
    if(virtPartStr[i]=='0'&&virtPartStr[i-1]!='0'){
      virtPartStr[i]='\0';
      break;
    }
  }
  for(int i=strlen(realPartStr);i>0;i--){
    if(realPartStr[i]=='0'&&realPartStr[i-1]!='0'){
      realPartStr[i]='\0';
      break;
    }
  }
  //输出处理后的结果 
  if(result.real!=0){
    if(result.virt<0){
      printf("%s-i%s",realPartStr,virtPartStr);
    }else if(result.virt>0){
      printf("%s+i%s",realPartStr,virtPartStr);
    }else{
      int endIndex=strlen(realPartStr)-1;
      realPartStr[endIndex]='\0';
      printf("%s",realPartStr);
    }
  }else{
    if((strcmp(virtPartStr,"0")==0)){
      printf("-i%s",realPartStr,virtPartStr);
    }else if(result.virt>0){
      printf("+i%s",realPartStr,virtPartStr);
    }else{
      printf("0");
    }
  }
  printf("\n");
  
}

int main(){
  printf("结构体 复数运算 By Titan!\n\n"); 
  COM number1,number2,result;
  // ----- <做加减运算> ------
  
  //第一组测试 (7.7-8i)+(-2.3) 
  number1={7.7,-8};
  number2={-2.3,0}; 
  result=summation(number1,number2);
  printf("(7.7-8i)+(-2.3) = ");
  printResult(result);
  //第二组测试 (0+0)
  number1={0,0};
  number2={0,0};
  result=summation(number1,number2);
  printf("(0+0) = ") ;
  printResult(result);
  
  //----- <做乘运算> ------
  // (2+2i)*(3-1.55i)
  number1={2,2};
  number2={3,-1.55};
  result=multiplication(number1,number2);
  printf("(2+2i)*(3-1.55i) = "); 
  printResult(result);
  //----- <做除运算> ------
  // (7.5+2i)/(3.5+3i) 
  number1={7.5,2};
  number2={3.5,3};
  result=division(number1,number2);
  printf("(7.5+2i)/(3.5+3i) = ") ;
  printResult(result);
  // 对于复数的读入和分离输出,只需要相应的取 COM的成员 real和virt即可. 
}

 

 

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: C语言 数据结构 结构体
最后更新:2020年2月29日

Titan

兴趣广泛而无一精擅
想到什么,我总是渴望以代码的方式去呈现
永远年轻,永远热泪盈眶
Stay Hungry, Stay Foolish

点赞
< 上一篇
下一篇 >

文章评论

取消回复

Titan

兴趣广泛而无一精擅
想到什么,我总是渴望以代码的方式去呈现
永远年轻,永远热泪盈眶
Stay Hungry, Stay Foolish

逸笔挥墨 - Titan的文学天地
文章分类
  • C语言 (4)
  • Hadoop (1)
  • Hive (3)
  • Java (18)
  • JavaWeb (3)
  • Linux运维之道 (1)
  • Mybatis学习笔记 (3)
  • Python (3)
  • SpringCloud (3)
  • Web (5)
  • Web前端 (4)
  • Web后端 (5)
  • 数据库 (1)
  • 数据结构 (10)
  • 杂谈 (3)
  • 诗词歌赋 (1)
  • 随摘 (2)
最新 热点 随机
最新 热点 随机
Spring Cloud 微服务学习笔记 - Eureka 服务注册与发现 Spring Cloud 微服务学习笔记 - IDEA工程搭建 关于我和Titan笔记 Spring Cloud 微服务学习笔记 - 开篇 TitanEMS - Titan企业员工管理系统 - JavaWeb期末实践项目 Linux 网络优化指南 - 改善Linux的网络性能
Spring Cloud 微服务学习笔记 - 开篇TitanEMS - Titan企业员工管理系统 - JavaWeb期末实践项目2021年1月随摘2021年1月诗摘关于我和Titan笔记《梦之浮桥》中的几句
Linux 网络优化指南 - 改善Linux的网络性能 [Java] Java多线程的探索 -获取新闻标题 [源码] Titan留言板 - Titan的第一个开源项目 Java 开发环境与IDE 配置与安装教程 (一)Mybatis的入门 Java核心技术之动态代理
标签聚合
Java 链式存储 Python JavaWeb 二叉树 数据结构 Mybatis学习笔记 Apache-Hive
友情链接
  • Mttblog

COPYRIGHT © 2016 - 2021 Titan笔记. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

豫ICP备20001822号-1

豫公网安备 41010502004418号