抽象数据类型-复数类型

吉吉:

从今天开始将加入数据结构部分,先说完c语言,在写写python的数据结构方面的知识,c语言版主要注重原理和怎么实现,python版本主要注重实现代码的讲解,本人也要考研,所以时间也很紧,哈哈哈,现在分享一些经验自己怎么从0起步数据结构。从第一个小项目开始(转载请注明本文章出处):

1-1 实数类型-创建项目*

1) 创建项目

首先创建项目文件夹,不妨命名为“实数”。然后打开Dev-C++,点击菜单“文件(File)”、“新建(New)”、“项目(Project)”,打开“新项目”对话框。

在对话框中依次选择“Console Application”、“C项目”,并填写项目名称。不妨将项目命名为“Project”:

示意图1.jpg

点击“确定”,系统将自动生成项目文件“Project.dev”,然后出现保存文件的对话框,请将项目文件“Project.dev”保存到前面所建的项目文件夹“实数”中。

2) 编写主函数

系统自动生成源程序文件“main.c”和主函数的代码。清除文件原有内容,重新编写主函数,完成实数的加法运算:输入两个实数,输出它们的和。

main.c

#include <stdio.h>

/* 你提交的代码将被嵌在这里 */

3) 按下 Ctrl + S 保存“main.c”文件。

4) 按下 F12 键对整个项目中的所有程序文件进行编译并连接。

5) 按下 F10 键运行程序,查看运行结果是否正确。

6) 关闭工程项目,退出Dev-C++。

输入格式

两个实数(以空格间隔)

输出格式

两个实数相加的和(要求:输出6位小数)

输入样例

279.435934 63.826496

输出样例

343.262430

2-2 实数类型-比较实数(方法一)*

由于实数存在误差,因此在对两个实数进行比较时,需要考虑误差因素。为此,我们设定一个误差阈值 epsilon,如果两个实数非常接近,差值的绝对值小于等于这个阈值,就认为它们相等,否则认为它们不等。

借鉴字符串比较函数,设计一个函数完成两个实数的比较。

函数原型

// 比较实数
int RealCmp(double x, double y);

说明:参数 xy 分别为两个实数,该函数比较两个实数的值:

由于计算机中的实数存在误差,因此当两个实数的差的绝对值小于等于误差阈值 ε 时,则认为这两个实数是相等的。

  • x 大于 y,则函数值为 1;
  • x 等于 y,则函数值为 0;
  • x 小于 y,则函数值为 -1。

1) 打开工程项目

双击项目文件“Project.dev”打开工程项目。

示意图2.jpg

2) 在项目中添加头文件“Real.h”

将窗口左侧的项目视图切换到“项目管理”卡片(若看不到项目视图,可点击菜单“视图”、“项目管理”将其显示出来),然后点击项目名称“Project”左侧的加号展示该项目的全部文件。

示意图3.jpg

右击项目名称“Project”,在小菜单中选择“New File”创建新文件,然后按 Ctrl + S 保存文件,将其命名为“Real.h”。我们将在此头文件中声明与实数类型相关的常量和函数。具体内容如下:

Real.h

#ifndef _Real_h_
#define _Real_h_

// 误差阈值
#define epsilon 1e-8

// 比较实数
int RealCmp(double x, double y);

#endif

3) 在项目中添加源程序文件“Real.c”

再次右击项目名称“Project”,选择“New File”创建新文件,按 Ctrl + S 保存文件并命名为“Real.c”,在此源程序文件中编写上面这些函数。

Real.c

#include <math.h>
#include "Real.h"

/* 你提交的代码将被嵌在这里 */

4) 修改主函数,对以上六个函数进行测试。

在项目视图中点击打开“main.c”文件,修改主函数。具体内容如下:

main.c

#include <stdio.h>
#include "Real.h"

int main()
{
    double a, b;
    int r;
    scanf("%lg%lg", &a, &b);
    r = RealCmp(a, b);
    if (r > 0) printf("%g > %g\n", a, b);
    if (r >= 0) printf("%g >= %g\n", a, b);
    if (r < 0) printf("%g < %g\n", a, b);
    if (r <= 0) printf("%g <= %g\n", a, b);
    if (r == 0) printf("%g == %g\n", a, b);
    if (r != 0) printf("%g != %g\n", a, b);
    return 0;
}

输入样例1

3.79 3.81

输出样例1

