自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 【python - 数据】

以下运行环境图展示了多次调用由 make_withdraw 创建的函数的效果。第一个 def 声明的表现符合我们的预期:它创建一个新的自定义函数并将该函数以。

2024-07-18 22:29:22 1012

原创 【Makefile(三)】

在GNU的make中,还支持模式变量(Pattern-specific Variable),通过上面的目标变量中,我们知道,变量可以定义在某个目标上。关于条件表达式和函数,我们在后面再说,对于系统变量“MAKELEVEL”,其意思是,如果我们的make有一个嵌套执行的动作(参见前面的“嵌套使用make”),那么,这个变量会记录了我们的当前Makefile的调用层数。左侧是变量,右侧是变量的值,右侧变量的值可以定义在文件的任何一处,也就是说,右侧中的变量不一定非要是已定义好的值,其也可以使用后面定义的值。

2024-07-06 21:53:01 421

原创 【Makefile(二)】

如果Makefile中出现一些相同命令序列,那么我们可以为这些相同的命令序列定义一个变量。定义这种命令序列的语法以define开始,以endef结束,如:endef这里,“run-yacc”是这个命令包的名字,其不要和Makefile中的变量重名。在define和endef中的两行就是命令序列。这个命令包中的第一个命令是运行Yacc程序,因为Yacc程序总是生成“y.tab.c”的文件,所以第二行的命令就是把这个文件改改名字。还是把这个命令包放到一个示例中来看看吧。

2024-07-01 21:46:12 866

原创 【python - 数据】

字典的主要目的是抽象一组基于键值对的数据,在字典中,数据的存取都是基于带有描述性信息的键而不是连续递增的数字。序列(sequence)是一组有顺序的值的集合,是计算机科学中的一个强大且基本的抽象概念。Python 3.7 及以上版本的字典顺序会确保为插入顺序,此行为是自 3.6 版开始的 CPython 实现细节,字典会保留插入时的顺序,对键的更新也不会影响顺序,删除后再次添加的键将被插入到末尾。(如果字符串的行为和列表的一样,则应该匹配字符串的元素,即单个字符,但实际上匹配的是任意子字符串)

2024-06-29 21:45:13 742

原创 【Makefile(一)】

什么是makefile?或许很多Windows的程序员都不知道这个东西,因为那些Windows的集成开发环境(integrated development environment,IDE)都为你做了这个工作,但我觉得要作一个好的和专业的程序员,makefile还是要懂。这就好像现在有这么多的HTML编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标签的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。

2024-06-24 21:37:47 942

原创 【python - 函数】

具有多个递归调用的函数称为树递归,因为每个调用都会分成多个较小的调用,每个较小的调用又会分成更小的调用,就像树枝从树干伸出一样,变得更小但数量更多。函数在自己的函数体内被调用,但数字求和问题已被细分为两个步骤:先求出除最后一个数字外的所有数字总和,再加上最后一个数字的值。因此,我们可以递归地将使用最大数为 m 的整数分割 n 的问题转化为两个较简单的问题:① 使用最大数为 m 的整数分割更小的数字 n-m,以及 ② 使用最大数为 m-1 的整数分割 n。例如计算斐波那契数列,其中的每个数都是前两个数的和。

2024-06-20 21:29:07 717

原创 The Missing Semester of Your CS Education(计算机教育中缺失的一课)

Signal的信任模型是,信任用户第一次使用时给出的身份(trust on first use),同时支持用户线下(out-of-band)、面对面交换公钥(Signal里的safety number)。一般我们认为攻击者了解密码的模型(最小长度,最大长度,可能包含的字符种类等),但是不了解某个密码是如何随机选择的—— 比如。是Git中使用的一种散列函数, 它可以将任意大小的输入映射为一个160比特(可被40位十六进制数表示)的输出。文件中存储的用户公钥来验证返回的信息是否由所对应的私钥所签名。

2024-06-15 11:13:57 748

原创 The Missing Semester of Your CS Education(计算机教育中缺失的一课)

