课堂笔记
关系运算符:Relational operators
<,<=,>,>=,==,!=
计算关系是否成立
逻辑关系符: Logical operators
Python:and/or/not
C: &&/ || / !
程序中的条件:
arithmetic operation 算术运算
logical operation 逻辑运算
relational operation 关系运算
循环
loop/repetition :循环
iteration : 迭代
①循环条件(condition):真进假出
②初始语句 条件真 进
③调整语句 条件假 出
Python的逗号
for i in "Hello World!":
print i,
输出:H e l l o W o r l d !
//Python 中的 for循环与其说是for循环不如说是for in循环
条件控制循环 condition-controlled-repetition:while
计数器控制的循环 counter-controlled-repetition :for
C函数
- 函数声明:告知编译器,函数基本信息
- 函数定义:通过编程实现函数的功能
- 函数调用:通过调用,运行该函数
- 定义-》声明-》调用
C函数定义
- 基本形式:
返回值类型,函数名称(参数列表){
}|
【int,char,float,void(空)】
2021/11/19
python函数定义和调用
- 先定义(def)
- 再通过函数名调用
- 调用时传递参数
- 调用执行的是函数体(语句序列)
- 调用产生返回值
- 函数定义可置于程序中任何地方,但必须在调用之前
2021/11/24
变量
- 变量 variable 的作用域 scope
- 局部变量 local:在定义它的函数内有效,但是函数返回后失效。“在函数内定义的变量”,即在一个函数内部定义的变量,只在本函数范围内有效。
- 全局变量 global:在整个工程文件内都有效;“在函数外定义的变量”,即从定义变量的位置到本源文件结束都有效。由于同一文件中的所有函数都能引用全局变量的值,因此如果在一个函数中改变了全局变量的值, 就能影响到其他函数中全局变量的值。
- 若全局变量和局部变量同时存在,则局部优先
- 全局变量可用于在不同模块间传递,带回数据,但非必要不使用
lifetime 变量的生存期
storage class:自动类型 auto 一般不加特殊标识的变量均为auto 用完就释放
静态类型 static 用完不释放
2021/11/27
command line 命令行
form 表单
visualization 可视化
list列表/array数组
数组和列表都提供了一种数据结构,表达批量数据
没有数组和列表之前 所有数据都依赖变量(variate)通常用到两种变量,一种变量表示数据,一种变量用来控制程序。
数据/列表结构:①批量数据
②连续存放(线性)目的:快速访问
数组和列表的区别
①数组要求元素类型统一,列表可混搭(泛类型语言)
②数组不具有开放性,长度不可改变。Python中的list可在运行期间动态(dynamics)改变长度。
数组和列表的相同:
批量存储,单个访问(名称加下标)(可用循环辅助进行单个访问)
二维数组 :
①维度的提升代表逻辑上和形式上有所改变,而不代表存放方式的改变,本质上来说二维的存放方式仍是一维的
② 行 row 列 column
指针:
- 指针与内存(memory)访问有关
- 指针是系统级的(与之对应的是应用级)
- 嵌入式系统通常以C语言进行系统级程序设计
- 指针即内存地址,内存中所有的空间是按字节编号的
学习指针只需要搞清楚:什么地址存了什么数据
“ * ” 是间接访问操作符(Indirect access)
与平常的间接访问不同 指针变量的间接访问既可以“读”,也可以“写”。
通过指针变量间接地改变了指向变量的值,体现了指针的隐蔽性。
指针函数的三步:①参数必为地址
②函数中使用间接访问
③传地址
指向一维数组的指针:int(*p)[10] (pointer to array)
指针的数组:int*p[10] (array of pointer)
二级指针 pointer to pointer
字符串的操作:
1.存储方式:
(1)字符串在C中是通过一维数组来存储的。
#define N 100
char str[N]
(2)字符串在Python中是通过序列sequence(一种list)来存储。
s=“Good Morning”
2.C语言中存储时的标志符号:‘\0’结束符号 可通过‘\0’截断函数
3.字符串中输入/输出操作:
(1)C语言:char str[200];
scanf("%s",str); printf("%s",str); //scanf默认以空格或回车字符作为结束符号
gets(str); puts(str) //gets以回车字符作为结束符号
(2)Python:raw_input()
input
结构体 Structure:将所有(相关的)数据项group为一个新的类型
是一种组合、构造的数据类型,一个数据类型中可能包含多个其他的标准数据类型
最大的作用是运用二维数组
结构体中仍可套用结构体
Table:per "row"→ record
普通变量int只有一个field 结构体有多个member
/*
共用体 Union(共用体在一般的编程中应用较少)
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
*/
动态内存分配 Dynamic Memory Allocation
1.malloc() 内存分配(memory allocation)
C 库函数 void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针,如果请求失败,则返回 NULL。
2.calloc() 按个数分配
C 库函数 void *calloc(size_t nitems, size_t size) 分配所需的内存空间,并返回一个指向它的指针。malloc 和 calloc 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。
3.realloc() 重新分配
C 库函数 void *realloc(void *ptr, size_t size) 尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。
4.free() 释放
C 库函数 void free(void *ptr) 释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。
5.malloc和calloc的区别:
malloc一个形参,因此如果是数组,必须由我们计算需要的字节总数作为形参传递
用malloc只分配空间不初始化,也就是依然保留着这段内存里的数据,
calloc 2个形参 ,因此如果是数组,需要传递个数和数据类型
而calloc则进行了初始化,calloc分配的空间全部初始化为0,这样就避免了可能的一些数据错误。
动态链表 dynamic linked list
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步