自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 3.12ZUOY

【代码】3.12ZUOY。

2025-03-12 22:58:44 97

原创 STM32u575

【代码】STM32u575。

2025-03-11 21:36:54 129

原创 shell脚本

【代码】shell脚本。

2025-03-06 00:12:10 91

原创 3.4练习

【代码】3.4练习。

2025-03-05 09:03:54 109

原创 软件设计基础模型

1

2025-02-17 10:40:09 87

原创 day5QT套接字通信

【代码】day5QT套接字通信。

2025-02-11 23:00:49 170

原创 day4事件处理核心机制

【代码】day4事件处理核心机制。

2025-02-10 21:58:16 233

原创 QTday3对话框

【代码】QTday3对话框。

2025-02-09 23:33:26 100

原创 day2QT核心机制

11

2025-02-07 23:53:35 98

原创 QT图形化界面开发

111

2025-02-06 22:42:44 75

原创 继承和多态

【代码】继承和多态。

2025-01-14 21:55:33 118

原创 面对对象特征之封装

【代码】面对对象特征之封装。

2025-01-13 22:25:39 196

原创 C++类的引入

公共成员函数:初始化函数:void init(int w, int h)获取宽度函数:get_w();设置宽度函数:set_w(int w);获取高度函数:get_h();设置高度函数:set_h(int h);获取周长函数:get_perimeter();获取面积函数:get_area();在主程序中实例化对象,并测试下相关函数class Rectangle //定义一个矩形类//私有成员属性private:int width;//矩形的宽度int hight;//矩形的高度。

2025-01-09 22:27:38 1413

原创 C++对C的扩充

1> 不同的命名空间中的名字冲突时,如果两个吗,命名空间全部进行整体声明了,那么需要在使用冲突的名字前加命名空间名和作用域限定符用于区分。3> 命名空间中的名字和局部变量的名字冲突,优先使用局部变量,如果非要使用命名空间中的名字,需要加上命名空间名和作用域限定符。1> C++中的输入使用的是istream提供的一个类对象 cin, 并结合提取运算符 (>>)一起使用,用作数据的输入。练习:提示并输入一个字符,如果是大写转变成小写,如果是小写转变成大写,如果是其他字符,都转变成 * ,输出转变后的数据。

2025-01-07 23:20:13 607

原创 day 多点通信

1、 组播也是实现主机之间一对多的通信模型,跟广播不同的是,组播发送的消息,只有加入多播组的成员才能收到,没有加入的就无法收到,不会占用柜台的网络带宽。1、设置允许加入组播组(发送端的IP),设置加入组播组时需要(组播组IP,自己的IP,自己网卡ens33的索引号一般都是2)3、发送端不需要绑定固定的IP和端口号,只需要向固定的IP和端口号(广播地址)发送信息即可,1> 主机之间的一对多的通信模式,网络对其中的每一台主机发出的信息都进行复制并转发。3、绑定时绑定的是组播组IP和发送端IP保持一致。

2025-01-01 19:41:46 950

原创 day30线程

8、多线程编程时,对于临界资源访问时可能有多个线程同时访问,这样会产生数据的错乱,这种现象被称为竞态。5、多任务并发执行大多数选择多线程,而不是多进程,因为线程占用内存非常少大概8K。1、线程是轻量化的进程,一个进程内可以有多个线程,至少包含一个线程(主线程)。3、进程之间不共享资源,进程运行空间都是独立的,但是线程共享临界资源。4、线程是任务调度的最小单位,进程是资源分配的最小单位。2、线程的任务调度,创建,销毁的开销都要比进程小。临界资源:全局变量,临界区:访问临界资源的代码。

2024-12-30 19:53:54 353

原创 多线程并发

【代码】多线程并发。

2024-12-30 09:16:04 117

原创 day32 进程间通信

3、无名管道,一旦打开,就出现读端和写端,如果进行读取数据,就要先关闭写端,如果想要写数据,就要先关闭读端。原理:子进程向父进程发送一个信号(这个信号是自定义信号),父进程收到信号后,调用raise函数自杀。1、如果是同一进程下的多个线程,共享资源,所以线程之间的通信只需要注意互斥和同步即可。4、无名管道工作原理是半双工,也就是同一时刻只能是A写B读,或者A读B写。1、本质也是一个内核空间的文件,存储在内存中,读写数据都是一次性的。1、有名字的管道,相对于无名管道,可以进程非亲缘进程间的通信。

