基础练习 复数运算
2016-10-28 17:05
162 查看
万事开头难,这句话说的可不假,以前也有人叫我写博客,但是我也是婉言拒绝了,理由就是自己的实力不行,怕会被别人笑话,其实自己实力真的不行。。。但是思来想去,觉得还是要做一些分享性的工作,所以今天在做完一题后,我决定登录CSDN,这是一个很棒的平台,在上面有很多大牛,他们做了很棒的工作,我也很荣幸能在上面写下属于自己的东西,如果一下我有写的不好的地方,欢迎各位指正,我会欣然接受,相信建议对我一个大二的学生也很有帮助。我的email是m13151723992@163.com。话不多说,来点干货。
编程实现两个复数的运算。
要求:(1)定义一个结构体类型来描述复数。
(2)复数之间的加法、减法、乘法和除法分别用不用的函数来实现。
(3)必须使用结构体指针的方法把函数的计算结果返回。
说明:用户输入:运算符号(+,-,*,/) a b c d.
输出:a+bi,输出时不管a,b是小于0或等于0都按该格式输出,输出时a,b都保留两位。
输入: - 2.5 3.6 1.5 4.9 输出: 1.00+-1.30i
这是一题挺简单的题目,实现复数的运算,但是题目中要求了要运用结构体去实现,加了一点难度,对于已经学过结构体的读者来说,这也不是什么难事。
但是如何做到代码精简化呢,也是一种艺术,在此,笔者写下的代码,没有追求简练,而且想以一种通俗易懂的方式来展现给读者。
1.四个函数编写
首先呢,我们要了解复数的运算法则,相加和相减的话就是实部和虚部对应的加减,得到的值作为和(差)的实部和虚部,乘除呢比较麻烦一点。我们以
a,b,c,d作为输入的两个复数的实部和虚部,积的实部则为ac-bd,虚部为bc+ad,除法的话实部为(ac+bd)/(c^2+d^2) ,虚部为(bc-ad)/(c^2+d^2)。有了
这些知识我们就可以编写程序了。接下来定义了加减乘除四个函数,对应上述的运算法则,注意返回值为指针类型。
2.结构体的定义
首先得话定义一个结构体FuShu代表复数,结构体有两个成员为real(实部)和xu(虚部),这里用了自定义类型typedef,这样方便以后要定义复数就可以直接写成FuShu a;但是若要定义为指针类型,则要开辟相应的存储空间,用的是(FuShu*)malloc(sizeof(FuShu))。要转换为指针型,所以前面加(FuShu*)。
3.主函数的定义
定义了一个结构体数组,存放两个运算的复数。函数调用和输出写成了一个多分支语句。对输入的运算符进行判断,调用对应的函数,把两个运算数的地址传递给相应的函数进行运算,add(p,q)就是表示加法运算后的和复数的地址,加上指向运算符后,就可以输出对应的实部和虚部了。另外使用了动态开辟内存函数,头文件要加上#include“stdlib.h” 。
致此,程序编写完毕。谢谢阅读,希望对你有所帮助。
之前一直在上面看文章,到了自己写的时候发现,那么空洞,还有很长的路要走啊,写技术博客可谓是程序员很好的习惯,希望自己能坚持下去。帮助了他人(或许可能没有),也成就了自己。
编程实现两个复数的运算。
要求:(1)定义一个结构体类型来描述复数。
(2)复数之间的加法、减法、乘法和除法分别用不用的函数来实现。
(3)必须使用结构体指针的方法把函数的计算结果返回。
说明:用户输入:运算符号(+,-,*,/) a b c d.
输出:a+bi,输出时不管a,b是小于0或等于0都按该格式输出,输出时a,b都保留两位。
输入: - 2.5 3.6 1.5 4.9 输出: 1.00+-1.30i
这是一题挺简单的题目,实现复数的运算,但是题目中要求了要运用结构体去实现,加了一点难度,对于已经学过结构体的读者来说,这也不是什么难事。
但是如何做到代码精简化呢,也是一种艺术,在此,笔者写下的代码,没有追求简练,而且想以一种通俗易懂的方式来展现给读者。
#include<stdio.h> #include<stdlib.h> typedef struct FuShu{ double real; double xu; }FuShu; FuShu *add(FuShu *p,FuShu *q){ FuShu *c=(FuShu*)malloc(sizeof(FuShu)); c->real=p->real+q->real; c->xu=p->xu+q->xu; return c; } FuShu *reduce(FuShu *p,FuShu *q){ FuShu *c=(FuShu*)malloc(sizeof(FuShu)); c->real=p->real-q->real; c->xu=p->xu-q->xu; return c; } FuShu *multiple(FuShu *p,FuShu *q){ FuShu *c=(FuShu*)malloc(sizeof(FuShu)); c->real=p->real*q->real-p->xu*q->xu; c->xu=p->xu*q->real+p->real*q->xu; return c; } FuShu *division(FuShu *p,FuShu *q){ FuShu *c=(FuShu*)malloc(sizeof(FuShu)); double a=(q->real*q->real+q->xu*q->xu); c->real=(p->real*q->real+p->xu*q->xu)/a; c->xu=(p->xu*q->real-p->real*q->xu)/a; return c; } int main(){ FuShu a[2]; char c; scanf("%c%lf%lf%lf%lf",&c,&a[0].real,&a[0].xu,&a[1].real,&a[1].xu); FuShu *p=&a[0],*q=&a[1]; switch(c){ case '+':printf("%.2lf+%.2lfi\n",add(p,q)->real,add(p,q)->xu);break; case '-':printf("%.2lf+%.2lfi\n",reduce(p,q)->real,reduce(p,q)->xu);break; case '*':printf("%.2lf+%.2lfi\n",multiple(p,q)->real,multiple(p,q)->xu);break; case '/':printf("%.2lf+%.2lfi\n",division(p,q)->real,division(p,q)->xu);break; } return 0; }
1.四个函数编写
首先呢,我们要了解复数的运算法则,相加和相减的话就是实部和虚部对应的加减,得到的值作为和(差)的实部和虚部,乘除呢比较麻烦一点。我们以
a,b,c,d作为输入的两个复数的实部和虚部,积的实部则为ac-bd,虚部为bc+ad,除法的话实部为(ac+bd)/(c^2+d^2) ,虚部为(bc-ad)/(c^2+d^2)。有了
这些知识我们就可以编写程序了。接下来定义了加减乘除四个函数,对应上述的运算法则,注意返回值为指针类型。
2.结构体的定义
首先得话定义一个结构体FuShu代表复数,结构体有两个成员为real(实部)和xu(虚部),这里用了自定义类型typedef,这样方便以后要定义复数就可以直接写成FuShu a;但是若要定义为指针类型,则要开辟相应的存储空间,用的是(FuShu*)malloc(sizeof(FuShu))。要转换为指针型,所以前面加(FuShu*)。
3.主函数的定义
定义了一个结构体数组,存放两个运算的复数。函数调用和输出写成了一个多分支语句。对输入的运算符进行判断,调用对应的函数,把两个运算数的地址传递给相应的函数进行运算,add(p,q)就是表示加法运算后的和复数的地址,加上指向运算符后,就可以输出对应的实部和虚部了。另外使用了动态开辟内存函数,头文件要加上#include“stdlib.h” 。
致此,程序编写完毕。谢谢阅读,希望对你有所帮助。
之前一直在上面看文章,到了自己写的时候发现,那么空洞,还有很长的路要走啊,写技术博客可谓是程序员很好的习惯,希望自己能坚持下去。帮助了他人(或许可能没有),也成就了自己。
相关文章推荐
- Java练习之复数运算
- 【openjudge 计算概论(A)】[基础编程练习(运算成分)]
- C基础练习一:运算符号
- python基础练习(一)——自定义函数,数学运算,命令行输入
- 复数运算单元
- 位运算简介及实用技巧(一):基础篇
- 实训C++语言设计——实现复数运算
- 复数运算的JAVA类
- asp.net(c#)复数类(复数加减乘除四则运算)
- C语言一些基础:数据类型,运算类型及表达式
- 惠州学院计算机基础课程配套练习系统
- 位运算简介及实用技巧(一):基础篇
- 位运算应该知道的一些基础知识
- 位运算简介及实用技巧(一):基础篇
- 图像处理:基础(模板、卷积运算)
- 2008秋-计算机软件基础-单链表练习(1)
- 实训C++语言设计——实现复数运算
- [C#]练习了下数组和类,C++ 基础还算可以,不是很吃力
- Nhibernate基础练习
- 硬件设计基础:什么是 rail-to-rail运算放大器?