你会发现很多程序会使用实际时间,用户时间和系统时间,用户时间是指CPU执行用户级别的代码所用的时间,系统时间则是相反的,它是你的程序在CPU上执行内核级别的指令所花费的时间。追踪分析器会在你的代码中插入一些东西,它们会与你的代码一起执行,会记录程序的每一次函数调用,而采样分析器则只会周期性的监测(通常为每毫秒)您的程序并记录程序堆栈。但是应该如何设置呢?这个例子我们可以记录一下当前时间,然后执行一些操作,再记录一下时间,计算一下时间差,这样你就可以缩小范围,把代码不同的部分分隔开,分析不同模块使用时间。

2024-06-13 21:25:19 677

原创 【python - 函数】

让我们思考一个新问题:计算一个数的平方根。在编程语言中,“平方根”通常缩写为sqrt。重复应用以下更新,值会收敛为a这个两个参数的更新函数与只有一个参数的improve函数并不兼容,还有一个问题是它只提供一次更新,但我们真正想要的是通过重复更新来求平方根。这两个问题的解决方案就是嵌套定义函数,将函数定义放在另一个函数定义内。与局部赋值一样,局部的def语句只影响局部帧。被定义的函数仅在求解sqrt时在作用域内。而且这些局部def语句在调用sqrt之前都不会被求解,与求解过程一致。

2024-06-11 10:41:21 950

原创 The Missing Semester of Your CS Education(计算机教育中缺失的一课)

如果我们执行上面的命令,"&" 告诉bash我希望该程序在后台运行,这个程序依然是在运行当中,但不会在提示符旁边显示出来,如果只是运行命令而没有"&"符号,我将无法执行任何操作,除非命令完成或手动终结,否则我将无法使用提示符。如果我们启动一个耗时很长的进程,在进程执行中按下"CTRL + Z",我们可以看到终端显示"已暂停",这实际上意味着该进程被发送了一个"SIGSTOP"信号,现在仍在那里,你可以继续执行它,不过只是被暂停了,它依然在后台。在启动时,您的 shell 程序会读取很多文件以加载其配置项。

2024-06-06 11:53:16 640

原创 【python - 函数】

接下来我们可以用迭代来做一个小测试:求任意正整数的素数因式分解(分解质因数:每个正整数n都有一组素因子,正整数可以由它们的乘积表示,关键在于如何找到一组质数,将它们相乘得到该正整数) - 求n的最小素因子,除以它,再对n除以质因数得到的数再做一次。而我们通过两种方式打印None会有不同的效果,因为python有自动显示键入的任何表达式的规则,None是特殊的,但是我们可以用print(None)来让它出现。表达式也可以作为语句执行,在这种情况下,它们会被求值,但它们的值会被丢弃。函数体由一个表达式组成。

2024-06-05 16:52:59 877

原创 【Git】

git - 分布式版本控制工具Version control systems(VCSs) VS 集中式版本控制工具Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。Git 易于学习,占地面积小,性能极快。它具有廉价的本地库(在本地磁盘上),方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase 等版本控制工具。

2024-06-04 21:05:44 1490

原创 【python - 函数】

原始的内置数据和函数:数字和算术运算组合方式:嵌套函数受限的抽象方式:将名称与值绑定现在我们来学习函数定义,这是一种更为强大的抽象技术,通过它可以将名称与复合操作绑定为一个单元。首先来研究一下平方的概念。我们可能会说:“平方就是一个数乘以它本身。上面的代码定义了一个名为square的新函数,这个用户定义的函数并不会内置到解释器中,它表示将某值与自身相乘的复合运算。这个定义将x作为被乘的东西的名称,称为形式参数,同时也将此函数与名称square绑定。如何定义函数:函数定义包含def语句、

2024-06-04 19:28:47 754

原创 The Missing Semester of Your CS Education(计算机教育中缺失的一课)

在正则表达式中,我们可以使用捕获组(capture group),来捕获我们想要的输出的内容,捕获组可以指定我们关心的值,并在以后重复使用它。"sort -nk1,1":"-n":数字排序,"-k":选择输入中以空格为分隔符的列来执行排列,"1,1":从第一列开始并在第一列停止排序,或者说依据所有的列进行排序(在此情况下只按第一列排序)。但是这里我们即使把第一个字符换成"b",输出还会是"ba",这是因为正则表达式,还是在默认的情况下,每行只会匹配一次,替换一次,这就是"sed"通常会做的事情。

2024-06-03 20:15:30 726