3.79 < 3.81
3.79 <= 3.81
3.79 != 3.81

输入样例2

3.81 3.79

输出样例2

3.81 > 3.79
3.81 >= 3.79
3.81 != 3.79

输入样例3

3.799999997 3.800000001

输出样例3

3.8 >= 3.8
3.8 <= 3.8
3.8 == 3.8

2-3 实数类型-比较实数(方法二)*

由于实数存在误差,因此在对两个实数进行比较时,需要考虑误差因素。为此,我们设定一个误差阈值 epsilon,如果两个实数非常接近,差值的绝对值小于等于这个阈值,就认为它们相等,否则认为它们不等。

仿照关系运算符,分别设计六个函数完成两个实数的比较。

函数原型

// 判断大于(带误差)
int RealGt(double x, double y);
// 判断大于等于(带误差)
int RealGe(double x, double y);
// 判断小于(带误差)
int RealLt(double x, double y);
// 判断小于等于(带误差)
int RealLe(double x, double y);
// 判断等于(带误差)
int RealEq(double x, double y);
// 判断不等于(带误差)
int RealNe(double x, double y);

说明:参数 xy 是两个实数,在考虑误差的情况下,

  • x 大于 y,RealGt 函数值为 1(真),否则为 0(假)。
  • x 大于等于 y,RealGe 函数值为 1(真),否则为 0(假)。
  • x 小于 y,RealLt 函数值为 1(真),否则为 0(假)。
  • x 小于等于 y,RealLe 函数值为 1(真),否则为 0(假)。
  • x 等于 y,RealEq 函数值为 1(真),否则为 0(假)。
  • x 不等于 y,RealNe 函数值为 1(真),否则为 0(假)。

1) 在“Real.h”头文件中声明函数。

Real.h

......

// 判断大于(带误差)
int RealGt(double x, double y);
// 判断大于等于(带误差)
int RealGe(double x, double y);
// 判断小于(带误差)
int RealLt(double x, double y);
// 判断小于等于(带误差)
int RealLe(double x, double y);
// 判断等于(带误差)
int RealEq(double x, double y);
// 判断不等于(带误差)
int RealNe(double x, double y);
......

2) 在“Real.c”源程序文件中编写函数。

Real.c

......

/* 你提交的代码将被嵌在这里 */

3) 修改主函数,对以上六个函数进行测试。

在项目视图中点击打开“main.c”文件,修改主函数。具体内容如下:

main.c

#include <stdio.h>
#include "Real.h"

int main()
{
    double a, b;
    scanf("%lg%lg", &a, &b);
    if (RealGt(a, b)) printf("%g > %g\n", a, b);
    if (RealGe(a, b)) printf("%g >= %g\n", a, b);
    if (RealLt(a, b)) printf("%g < %g\n", a, b);
    if (RealLe(a, b)) printf("%g <= %g\n", a, b);
    if (RealEq(a, b)) printf("%g == %g\n", a, b);
    if (RealNe(a, b)) printf("%g != %g\n", a, b);
    return 0;
}

输入格式

两个实数(以空格分隔)

输出格式

比较的结果(参见输出样例)

输入样例1

3.79 3.81

输出样例1

3.79 < 3.81
3.79 <= 3.81
3.79 != 3.81

输入样例2

3.81 3.79

输出样例2

3.81 > 3.79
3.81 >= 3.79
3.81 != 3.79

输入样例3

3.799999997 3.800000001

输出样例3

3.8 >= 3.8
3.8 <= 3.8
3.8 == 3.8

2-4 实数类型-校正实数零*

首先,计算机中的实数零存在符号问题:有“正零”和“负零”的区分,需要统一校正为“正零”。

其次,由于误差的原因,计算结果本应是零,但实际上却得到一个绝对值非常小的非零值。因此,有必要设定一个误差阈值 epsilon,对于绝对值小于等于 epsilon 的实数一律按零处理。

函数原型

// 校正实数零
double Revise(double x);

说明:x 是任意实数,若 x 的绝对值小于等于 epsilon,则函数值为 0.0;否则函数值与 x 相同。

1) 在“Real.h”头文件中声明函数。

Real.h

......

// 校正实数零
double Revise(double x);
......

2) 在“Real.c”源程序文件中编写函数。

Real.c

......

/* 你提交的代码将被嵌在这里 */

3) 在“main.c”源程序文件中修改主函数进行测试。

