- 博客(11)
- 收藏
- 关注
原创 栈的实现之链式栈
相比较于数组和链表,栈是一种操作受限的线性结构。在栈中,最先添加到栈中的元素总是最后被删除的,遵循**后进先出(LIFO, Last In First Out)**的原则。
2024-01-10 21:44:16
1053
原创 结构体和枚举
在C语言中,结构体(struct)是一种自定义的数据类型,它允许你将多个不同类型的变量组合在一起。这些变量被称为**“成员”或“字段”**。结构体类型的定义为这些成员赋予了一个集合的名字,使得你可以同时处理这些相关的数据项。这对于将数据组织成更高层次的形式非常有用,尤其是当这些数据项自然地组合在一起时。结构体类型一般定义在函数外部。// 学生的属性有: 学号,姓名,性别,语文成绩,数学成绩,英语成绩...int stu_id;// 整型值学号,用于唯一标识一个学生。
2024-01-09 22:42:51
898
原创 C语言之字符串
这是一个字符数组的声明。它分配了10个连续的char类型的存储空间。你可以使用这个数组来存储最多9个字符的字符串(第10个字符用来存储字符串结束符’\0’),或者任何其他的字符数据。它可以执行的操作有:利用索引运算符取、改元素。当此字符表示存储字符串时,可以直接作为参数传递给字符串处理函数。
2024-01-09 22:41:37
1101
原创 Day 7
在C语言中,允许形参的类型是一个数组,也就是说在调用函数时可以传入一个数组。但C语言是值传递的,难道要将整个数组复制一份传递给函数吗?这当然不太现实,实际上:**当数组名作为参数传递时,它会退化成指向数组首元素的指针。**比如:因此在C语言中,当函数需要数组作为参数时,我们有两种常见的格式:此代码就表示func函数调用时,需要传入一个int类型数组。但传入数组本质上就是传入首元素的指针,所以此函数也允许传入一个int* 类型的指针变量。这一段代码看起来表示func函数需要传入一个int*类型的指针,也就
2024-01-09 22:40:09
787
原创 Day 6
代码简洁: 使用递归,我们可以用几行代码来表示复杂的问题,使代码更加简洁优雅。**直观易理解:**递归的核心思路是分解,将复杂的问题分解为更小的、相似的子问题,这天然符合人类解决问题的思路。**天然适用于有重复或层次结构的问题:**对于某些具有明确重复或层次结构的问题,如文件系统、树和图的相关算法,递归方法是最自然、最容易理解的选择。栈溢出风险: 深度较深的递归可能导致栈溢出。效率较低:递归可能导致大量的重复计算,降低效率。尤其是递归处理的子问题存在大量重叠时,这种效率低下更为明显。内存消耗。
2024-01-03 18:49:22
789
1
原创 Day 5
C语言不允许函数返回数组类型。在C90标准中,如果省略了函数的返回值类型,编译器默认其为int类型。但从C99标准开始,这种做法已不再被支持。因此现代C编程中建议总是明确指定返回值类型。形式参数(形参)组成的列表。形参的语法形式为:“数据类型 形参名”,多个形参间用";"分隔。形参列表可以是空的,表示函数不需要任何外部输入。在C语言中,推荐使用void取代空形参,以明确地表示函数不接受任何参数。形参列表中的数据类型,决定了调用函数时所需的实际参数的类型。例如,int a表明需要一个整数型参数。
2024-01-02 23:38:22
1050
原创 H1 计算固始资金累加复利
形参执行完毕后,控制权会回到主函数中,形参不再存在。此时,主函数中的实参的值不会受到形参的任何影响。形参只在函数内部起作用,函数执行完毕后,形参的作用域结束,对实参没有任何影响。在函数调用过程中,实参的值会被传递给形参,形成了形参的副本。函数内部对形参的操作只会影响形参本身,不会影响实参。所以,主函数中的实参的值不会被函数中的形参所改变。编写程序打印出一个表格,这个表格显示了在几年时间内100美金投资在不通利率上的价值。用户将输入利率和要投资的年数。这是我自己琢磨出来的代码,有很多缺陷和不优美的地方。
2024-01-01 19:18:44
345
原创 Day 4
但不管是什么循环,我们目前都还缺少在循环过程中控制循环的手段,此时就需要使用跳转控制语句了。标签的语法就相当于给函数体中的某条语句加上一个标志或标记,接下来我们就可以使用goto语句跳转到这个位置,并执行该语句。后,若循环后边还有语句,则会选择继续执行,而return如果遇见,则是直接停下,不会执行后边的语句。很简单,表达式语句一般会舍弃表达式是的主要作用,而利用表达式的副作用。很明显主要作用被丢弃了,起作用的是副作用。但我们要说清楚,这种编程习惯对于现代编程而言,是非常非常不推荐的,甚至是应该禁止的。
2023-12-31 14:09:25
1303
原创 Day 3
为什么要给类型定义别名/定义别名的好处是什么?提升代码的可读性。这个很容易理解,不多赘述。原类型名往往是一个通用的称呼,而别名是此场景下的一个精准描述。提升代码的扩展性。这一点在后续数据结构阶段会体现的很明显,在后续课程我们将展开讲解这部分内容。提升代码的跨平台性移植性。类型别名的语法最重要的用途就是增强代码的跨平台移植性,下面将详细讲一个作用。类型别名如何提升跨平台性移植性?我们都知道,C语言由于编译器、平台之间的差异,经常会出现同一个类型,但存储方式不同的情况。
2023-12-31 08:42:31
777
原创 Day 2
源文件到可执行文件,打造顾客为两个步骤:预处理过程主要就两个作用:#define 用以定义宏常量(符号常量)其实就是给字面值常量起个名字,本质是文本替换,没有数据类型、取值范围的限制注:1.宏常量名字必须大写,如果有多个单词,下划线隔开2.宏定义是没有分号的预处理阶段会将代码中的宏常量进行文本替换#define定义函数宏#inlcude包含头文件<>表示表示去标准库中寻找对应的头文件,也就是说使用C语言标准库头文件,使用<>“ ”表示先去当前目录下寻找头文件,找不到再去找标准库scanf函数用
2023-12-30 12:58:58
882
1
原创 Day 1
简单来说,它可以存储带小数位的数,比如0.1,123.6,-0.123等。同时,float类型的变量也可以执行加减乘除等操作,当然也没有求长度,求重量这样的操作。,int类型的变量占用4个字节的内存空间,加上C语言中的整数默认是有符号整数,它的取值范围是**[-2^31, 2^31 - 1]**我们可以把虚拟空间想象成一个连续的数组,内存地址是唯一标识,可以看成是数组的下标。对于某个平台的虚拟内存空间来说,它的最大地址值是如何确定的? 此时该局部变量的值是随机的,未定义的,会产生未定义行为。
2023-12-28 22:44:58
374
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人