============================================
《C语言》
关键字 C89标准,32个关键字
auto :声明自动变量
break:跳出当前循环
case:开关语句分支
char :声明字符型变量或函数返回值类型
const :声明只读变量
continue:结束当前循环,开始下一轮循环
default:开关语句中的“默认”分支
do :循环语句的循环体
double :声明双精度浮点型变量或函数返回值类型
else :条件语句否定分支(与 if 连用)
enum :声明枚举类型
extern:声明变量或函数是在其它文件或本文件的其他位置定义
float:声明浮点型变量或函数返回值类型
for:一种循环语句
goto:无条件跳转语句
if:条件语句
int: 声明整型变量或函数
long :声明长整型变量或函数返回值类型
register:声明寄存器变量
return :子程序返回语句(可以带参数,也可不带参数)
short :声明短整型变量或函数
signed:声明有符号类型变量或函数
sizeof:计算数据类型或变量长度(即所占字节数)
static :声明静态变量
struct:声明结构体类型
switch :用于开关语句
typedef:用以给数据类型取别名
unsigned:声明无符号类型变量或函数
union:声明共用体类型
void :声明函数无返回值或无参数,声明无类型指针
volatile:说明变量在程序执行中可被隐含地改变
while :循环语句的循环条件
1999年12月16日,ISO推出了C99标准,该标准新增了5个C语言关键字:
inline restrict _Bool _Complex _Imaginary
2011年12月8日,ISO发布C语言的C11标准,该标准新增了7个C语言关键字:
_Alignas _Alignof _Atomic _Static_assert _Noreturn _Thread_local _Generic
数据类型
整型:int, long, short, 有符号,无符号unsigned
字符型:char, 有符号,无符号unsigned
布尔型:_bool
浮点型:float,双精度double。
字符串:没有字符串类型,用char型数组。
空类型:void
常量
可用#define定义。
用const,限定变量为只读。
基本运算符
数学运算符+-*/ %,正负+-,自加自减++ ,--,
sizeof()返回变量大小,强制类型转换(int)1.6
赋值=,其他赋值运算符+=,-=,...
关系运算符 > < >= <= != ==
逻辑运算符 && || !
条件运算符 ? :
地址运算符 & 指针运算符*
位操作运算符 &,|,~,^,<<,>>,
循环
for
while
do...while
分支和跳转
if ... else...
switchi...case...default
continue, break,goto
函数
带参数函数;return;函数声明;递归自己调用自己;
数组
数据类型 数组名[ 元素个数] 下标从0开始,定义时必须规定数组大小。
初始化 ={1,2,4,8,16};
多维数组,
字符串与字符串函数
库函数中的stdio.h,string.h
存储类别与作用域
auto,register,extern,static,const,volatile可由硬件改变,
打印和扫描
printf()函数
scanf()函数
getchar()
putchar()
文件I/O函数
fopen(), exit(), fgets(), fputs()....
结构体、联合体、枚举
struct,union,enum,typedef。
注释,区分大小写
//单行
/* */ 多行
程序结构
包含头文件;宏定义;
各种变量定义初始化;
子函数声明;
主函数{
初始化;
循环体;
}
子函数(){ };
========================================================
《Python语言》
关键字 python3共33个关键字
False 布尔类型假
None 空值,None和任何其他数据类型比较永远返回False
True 布尔类型真
and 逻辑与
as 与import配合使用,或配合with使用
assert 断言,用来在运行中检查程序的正确性
break 用来终止循环语句的
class 定义类的关键字
continue 跳过当前循环块中的剩余语句
def 定义函数用的
del 用于list列表操作,删除一个或者连续几个元素。
elif 和if配合使用的
else 与if配合使用
except 使用try和except语句来捕获异常
finally 异常机制中与try使用,无论try是否抛出异常,finally语句块一定会被执行
for 循环语句可以遍历任何序列的项目
from 用import或者from…import来导入相应的模块
global 一般在局部或函数内对全局变量进行修改,须在局部用global声明变量
if 条件语句
import 用import或者from…import来导入相应的模块,导包操作
in for…in是另外一个循环语句。判断键是否存在于列表字典中
is 判断两个变量的指向是否完全一致,及内容与地址需要完全一致,才返回True
lambda 匿名函数,用一行实现一个函数
nonlocal 用来在函数或其他作用域中使用外层(非全局)变量,一般使用于嵌套函数
not 逻辑非,取反的意思
or 逻辑或
pass 什么都不要做,一般使用在空函数上,占位符
raise 抛出异常关键字
return 函数返回值
try 使用try…except语句来处理异常
while 重复执行一块语句
with 一个控制流语句与as配合使用,可以用来简化try…finally语句
yield 用起来像return,yield要求函数返回一个生成器,生成器通常可理解成迭代器
数据类型
整数、浮点数,复数1 + 2j (数中可加下划线增强可读性,python会自动忽略)
(同时给多个变量赋值,用逗号隔开x, y, z = 0, 0, 0)。
布尔类型,True,False。空值None。
字符串、列表、元组、字典。
强制类型转换 int(x) float(x)
变量
python是动态语言,变量的数据类型任意,且不固定可变。
命名字母数字下划线组成,数字不能开头。大小写敏感。
PEP8规则:小写字母,多个单词用下划线连接。受保护实例属性用单下划线。私有实例属性用双下划线。
常量
没有内置常量类型,习惯用全大写字母变量表示常量。例如 PI
运算符
算数运算符 + - * / %求余 **幂 //整除
关系运算符 == != > >= < <=
赋值运算符 = += -= *= /=等等。:=
位运算符 & | ^ ~ << >>
逻辑运算符 and or not
成员运算符 in not in
身份运算符 is is not 比较两个对象的存储单元
下标 [ ],切片 [ : ]
字符串
用单引号或双引号括起来的。需要正确使用引号避免语法错误。三引号括起来多行字符串。
通过索引截取字符串,变量[头下标:尾下标],var1[0]
.title()方法,.upper()方法 .lower()方法,
f字符串:f"hello, {xxx} {yyy}" 字符串前加f可将{}内的变量代入字符串。
转义字符,制表符 \t,换行符 \n。.rstrip()方法删除空白。
占位符格式化输出字符串。
注释
用#号注释单行。
用""" """或 ‘’‘ ’‘’ 三对单引号或三对双引号进行多行注释。
中文注释注意用utf-8格式
列表
类似数组,用[ ]定义,中间用逗号隔开,索引下标从0开始。-1 索引最后一个元素。
列表中元素可以为字符串等。更复杂更灵活。
类似数组的访问方式,修改元素。.append()方法添加元素。.insert()方法添加元素。del 删除元素,或调用.pop()删除元素。
.sort()方法进行永久排序。.sorted()方法临时排序。.reverse()方法永久反向排序。len()函数求长度或._len_()方法。
用for...in列表名: 遍历列表。注意缩进错误。
函数range() 生成一系列数 range(1,6)生成1,2,3,4,5数列不超过6。range(2, 11, 2)从2开始不超过11,步长为2。
list()函数创建列表,配合range()使用。
用min(), max(), sum()对数字简单统计
列表解析:squares = [value**2 for value in range(1, 11)] 一句生成列表。
列表切片:players[1:4]使用列表其中一部分
复制列表:用[:] 省略起始和终止索引,代表全部。
判断元素在列表中 用 in ,不在列表中用 not in。
元组
不可变的列表被称为元组。用圆括号()表示。可访问元素类似列表。不可修改元素,但可以重新定义元组来修改元素。
字典
用花括号括起来的一系列 键值对,键值对用冒号,之间用逗号隔开。访问字典中的值,用 字典名[ 键]
alien_0 = {'color': 'green', 'points': 5}
可先创建一个空字典,再逐一添加键值对赋值。用del可删除键。可使用方法get() 在指定的键不存在时返回一个默认值。
遍历字典,用方法items() ,返回一个键值对列表,用for key, value in user_0.items():
遍历字典所有键,用方法key()。方法values()返回所有值。
字典列表,先定义字典,再将字典作为列表的项。字典中存储列表。字典中存储字典。
集合
用set(列表)定义,无序无重复的键的集合,无值,重复键会自动删除。
循环
for 变量 in 序列 : 别忘记冒号,可配合range()使用。pass空语句。
循环体 注意缩进错误。
while 条件 : 别忘记冒号
循环体 也可以配合else使用。
break, continue
range(101)可以产生一个0到100的整数序列,从0开始,到101之前结束。
range(1, 100)可以产生一个1到99的整数序列,
range(1, 100, 2)可以产生一个1到99的奇数序列,其中的2是步长。
分支
if 条件 : 别忘记冒号。
分支1 缩进,语句块。
elif 条件: 别忘记冒号。可选,也可有多个elit。
分支3 缩进,语句块。
else: 别忘记冒号。可选。
分支2 缩进,语句块。
输入输出
print()
input()
迭代器和生成器
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。有两个基本的方法:iter() 和 next()。
使用了 yield 的函数被称为生成器,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。?
函数
def 函数名 ( 形参 ) :
函数体
return xxx
调用函数时,用函数名(实参)即可。定义函数时,形参可赋默认值。注意实参匹配。可向形参传递列表,列表在函数内可访问。可用[:]传递列表副本,防止修改原始列表。
用 *形参 来传递任意数量的实参。用 **形参 传递任意个关键字实参。
返回值可返回字典。形参指定默认值时,等号两边不要有空格。
匿名函数 lambda [arg1 [,arg2,.....argn]]:expression f = lambda x, y: x * y
模块
将函数存储在称为模块 的独立文件中,再将模块导入 到主程序。所有import 语句都应放在文件开头。Python中每个文件就代表了一个模块(module)
import 文件模块名
用 模块名.函数名() 访问。
from 模块名 import 函数名
as 给函数指定别名,from 模块名 import 函数名 as 别名。也可以给模块指定别名。用星号*可以导入模块中所有函数。
from random import randint
类
class 类名 : 约定首字母大写的名称指的是类。没有圆括号是从空白创建这个类
def __init__(self, 形参1,形参2) : 创建新实例时自动运行。类中的函数称为方法。
函数体 self.name='xxx'
def 函数名(self): 方法
函数体
实例名=类名( 形参1,形参2) 创建实例,小写字母认为是实例名。可创建多个实例
实例名.name 访问属性。
实例名.方法名() 访问方法。
属性可以有默认值。创建实例后,可直接修改属性值,可以调用方法修改属性值。
class 类名 (父类名): 继承,圆括号里加父类名。
def __init__(self, 形参1,形参2) : 子类拥有全部父类方法属性。
super(). __init__(self, 形参1,形参2) 初始化父类属性,
子类可以有自己的属性方法。子类中可重新定义父类的方法。
可将一个新类的实例,作为类的属性。可通过多级点访问相关方法。
导入类,将类单独存于一个文件中,形成模块。用 from 文件(模块)名 import 类名 来导入。一个模块中可包括多个类,可以导入多个类或全部导入 import 模块名。一个模块也可以导入其他模块。导入后使用别名用as。
标准库random模块中, randint()随机数,choice() 随机一个元素。
类名应采用驼峰命名法 ,即将类名中的每个单词的首字母都大写,而不使用下划线。实例名和模块名都采用小写格式,并在单词之间加上下划线。类定义后面包含一个文档字符串,描述类的功能。在类中,可使用一个空行来分隔方法;而在模块中,可使用两个空行来分隔类。需要同时导入标准库中的模块和你编写的模块时,添加空行。
文件读写
with open('text_files/filename.txt') as file_object:
file_object.readlines()
with open(filename, 'w') as file_object:
file_object.write("I love programming.")
import json 用JSON存储数据。
异常
每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果未对异常进行处理,程序将停止并显示traceback,其中包含有关异常的报告。异常是使用try-except 代码块处理的。
try:
代码段
except 异常名:
print("You can't divide by zero!")
else:
print(answer)
finally: try-finally 语句无论是否发生异常都将执行最后的代码
print('这句话,无论异常是否发生都会执行。')
静默处理用pass。
assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常
作用域
当内部作用域想修改外部作用域的变量时,就要用到 global 和 nonlocal 关键字。
代码格式
缩进4个空格。可空行。UTF-8编码。命令行模式、交互模式。
测试代码测试类
略。
程序结构
import xxx 导入各种模块
函数定义def #各种子函数定义
类定义class #各种类定义,尽量把子函数都包括在类里。
def main(): #主函数
if __name__ == '__main__': #函数化编程。
main() #直接放上语句可以直接执行,最好函数化
================================================================
《MATLAB语言》
关键字 流程控制关键字一共20个。其他还有很多种类。
break
case
catch
classdef 定义类
continue
else
elseif
end
for
function
global
if
otherwise
parfor 并行计算
persistent
return
spmd 并行计算
switch
try
while
数据类型
整数, 转换函数int8, uint8, int16, uint16, int32, uint32, int64, uint64; 浮点数,转换函数 单精度single, 双精度double; 复数,虚部用i,j表示。 无穷 Inf,-Inf。非数值量NaN
逻辑类型:0为假,1为真,非0为真。
字符和字符串,字符串按照字符向量存储。
函数句柄:@函数名
结构体: struct()
数组,矩阵。单元阵列。
用户类classdef。
变量
变量名大小写敏感。局部变量,global 全局变量大写,persistent 永久变量。
特殊变量:ans pi eps inf nan i或j beep 等等。
常量
运算符
算数运算符 + - * / .*矩阵乘 ./矩阵除 ^幂 .^矩阵幂 ‘转置 .'数组转置
关系运算符 == ~= > >= < <=
逻辑运算符 & | ~
位运算符 & | ^
集合运算符函数。
“:” 来建立矢量、下标数组和指定的迭代。
字符串
用单引号括起来的' '
字符串处理函数
注释
%单行注释
选中代码段,右键注释,可多行注释。
分号;隐藏输出。
数组与矩阵
向量用中括号[ ]创建,行向量用空格或者逗号隔开,列向量用分号隔开。
引用向量元素用 向量名(x:y)。索引从1开始。
向量加减法、乘法、追加向量、模、点积、等差向量。
矩阵用[ ]创建,行用逗号或空格隔开,列用分号隔开。矩阵的元素可以是数值、变量、表达式或函数。尺寸不必预先定义
矩阵操作函数、矩阵运算函数。
分支
if 表达式
语句块
elseif 表达式
语句块
else
语句块
end
switch 表达式
case xxx
语句块
case yyy
语句块
otherwise
语句块
end
try
语句块 %首先执行此块,如正确则退出
catch
语句块 %如上句发生错误,则执行该句。
end
循环
for x=1 : 100
语句块
end
while 表达式
语句块
end
continue break
return强制 MATLAB在到达调用脚本或函数的末尾前将控制权交还给调用程序。
函数
function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)
函数体
匿名函数f = @(arglist)expression、重载函数、内联函数、等等。
命令
操作管理会话,系统命令,创建数组和绘图命令。
数据可视化
绘图函数,2维,3维,4维。
数据导入、导出
数据分析、符号计算、概率统计、数学建模、智能算法、各种工具箱、simulink。
略。
===========================================================
总体对比:
C:简单的静态编程语言,所有变量都需要预先严格定义。功能和程序结构都很简单,很难实现复杂功能,外部库很少。结合单片机编程理解更清晰。
Python:面向对象,也可以面向过程。功能很强,可以通过各种库实现复杂功能,也能实现复杂矩阵运算和绘图,列表和字符串处理是特长。
MATLAB:专门为了数学运算、矩阵运算而诞生的数学工具,内置了大量操作函数,多数复杂运算和功能都可以通过调用函数实现。编程语法和使用方式相对来说很特殊。特长是矩阵的运算处理,绘图。
2021.8.31