main.c

......

int main()
{
    double a, b;
    scanf("%lg", &a);
    b = Revise(a);
    printf("%.8f\n", b);
    return 0;
}

输入格式

一个实数

输出格式

校正后的实数

测试样例

输入样例 输出样例
0 0.00000000
-0 0.00000000
0.00000000053 0.00000000
-0.00000000053 0.00000000
0.000053 0.000053
-0.000053 -0.000053
38.5 38.5
-38.5 -38.5

2-5 实数类型-交换实数*

请编写函数,交换两个实数的值。

函数原型

// 交换实数
void RealSwap(double *x, double *y);

说明:xy 为指示两个实型变量的指针,函数交换两个指针所指实型变量的值。

1) 在“Real.h”头文件中声明函数。

Real.h

......

// 交换实数
void RealSwap(double *x, double *y);
......

2) 在“Real.c”源程序文件中编写函数。

Real.c

......

/* 你提交的代码将被嵌在这里 */

3) 在“main.c”源程序文件中修改主函数进行测试。

main.c

......

int main()
{
    double a, b;
    scanf("%lg%lg", &a, &b);
    RealSwap(&a, &b);
    printf("%g %g\n", a, b);
    return 0;
}

输入样例

2.7 8.1

输出样例

8.1 2.7

2-6 实数类型-随机实数*

请编写函数,生成随机实数。

函数原型

// 随机实数
double RealRand();

说明:函数值为区间 [0, 1) 内的随机实数。

1) 在“Real.h”头文件中声明函数。

Real.h

......

// 随机实数
double RealRand();
......

2) 在“Real.c”源程序文件中编写函数。

Real.c

......

/* 你提交的代码将被嵌在这里 */

3) 在“main.c”源程序文件中修改主函数进行测试。

main.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "Real.h"

int main()
{
    double x;
    srand(time(NULL));
    x = RealRand();
    printf("%g\n", x);
    return 0;
}

说明:

  • rand 是 C 标准库函数,能生成区间 [0, RAND_MAX] 内的随机整数,其中 RAND_MAX 是宏名,表示随机数的最大值。
  • srand 是与 rand 函数配套的 C 标准库函数,它用来初始化随机数。
  • time 是 C 标准库函数,通常用 NULL 作参数,函数值为当前的时间(格林威治时间)。
  • 主函数中 srand(time(NULL)) 用运行程序时的时间来初始化随机数。

提示:产生区间 [0, 1) 内的随机实数的方法是将 [0, RAND_MAX] 内随机整数除以 RAND_MAX + 1,从而得到分布均匀的随机实数。

输入样例

(无)

输出样例

0.808716

注:输出样例只是举例,实际结果可能不同。

2-7 复数类型-设置复数*

数学计算中经常要用到复数。在标准C(即ANSI/ISO C,或C89)中没有复数类型。在C99中,虽然引入的复数类型,但使用不是太方便,下面我们自己来定义“复数类型”,并编写函数实现复数的各种操作运算。

定义如下复数结构类型

// 定义复数类型
typedef struct
{
    // 实部, 虚部系数
    double rp, ip;
} CPX;

请编写函数,设置复数的值。

要求:对实数零进行校正。

函数原型

// 设置复数
void CpxSet(CPX *x, double rp, double ip);

说明:参数 x 是指向复数(结构体)的指针,rpip 分别是复数的实部和虚部系数的值。函数将参数 rpip 值保存到参数 x 所指复数的实部和虚部系数中。

1) 创建项目

首先创建项目文件夹“复数”,然后进入Dev-C++,创建名为“Project”的项目,保存到“复数”文件夹中。系统自动生成源程序文件“main.c”,保存该文件。

2) 添加实数类型

由于复数的实部和虚部系数均为实数,需要用到实数,将前面的“实数”项目文件夹中的“Real.h”和“Real.c”复制到“复数”文件夹中,然后在 Dev-C++ 项目管理视图中右击项目名称“Project”,在小菜单中选择“添加”,在对话框中选中“Real.h”和“Real.c”,将它们加到项目中来。

3) 在项目中添加头文件“Cpx.h”

在项目管理视图中右击项目名称“Project”,在小菜单中选择“New File”创建新文件,然后按 Ctrl + S 保存文件并命名为“Cpx.h”,在此头文件中声明与复数相关的常量和函数。

Cpx.h

