我的成长

在这里,希望可以与大家一起探讨编程哦。虽然我还是属于菜鸟级别的。

3复数的运算

题目编号 3
时间限制 1000 毫秒
内存限制 32768 K字节

问题描述

计算两个复数的加减乘除。
 

输入

一个运算符和两个复数。运算符可能是+, -, * 或 /。然后是第一个复数的实部,第一个复数的虚部,第二个复数的实部,第二个复数的虚部。每个部分都可能是一个浮点数。 他们之间都用一个空格隔开。

输出

两个复数的运算结果。首先输出结果的实部,然后是结果的虚部。每个部分保留两位小数。

输入样例

* 1.0 2.5 3.5 4.0

输出样例

-6.50 12.75


用C++做的代码

           #include  < stdio.h >

using   namespace  std;
struct  complex {
       
float  real;
       
float  imag;
       }
;
       
struct  complex add( struct  complex num1, struct  complex num2) {
       
struct  complex num3;        
       num3.real 
=  num1.real  +  num2.real;
       num3.imag 
=  num1.imag  +  num2.imag;
       
return  num3;
       }


struct  complex substract( struct  complex num1, struct  complex num2) {
       
struct  complex num3; 
       num3.real 
=  num1.real  -  num2.real; 
       num3.imag 
=  num1.imag  -  num2.imag;   
       
return  num3;
       }


struct  complex multiply( struct  complex num1, struct  complex num2) {
       
struct  complex num3; 
       num3.real 
=  num1.real  *  num2.real  -  num1.imag  *  num2.imag; 
       num3.imag 
=  num1.real  *  num2.imag  +  num1.imag  *  num2.real;
       
return  num3;
       }
       
          
struct  complex divide ( struct  complex num1, struct  complex num2) {
       
struct  complex num3; 
       num3.real 
= (num1.real  *  num2.real  +  num1.imag  *  num2.imag) /
            (num2.real 
*  num2.real  +  num2.imag  *  num2.imag);
       num3.imag 
=  (num1.imag  *  num2.real  -  num1.real  *  num2.imag) /
            (num2.real 
*  num2.real  +  num2.imag  *  num2.imag);
       
return  num3;
       }


    
      




int  main( int  argc,  char   * argv[])
{
    
struct  complex num1,num2,num3;
    
char  oper;

    
    scanf(
" %f%f%f%f " , & num1.real,  & num1.imag,  & num2.real,  & num2.imag);
  
    
switch (oper) {
         
case   ' + ' :
              num3 
=  add(num1,num2);
              printf(
" %.2f %.2f\n " ,num3.real, num3.imag);
              
break ;
              
         
case   ' - ' :
              num3 
=  substract(num1,num2);
              printf(
" %.2f %.2f\n " ,num3.real, num3.imag);
              
break ;
              
         
case   ' * ' :
              num3 
=  multiply(num1,num2);
              printf(
" %.2f %.2f\n " ,num3.real, num3.imag);
              
break ;
              
         
case   ' / ' :
              num3 
=  divide(num1,num2);
             printf(
" %.2f %.2f\n " ,num3.real, num3.imag);
              
break ;
         
default :
             printf(
" Error!\n " );
                 }

    system(
" PAUSE " );
    
return  EXIT_SUCCESS;
}

 

用C做的代码
 

#include  < stdio.h >

struct  complex{
       
float  real;
       
float  imag;
       };
       
struct  complex add( struct  complex num1, struct  complex num2){
       
struct  complex num3;        
       num3.real 
=  num1.real  +  num2.real;
       num3.imag 
=  num1.imag  +  num2.imag;
       
return  num3;
       }

struct  complex substract( struct  complex num1, struct  complex num2){
       
struct  complex num3; 
       num3.real 
=  num1.real  -  num2.real; 
       num3.imag 
=  num1.imag  -  num2.imag;   
       
return  num3;
       }

struct  complex multiply( struct  complex num1, struct  complex num2){
       
struct  complex num3; 
       num3.real 
=  num1.real  *  num2.real  -  num1.imag  *  num2.imag; 
       num3.imag 
=  num1.real  *  num2.imag  +  num1.imag  *  num2.real;
       
return  num3;
       }       
          
struct  complex divide ( struct  complex num1, struct  complex num2){
       
struct  complex num3; 
       num3.real 
= (num1.real  *  num2.real  +  num1.imag  *  num2.imag) /
            (num2.real 
*  num2.real  +  num2.imag  *  num2.imag);
       num3.imag 
=  (num1.imag  *  num2.real  -  num1.real  *  num2.imag) /
            (num2.real 
*  num2.real  +  num2.imag  *  num2.imag);
       
return  num3;
       }

    
      




int  main( int  argc,  char   * argv[]){
    
struct  complex num1,num2,num3;
    
char  oper;
    
    scanf(
" %c%f%f%f%f " , & oper,  & num1.real,  & num1.imag,  & num2.real,  & num2.imag);
  
    
switch (oper){
         
case   ' + ' :
              num3 
=  add(num1,num2);
              printf(
" %.2f %.2f\n " ,num3.real, num3.imag);
              
break ;
              
         
case   ' - ' :
              num3 
=  substract(num1,num2);
              printf(
" %.2f %.2f\n " ,num3.real, num3.imag);
              
break ;
              
         
case   ' * ' :
              num3 
=  multiply(num1,num2);
              printf(
" %.2f %.2f\n " ,num3.real, num3.imag);
              
break ;
              
         
case   ' / ' :
              num3 
=  divide(num1,num2);
              printf(
" %.2f %.2f\n " ,num3.real, num3.imag);
              
break ;
         
default :
              printf(
" Error!\n " );
              
             }
  system(
" PAUSE " ); 
  
return   0 ;
}

这两段代码做的是复数加减乘除的运算。基本上运行起来都是对的,但是老师给了我们个调试的网站,AC是完全正确,而我用C++做的,不管怎么试还是次之的WA。后来测试发现应该是精度的关系。但是C++里面控制精度的不是setprecision()这个函数吗?为什么我用了他之后却仍是无法控制呢。只要是整数的,他就不会留小数点后的数字0。难道还有其他的函数控制,还是用法的错误呢?郁闷!

posted on 2006-09-25 21:49 林慧 阅读(150) 评论(0)  编辑 收藏 引用 所属分类: C++

只有注册用户登录后才能发表评论。