2.C语言实现抽象数据类型-复数的定义

有关抽象数据类型ADT的笔记,参考:

1.数据结构基本概念和术语_北京地铁1号线的博客-CSDN博客

(这里顺便回顾一下C语言语法知识)

首先定义complex.h头文件:

//complex.h头文件内容
#ifndef COMPLEX_H
#define COMPLEX_H
typedef struct 
{
	float Realpart;
	float Imagepart;
}complex;
//创建一个复数
complex Creat(float x, float y);
//获得复数的实部
float Getreal(complex c);
//获得数据的虚部
float Getimage(complex c);
//求两个复数的和sum
complex add(complex c1, complex c2);
//求两个复数的差difference
complex difference(complex c1, complex c2);
//求两个复数的积time
complex time(complex c1, complex c2);
#endif

这里:

(1)#ifndef是C语言中的条件编译指令,用于判断某个标识符是否已经被定义过。如果该标识符之前没有被定义过,则执行条件编译指令中的代码;如果该标识符之前已经被定义过,则忽略条件编译指令中的代码。通常与#define一起使用,用于防止头文件的重复包含。

(2)typedef struct用于定义一个新的数据类型,即结构体类型。结构体是一种自定义的数据类型,可以包含多个不同类型的成员变量,每个成员变量可以有自己的数据类型和名称。在给定的例子中,typedef struct定义了一个名为complex的结构体类型,该结构体类型包含两个成员变量:Realpart和Imagepart,用来表示一个复数的实部和虚部。它们的数据类型都是float。通过typedef关键字,我们可以使用complex作为一个新的数据类型来声明变量,而不需要每次都写出struct关键字。例如,可以使用以下语句来声明一个complex类型的变量: complex c1;

然后书写主程序:

#define _CRT_SECURE_NO_WARNINGS
#include"stdio.h"
#include"stdlib.h"
#include"complex.h"
void main(void)
{
	complex c1,c2,c3,c4,c5;
	c1= Creat(1, 1);
	c2 = Creat(2, 2);
	Getreal(c1);
	Getimage(c2);
	c3=add(c1, c2);
	c4=difference(c1, c2);
    c5=time(c1,c2);
	printf("c1=%f+(%f)i\n", c1.Realpart, c1.Imagepart);
	printf("c2=%f+(%f)i\n", c2.Realpart, c2.Imagepart);
	printf("c3=%f+(%f)i\n", c3.Realpart, c3.Imagepart);
	printf("c4=%f+(%f)i\n", c4.Realpart, c4.Imagepart);
    printf("c5=%f+(%f)i\n", c5.Realpart, c5.Imagepart);
	system("pause");
}
//创建一个复数
complex Creat(float x, float y)
{
	complex c;
	c.Realpart = x;
	c.Imagepart = y;
	return c;
}
//获得复数的实部
float Getreal(complex c)
{
	return c.Realpart;
}
//获得数据的虚部
float Getimage(complex c)
{
	return c.Imagepart;
}
//求两个复数的和sum
complex add(complex c1, complex c2)
{
	complex c;
	c.Realpart = c1.Realpart + c2.Realpart;
	c.Imagepart = c1.Imagepart + c2.Imagepart;
	return c;
}
//求两个复数的差difference
complex difference(complex c1, complex c2)
{
	complex c;
	c.Realpart = c1.Realpart - c2.Realpart;
	c.Imagepart = c1.Imagepart - c2.Imagepart;
	return c;
}
//求两个复数的积time
complex time(complex c1, complex c2)
{
	complex c;
	c.Realpart = c1.Realpart * c2.Realpart - c1.Imagepart * c2.Imagepart;
	c.Imagepart = c1.Realpart * c2.Imagepart + c2.Realpart * c1.Imagepart;
	return c;
}

注意:

(1)#define _CRT_SECURE_NO_WARNINGS是一个预处理指令,用于禁用特定编译器警告。在C语言中,当使用一些不安全的函数(如scanf、gets等)时,编译器会发出警告,提醒可能存在的安全问题。通过定义_CRT_SECURE_NO_WARNINGS宏,可以告诉编译器不要发出这些警告。这通常在使用一些旧的代码或者需要忽略这些警告的情况下使用。然而,需要注意的是,禁用这些警告可能会导致潜在的安全问题,因此在使用这个宏时需要谨慎。

(2)stdlib.h即Standard library标准库头文件,complex.h头文件即我们前面写的头文件。

(3)void main(void)是C语言中定义主函数的一种方式。在C语言中,主函数是程序的入口点,程序从主函数开始执行。主函数的返回类型通常是int,表示程序的执行结果。但是在C99标准之前,C语言允许主函数的返回类型为void,表示主函数不返回任何值。

void main(void)中的void表示主函数不接受任何参数。在C语言中,主函数可以有参数,例如int main(int argc, char *argv[]),用于接收命令行参数。但是如果不需要接收任何参数,可以使用void表示主函数不接受任何参数。

需要注意的是,虽然在某些编译器中void main(void)是合法的写法,但是根据C语言标准,正确的写法应该是int main(void)。因此,建议使用int main(void)作为主函数的定义方式。

(4)system("pause")意思就是让程序暂停一下,然后按任意键继续,初学的时候最多见于程序的末尾处,用于看运行结果,避免程序一闪而过。相同的我们还可以用getchar(),避免程序运行完直接结束而看不到运行结果。

运行结果:

c1=1.000000+(1.000000)i
c2=2.000000+(2.000000)i
c3=3.000000+(3.000000)i
c4=-1.000000+(-1.000000)i
c5=0.000000+(4.000000)i
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北京地铁1号线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值