☘前言☘
咕咕咕、鸽子精又回来了。🐒
今天是我开坑的第四次发文,大家最近应该都在忙期末把?明天要考六级的我还在写文章是不是疯了-.-
今天是基础知识的最后一次,接下来慢慢就要开始接触算法了,有没有很期待?如果我有哪些没有讲清楚的,欢迎大家联系我,你提出的问题是我修改完善的基础,万分感谢。
欢迎大家加入我的打卡队列,如果你刷完了对你有帮助请你评论一个打卡。
如果你觉得这本书有用的话还希望多多支持作者。
如果觉得这个文章有用还希望大家交出素质三连呀。
🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人
✨联系方式:2201891280(QQ)
📔源码地址:https://gitee.com/xingleigao/algorithm-notes
⏳全文大约阅读时间: 80min
文章目录
☘前言☘
🍭1. 基础知识点
⚽️1.1 结构体(struct)
🏀1.1.1 结构体的定义
🏈1.1.2 访问结构体内的元素
⚾️1.1.3 结构体的初始化
📡1.2 cin与cout
🎚1.3 浮点数的比较
🥩1.4 复杂度
🍔1.时间复杂度
🍟2.空间复杂度
🌭3.编码复杂度
🥚1.5黑盒测试
🥙1.单点测试
🥗2.多点测试
🐳课后习题
🍭1. 基础知识点
其实上次文章所讲的指针是c语言最难的部分,也不知道大家消化了没有,最好的方式肯定是多做题啦。我补充了一个参考链接,如果还是懵懵懂懂的可以看看上次文章里提到的链接0.0
⚽️1.1 结构体(struct)
到现在,我们了解了基本数据类型的使用(char、int、long long 、double),但是如果我们需要一种情况:实现一个手机通讯录:需要以人为单位,且每个人的内部信息由姓名、年龄、手机号、住址信息之类的不同信息组成,这个时候如果用之前的单种数据就会非常不方便,就需要结构体。
🏀1.1.1 结构体的定义
结构体的基本格式如下:
struct Name{ //一些基本数据类型或者自定义的数据类型 };
当需要一些相关的变量的放在一起存储的时候,只需要依次写出他们的数据类型和变量名称。
举个栗子🌰
struct studentInfo{ int id; char gender; //'F' or 'M' char name[20]; char magor[20]; }Alice, Bob, stu[1000];
其中studentInfo是结构体类型名。内部定义了id(学号)、gender(性别)、name(姓名)和mahor(专业),这些就是单个学生的信息。而结构体外定义了Alice和Bob两个结构体变量和一个stu结构体数组。
结构体除了在定义的时候进行定义外,还可以在使用的时候定义
studentInfo Alice; studentInfo stu[1000];
注意:
c语言里的struct不能省略,所以定义一个结构体变量c里面的写法是:
struct studentInfo Alice;
结构体能定义除自身的的所有数据类型。但是可以定义自身类型的指针
struct node{ node n; //错误示例 node *next;//c语言里的写法是 struct node *next; }
🏈1.1.2 访问结构体内的元素
访问结构体内的元素有两种方法:.和->操作。现在有如下结构体
struct studentInfo{ int id; char name[20]; studentInfo *next; }stu, *p;
这样多了一个指针来指向下一个学生地址,且定义了普通变量stu和指针变量p
于是访问数组元素的写法如下:
stu.id; stu.name; stu.next; (*p).id; p->name; p->next;
观察上面的写法,其实(*p).id和p->id写法是完全等效的。可以说->就是一种简洁写法罢了。不过要注意这种写法是针对指针的,对于stu这种普通的结构体就不能使用!!!
⚾️1.1.3 结构体的初始化
这部分基本上都是C++的写法,C语言没有这些,老老实实自己初始化。。。
一般的做法是先声明一个变量。然后再初始化
stu.id = 1; stu.gender = 'M';
还记得我们平常int类型可以声明的时候顺带初始化写法就是int i = 1;,那么结构体有没有这种写法呢?答案是有的。
构造函数
构造函数就是用来初始化结构体的一种函数,它直接定义在结构体中。
特点是不需要放回类型,且函数名和结构体名相同
一般来说都有一个默认的构造函数就是studentInfo(){}
就是声明的时候对变量不做任何初始化操作。
struct studentInfo{ int id; char gender; studentInfo(){}//默认构造函数 }
我们也可以手动重构这个函数
struct studnetInfo{ int id; char name[20]; studentInfo(int _id, int _gender){ id = _id; gender = _gender; } }
当然可以做一个简化
struct studentInfo{ int id; char name[20]; studentInfo(int _id, int _gender) : id(_id), gender(_gender) {} }
这样就可以在声明的时候顺带赋值了
studentInfo stu = studentInfo(10086, 'M');
如果自定义了构造函数,那么就不能不初始化就定义结构体变量。 也就是下面的写法就不合法了。
studentInfo stu;
那如果我们想要都要呢?
这里其实利用的是c++语言的函数多态,我们定义多个同名函数,根据变量数目的多少,进行调用。
#include<stdio.h> struct Point{ int x,y; Point(){} //不初始化就定义 Point(int _x, int _y) : x(_x), y(_y) {} //用提供的x、y初始化结构体 }pt[10]; int main(){ int num = 0; for(int i = 0;i <= 3;i++) for(int j = 0;j <=3;j++) pt[num++] = Point(i, j); //调用构造函数 for(int i = 0;i < num;i++) printf("%d,%d\n",pt[i].x,pt[i].y); return 0 ; }
构造函数在结构体内元素较多的时候能极大的简化我们的代码。