自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 S1E49:基础typedef 课后作业

不是我们所预期的指针变量,根本原因就在于 #define 只是简单的字符串替换而 typedef 则是为一个类型起新名字。条件时,由于 < 运算符左右必须是相同类型的操作数,如果出现不同,会内部自动进行调整(范围小自动转换为范围大的数)。答案:typedef 和 #define 都可以用来定义类型别名,但有以下区别。解析:typedef 可以用于任何类型,包括结构体、指针、函数类型等。答:我认为,#define 是完全的替换 ,而typedef 是封装了。B. typedef 可以用来定义指针的新名称。

2024-08-15 17:28:14 603 1

原创 S1E48:内存池 课后作业

插入新的学生信息 - 它会提示用户输入学生的学号,姓名和专业,并将输入的信息存储在一个新创建的 Student 结构体实例中。退出学生信息管理程序 - 当用户选择这个选项时,程序将释放所有的学生信息和内存池中的内存空间,并退出程序。而内存碎片是由于频繁地分配和释放不同大小的内存块,导致内存中留下许多小的、不连续的内存块,降低了内存的利用效率。退出前,程序会释放待办事项列表和内存池中所有待办事项的内存。此外,如果程序的内存需求超过了内存池的大小,就需要重新分配内存池,这也会产生一定的开销。

2024-06-11 15:08:57 839 1

原创 S1E47:单链表3(中间插入) 课后作业

0. 请编写一个程序,将用户录入的整数从小到大存储为单链表 a,然后将单链表a原地反转并输出(从大到小存储)。2. 请编写一个程序,将用户录入的整数从小到大存储为单链表a,然后删除单链表a中重复的数字并打印结果。提示:可以同时使用“头插法”和“尾插法”存储两个单链表,然后比较两者是否相同即可判断是否为回文链表。1. 请编写一个程序,将用户录入的整数存储为单链表,并检查该单链表是否为回文链表。本章节题目依靠本人,非常难答出来,后续再看!

2024-06-03 16:36:59 311

原创 FreeRTOS实时系统 在任务中增加数组等相关操作 导致单片机起不来或者挂掉

在调试串口任务中增加如下代码,发现可以用keil进行仿真,但是烧录程序后,调试串口没有打印,状态灯也不闪烁,单片机完全起不来。才给了区区128个字节,这有点少了,毕竟我增加了很多功能,于是我从64增加到120。在仿真代码得时候,任务认为程序没有问题,不太可能导致这样的情况发生,毕竟我在别的项目用的这套代码运行的好好的。博主就纳了闷了,究竟是什么原因,这段代码可是公司永流传的老代码了,我移植过来的可不敢出现问题。整个单片机的存储空间是固定的,增加了FreeRTOS的堆空间,就要同步减少单片机的栈空间。

2024-05-31 12:50:03 620

原创 S1E46:单链表2(尾插法) 课后作业

0. 将这两节课的书籍管理程序的代码给整理一下吧,课堂听课似乎理解了,事后自己做题又觉得有些怀疑,对不对?最坏的情况是待查找的元素在表尾(或不存在),那么需要迭代比较整个单链表的所有节点。2. 有人说,尾插法的劣势可能就是效率偏低,因为每次插入都需要从头遍历整个单链表,对此,你有什么改进的方案吗?1. 代码都是写出来的,请大家依葫芦画瓢,编写一个事件备忘录(代码完全可以参照我们的图书管理程序)。答案:对的,因为单链表除了有“头”有“尾”,每个数据节点还得存放一个指向下一个节点的指针。

2024-05-30 14:40:37 963

原创 S1E45:单链表1(头插法) 课后作业

答案:对于单链表来说,随机访问中间的某一个元素,都是需要大量的跳转操作(从第一个元素开始,然后通过指针一个一个往后跳,最后抵达目标位置),而数组则完全没有这个问题(直接通过下标索引值一步到位地访问)。答案:应该使用单链表比较合适,因为记账小程序要求随时可以从中间位置插入数据,并且具有写入操作多(每天记一记),读取操作少(月底看下总结)的特点,所以选择单链表来实现会更合适。对于数组来说,随机插入或者删除其中间的某一个元素,都是需要大量的移动操作,而单链表则完全没有这个问题。理论上就是一个不存在的值,又何来。

