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

时间:2022-07-22
本文章向大家介绍[数据结构]结构体练习之复数运算,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

算结构题练习题吧

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]='';
      break;
    }
  }
  for(int i=strlen(realPartStr);i>0;i--){
    if(realPartStr[i]=='0'&&realPartStr[i-1]!='0'){
      realPartStr[i]='';
      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]='';
      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!nn"); 
  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即可. 
}