数据结构与算法基础(王卓)(1)
创始人
2024-02-14 16:33:28

 标准答案:(来源自数据结构与算法基础(青岛大学——王卓) note_Tarench的博客-CSDN博客)

#include 
using namespace std;typedef struct {float realpart;  //实部float imagpart;  //虚部
}Complex;/*函数声明*/
void assign(Complex* A, float real, float imag);  //赋值
//加减乘除
void add(Complex* C, Complex A, Complex B);     
void minus(Complex* C, Complex A, Complex B);
void mutiply(Complex* C, Complex A, Complex B);
void divide(Complex* C, Complex A, Complex B);/*函数实现*/
void assign(Complex* A, float real, float imag)
{A->realpart = real;A->imagpart = imag;
}void add(Complex* C, Complex A, Complex B)
{C->realpart = A.realpart + B.realpart;C->imagpart = A.imagpart + B.imagpart;
}void minus(Complex* C, Complex A, Complex B)
{C->realpart = A.realpart - B.realpart;C->imagpart = A.imagpart - B.imagpart;
}void mutiply(Complex* C, Complex A, Complex B)
{C->realpart = A.realpart * B.realpart - A.imagpart * B.imagpart;C->imagpart = A.realpart * B.imagpart + A.imagpart * B.realpart;
}void divide(Complex* C, Complex A, Complex B)
{C->realpart = (A.realpart * B.realpart + A.imagpart * B.imagpart) / (B.realpart * B.realpart + B.imagpart * B.imagpart);C->imagpart = (B.realpart * A.imagpart - B.imagpart * A.realpart) / (B.realpart * B.realpart + B.imagpart * B.imagpart);
}

(学习该块知识过程中)碰到的之前没学过的,之前不会的新学的,零碎的知识点和问题:

一:typedef struct 

(1):这是个什么东西?

(2):这个typedef总感觉之前学习C++模块的基础知识时好像看到过

但是具体在哪里真的学过翻书翻了半天好像又找不出来

(3):之前我们在C++里面学习定义一个新的类型(结构体)时不都是用:

struct <新建类型名>

的格式吗?

关于typedef struct的详细解释,详见:typedef struct_宇 -Yu的博客-CSDN博客

在这里,简单来说,我们只需要知道: 模块

typedef struct {float realpart;  //实部float imagpart;  //虚部
}Complex;

等价于

struct Complex {float realpart;  //实部float imagpart;  //虚部
};

最终(已经实践验证)结果一样,把这里的typedef struct模块替换为我们熟悉的struct格式的模块即可;

将大段程序简化拆解(把五种运算拆开来一个一个说):

赋值

#include 
using namespace std;struct Complex
{//复杂的<复数>float realpart;  //实部float imagpart;  //虚部
};
/*函数声明*/
void assign(Complex* A, float real, float imag);  //赋值/*函数实现(定义)*/
void assign(Complex* A, float real, float imag)
{A->realpart = real;A->imagpart = imag;
}

给复数赋值部分,程序运行步骤相当于:

    (A->realpart) = real;
    (A->imagpart) = imag;

即:

第一个语句:

指针A访问结构体中的realpart部分

相当于(A->realpart)就是(代表)complex结构体中的realpart实数型变量,把这一部分调用出来

并且(然后),把函数给出的实参real赋给这个realpart部分

同样的,第二个语句:

指针A访问结构体中的imagpart部分

相当于(A->imagpart)就是(代表)complex结构体中的imagpart实数型变量,把这一部分调用出来

并且(然后),把函数给出的实参imag赋给这个imagpart部分

于是,赋值操作就完成啦

将该程序补充完整:

