- 数据类型的转换
- 自动转换
- 自动转换
-
-
-
-
- 赋值转换
- 将浮点型赋给整型时舍弃小数部分
- 整型赋给浮点型数值不变
- double类型赋给float类型截取前七位有效数字
- float赋给double数值不变
- 字符型赋给整型,字符数据放到整型的低八位储存单元中
- 赋值转换
-
-
-
对于无符号类型字符来说,高24位补零 对于有字符型,若为负数,高24位全补1
- 整型赋给字符型只将低8位保存
- 将long类型赋给int,将低位保存
- int类型赋给long
unsigned int数据存储在long类型低位,剩下补位0 signed int若首位0,剩下位补0,若为1,剩下位补1
- 强制类型转换
- 程序结构与过程控制
- 选择结构
- if-else结构
- 选择结构
- 强制转换符:()
- 运算符和表达式
- 运算符优先级:看day6.pdf 第6页
- 算术运算符
- 四则运算和求模运算
- 自增和自减
- x=a++:a=a+1,x=a
- x=a--:a=a-1,x=a
- x=++a:a=a+1,x=a+1
- x=--a: a=a--1,x=a-1
- 关系运算符
- 逻辑运算符
- &&(逻辑与)||(逻辑或)
- !(逻辑非)
- 逻辑短路
- ||:当表达式1是真时,跳过判断表达式2和表达式3,直接返回真;当表达式1是假时,才去判断表达式2的真/假当表达式2是真时,跳过判断表达式3,直接返回真;当表达式2是假时,才去判断表达式3的真/假
- &&:当表达式1是真时,才会去判断表达式2的真/假。否则,如果表达式1是假,则之后的都不会进行运算。当表达式2是真时,才会去判断表达式3的真/假。否则,如果表达式2是假,则之后的都不会进行运算。
- 条件运算符
- ?:
- 表达式?表达式1:表达式2
- ?:
- 长度运算符
- sizeof
- 逗号运算符
- ,(连接多个表达式组成一个新的表达式,并将最后一个表达式的值作为整个逗号表达式的值)
- 位运算符
- 运算符描述按位与(x&y)如果两个操作数的相应位均为1,则该位的结果值为1
- 按位或(x|y)如果两个操作数的相应位有一个为1,则该位的结果值为1
- 按位取反(~x)将操作数按位取反(0到1和1到0)按位异或(x^y)如果参加运算的两个操作数的相应位同号,则结果为0,异号则为1
- 左移(x<<2)左端(高位)移出部分舍弃,右端(低位)补0右移(x>>2)右端(低位)移出部分舍弃,左端(高位)根据符号位补0或者1,无符号或正数补0,负数补1
- 程序结构与过程控制
if(条件表达式){ 语句;} if(条件表达式){ 语句1;} else 语句2;
- switch结构
switch(表达式){ case常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; case 常量表达式3: 语句3; break; default: 语句4; break:}
- switch(表达式)值应为一个整数(包括字符数据)
- 循环结构
- while循环
- 循环结构
while(表达式){ 循环体 }
- do-while循环
do{ 循环体: }while (表达式);
- for循环
for(表达式1;表达式2;表达式3){ 循环体; }
- 循环嵌套
- 如果一个循环出现在另一个循环中,则为嵌套循环
- 其他控制语句
- break 用于switch中终止case,用于从循环体内跳出循环体,提前结束循环接着执行循环下面的语句
不能用于除此以外的语句,且多层循环,break只能向外跳一层
- continue 结束本次循环,既跳出循环体中下面未执行的语句,接着执行下一次是否执行循环的判定
在for循环中,continue影响循环的增量部分,然后执行条件测试
- return 结束当前函数,并将返回值返回给函数调用的位置
- goto 无条件转向语句
用法 goto标签
- 数组
- 一维数组
- 一维数组及相关概念
- 定义 :存储类型 数据类型 数组名【数组长度】
- 存储类型 :auto ,register,static,extern
- 数据类型:可以是任意基本数据类型或构造数据类型
- 数组名:应当符合标识符命名规则
- 数组长度:所包含的数据个数称为数组的长度
- 数组元素的引用
- 数组必须逐个引用,不能整体引用
- 元素下标由0开始
- 一维数组
- 一维数组及相关概念
- 定义 :存储类型 数据类型 数组名【数组长度】
- 存储类型 :auto ,register,static,extern
- 数据类型:可以是任意基本数据类型或构造数据类型
- 数组名:应当符合标识符命名规则
- 数组长度:所包含的数据个数称为数组的长度
- 数组元素的引用
- 数组必须逐个引用,不能整体引用
- 元素下标由0开始
- 一维数组及相关概念
数组名【下标】
- 内存分配
- 变长数组
- 一维数组的初始化
- 一般形式:类型 数组名[常量表达式]={值,值}
- 部分元素的初始化:如果部分赋值,剩余部分赋0
- 全元素初始化:例int a[5]={1,2,3,4,5}=a[]={1,2,3,4,5}
- 定义后划分一块连续的区域用于储存数组
int lenth=5; int array[lenth];
- 变长数组不能改变大小,变仅仅指在创建数组时,可以使用变量指定数组长度使用实例
-
- 二维数组
- 多维数组
- 存储类型 数据类型 数组名[常量表达式1][常量表达式2]...[常量表达式n];
- 二维数组定义:数据类型 数组名[常量表达式1][常量表达式2];
- a[i][j]:i为行名,j为列名
- 二维数组的引用及初始化
- 数组名[行下标][行下标]
- 分行初始化:每行元素使用花括号隔开,中间用逗号分割,未赋值的元素赋零
- 线性初始化:所有元素写在同一个花括号下,按存储顺序赋值
- 全部元素初始化
- 二维数组实例
- 多维数组
- 二维数组
- 数组
- 一维数组
- 一维数组及相关概念
- 定义 :存储类型 数据类型 数组名【数组长度】
- 存储类型 :auto ,register,static,extern
- 数据类型:可以是任意基本数据类型或构造数据类型
- 数组名:应当符合标识符命名规则
- 数组长度:所包含的数据个数称为数组的长度
- 数组元素的引用
- 数组必须逐个引用,不能整体引用
- 元素下标由0开始
- 一维数组及相关概念
- 一维数组
数组名【下标】
- 内存分配
- 变长数组
- 一维数组的初始化
- 一般形式:类型 数组名[常量表达式]={值,值}
- 部分元素的初始化:如果部分赋值,剩余部分赋0
- 全元素初始化:例int a[5]={1,2,3,4,5}=a[]={1,2,3,4,5}
- 定义后划分一块连续的区域用于储存数组
int lenth=5; int array[lenth];
-
-
-
- 变长数组不能改变大小,变仅仅指在创建数组时,可以使用变量指定数组长度
- 使用实例
-
-
-
- 二维数组
- 多维数组
- 存储类型 数据类型 数组名[常量表达式1][常量表达式2]...[常量表达式n];
- 二维数组定义:数据类型 数组名[常量表达式1][常量表达式2];
- a[i][j]:i为行名,j为列名
- 二维数组的引用及初始化
- 数组名[行下标][行下标]
- 分行初始化:每行元素使用花括号隔开,中间用逗号分割,未赋值的元素赋零
- 线性初始化:所有元素写在同一个花括号下,按存储顺序赋值
- 全部元素初始化
- 二维数组实例
- 多维数组
- 二维数组
-
- 字符串与字符数组
- 字符串:字符串常量是由一对双引号扣起来的,以' ’为结束标志的一组字符序列
- 定义:c语言中没有专门的字符串常量;通常用一个字符数组来存储一个字符串。结束符 也要存储入数组,并以此判断字符串是否结束
- 字符串初始化就如数字数组一样
- 字符串的输入和输出:直接使用%s即可
- 注意下标越界
- 注意输入时scanf()不需要&,数组名代表了数组地址
- 用scanf输入地字符串里面可能有空格、制表符等空白字符,空白字符后面地字符不能被存入到数组中。这种情况可以通过下面方式处理
- 字符串与字符数组
-
-
- 字符串处理函数
- 字符串拷贝:strcpy和strncpy strcpy(s1,s2);
- 字符串处理函数
-
函数说明:strcoy把src所指向的字符串复制到dest strncpy把src所指向的字符串复制到dest,最多复制n个字符
-
-
-
- 字符串拼接:strcat和strncat,用法同上
- 字符串比较strcmp、strncmp、strcasecmp 、strncasecmp
-
-
[1] strcmp把s1 所指向的字符串和 s2 所指向的字符串进行比较。 [2] strncmp把s1 所指向的字符串和 s2 所指向的字符串进行比较,最多比较前 n 个字符 [3] strcasecmp把s1 所指向的字符串和 s2 所指向的字符串进行比较(忽略大小写)。 [4] strncasecmp把s1 所指向的字符串和 s2 所指向的字符串进行比较(忽略大小写),最多比较前 n 个字节
-
-
-
- 字符串长度:strlen
- 与sizeof的区别:sizeof是整个数组总长度,其中包括' '而strlen不包括
- 字符串长度:strlen
-
- typedef(定义别名)
- typedef <已有数据类> <新数据类型>;
- 结构体重命名:
-
typedef struct info { uint16_t max_numb; uint16_t numb; char *title; }Menu ; Menu menu1; // == struct info menu1;定义一个struct info 的变量 Menu *pm; // == struct info *pm; 定义一个指向struct info 类型的指针
-
-
- 数组
-
typedef int NUM[100]; NUM array; // int array[100];
-
-
- 指针
-
typedef char *STRING; //STRING 为字符串指针类型; STRING p, s[10]; // char *p指针变量, char *s[10] 指针数组。
-
-
- 函数
-
typedef int (* POINTER)() //POINTER 为指向函数的指针 类型。 POINTER p1, p2; (p1、p2为POINTER 类型的指针变量)。
-
-
- 优缺点
- 优点:定义别名可增加代码的可移植性.
- typedef int INT16; 在cpu位数变化后可重新定义typedef short INT16;
- time()函数的返回值为time_t (unsigned long / unsigned int)类型。
- 表达式简洁。
- typdef 定义时占用了存储类型的位置,编译会报错.所以typedef不能和auto、extern、static、register一同使用。
- 优缺点
-