原创 The Missing Semester of Your CS Education(计算机教育中缺失的一课)

这样做更改的效果是,如果"cd"没有正确执行,你不能"cd"进入该文件夹,因为要么你没有权限,要么其不存在,这将返回一个非0的错误代码,脚本将执行"exit",这将停止脚本的运行,而不是继续对实际不存在的地方执行命令。"返回0则代表程序正常执行返回,没有问题,而返回1则代表程序出现错误,"grep foorbar mcd.sh":表示从"mcd.sh"中寻找"foobar"字符串,但是该字符串不存在,故,"grep"不会输出任何内容,但是会返回1告诉我们程序发生了错误。",它可以扩展为任何一个字符。

2024-05-24 21:09:14 655

原创 The Missing Semester of Your CS Education(计算机教育中缺失的一课)

因为我们输入或输出的重定向是不被程序所知道的,通道的重定向是由shell设置的,所以,在这种情况下,我告诉我的shell运行程序"sudo",并使用参数"echo"和"500",并将其输出发送到"brightness"文件中,但是。"sudo"或"do as su":这里的"su"代表超级用户,这是以超级用户的身份执行操作的一种方式,通常,我们在终端中输入"sudo"+命令,我们就可以以root用户的身份运行该命令,而不是你实际使用的用户身份。例如,"-a"和"--all"都是标志;"cp":复制文件。

2024-05-16 21:08:14 955

原创 【Vim】

Vim是一个历史悠久的文本编辑器,可以追溯到qed。于 1991 年发布初始版本。Vim 有着悠久的历史;它起源于 Vi 编辑器(1976 年),至今仍在开发中。编程时,您大部分时间都花在阅读/编辑上,而不是写作上。出于这个原因,Vim 是一个模态编辑器:它有不同的插入文本和操作文本的模式。Vim 是可编程的(使用 Vimscript 和 Python 等其他语言),而 Vim 的界面本身就是一种编程语言:击键(带有助记词名称)是命令,这些命令是可组合的。Vim 避免使用鼠标,因为它太慢了;

2024-05-16 11:28:07 1112

原创 【数据结构(链表)】

Josephus及他的朋友躲到⼀个洞中,39个犹太⼈决定宁愿死也不要被⼈抓到,于是决定了⼀个自杀⽅式,41个⼈排成⼀个圆圈,由第1个⼈开始报数,每报数到第3⼈该⼈就必须自杀,然后再由下⼀个重新报数,直到所有⼈都自杀身亡为止。链表中每个节点都是独立申请的(即需要插入数据时才去申请⼀块节点的空间),我们需要通过指针变量来保存下⼀个节点位置才能从当前节点找到下⼀个节点。当我们想要从第⼀个节点⾛到最后⼀个节点时,只需要在前⼀个节点拿上下⼀个节点的地址(下⼀个节点的钥匙)就可以了。实际中使用的链表数据结构,都。

2024-03-03 09:01:52 668

原创 【数据结构(顺序表)】

数据结构是由“数据”和“结构”两词组合而来。什么是数据?常见的数值1、2、3、4.....、教务系统里保存的用户信息(姓名、性别、年龄、学历等等)、网页里肉眼可以看到的信息(文字、图片、视频等等),这些都是数据什么是结构?当我们想要使用大量使用同⼀类型的数据时,通过手动定义大量的独立的变量对于程序来说,可读性非常差,我们可以借助数组这样的数据结构将大量的数据组织在⼀起,结构也可以理解为组织数据的方式。想要找到草原上名叫“咩咩”的羊很难,但是从羊圈里找到1号羊就很简单,羊圈这样的结构有效将。

2024-02-24 21:11:50 1159

原创 【机房预约系统(C++版)】

学校现有几个规格不同的机房,由于使用时经常出现“撞车“现象,现开发一套机房预约系统,解决这一问题。分别有三种身份使用该程序学生代表:申请使用机房教师:审核学生的预约申请管理员:给学生、教师创建账号机房总共有3间1号机房 --- 最大容量20人2号机房 --- 最多容量50人3号机房 --- 最多容量100人申请的订单每周由管理员负责清空学生可以预约未来一周内的机房使用,预约的日期为周一至周五,预约时需要选择预约时段(上午、下午)教师来审核预约,依据实际情况审核预约通过或者不通过。