#ifndef _Cpx_h_
#define _Cpx_h_

#include "Real.h"

// 定义复数类型
typedef struct
{
    double rp, ip; // 实部, 虚部系数
} CPX;

// 设置复数
void CpxSet(CPX *x, double rp, double ip);

#endif

4) 在项目中添加源程序文件“Cpx.c”

在项目管理视图中右击项目名称“Project”,在小菜单中选择“New File”创建新文件,然后按 Ctrl + S 保存文件并命名为“Cpx.c”,在此源程序文件中编写与复数相关的函数。

Cpx.c

#include <math.h>
#include "Cpx.h"

/* 你提交的代码将被嵌在这里 */

5) 打开“main.c”,清除文件原有内容,输入以下测试代码。

main.c

#include <stdio.h>
#include "Cpx.h"

int main()
{
    CPX a;
    double p, q;
    scanf("%lg%lg", &p, &q);
    CpxSet(&a, p, q);
    printf("%g %g\n", a.rp, a.ip);
    return 0;
}

输入样例1

-2.7 8.1

输出样例1

-2.7 8.1

输入样例2

-2.7 -0

输出样例2

-2.7 0

 

2-8 复数类型-读取复数*

请编写函数,读取复数的值。

函数原型

// 读取复数
void CpxGet(const CPX *x, double *rp, double *ip);

说明:参数 x 是指向复数(结构体)的指针,rpip 分别是指向两实型变量的指针。函数读取 x 所指复数的实部和虚部系数,分别保存到 rpip 所指的变量中。

1) 在“Cpx.h”头文件中声明函数。

Cpx.h

......

// 读取复数
void CpxGet(const CPX *x, double *rp, double *ip);
......

2) 在“Cpx.c”源程序文件中编写函数。

Cpx.c

......

/* 你提交的代码将被嵌在这里 */

3) 在“main.c”源程序文件中修改主函数进行测试。

main.c

......

int main()
{
    CPX a;
    double x, y, p, q;
    scanf("%lg %lg", &x, &y);
    CpxSet(&a, x, y);
    CpxGet(&a, &p, &q);
    printf("%g %g\n", p, q);
    return 0;
}

输入样例

-2.7 8.1

输出样例

-2.7 8.1

2-9 复数类型-输入复数(基础版)*

请编写函数,以“a±bi”的形式输入复数的值。

函数原型

// 输入复数
void CpxInput(CPX *x);

说明:参数 x 是指向复数(结构体)的指针,函数输入复数,将其保存到 x 所指的复数变量中。

注:实部、加减号、虚部系数、虚数单位i或I之间均无空格。若实数或虚部系数的绝对值小于指定阈值,按零处理。

1) 在“Cpx.h”头文件中声明函数。

Cpx.h

......

// 输入复数
void CpxInput(CPX *x);
......

2) 在“Cpx.c”源程序文件中编写函数。

Cpx.c

......

/* 你提交的代码将被嵌在这里 */

3) 在“main.c”源程序文件中修改主函数进行测试。

main.c

......

int main()
{
    CPX a;
    CpxInput(&a);
    printf("%g %g\n", a.rp, a.ip);
    return 0;
}

输入样例1

-3.2+8.1i

输出样例1

-3.2 8.1

输入样例2

4.9-0.000000001i

输出样例2

4.9 0

2-10 复数类型-输出复数(基础版)*

请编写函数,以“a±bi”的形式输出复数的值。

函数原型

// 输出复数
void CpxOutput(const CPX *x);

说明:参数 x 是指向复数(结构体)的指针。函数输出 x 所指结构变量中的复数值。

注:实部、加减号、虚部系数、虚数单位(i)之间均无空格,虚数单位一律用小写字母i表示。复数的实部和虚部系数均使用 %g 格式限定符。

1) 在“Cpx.h”头文件中声明函数。

Cpx.h

......

// 输出复数
void CpxOutput(const CPX *x);
......

2) 在“Cpx.c”源程序文件中编写函数。

Cpx.c

......

/* 你提交的代码将被嵌在这里 */

3) 在“main.c”源程序文件中修改主函数进行测试。

main.c

......

int main()
{
    CPX a;
    CpxInput(&a);
    CpxOutput(&a);
    putchar('\n');
    return 0;
}

输入样例1

-3.2+8.1i

输出样例1

-3.2+8.1i

输入样例2

4.9-0.000000001i

输出样例2