#include 
using namespace std;struct Complex
{//复杂的<复数>float realpart;  //实部float imagpart;  //虚部
};
/*函数声明*/
void assign(Complex* A, float real, float imag);  //赋值/*函数实现(定义)*/
void assign(Complex* A, float real, float imag)
{(A->realpart) = real;(A->imagpart) = imag;
}
int main()
{ Complex n;Complex* p = &n;assign(p, 1, 2);cout << "该复数等于:"<realpart<<"+"<imagpart<<"i"<

结果:

 至于后面其他的加减乘除的函数定义,和赋值部分相似

(用“->”调用出所输出结果的实部/虚部部分,然后再针对该部分的运算规则分别给其赋值)

在此不再赘述,唯一有一点需要说明的,就是关于复数的除法公式:(如下)

另外,在除法运算中其实还默认要求分母不等于0,补充程序为:(标准答案multiply打错了)

#include 
using namespace std;typedef struct //复杂的<复数>
{float realpart;  //实部float imagpart;  //虚部
}Complex;/*函数声明*/
void assign(Complex* A, float real, float imag);  //赋值
//加减乘除
void add(Complex* C, Complex A, Complex B);
void minus(Complex* C, Complex A, Complex B);
void mutiply(Complex* C, Complex A, Complex B);
void divide(Complex* C, Complex A, Complex B);/*函数实现*/
void assign(Complex* A, float real, float imag)
{A->realpart = real;A->imagpart = imag;
}void add(Complex* C, Complex A, Complex B)
{C->realpart = A.realpart + B.realpart;C->imagpart = A.imagpart + B.imagpart;
}void minus(Complex* C, Complex A, Complex B)
{C->realpart = A.realpart - B.realpart;C->imagpart = A.imagpart - B.imagpart;
}void multiply(Complex* C, Complex A, Complex B)
{C->realpart = A.realpart * B.realpart - A.imagpart * B.imagpart;C->imagpart = A.realpart * B.imagpart + A.imagpart * B.realpart;
}void divide(Complex* C, Complex A, Complex B)
{while (B.realpart * B.realpart + B.imagpart * B.imagpart != 0)C->realpart = (A.realpart * B.realpart + A.imagpart * B.imagpart) / (B.realpart * B.realpart + B.imagpart * B.imagpart);C->imagpart = (B.realpart * A.imagpart - B.imagpart * A.realpart) / (B.realpart * B.realpart + B.imagpart * B.imagpart);
}

 最后,我们再来补充完整标准答案中没有写的主函数:(具体实例实际具体运算部分)

以PPT中的具体运算为例

void 输出结果(Complex a)
{cout << "结果为: " << a.realpart << "+" << a.imagpart << "i;" << endl;
}
int main()
{Complex z1, z2,a,m,result;assign(&z1, 8, 6);assign(&z2, 4, 3);add(&a,z1,z2);multiply(&m, z1, z2);divide(&result, m, a);输出结果(result);
}

最终:

#include 
using namespace std;typedef struct //复杂的<复数>
{float realpart;  //实部float imagpart;  //虚部
}Complex;/*函数声明*/
void assign(Complex* A, float real, float imag);  //赋值
//加减乘除
void add(Complex* C, Complex A, Complex B);
void minus(Complex* C, Complex A, Complex B);
void mutiply(Complex* C, Complex A, Complex B);
void divide(Complex* C, Complex A, Complex B);/*函数实现*/
void assign(Complex* A, float real, float imag)
{A->realpart = real;A->imagpart = imag;
}void add(Complex* C, Complex A, Complex B)
{C->realpart = A.realpart + B.realpart;C->imagpart = A.imagpart + B.imagpart;
}void minus(Complex* C, Complex A, Complex B)
{C->realpart = A.realpart - B.realpart;C->imagpart = A.imagpart - B.imagpart;
}void multiply(Complex* C, Complex A, Complex B)
{C->realpart = A.realpart * B.realpart - A.imagpart * B.imagpart;C->imagpart = A.realpart * B.imagpart + A.imagpart * B.realpart;
}void divide(Complex* C, Complex A, Complex B)
{while (B.realpart * B.realpart + B.imagpart * B.imagpart != 0)C->realpart = (A.realpart * B.realpart + A.imagpart * B.imagpart)/ (B.realpart * B.realpart + B.imagpart * B.imagpart);C->imagpart = (B.realpart * A.imagpart - B.imagpart * A.realpart) / (B.realpart * B.realpart + B.imagpart * B.imagpart);
}
void 输出结果(Complex a)
{cout << "结果为: " << a.realpart << "+" << a.imagpart << "i;" << endl;
}
int main()
{Complex z1, z2,a,m,result;assign(&z1, 8, 6);assign(&z2, 4, 3);add(&a,z1,z2);multiply(&m, z1, z2);divide(&result, m, a);输出结果(result);
}

但是为啥运行不出来嘞???

md你一个判断语句,你在这放while循环干什么???这不是陷入死循环么??

把while改成if即可:

#include 
using namespace std;typedef struct //复杂的<复数>
{float realpart;  //实部float imagpart;  //虚部
}Complex;/*函数声明*/
void assign(Complex* A, float real, float imag);  //赋值
//加减乘除
void add(Complex* C, Complex A, Complex B);
void minus(Complex* C, Complex A, Complex B);
void mutiply(Complex* C, Complex A, Complex B);
void divide(Complex* C, Complex A, Complex B);/*函数实现*/
void assign(Complex* A, float real, float imag)
{A->realpart = real;A->imagpart = imag;
}void add(Complex* C, Complex A, Complex B)
{C->realpart = A.realpart + B.realpart;C->imagpart = A.imagpart + B.imagpart;
}void minus(Complex* C, Complex A, Complex B)
{C->realpart = A.realpart - B.realpart;C->imagpart = A.imagpart - B.imagpart;
}void multiply(Complex* C, Complex A, Complex B)
{C->realpart = A.realpart * B.realpart - A.imagpart * B.imagpart;C->imagpart = A.realpart * B.imagpart + A.imagpart * B.realpart;
}void divide(Complex* C, Complex A, Complex B)
{if(B.realpart * B.realpart + B.imagpart * B.imagpart != 0){C->realpart = (A.realpart * B.realpart + A.imagpart * B.imagpart)/ (B.realpart * B.realpart + B.imagpart * B.imagpart);C->imagpart = (B.realpart * A.imagpart - B.imagpart * A.realpart)/ (B.realpart * B.realpart + B.imagpart * B.imagpart);}
}
void 输出结果(Complex a)
{cout << "结果为: " << a.realpart<< "+" << a.imagpart << "i;" << endl;
}
int main()
{Complex z1, z2, a, m, result;assign(&z1, 8, 6);assign(&z2, 4, 3);add(&a, z1, z2);multiply(&m, z1, z2);divide(&result, m, a);输出结果(result);
}

结果:

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...