2024-12-17 20:36:51 324

原创 day 31 线程间的同步和互斥

死锁是指在多线程多进程环境中,两个或多个进程(或线程)互相持有对方所需资源,导致它们都无法继续执行的一种状态。避免嵌套锁:尽量避免在持有一个锁的时候去申请另一个锁,因为这样可能会导致死锁的发生。统一获取锁的顺序:如果多个线程需要获取多个锁,可以约定获取锁的顺序,这样可以避免出现死锁。设置超时时间:在获取锁的时候可以设置超时时间,如果超过一定时间还没有获取到锁,就放弃获取锁并释放已经获取的锁。死锁检测:通过检测程序的锁状态来判断是否存在死锁,并进行相应的处理。

2024-12-17 10:06:30 794

原创 day29 进程基础

1、创建一个孤儿进程,并修改孤儿进程的操作目录权限为根目录(对根目录某个文件具有读写权限)。2、将孤儿进程设置为会话组组长,脱离终端独立运行(该孤儿进程变成守护进程)。3、更改终端下的umask值,以便于创建的文件具有读写执行的全部权限。5、重定向所有的输入输出出错描述符到该日志文件。4、在根目录下创建一个日志文件。孤儿进程的父进程会变成号进程。

2024-12-13 00:22:10 274

原创 day28 文件IO及进程线程基础

1、进程在创建时系统会从1G的物理内存中,通过mmu映射出4G的虚拟内存,其中0--3G的内存是所有进程的空间,进程间空间是独立的,但是3--4G的空间是内核空间,由所有进程共享。1、0号进程,又叫idel进程没有父进程,系统启动时创建的,维护系统运行,当系统内没有任何进程需要执行时运行0号进程,系统处于待机状态。2、1号进程,又叫 init进程父进程就是0号进程,也被称为守护进程,当有子进程处于僵尸状态时,1号进程会为子进程收尸。1、进程是动态的,随着程序的执行而创建,随着程序的结束而消亡。

2024-12-11 23:39:05 1192

原创 day27 文件IO

/定义数组i

2024-12-11 09:03:22 489

原创 day26 IO

结论:标准输入流指针,标准输出流指针缓冲区大小时1024,标准错误流指针没有缓冲区。3、功能2调用登录函数,手动输入登录账户密码,循环读取文件内容与输入的账户密码匹配,以追加写的方式将账户密码写入文件可以写入多个账户密码,中间加上空格。返回值:成功返回1970年到现在的秒数,失败返回-1并置位错误码。主要针对二进制文件的读写操作,内存按照扇区存储,每8个扇区是一块。2、功能1调用注册函数,注册账户密码写入到文件中,关闭文件。功能:返回1970(格林尼治时间)到现在的时间秒数。stderr:标准错误流指针。

2024-12-10 09:07:11 436

原创 day 25 数据结构 查找及IO

4、文件IO依赖于系统调用,文件IO没有缓冲区,每一次调用,系统都会进行一次内核态到用户态的切换,也就是每一次调用系统都处于阻塞状态,等待用户程序执行完成,所以文件IO调用时非常浪费系统开销。1、标准IO依赖C标准库,使用时调用C标准库的函数,在写入或者读取数据时,标准IO先将数据放入缓冲区,当缓冲区满了或者刷新时机到了,标准IO会调用文件IO将数据写入硬件或者从硬件读取出来。假设由关键字:{12,14,21,36,18,66,16}构建哈希表,哈希函数是H(key) = key%7。

2024-12-07 11:06:30 748

原创 day24 树和算法

4> 满二叉树:二叉树的最后一层全是叶子节点,在没有添加层数的条件下,不能在向该树中增加节点的树。2> 健壮性:对不合法的输入数据,能够给出合理的输出,例如 switch中的default模块。15> 节点的层次:从根结点开始到当前结点所经历的层数称为该节点的层次。13> 节点的度:就是当前结点的孩子节点个数,就称为节点的度。3> 在二叉树中,叶子节点的个数,总比度为2的节点个数多 1。2> 左子树:由当前结点的左孩子节点为根结点构成的二叉树。3> 右子树:由当前结点的右孩子节点为根结点构成的二叉树。