4.9+0i

2-11 复数类型-复数加法*

请编写函数,完成复数的加法运算。

函数原型

// 复数加法
CPX CpxAdd(const CPX *x, const CPX *y);

说明:参数 xy 分别是指向被加数和加数的指针。函数值是 xy 所指复数相加所得的和。

1) 在“Cpx.h”头文件中声明函数。

Cpx.h

......

// 复数加法
CPX CpxAdd(const CPX *x, const CPX *y);
......

2) 在“Cpx.c”源程序文件中编写函数。

Cpx.c

......

/* 你提交的代码将被嵌在这里 */

3) 在“main.c”源程序文件中修改主函数进行测试。

main.c

......

int main()
{
    CPX a, b, c;
    CpxInput(&a);
    CpxInput(&b);
    c = CpxAdd(&a, &b);
    CpxOutput(&c);
    putchar('\n');
    return 0;
}

输入样例

4.2+1.5i
2.5-0.3i

输出样例

6.7+1.2i

2-12 复数类型-复数减法*

请编写函数,完成复数的减法运算。

函数原型

// 复数减法
CPX CpxSub(const CPX *x, const CPX *y);

说明:参数 xy 分别是指向被减数和减数的指针。函数值是 xy 所指复数相减所得的差。

1) 在“Cpx.h”头文件中声明函数。

Cpx.h

......

// 复数减法
CPX CpxSub(const CPX *x, const CPX *y);
......

2) 在“Cpx.c”源程序文件中编写函数。

Cpx.c

......

/* 你提交的代码将被嵌在这里 */

3) 在“main.c”源程序文件中修改主函数进行测试。

main.c

......

int main()
{
    CPX a, b, c;
    CpxInput(&a);
    CpxInput(&b);
    c = CpxSub(&a, &b);
    CpxOutput(&c);
    putchar('\n');
    return 0;
}

输入样例

6.7+1.2i
2.5-0.3i

输出样例

4.2+1.5i

2-13 复数类型-复数乘法*

请编写函数,完成复数的乘法运算。

函数原型

// 复数乘法
CPX CpxMul(const CPX *x, const CPX *y);

说明:参数 xy 分别是指向被乘数和乘数的指针。函数值是 xy 所指复数相乘所得的积。

1) 在“Cpx.h”头文件中声明函数。

Cpx.h

......

// 复数乘法
CPX CpxMul(const CPX *x, const CPX *y);
......

2) 在“Cpx.c”源程序文件中编写函数。

Cpx.c

......

/* 你提交的代码将被嵌在这里 */

3) 在“main.c”源程序文件中修改主函数进行测试。

main.c

......

int main()
{
    CPX a, b, c;
    CpxInput(&a);
    CpxInput(&b);
    c = CpxMul(&a, &b);
    CpxOutput(&c);
    putchar('\n');
    return 0;
}

输入样例

1.6+1.8i
-2.3+1.9i

输出样例

-7.1-1.1i

2-14 复数类型-复数除法*

请编写函数,完成复数的除法运算。

函数原型

// 复数除法
CPX CpxDiv(const CPX *x, const CPX *y);

说明:参数 xy 分别是指向被除数和除数的指针。函数值是 xy 所指复数相除所得的商。

要求:若除数为零(含误差)时,则显示错误信息:“Divided by zero!”,结果按零处理。

1) 在“Cpx.h”头文件中声明函数。

Cpx.h

......

// 复数除法
CPX CpxDiv(const CPX *x, const CPX *y);
......

2) 在“Cpx.c”源程序文件中编写函数。

Cpx.c

......

/* 你提交的代码将被嵌在这里 */

3) 在“main.c”源程序文件中修改主函数进行测试。

main.c

......

int main()
{
    CPX a, b, c;
    CpxInput(&a);
    CpxInput(&b);
    c = CpxDiv(&a, &b);
    CpxOutput(&c);
    putchar('\n');
    return 0;
}

输入样例1

-7.1-1.1i
-2.3+1.9i

输出样例1

1.6+1.8i

输入样例2

-4.7+4.6i
0.000000001-0.000000002i

输出样例2

Divided by zero!
0+0i

2-15 复数类型-交换复数*

请编写函数,完成复数的交换。

函数原型

void CpxSwap(CPX *x, CPX *y);

说明:参数 xy 分别是指向两个复数的指针。函数交换 xy 所指两个复数的值。

