1051. 复数乘法 (15)



复数可以写成(A + Bi)的常规形式,其中A是实部,B是虚部,i是虚数单位,满足i2 = -1;也可以写成极坐标下的指数形式(R*e(Pi)),其中R是复数模,P是辐角,i是虚数单位,其等价于三角形式(R(cos(P) + isin(P))。

现给定两个复数的R和P,要求输出两数乘积的常规形式。

输入格式:

输入在一行中依次给出两个复数的R1, P1, R2, P2,数字间以空格分隔。

输出格式:

在一行中按照“A+Bi”的格式输出两数乘积的常规形式,实部和虚部均保留2位小数。注意:如果B是负数,则应该写成“A-|B|i”的形式。
输入样例:

2.3 3.5 5.2 0.4

输出样例:

-8.68-8.23i



错误代码:

/*************************************************************************> File Name: 1051.c> Author: YueBo > Function:复数乘法> Created Time: 2016年11月23日 星期三 22时16分44秒************************************************************************/#include <stdio.h>
#include <math.h>float myRound(float x)
{float val = 0.0;if (x >= 0) {val = x * 1000 + 5;} else {val = x * 1000 - 5;}val = (int)(val / 10);val = val / 100.0;return val;
}int main()
{float R1, P1, R2, P2, R3, P3;float temp1 = 0.0, temp2 = 0.0;scanf("%f%f%f%f", &R1, &P1, &R2, &P2);R3 = R1 * R2;P3 = P1 + P2;temp1 = myRound(R3*sin(P3));temp2 = myRound(R3*cos(P3));if (temp1 >= 0) {printf("%.2f+%.2fi", temp2, temp1);} else {printf("%.2f%.2fi", temp2, temp1);}return 0;
}

错误提示:

错误原因:

总有一个测试数据过不去,感觉怪异的不得了,怎么检查都查不出错误,后来查看别人的代码发现是自己数据类型用错啦,由于float的精度在中间结果中可能会出错,譬如说0.000000003 × 10000000 == 0,这样的错误,因为float是8位有效数字,double是16位有效数字,很明显把上面所有的float改成double就OK啦☺,由此发现,对于科学计算,一定要用double及精度在之之上的数据类型。

正确代码

#include <stdio.h>
#include <math.h>double myRound(double x)
{double val = 0.0;if (x >= 0) {val = x * 1000 + 5;} else {val = x * 1000 - 5;}val = (int)(val / 10);val = val / 100.0;return val;
}int main()
{double R1, P1, R2, P2, R3, P3;double temp1 = 0.0, temp2 = 0.0;scanf("%lf%lf%lf%lf", &R1, &P1, &R2, &P2);R3 = R1 * R2;P3 = P1 + P2;temp1 = myRound(R3*sin(P3));temp2 = myRound(R3*cos(P3));if (temp1 >= 0) {printf("%.2f+%.2fi", temp2, temp1);} else {printf("%.2f%.2fi", temp2, temp1);}return 0;
}

之所以自己写一个四舍五入的函数而不用printf自动进行四舍五入是因为,printf("%.2f", -0.0002);结果为-0.00,其实这样做还是麻烦啦,稍微对printf函数进行限制一下就OK啦,

代码如下:

/*************************************************************************> File Name: 1051.c> Author: YueBo > Function:复数乘法> Created Time: 2016年11月23日 星期三 22时16分44秒************************************************************************/#include <stdio.h>
#include <math.h>int main()
{double R1, P1, R2, P2, Re, Im;scanf("%lf%lf%lf%lf", &R1, &P1, &R2, &P2);Re = R1 * R2 * cos(P1+P2);Im = R1 * R2 * sin(P1+P2);if (-0.005<Re && Re<0) {printf("0.00");} else {printf("%.2f", Re);}if (-0.005<Im && Im<0) {printf("+0.00i");} else if (Im >= 0) {printf("+%.2fi", Im);} else {printf("%.2fi", Im);}return 0;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ios企业应用发布流程

转载自:http://blog.csdn.net/justinjing0612/article/details/8758692留作备忘 企业发布app的 过程比app store 发布的简单多了&#xff0c;没那么多的要求&#xff0c;哈 但是整个工程的要求还是一样&#xff0c;比如各种像素的icon啊 命名规范啊等等。 下面是具体的流程 1、…

前端学习(975):bootstrap轮播图

1引入js和css 2引入html 2运行结果

linux3.0.4编译LDD中的scull全过程

按照惯例&#xff0c;我是应该先写一些本章的收获的&#xff0c;不过太晚了。 在看完第三章之后开始编译&#xff0c;错误一堆&#xff0c;几乎崩溃&#xff0c;幸亏经过不断的百度&#xff0c;总算解决了问题&#xff0c;我发现 我遇到问题比较多&#xff0c;算是集中七个龙珠…

前端学习(976):阿里百秀轮播图制作

引入js和css 复制html结构 结构调整

SAP RFC user 最小权限

今天作了几个rfc供外围系统调用&#xff0c;他们使用.net。 在.net调用时&#xff0c;提示“Lookup of function ET_PRDATA metadata failed for destination ZNMMPT_EXPORT_PR”。 这个错误&#xff0c;是由于GetFunctionMetadata()函数引起的&#xff0c;对此&#xff0c;NC0…

增强中获取屏幕值的一句很实用代码…

增强中获取屏幕值的一句很实用代码&#xff0c;直接获取屏幕字段值&#xff0c; 一般是在增强中用比如MIGO收货时&#xff0c;希望获取收货对应的A01这个值增强&#xff1a;BADI&#xff1a; MB_DOCUMENT_BADI MB_DOCUMENT_BADI 是在过账后了&#xff0c;不能报E类型消息&…

centOS7安装matlab2014a

1&#xff0c;网上下载matlab 2014a for linux; 2&#xff0c;挂载matlab_unix_2014a.iso到/mnt/matlab&#xff1b; mkdir /mnt/matlab2014a/ mount matlab_unix_2014a.iso /mnt/matlab2014a/ -o loop 3&#xff0c; cd /mnt/matlab2014a ./install4&#xff0c;选择第二个…

xdoj机器人ac

xdoj机器人100分 #include<stdio.h> int main() { char a[22][22]; int b[22][22]{0}; int h,l,f; scanf("%d%d%d",&h,&l,&f); getchar(); int i,j,c0; int flag0; for(i1;i<h;i) { for(j1;j<l;j) { a[i][j]getchar(); }getchar();} for(i1;…

最大子段和c(c语言实现)

1&#xff0c;题目 2&#xff0c;各种算法 暴力解决&#xff0c;就是所有的情况都遍历一遍&#xff0c;然后说&#xff0c;我找到最牛逼的啦 int MaxSubseqSum1(int A[], int N, int* pidxStart, int* pidxEnd) { int sum A[0], tempSum 0;int i, j, k;*pidxStart 0, *pid…

1007. Maximum Subsequence Sum (25)

Sample Input: 10 -10 1 2 3 4 -5 -23 3 7 -21 Sample Output: 10 1 4 错误代码如下&#xff1a; #include <stdio.h>int MaxSubseqSum4(int A[], int N, int* pstart, int* pend) {int i 0;int tempStart; //记录最大子段和位置int thisSum 0, sum 0;tempStart …

实验项目 3-4:一元多项式的乘法与加法运算

代码如下&#xff1a; /*************************************************************************> File Name: AddPoly.c> Author: YueBo> Mail: yuebowhu163.com> Created Time: 2016年12月17日 星期六 13时00分35秒***************************************…

树的同构

输入样例1&#xff08;对应图1&#xff09;&#xff1a;8A 1 2B 3 4C 5 -D - -E 6 -G 7 -F - -H - -8G - 4B 7 6F - -A 5 1H - -C 0 -D - -E 2 -输出样例1:Yes输入样例2&#xff08;对应图2&#xff09;&#xff1a;8B 5 7F - -A 0 3C 6 -H - -D - -G 4 -E 1 -8D 6 -B 5 -E - -…

.Net 中接口应用的知识点(排序)

接口 接口可以看作是多态的一种。它打破了里氏替换原则。即不是共同的生物&#xff0c;比如动物&#xff08;狗&#xff09;和人&#xff08;老师&#xff09;&#xff0c;这两个类 却都有吃这种方法。但是继承里不能把老师和狗归为一个类。所以这时用接口来解决这种问题。 语法…