2024-02-09 12:02:14 837

原创 【演讲比赛流程管理系统(C++版)】

在speechManager.h中提供开始比赛的的成员函数void startSpeech();在speechManager.h中添加保存记录的成员函数void saveRecord();在speechManager.h中添加保存记录的成员函数void clearRecord();在speechManager.h中添加保存记录的成员函数void loadRecord();在speechManager.h中添加保存记录的成员函数void showRecord();

2024-02-01 21:36:33 2028

原创 【C++提高编程(四)】

map中所有元素都是pair。

2024-01-29 10:26:17 887

原创 【C++提高编程(三)】

deque容器和vector容器的构造方式几乎一致,灵活使用即可。

2024-01-25 09:52:11 1022

原创 【C++提高编程(二)】

学习目标:vector中存放自定义数据类型,并打印输出//存放自定义数据类型public:int m_Age;Person p1("孙悟空", 999);Person p2("沙悟净", 569);Person p3("猪悟能", 789);Person p4("唐三藏", 40);Person p5("白龙马", 423);//向容器中插入数据//遍历容器中的数据it!= v.end();it++)

2024-01-21 08:40:37 1543

原创 【C语言(十七)】

(假定某个程序中声明了⼀个某个长度的数组,如果机器内存有限,我们需要⼀个很小的数组,但是另外⼀个机器内存大些,我们需要⼀个数组能够⼤些。当宏参数在宏的定义中出现超过⼀次的时候,如果参数带有副作用,那么你在使用这个宏的时候就可能出现危险,导致不可预测的后果。将源代码程序被输入扫描器,扫描器的任务就是简单的进行词法分析,把代码中的字符分割成⼀系列的记号(关键字、标识符、字面量、特殊字符等)。如果是加了分号的情况,等替换后,if和else之间就是2条语句,⽽没有大括号的时候,if后边只能有⼀条语句。

2024-01-18 11:39:38 1265

原创 【C++提高编程(一)】

本阶段主要针对C++和技术做详细讲解,探讨C++更深层的使用。

2024-01-16 09:15:03 1029

原创 【职工管理系统(C++版)】

如果想将所有不同种类的员工都放入到一个数组中,可以将所有员工的指针维护到一个数组里如果想在程序中维护这个不定长度的数组,可以将数组创建到堆区,并利用Worker **的指针维护。虽然我们实现了添加职工后保存到文件的操作,但是每次开始运行程序,并没有将文件中数据读取到程席中而我们的程序功能中还有清空文件的需求。增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门编号。在workerManager.h中添加成员函数 void clean_File();

2024-01-13 17:14:02 944

原创 【C++核心编程(四)】

继承是面向对象三大特性之一。有些类与类之间存在特殊的关系,例如下图中:我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这个时候我们就可以考虑利用继承的技术,减少重复代码。例如我们看到很多网站中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同,接下来我们分别利用普通写法和继承的写法来实现网页中的内容,看一下继承存在的意义以及好处。总结:继承的好处:可以减少重复的代码class A : public B;A 类称为子类或派生类;B 称为父类或基类。派生类中的成员

2024-01-07 14:48:42 1252

原创 【C++核心编程(三)】

④对GoodGay类中的函数一一实现(GoodGay的构造函数必须在类外实现且要在Building类实现后,因为里面需要创建Building类的对象,如若在类内实现,前面光声明Building类不够,会报错)通过上述知识点我们知道在C++中成员变量和成员函数是分开存储的,每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。在程序里,有些私有属性也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去。

2024-01-03 15:44:17 1033

原创 【C++核心编程(二)】

构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用。C++中的面向对象来源于生活,每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。人可以作为对象,属性有姓名、年龄、身高、体重...,行为有走、跑、跳、吃饭、唱歌...设计一个圆形类 (Circle) ,和一个点类 (Point) ,计算点和圆的关系。总结: 如果属性有在堆区开的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题。C++类中的成员可以是另一个类的对象,我们称该成员为:对象成员。

2024-01-02 11:36:47 1042

原创 【C++核心编程(一)】

函数名可以相同,提高复用性。函数重载满足条件:同一个作用域下函数名称相同函数参数类型不同或者个数不同或者顺序不同函数的返回值不可以作为函数重载的条件cout

2023-12-29 15:52:49 997

原创 【通讯录管理系统(C++版)】

联系人是由多种不同的元素组成的,所以我们需要用结构体来描述它,而通讯录是包含联系人和联系人人数的,所以通讯录理应是一个嵌套结构体,里面嵌套了联系人结构体,并且联系人的人数是不确定的,故我们在通讯录结构体中用结构体数组来存储不同联系人的信息。实现思路: 将通讯录所有联系人信息清除掉,只要将通讯录记录的联系人数量置为0,做逻辑清空即可,并且为了防止误操作,在清空之前我们让用户选择是否清空,可以保证通讯录被恶意误操作。要删除李四,我们只需要将李四后面的数据均向前移动,并将通讯录中记录的人员个数做-1的操作即可。

2023-12-27 09:35:15 1073 1

原创 【C语言(十六)】

磁盘上的文件是文件。但是在程序设计中,我们⼀般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。上面说的适用于所有输入流⼀般指适用于标准输入流和其他输入流(如文件输入流);所有输出流一般指适用于标准输出流和其他输出流(如文件输出流)。//将data1.txt文件的内容,拷贝一份生成data2.txt文件//1.从data1.txt中读取数据//2.写到data2.txt的文件中int main()return 1;return 1;//数据的读写(拷贝)

2023-12-19 15:16:04 831

原创 【C语言(十五)】

C/C++程序内存分配的几个区域:1.栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。2.堆区(heap):⼀般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。分配方式类似于链表。3.数据段(静态区)(static)存放全局变量、静态数据。程序结束后由系统释放。4.

2023-12-16 09:17:12 1145 1

原创 【C语言(十四)】

像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同⼀块内存空间。共用体。给联合体其中⼀个成员赋值,其他成员的值也跟着变化。//联合类型的声明union Unchar c;int i;int main()//联合变量的定义//计算整个变量的⼤⼩return 0;

2023-12-14 16:42:25 1145 1

原创 【C语言(十三)】

结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。位段的声明和结构是类似的,有两个不同:1.位段的成员必须是int或signed int,在C99中位段成员的类型也可以选择其他类型。2.位段的成员名后边有⼀个冒号和⼀个数字。int _b:5;int _c:10;int _d:30;A就是⼀个位段类型。那位段A所占内存的大小是多少?

2023-12-14 15:50:02 903 1

原创 【C语言(十二)】

其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储,下面是具体的概念:⼤端(存储)模式:是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处。小端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址处。上述概念需要记住,方便分辨大小端。

2023-12-13 15:31:19 1065

原创 【C语言(十一)】

函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。如果source和destination有任何的重叠,复制的结果都是未定义的。memset是用来设置内存的,将内存中的值以字节为单位设置成想要的内容。比较从ptr1和ptr2指针指向的位置开始,向后的num个字节。memcpy 拷贝的就是不重叠的内存。memmove 拷贝的是重叠的内存。的时候并不会停下来。

2023-12-11 16:28:42 517 1

原创 【C语言(十)】

字符函数和字符串函数一、字符分类函数C语言中有⼀系列的函数是专门做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使用都需要包含⼀个头文件是 ctype.h这些函数的使用方法非常类似,我们就讲解⼀个函数的事情,其他的非常类似:int islower ( int c ); islower 是能够判断参数部分的 c 是否是小写字母的。 通过返回值来说明是否是小写字母,如果是小写字母就返回非0的整数,如果不是小写字母,则返回0。练习:写⼀个代码,将字符串中的小写字

2023-12-11 15:49:01 1147 1

原创 【C语言(九)】

因为switch-case中的代码,只有调用函数的逻辑是有差异的,我们可以把调用的函数的地址以参数的形式传递过去,使用函数指针接收,函数指针指向什么函数就调用什么函数,这里其实使用的就是回调函数的功能。上一讲中我们写的计算机的实现的代码中,switch-case中的代码是重复出现的,其中虽然执行计算的逻辑是区别的,但是输⼊输出操作是冗余的,有没有办法,简化⼀些呢?没错,就是逗号表达式,表达式的值是最后一个数字的值。size_t num,//base指向的数组中的元素个数 (待排序的数组的元素的个数)

2023-12-04 21:00:43 2225

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除