1) 在“Cpx.h”头文件中声明函数。

Cpx.h

......

// 交换
void CpxSwap(CPX *x, CPX *y);
......

2) 在“Cpx.c”源程序文件中编写函数。

Cpx.c

......

/* 你提交的代码将被嵌在这里 */

3) 在“main.c”源程序文件中修改主函数进行测试。

main.c

......

int main()
{
    CPX a, b;
    CpxInput(&a);
    CpxInput(&b);
    CpxSwap(&a, &b);
    CpxOutput(&a);
    putchar('\n');
    CpxOutput(&b);
    putchar('\n');
    return 0;
}

输入样例

4.9+3.8i
2.5-0.3i

输出样例

2.5-0.3i
4.9+3.8i

2-16 复数类型-比较复数*

请编写函数,比较复数的值是否相等。

函数原型:

// 判断等于(带误差)
int CpxEq(const CPX *x, const CPX *y);
// 判断不等于(带误差)
int CpxNe(const CPX *x, const CPX *y);

说明:参数 xy 分别是指向两个复数的指针。

  • CpxEq函数判断相等:若两个复数相等(带误差),则函数值为1(真),否则为0(假)。
  • CpxNe函数判断不等:若两个复数不等(带误差),则函数值为1(真),否则为0(假)。

1) 在“Cpx.h”头文件中声明函数。

Cpx.h

......

// 判断等于(含误差)
int CpxEq(const CPX *x, const CPX *y);
// 判断不等于(含误差)
int CpxNe(const CPX *x, const CPX *y);
......

2) 在“Cpx.c”源程序文件中添加函数。

Cpx.c

......

/* 你提交的代码将被嵌在这里 */

3) 在“main.c”源程序文件中修改主函数进行测试。

main.c

......

int main()
{
    CPX a, b;
    CpxInput(&a);
    CpxInput(&b);
    if (CpxEq(&a, &b)) puts("Equal");
    if (CpxNe(&a, &b)) puts("Not Equal");
    return 0;
}

输入样例1

1.9+2.4i
2.5-0.3i

输出样例1

Not Equal

输入样例2

3.799999998+6.300000001i
3.800000002+6.299999997i

输出样例2

Equal

2-17 复数类型-综合应用*

请编写主函数,显示如下主菜单,供用户选择操作。

A-加法 S-减法 M-乘法 D-除法 Q-退出 > _

要求:
1) 若用户输入A或a,则输入两个复数,然后计算并输出两个复数的和;
2) 若用户输入S或s,则输入两个复数,然后计算并输出两个复数的差;
3) 若用户输入M或m,则输入两个复数,然后计算并输出两个复数的积;
4) 若用户输入D或d,则输入两个复数,然后判断第二个复数是否为零。若第二个复数不为零,则计算并输出两个复数的商,否则报告错误;
5) 若用户输入Q或q,则退出主菜单,程序结束;
6) 若用户输入其它字符,则报告错误;
7) 程序反复显示主菜单,供用户反复使用,直到用户选择Q或q为止。

在“main.c”源程序文件中添加文件包含命令,修改主函数,完成上述功能。

main.c

#include <stdio.h>
#include <ctype.h>
#include "Cpx.h"

/* 你提交的代码将被嵌在这里 */

运行结果如下:

A-加法 S-减法 M-乘法 D-除法 Q-退出 > T
不正确的选项!
A-加法 S-减法 M-乘法 D-除法 Q-退出 > a
-1.4+5.6i
3.5-6.3i
2.1-0.7i
A-加法 S-减法 M-乘法 D-除法 Q-退出 > S
-1.4+5.6i
4.2-3.5i
-5.6+9.1i
A-加法 S-减法 M-乘法 D-除法 Q-退出 > m
1.8+1.2i
1.5+0.5i
2.1+2.7i
A-加法 S-减法 M-乘法 D-除法 Q-退出 > d
3.3-0.9i
1.5+0.5i
1.8-1.2i
A-加法 S-减法 M-乘法 D-除法 Q-退出 > D
3.3-0.9i
0.000000002+0.000000003i
除数不能为零!
A-加法 S-减法 M-乘法 D-除法 Q-退出 > Q

答案见下一篇哟,大家可以先试试手,有c语言基础都可以做,,,,,,end,88

猜你喜欢

转载自blog.csdn.net/weixin_41503009/article/details/83934569