吉吉:
从今天开始将加入数据结构部分,先说完c语言,在写写python的数据结构方面的知识,c语言版主要注重原理和怎么实现,python版本主要注重实现代码的讲解,本人也要考研,所以时间也很紧,哈哈哈,现在分享一些经验自己怎么从0起步数据结构。从第一个小项目开始(转载请注明本文章出处):
1-1 实数类型-创建项目*
1) 创建项目
首先创建项目文件夹,不妨命名为“实数”。然后打开Dev-C++,点击菜单“文件(File)”、“新建(New)”、“项目(Project)”,打开“新项目”对话框。
在对话框中依次选择“Console Application”、“C项目”,并填写项目名称。不妨将项目命名为“Project”:
点击“确定”,系统将自动生成项目文件“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);
说明:参数 x
和 y
分别为两个实数,该函数比较两个实数的值:
由于计算机中的实数存在误差,因此当两个实数的差的绝对值小于等于误差阈值 ε 时,则认为这两个实数是相等的。
- 若
x
大于y
,则函数值为 1; - 若
x
等于y
,则函数值为 0; - 若
x
小于y
,则函数值为 -1。
1) 打开工程项目
双击项目文件“Project.dev”打开工程项目。
2) 在项目中添加头文件“Real.h”
将窗口左侧的项目视图切换到“项目管理”卡片(若看不到项目视图,可点击菜单“视图”、“项目管理”将其显示出来),然后点击项目名称“Project”左侧的加号展示该项目的全部文件。
右击项目名称“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);
说明:参数 x
和 y
是两个实数,在考虑误差的情况下,
- 若
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);
说明:x
和 y
为指示两个实型变量的指针,函数交换两个指针所指实型变量的值。
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
是指向复数(结构体)的指针,rp
和 ip
分别是复数的实部和虚部系数的值。函数将参数 rp
和 ip
值保存到参数 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
是指向复数(结构体)的指针,rp
和 ip
分别是指向两实型变量的指针。函数读取 x
所指复数的实部和虚部系数,分别保存到 rp
和 ip
所指的变量中。
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);
说明:参数 x
、y
分别是指向被加数和加数的指针。函数值是 x
与 y
所指复数相加所得的和。
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);
说明:参数 x
、y
分别是指向被减数和减数的指针。函数值是 x
与 y
所指复数相减所得的差。
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);
说明:参数 x
、y
分别是指向被乘数和乘数的指针。函数值是 x
与 y
所指复数相乘所得的积。
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);
说明:参数 x
、y
分别是指向被除数和除数的指针。函数值是 x
与 y
所指复数相除所得的商。
要求:若除数为零(含误差)时,则显示错误信息:“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);
说明:参数 x
、y
分别是指向两个复数的指针。函数交换 x
和 y
所指两个复数的值。
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);
说明:参数 x
、y
分别是指向两个复数的指针。
- 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