2024-12-04 20:36:29 659

原创 day23 栈和队列

c'c'ccccch1.在现实生活中,我们可能使用的大多时操作受限的线性容器,例如:核酸排队,汽车过隧道、手枪弹夹都属于线性结构,只能在某部分操作2..只能在指定部位进行操作的线性表3.分类栈:其插入和删除操作只允许在同一端进行的线性表称为栈特点:先进先出或者后进先出队列:其插入和删除操作只能在不同端进行的线性表称为队列特点:先进先出总结:上述两个数据结构都是只允许在端点处进行操作的受限线性表。

2024-12-03 20:25:13 1076

原创 day 22 双向链表

由于单向链表只能从某个节点开始单向访问其后继节点,并没有存储其前驱节点信息,访问前面的节点是不容易办到的。为了能从某个节点开始,既可以访问前驱节点也可以访问后继节点,我们可以改造一下单向链表的节点结构,在结构中多参加一个指向前驱节点的指针。

2024-12-03 08:53:33 398

原创 day21 链表

双向链表:从任意一个节点出发,都能访问其前驱和后继节点(第一个节点没有前驱,最后一个节点没有后继)3.原理:将每个数据元素,独立封装成一个数据的存储单位(节点),多个节点通过成员指针进行连接在一起,串成一个链表。头节点:虚设的一个节点,其数据用于表示链表的长度(也可以弃置),指针域指向第一个节点。头指针:定义一个节点类型的指针变量,指向链表的第一一个节点。2.节点中的数据域是一个共用体变量,头节点使用len,普通节点使用data。注意:不是直接销毁头节点,需要先将所有的节点全部释放后然后释放头节点。

2024-11-30 16:12:20 1288 2

原创 day20 顺序表

1.当需要向顺序表中添加元素时,需要先判断是否已经满了,如果已经满了,则添加失败。2.当需要从顺序表中删除数据元素时,需要判断顺序表是否判断是否已经空了,删除失败。功能:通过给定的值,查找该值是否存在于顺序表中,如果存在,则返回该元素的下标。1.功能:将顺序表中的内容全部输出,从下标为0开始到顺序表长度处结束。参数:顺序表起始位置,要插入的位置,要插入的元素。1.功能:在给定的顺序表中删除指定位置上的元素。功能:去重顺序表中重复的元素,保持顺序表中的每个数据都是唯一的。

2024-11-28 23:19:11 1185 1

原创 day19 C语言收尾及数据结构

1.数据结构主要研究的是程序在运行过程中,数据的临时容器的问题该容器仅仅只在程序运行时,短暂的保存数据,以便于程序能够快速处理数据保存数据-->提供内存空间(数据容器)处理数据-->对容器提供算法(增删改查)2.数据结构是一种思想,并不局限于某个编程语言3.数据结构分为两部分:数据、结构4.主要注重逻辑思维,画图分析。

2024-11-27 19:18:10 794 1

原创 day18 结构体

1.展开时机:有参宏而言,在预处理阶段展开,而函数在调用时才展开2.内存使用:有参宏而言,占用的是所在函数的空间,而函数在调用时会单独开辟空间3.效率上:有参宏的效率比函数有的效率高4.有参宏是宏定义,只替换不计算不做正确性检查,而函数调用要符合函数的调用标准,形参会进行计算。

2024-11-26 23:35:28 812 1

原创 day17 指针补充及杂项

1.在C语言中,可以使用一个名字表示一个字符串或一类字符串,该名字是一个常量例如:生活中的圆周率2.宏仅仅是代指作用,在预处理阶段,仅仅将宏值取代宏名,不计算不做任何正确性检查3.使用格式:无参宏:#define 宏名 字符串有参宏:#define 宏名(形参列表)包含形参列表的字符串注意:有参宏定义中,形参没有数据类型,直接给定形参名即可4.取消宏定义:#undef 宏名。

2024-11-25 19:13:22 584

原创 day16 指针进阶

vf使用指针接收数组。

2024-11-21 20:59:32 1003

