Titan笔记

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

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

2020年2月29日 1136点热度 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

不为岁月流逝蹉跎,不为潮流的势头去附和

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论
最新 热点 随机
最新 热点 随机
Docker配置IPv6容器网络支持 什么是Elastic Stack,ELK的发展历程 K8s中Pod的基本概念 云原生 - 浅谈容器基础与K8S架构设计 腾讯Serverless体验,使用TypeScript编写并部署云函数 Go-Proxy-Checker,一款基于Go编写的高性能代理服务器验证工具
[杂谈] 什么是递归函数? [PHP] Laravel框架介绍、安装及配置 [数据结构] 二叉搜索树的CURD(增删改查)操作 如何在Java中处理JSON Android数据存储方式之SharedPreferences 什么是Elastic Stack,ELK的发展历程
分类
  • Android
  • C语言
  • Elasticsearch
  • Hadoop
  • Hive
  • Java
  • JavaWeb
  • Kubernetes
  • Linux运维之道
  • Mybatis学习笔记
  • Python
  • SpringCloud
  • Web
  • Web前端
  • Web后端
  • 云原生
  • 并发编程
  • 开发工具
  • 数据库
  • 数据结构
  • 杂谈
  • 移动开发
  • 移动测试
  • 诗词歌赋
  • 软件测试
  • 逸笔挥墨
  • 随摘
标签聚合
Apache-Hive Mybatis学习笔记 Java 二叉树 Python 数据结构 JavaWeb 链式存储

COPYRIGHT © 2013-2021 Titan. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备20001822号-1

豫公网安备 41010502004418号