2024-05-26 14:35:25 608

原创 S1E44:传递结构体变量和结构体指针 课后作业

所以,打印出来的是内存的“随机值”。如果要正确实现需求,我们应该传入的是一个指针(代码见下一题)。1. 请问下面定义结构体变量的代码(t1、t2、t3)中,哪一个是错误的?答:参考答案,二次作答(为什么结构体函数返回结构体类型的指针,会有问题?答:定义的b1和b2数据类型是结构体,但是malloc传递的为结构体指针。解析:通过赋值号传递结构体变量,应该确保两个变量是相同的结构体类型。函数的时候,代码中是进行一个值传递的过程,所以。答:传递的值会紊乱,z没有得到赋值(答:变量的作用域不一样,打印的随机值。

2024-05-20 11:04:30 462

原创 S1E43:结构体数组和结构体指针 课后作业

解析:试图用 book.date 访问日期的做法是错误的,你只能使用 book.date.year,book.date.month 和 book.date.day 依次打印出年月日。1. 使用结构体声明三维立体空间中一个点的坐标(包含 x 坐标、y 坐标和 z 坐标),支持用户录入多个点的坐标(具体录入的数量由用户自定义),并计算所有点之间的距离。解析:128 + 40 + 4 + (4 + 4 + 4) + 40 = 224,注意不要忘了计算内嵌结构体 Date 噢~答:4+20+12 = 36(

2024-05-19 15:11:35 753

原创 S1E42:结构体 课后作业

答案:只有在结构体初始化的时候才允许使用大括号({})直接赋值,随后如果想要对结构体变量进行赋值,需要使用点运算符(.)对结构体的各个成员逐个赋值。B 结构体在存放 char 的时候留有 3 个字节的多余空间,可是紧接而来的是占 4 个字节的 int 类型,所以没办法,只能选择“浪费”。同样由于字节对齐的原因。A 结构体在存放 char 的时候留有 3 个字节的多余空间,这时用于存放 short 类型是刚刚好的。解析:由于编译器对结构体的成员进行字节对齐的原因,所以结果打印的并非总是其成员所占空间之和。

2024-05-17 11:29:46 784

原创 S1E38:动态内存管理2 课后作业

1. 以 mem 开头的函数比如 memcpy,memcmp 被编入字符串标准库(函数的声明包含在 string.h),那么请问它们与同在该标注库的 strncpy,strcnmp 函数有什么区别呢?答案:calloc 函数在申请完内存后,自动初始化该内存空间为零,而 malloc 函数不进行初始化操作,所以调用完 malloc 函数之后,需要再调用 memset 函数将内存初始化为零。1. 编写一个小程序,要求使用本节课学到的函数在堆中申请一个矩阵(二维数组),矩阵的尺寸由用户指定,并且允许修改。

2024-05-16 15:09:33 428

原创 S1E37:动态内存管理 课后作业

有鱼油可能会疑惑:”难道调用 free() 函数释放内存后,ptr 不是应该指向 NULL 的吗?这里务必要注意一点,free() 函数释放的是 ptr 指向的内存空间,但它并不会修改 ptr 指针的值。也就是说,ptr 现在虽然指向 0x8b23008,但该空间已经被 free() 函数释放了,所以对于该空间的引用已经失去了意义(会报错)。答案:因为将每次申请堆内存空间的粒度调大,malloc 函数会直接返回 NULL 表示失败,这样程序既不会因为内存耗尽而崩溃,也不会退出死循环……

2024-05-15 11:23:20 880

原创 S1E34:递归 课后作业

答案:递归的执行效率通常比迭代低很多,所以递归程序要更消耗时间;由于递归函数是不断调用函数本身,在最底层的函数开始返回之前,程序都是一致在消耗栈空间的,所以递归程序要“吃”更多的内存空间;递归的结束条件设置非常重要,因为一旦设置错误,就容易导致程序万劫不复(崩溃)。所以,斐波那契数列的前 10 个数字就是 1, 1, 2, 3, 5, 8, 13, 21, 34 和 55。不夸张的讲,如果你用迭代来实现斐波那契数列,效率至少可以提高几十万倍?1. 就程序来说,递归实现的本质是什么。答:对照答案,写了一遍。

2024-05-14 10:53:43 878 1

原创 S1E30:指针函数和函数指针 课后作业

总结:func 是一个返回值为函数指针(指向一个参数为 int 类型,返回值为 void 类型的函数)的函数,func 有两个参数,第一个参数是 int 类型,第二个参数为函数指针(指向一个参数为 int 类型,返回值为 void 类型的函数)。4. 有一个指针函数 a,它的返回一个字符串,它有两个参数 b 和 c,其中 b 是一个字符串,c 是一个指向参数为 int 类型,返回值为 void 类型的函数指针。答:函数指针:为一个指向函数的指针 指针函数:函数的返回值为一个指针。

2024-05-09 22:36:00 864 2

原创 S1E27:常量和指针 课后作业

还是第二题答案的那句话:在赋值、初始化或参数传参的过程中,赋值号左边的类型应该比右边的类型限定更为严格,或至少是同样严格!答:const int * const *q 限制了 q 和 *q ,cosnt int const **q限制了**q 和 *q(。,即第一个 const 限制的是 **q 的指向,第二个 const 限制的是 *q 的指向,唯有一个漏网之鱼 —— q 没有被限制。答案:因为没有用 const 修饰 * 这样的解释,所以这两种写法表示的含义其实是一样的,都是表示?

2024-05-07 14:38:21 850

原创 S1E26:指向指针的指针 课后作业

如上图所示,*pa 被定义为一个一维数组,其跨度为 2 个字节,所以 *(pa + 8) 指向的是 {'w', 'x'} 这个数组,所以 *(*(pa + 8) + 1) 取出 'x' 元素;*ppa 被定义为一个二维数组,其跨度为 6 个字节,所以 *(ppa + 2) 指向的是 {{'s', 't'}, {'u', 'v'}, {'w', 'x'}} 这个二维数组,所以 *(*(*(ppa + 2) + 2) + 1) 取出 'x' 元素。结论:如果表达式 p 可以做左值,那么 *&p 和 p 等价;

2024-05-06 15:37:59 855

原创 S1E25:void指针和NULL指针 课后作业

比如目标平台是 32 位的,那么 sizeof(void*) 就是 4,如果是 64 位的,那么 sizeof(void *) 就是 8,如果是 16 位的,那么就是 2 啦。答案:当你的指针不知道指向哪儿的时候,那么将它指向 NULL,以后就不会有太多的麻烦。以整型的跨度打印 pi,那么编译器会从 pi 指向的地址开始(0xbf93b10d),找到四个字节的数据(0x00000004),并将它们打印出来。注:悬空指针就是指向了不确定的内存区域的指针,通常对这种指针进行操作会使程序发生不可预知的错误。

2024-04-30 15:09:25 474

原创 S1E24:指针和二维数组 课后作业

等号右边强制将 array 这个一位数组重新划分成 3 * 3 的二维数组,然后用数组指针指向它(本章最后说如果要使用指针来指向二维数组,只能使用数组指针,还记得吗?答:*(matrix + 1) + 2 的含义是一个指向字符变量的指针,其值是二维数组 matrix 第二行第三个元素的地址(即 &matrix[1][2])。1. 这次不限制正方形矩阵的尺寸,要求程序自动计算用户输入的字符,并以最大的正方形矩阵输出(比如用户输入 17 个字符,输出 4 * 4 矩阵)。所以,p[2][2] 的结果是 9。

2024-04-30 10:43:37 553

原创 S1E23:指针数组和数组指针 课后作业

同样的道理,int (*p)[10] 虽然是定义一个整型指针,但不要忘了它后边还有一个数组,所以它的跨度应该是 sizeof(int) * 10,而 array 作为数组名,它的含义是“指向数组第一个元素的地址”,所以 array 的跨度是 sizeof(array[0]),因此编译系统遇到 int (*p)[10] = array;对比一下代码,大家就应该不难发现:argc 参数指定的是程序的参数数量(包括程序名本身),而 argv 这个指针数组指向的则是每个参数的名字(字符串)。

2024-04-27 23:37:03 1555

原创 S1E22 :指针和数组 课后作业

使用 fgets 函数接收用户输入的两个字符串(仅支持英文)到 str1 和 str2 中,对比 str1 和 str2,如果两个字符串完全一致,打印“完全一致”;如果存在不同,打印第一处不同的位置(索引下标)。使用 fgets 函数读取用户输入的字符串(英文)并存储到字符数组 str1 中,并利用指针,将 str1 中的字符串拷贝到字符数组 str2 中。1. 假设整型指针变量 p 存放的地址值是 0x11008888,那么请问 p + 1,p + 2,p + 4 和 p + 8 的地址分别是?

2024-04-26 16:24:04 1886

原创 S1E21:指针 课后作业

第二个问题:指针变量 b 既是左值,也是右值。这个语句,赋值号右边,*b 间接访问变量 a 的值,因为用的是它的值,所以是右值;赋值号左边,*b 用于定位变量 a 的存储位置,然后将右边表达式的值存放进去,所以此时为左值。虽然说在我们的操作系统里:sizeof(int) == sizeof(*int) 说明存放指针变量和存放整型变量所需的存储空间是一样的。1. 验证尼科彻斯定理:任何一个大于 2 的整数的立方都可以表示成一串连续奇数的和,这些奇数一定是要连续的(比如 3^3 == 7 + 9 + 11)。

2024-04-23 15:35:09 1796

原创 S1E20:二维数组 课后作业

由于我们这里只初始化了 10 个元素,并指定了该数组有 4 列,a[2][4] 是不够放了,只能用 a[3][4] 来存放,剩余的空间初始化为 0。提示:这道题在打印的地方需要比较大的脑洞,墙裂建议仔细琢磨下再看答案(自己想粗来和直接看答案的成就感是截然不同滴)。如果它被定义为一个 5 行 4 列的二维数组(a[5][4]),那么请问 a[3][3] 的值是多少?注意:当矩阵 A 的列数等于矩阵 B 的行数时,A 与 B 可以相乘。题目要求:已知矩阵 A 和矩阵 B,计算出矩阵 C 并如下图格式打印。

2024-04-22 12:18:41 754 1

小甲鱼c++课程课件以及例题

小甲鱼c++课程课件以及例题

2024-07-25

C++快速入门课件加源码(小甲鱼)

C++快速入门课件加源码(小甲鱼)

2024-06-30

JLink-Windows-V649c J-link烧录工具

JLink_Windows_V649c J-link烧录工具

2024-05-20

SecureCRT串口调试工具

SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。 SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具。通过使用内含的VCP命令行程序可以进行加密文件的传输。有流行CRTTelnet客户机的所有特点,包括:自动注册、对不同主机保持不同的特性、打印功能、颜色设置、可变屏幕尺寸、用户定义的键位图和优良的VT100,VT102,VT220和ANSI竞争.能从命令行中运行或从浏览器中运行.其它特点包括文本手稿、易于使用的工具条、用户的键位图编辑器、可定制的ANSI颜色等.SecureCRT的SSH协议支持DES,3DES和RC4密码和密码与RSA鉴别。

2024-05-19

带你学C带你飞 第一季课后作业及答案

小甲鱼 带你学C带你飞 视频 第一季课后作业及答案 S1E4 -- S140

2024-05-09

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

TA关注的人

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