- 博客(45)
- 收藏
- 关注
原创 修改学生信息管理系统以及查询
printf("平均分: %.1f\n", manager->students[i].average);printf("总分: %.1f\n", manager->students[i].total);printf("姓名: %s\n", manager->students[i].name);printf("学号: %d\n", manager->students[i].id);printf("学号\t姓名\t\t成绩1\t成绩2\t成绩3\t总分\t平均分\n");printf("无法打开文件\n");
2025-08-11 20:59:55
487
原创 学生信息管理系统
printf("数据已保存\n");//显示所有学生信息。printf("学生数量已达到了上限\n");printf("\n学生成绩管理系统\n");printf("6.显示所有学生信息\n");printf("学生删除成功\n");printf("未找到该学号的学生\n");printf("1.添加学生信息\n");
2025-08-11 20:50:31
425
原创 在开发板上画出一个2048棋盘的矩阵
x++)//列-->宽-->x轴。y++) //行-->高-->y轴。//显示屏内存映射的起始地址。//LCD显示屏的宽度。//LCD显示屏的高度。//每个像素点所占的比特位。//int x:屏的X轴(宽度、列)坐标。//int y:屏幕y轴(高度、行)坐标。//int x0:X轴的起始点坐标。//int y0:Y轴的起始点坐标。//计算显示屏所有像素点的总字节数。//画出2048棋盘的矩阵。//int w:矩形宽度。//int h:矩形高度。//打开显示屏的驱动文件。//动态显示屏幕信息。
2025-08-07 20:36:20
554
原创 栈的输入与输出方式
/当队列中的元素的个数大于q->size时,产生溢出。//用于存储数据,整个队列中所有数据都存放在这。//实际记录的是进入队列的元素个数。//用于记录数据进队列时的下标。//用于记录数据出队列时的下标。//记录当前队列的容量。//队列头的元素溢出不存在。//没有进入队列的元素。//向队列中存入数据。//从队列中取出数据。
2025-08-05 19:53:33
382
原创 二叉树的概念以及二叉树的分类,添加,删除
后序遍历:从根结点出发,则第一次到达结点A,不输出A,继续向左访问,第一次访问结点B,不输出B;到达H,H左子树为空,则返回到H,此时第二次访问H,不输出H;当到达叶子结点H,返回到D,此时已经是第二次到达D,故不输出D,进而向D右子树访问,D右子树不为空,则访问至I,第一次到达I,则输出I;I为叶子结点,则返回到D,D左右子树已经访问完毕,则返回到B,进而到B子树,第一次到达E,故输出E;中序遍历:从根结点出发,则第一次到达结点A,不输出A,继续向左访问,第一次访问结点B,BU不输出B;
2025-08-04 20:39:12
1127
原创 尾插法和倒序输出
/如果此条件成立,说明当前删除节点为首节点。//如果此条件成立,说明当前删除节点为尾节点。// 获取待删除节点前后两个节点的指针。//将待删除节点两边的节点先进性连接。//根据值删除对应节点。
2025-07-31 20:32:10
218
原创 双向链表,对其实现头插入,尾插入以及遍历倒序输出
创建一个独立节点,没有和原链表产生任何关系。//将新节点与其插入位置之后的节点进行连接。1.创建一个节点,并将链表的首节点返回。//当前函数不处理头插和尾插的情况。//获取pos位置的节点指针。//获取链表的尾节点指针。//pos=0时为头插法。
2025-07-31 19:35:57
333
原创 单向链表以及补充
函数功能: 获取链表尾节点的指针。在原链表首节点之前插入一个新节点。在原链表首节点之前插入一个新节点。删除整个链表(从前向后删除)函数功能: 输出整个链表。
2025-07-23 20:54:45
311
原创 浅谈链表和代码
简介:在数组中的数据我们称之为元素,而在链表中的数据我们称之为节点。1.1、数据(每一个节点中所存储的信息)删除整个链表(从前到后删除)初始化新节点中的成员变量。
2025-07-22 19:47:42
283
原创 标准文件I/O补充知识
接口由C标注你定义,与操作系统无关,同一代码可在不同平台运行,跨平台性强。5、链接文件(link):用于间接访问另外一个目标文件,相当于Windows快捷方式。2、目录文件(directory):用于存放目录项,是文件系统管理的重要文件类型。3、管道文件(pipe):一种用于进程间通信的特殊文件,也称为命名管道FIFO。6、字符设备文件(character):字符设备在应用层的访问接口。C标准库在应用层,系统·I/O驱动在内核层,硬件开发在硬件层。7、块设备文件(block):块设备在应用层的访问接口。
2025-07-21 19:34:36
530
原创 标准文件I/O和系统文件I/O代码
a+ 以读和追加方式打开文件,如果文件不存在则创建,如果读文件则文件指针指向文件起始位置,如果追加(写)则文件指针指向文件末尾位置。* w+ 以读写方式打开文件,如果文件不存在则创建否则清空,文件指针指向文件起始位置。* w 以写的文件打开文件,如果文件存在则清空否则创建,文件指针指向文件起始位置。* a 以追加方式打开文件,如果文件不存在则创建,文件指针指向文件末尾位置。* r+ 以读写方式打开文件,文件指针指向文件起始位置。* 参数4:待读取文件的FILE指针。
2025-07-19 23:29:01
163
原创 标准文件和系统文件I/O
a+ 以读和追加方式打开文件,如果文件不存在则创建,如果读文件则文件指针指向文件起始位置,如果追加(写)则文件指针指向文件末尾位置。* w+ 以读写方式打开文件,如果文件不存在则创建否则清空,文件指针指向文件起始位置。* w 以写的文件打开文件,如果文件存在则清空否则创建,文件指针指向文件起始位置。* a 以追加方式打开文件,如果文件不存在则创建,文件指针指向文件末尾位置。* r+ 以读写方式打开文件,文件指针指向文件起始位置。接口是由操作系统决定,所以不能跨平台。
2025-07-19 23:21:48
500
原创 共用体(联合体)
练习2:若int占2个字节,char占1个字节,float占4个字节,sizeof(xc)的大小是()3、同样遵循内存对齐规则-->共用体所占内存大小,是成员最大类型的整数倍。3、由于枚举中存放的都是常量,所以定义的枚举变量不可以使用成员运算符。2、可以手动指定枚举常量的值,未指定的会沿用前一个值加1。&(按位与) |(按位或) ^(按位异或)1、&(按位与): 全1为1,否则为0。3、^(按位异或):相同为0,不同为1。2、|(按位或):全0为0,否则为1。4、~(按位取反):0变1, 1变0。
2025-07-17 21:17:53
507
原创 指针数组和数组指针的应用案例
用指针数组存储若干字符串,编写函数找出其中最长的字符串(若有多个,返回第一个)。:用数组指针作为函数参数,求一个M行N列二维数组的所有元素之和。
2025-07-17 20:42:13
370
原创 结构体(二)
/ 如果结构体成员是字符数组,就只能使用strcpy来赋值。// 有typedef时,PERSON是类型名;typedef struct Person // 如果使用了typedef, Person可以省略不写。// 这段代码是让结构体的指针变量有了有效内存指向,与结构体成员变量没有关系。// 最后释放内存时,切记:需要先释放成员的堆内存,最后释放结构体的内存。// 如果定义了一个结构体指针变量,那么通常我们也是先动态开辟内存。
2025-07-16 21:19:11
409
原创 结构类型:结构体、共用体、枚举
4、结构体中的所有成员变量的内存地址连续,但要符合内存对齐规则。3、结构体所占内存大小,一定是成员最大类型所占内存的整数倍。比如:最大类型为double,结构体的大小等于8的整数倍。位域的定义方式:在结构体成员变量后使用 :n(n表示二进制的位数)比如:最大类型为int,结构体的大小等于4的整数倍。在结构体内存对齐时,需要同时满足3、4、5、6这四个规则。1、定义方式不一样, 位域需要再成员变量后加 :n。4、每个成员在内存对齐时,只看其后面一个成员的类型。比如:1、2、3看4, 1、2、3、4看5。
2025-07-16 21:13:14
433
原创 函数指针与指针函数练习讲解
练习1:char *ptr;else请问指针为NULL时指向哪里,分配的空间为0时又指向哪里?代码解析:这段代码主要是调用malloc(0)来尝试分配 0 字节的内存,然后依据返回值来判断分配是否成功。NULL练习2:会出现什么问题?return 0;getmemory分配的内存地址存储在局部变量p中,函数返回后该地址丢失,导致内存无法释放。尝试打印NULL指针,以及free(str)释放。
2025-07-15 19:46:36
1528
原创 预处理阶段
预处理:主要负责以#开头的预处理指令,预处理是在编译之前进行,由预处理器完成,它会对源码进行文本替换、文件包含、条件判断等处理,生成经过预处理的源代码,然后交给编译器进行编译。4、宏的参数在文本替换时不会执行运算;1、宏是在预处理阶段进行文本替换;2、宏没有类型检查,参数类型错误不会报错;3、宏调用没有开销;6、宏难以调试,因为断点无法进入宏里面;编译器只编译源文件(.c .cpp),不会编译头文件(.h)。1、预处理阶段:主要进行宏替换、头文件展开等操作。2、编译阶段: 进行语法判断, 并生成汇编文件。
2025-07-15 19:21:50
405
原创 指针和数组(二)
/ a即代表数组首地址,也代表第0行的首地址,同时也是第一个元素的首地址。// 1、二维数组在进行函数传参时,行参需要使用数组指针。// 2、在操作矩阵数据时,使用数组指针。// 字符串数组,实际就是一个指针数组。// 1、操作多个字符串时。// 2、管理多个堆内存时。
2025-07-14 19:53:10
233
原创 数组和指针
2、指针本身只占用一个地址大小的存储空间(32位系统占4字节,64位系统占8字节),它指向的内存需要单独分配内存。4、对指针使用sizeof,得到的是一个地址的大小(32位系统占4字节,64位系统占8字节)。5、对指针变量进行取址(&)获取到的是指针变量所在内存的地址,其跟指针变量的值是不一样的。7、对数组名进行取址(&)获取的是整个数组的起始地址,但其跟数组起始地址实际上是一样。3、直接给指针赋值字符串,这种情况,字符串的值是不能被更改的。6、指向字符串常量的指针,其指向的内容是不可修改的。
2025-07-14 19:33:51
252
原创 浅谈函数传参
* 改变了ptr所指向内存的值,可以通过这种方式改变num*//* 改变了ptr的值,所以无法通过这种方式改变num*/// 函数传参:指针传递。
2025-07-09 19:45:09
70
原创 C语言可变参数感悟
在C语言中,可变参函数是指参数数量不固定的函数,比如printf\scanf。*4.va list:声明参数列表变量的类型,用于访问可变参列表。*1、包含头文件 #include <stdio.h>*7.va end:清理释放参数列表相关资源。*返回类型 函数名(固定函数,.....)//初始化,且定位到第一个可变参数。*2.定义函数:固定参数在前,可变参在后。*5.va start:初始化参数列表。*6.va arg:获取可变参数。//声明参数列表变量。*3.至少有一个固定参数。
2025-07-08 20:25:58
248
原创 C语言函数的声明
在C语言中,函数是一段具有特定功能的独立代码块,它可以接收输入参数、执行相关操作并返回结果。返回类型 函数名(形参列表) { //函数体 } 只有函数定义而没有函数声明可能会编译警告或出错(函数声明可以忽略不写) 函数定义一般写在源文件中 .c.cpp。
2025-07-08 20:19:42
765
原创 形参和实参
函数定义时指定的参数,形参是用来接收数据的,函数定义时,系统不会为形参申请内存,只有当。主要用于存储实际参数,并且当函数返回时,系统会自动。实参与形参在内存中占据不同的内存空间,(建议实参和形参名称是一样的)类型,此时程序不报错,因为符合自动类型转换的规。类型,此时将满足强制类型转换的条件,需要手动转。语句返回的数据类型一致,如果不一致,以函数定时。,实参只是将自身的值传递给形参,而不是实参本。定义一个函数,求两个数中的最大数。定义一个函数,求两个数中的最大数。,只不过当我们的函数返回类型是。
2025-02-20 19:50:20
541
原创 【无标题】数组的应用——综合案例
数组中的所有元素都必须是同类型的。从第一个字符开始逐个检查字符串中的每一个字符。语言中无字符串变量,字符串是以字符数组形式存放的。必须是字符数组,的长度必须足够大,以便于能够容纳被链接的字符串。用连续若干个空格算一个、一行开头的空格不计的方法决定单词数目;输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。由基本类型的数据按一定规则构成的数据称为构造类型数据。注意数组的定义形式和数组元素的引用形式的本质区别。注意:返回字符串中包含的字符的实际个数,不含。可以是字符数组,也可以是字符串常量。
2025-02-18 19:50:23
1110
原创 二维数组的遍历
字符数组的语法就是我们前面所学的一维数组和二维数组的语法,只不过数组的数据类型是。如果提供的字符个数与数组长度相同,可以省略数组长度,系统会自动确定元素个数,适。创建一个二维数组,经过论证,二维数据组必须指定列的大小,行的大小可以省略。字符型的数组,字符数组往往是用来存储字符串数据的。数组初始化的时候,没有完全初始化值的时候,空出来的地方使用。支持两种赋值形式,一种是字符,一种是数值,如果是数值表示。此时属于未初始化,元素的值是不确定的(随机值),大概率是。如果定义时,不初始化,元素值不确定。
2025-02-17 19:23:58
655
原创 二维数组的感悟
二维数组本质上是一个行列式的组合,也就是说二维数组由行和列两部分组成。二维数组可被视为一个特殊的一维数组,相当于二维数组又是一个一维数组,只不过它的元素是一。注意:使用数组元素的下标应在已定义数组的大小范围内;语言中,二维数组在计算机的存储顺序是按行进行的,即第一维的。(也就是说数组的元素的类型可以是数组类型)可对部分元素赋初值,其余未赋值部分自动填充。错误,这种写法,会编译标错,不能省略列数。若对全部元素赋初值,自定义数组时可以省略第。错误,这种写法,会编译标错,不能省略列数。正确,未初始化的元素使用。
2025-02-15 21:36:51
462
原创 数组的感悟以及应用
数组的类型说明符由数组中的元素来决定,类型说明符也就是数据类型,元素是什么类型,数。数组可以部分初始化,也就是可以给数组中前几个元素初始化,未被初始化的元素系统将自动。数组可以部分初始化,也就是可以给数组中前几个元素初始化,未被初始化的元素系统将自动。每次排序假定第一个元素是最大或者最小的,用第一个元素的后面的元素一一与第一个元素。比较,遇到较大或者较小的和第一个元素交换,访问完数组的最后一个元素,就排好了一个。数组中的数据被称之为数组的元素(数组中的每一个匿名的变量空间),是同构的。
2025-02-14 19:46:42
1010
原创 【无标题】if语句的嵌套
后括号内的表达式可以是任意类型的表达式,但是表达式的值尽量是整型、字符型、后面的常量表达式的值必须不相同,否则出现矛盾。实现多分支选择结构(多分支也被称作多路分支)若表达式的值与某个常量表达式的值相等时,执行此。需求:按照考试成绩的等级输出百分制分数段。要求:根据学生的成绩,对学生进行分级,表达式的结果建议是 字符 或者 整型。表达式的结果建议是 字符 或者 整型。:不借助于执行顺序,做更精准的判断。:按照考试成绩的等级输出百分制分数段。:借助于执行顺序,减少判断的条件。创建一个变量,用来存放输入的成绩。
2025-02-14 19:22:28
969
原创 循环结构感悟
无限循环:其实就是死循环,程序设计中尽量避免无限循环,如果非要使用,那么这个循环一。特点:先执行,后判断,不管条件是否满足,循环体语句至少执行一次。,我们需要赋初值,循环变量可以是单个,也可以是列表,多个循环。,用来限制循环的次数,循环条件支持关系表达式、逻辑表达式,举。特点:先执行,后判断,不管条件是否满足,至少执行一次。特点:先判断,后执行,如果条件不满足,一次都不执行。先判断,后执行,循环题语句有可能一次都不执行。计算完之后,再循环体的末行,对循环条件进行更新,
2025-02-13 23:48:19
1284
原创 分支结构感悟
0 非0 非0 0 0 非0。0 非0 0 0 非0 非0。条件判断的结果是逻辑值(布尔类型值,也就是说分支语句的条件可以使用关系表达式和逻辑表达。注意:对于单语句的双分支,我们可以使用三目(三元)运算符的写法简化。),则执行表达式后面的语句,执行完该语句后继续执行。),则执行表达式后面的语句,执行完该语句后继续执行。
2025-02-11 20:41:12
1020
原创 Linux基础篇感悟
说明:该指令是从文件系统的数据库中查找,确定是新创建的文件没有在数据库中建立索引,:复制文件或者文件夹(注意:文件夹需要递归复制,这里的复制其实就是拷贝。(管道):将前一个指令执行的结果作为后一个指令执行的条件(了解)追加式写入,就是在原本文件内容末追加内容(保留原本的内容):搜索文件内容,在文件中查找指定的字符序列(字符串):删除文件或者文件夹(注意:文件夹需要递归删除):显示指定路径(默认当前路径)下的文件或者目录。:显示所有(包含隐藏文件或目录)文件或目录。:返回上一次操作的工作目录(类似于上一步)
2025-02-10 20:42:16
563
原创 【无标题】浅谈循环结构和算法
特点:各操作是按先后顺序执行的,是最简单的一种结构,这个结构是默认的。特点:根据是否满足给定条件而从两组或者多组操作中选择一种进行执行。确定性:算法中的每一条指令必须有确切的含义,不能产生歧义。广义的说,为解决一个问题而采取的方法和有限的步骤,就称为。广义的说,为解决一个问题而采取的方法和有限的步骤,就称为。有穷性:包含有限的操作步骤,不能无限制的执行下去。可行性:算法中的每一条指令必须是切实可执行的。条件是否成立,如果仍成立,再执行。框所指定的操作后,必然接着执行。是否成立,如果成立,再执行。
2025-02-09 21:23:39
312
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