原创 day15 指针

(1)不同类型的指针,使用取值运算符(*)时,解析的字节大小不同(跟数据类型有关)4.使用指针变量时,访问指针变量指向 的内存空间中的值,需要引入一个新的运算符*(取值运算)2.每个字节在内存中都是有 内存编号的,这个编号就称为该空间的地址(指针)3.既然所有指针变量所占的内存空间都是一样的,为什么要定义不同类型的指针?(1)*(取值运算):取得指针所指向的地址空间中的值。2.指针变量指向的内存空间的值:当前指针变量记录的地址空间的内容。2.一般情况下不同类型的指针,指向的是跟其数据类型相同的地址。

2024-11-19 20:55:10 577

原创 day14 静态变量

1.static是存储类型的关键字2.static修饰的变量,存储在静态区,是独立于所在函数而存在3.函数的局部变量的生命周期会随着所在函数开始而开始,函数的结束而停止。而静态变量不隶属于任何一个函数,也不属于主函数4.静态变量的生命周期:在编译阶段分配内存空间,到整个程序结束而结束5.静态变量分为:静态局部变量和静态全局变量6.静态局部变量:就是定义在函数体内的静态变量,虽然在该函数内定义出来,但是并不隶属于该函数,生命周期与该函数无关。但是,整个程序中,只能被所在的函数使用。

2024-11-19 08:56:25 910

原创 day13 函数

1.函数是特定的功能的代码块,原则上来说,一个函数只能实现一个功能2.函数头三要素:功能(函数名)、参数(形参列表)、返回值(返回值类型)返回值类型 {函数体内容;3.返回值类型:void类型和非void类型void类型:表示该函数是无返回值的,程序执行完功能后就自动函数体就结束了非void类型:可以是之前所学的任意一个数据类型(不包括void)。表示不仅将当前函数名所表示的功能全部执行后,还给出一个确定的结果4.函数名:是一个标识符(见名知意)

2024-11-16 14:36:51 578

原创 day12 二维数组

printf("最高分是%s,成绩%d\n",arr[max_i],brr[max_i]);printf("最低分是”%s,成绩%d\n",arr[min_i],brr[min_i]);printf("姓名:%s,成绩%d",arr[i],brr[i]);2、使用数组元素时,如果只有一个下标,表示的是当前行所在的一维数组的起始地址,不表示元素 arr[0] &arr[0][0]解读:站在一维数组的角度:定义了三个一维数组,每个一维数组的数组名为 arr[0]、arr[1]、arr[2]

2024-11-15 00:28:10 519

原创 day11 一维数组的排序及字符数组

1> 排序:一组数据,根据其关键字按照有顺序的方式进行重新排列组合的过程就叫做排序分类:升序排序和降序排序2> 排序种类:冒泡排序、选择排序3> 冒泡排序:1、原理:依次比较相邻的元素,如果前面的比后面的大(小)就进行交换每一趟比较后,就会得到一个最大值(小),该值不进行下一轮的比较对剩余的部分,再次进行前面的操作,直到剩余一个元素为止,排序成功2、原理图:3、排序要素。

2024-11-14 00:07:35 809

原创 day10 数组

1.在此之前,我们处理数据,都是少量的数据,只需要存储到单独定义的变量中即可。这种方式对于处理少量数据是没有问题的,但是对于比较庞大的数据,就力不从心了。此时我们可以引入数组来解决。2. 数组定义:连续存储的多个相同数据类型的变量的集合(1)连续存储:申请的变量,在内存中的内存地址是连续的(2)相同数据类型:申请的多个变量,只能存储相同数据类型的值(3)多个变量的集合:数组是变量的集合,跟数关系不大3.数组能实现一条语句定义成百上千个变量,但是这些变量的类型是相同的4.数组属性构造数据类型。

2024-11-12 20:57:22 871

原创 day9 循环结构

有只猴子,第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。6> 马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭,共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?请你编写一个程序,要求:输入学生成绩,输出学生成绩对应的等级。有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。有100块钱,分别兑换成50、20、10、5、1元,一共用多少种兑换情况。}while(表达式2);

2024-11-11 23:29:19 851

空空如也

空空如也

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

TA关注的人

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