这周是第二周,本周学习了第六章、第七章以及第八章的前半部分。
第六章:常量、宏、枚举及函数
常量的定义:
1.宏定义:#define 常量名 值 例如:#define PI 3.14
PS:常量名大写,没有赋值符号(=),没有分号结尾
2.const定义:const 数据类型 常量名 =值;例如:const int count = 5;
枚举:
1. 枚举的声明定义:enum 枚举名{元素};例如:enum today{mom,thus,…};
2. 枚举的使用: enum day= mom;
3. 枚举默认从0开始,也可以给它定义初始值,后面的元素在前面元素的值加1.
函数:
1. 什么叫函数:可以实现特定功能的代码块。
2. 函数声明:返回值类型 函数名(形式参数);例如:int fun(int x, int y);
3. 函数实现:返回值类型 函数名(形式参数){函数体}
a) 例如:int fun (intx, int y){函数体} (ps:有返回值类型的函数,需要返回值,且类型相同)
4. 参数
a) 形式参数(形参):函数声明实现中带的参数。
b) 实际参数(实数):函数调用时使用。
5. 变量
a) 局部变量:
i. 作用域:从声明开始,到该函数结束被释放。(在条件分支或者循环内:从声明开始,到分支或循环结束被释放)。
ii. 存储类型:
1. auto(自动型):默认形式,从声明到函数结束被释放。
2. static(静态型):第一次被声明,之后被保持,直到程序结束被释放。
3. register(寄存器型):类似于auto,有些编译器不支持。
iii.
b) 全局变量:
i. 作用域:从声明开始,变量后面到函数都可以使用,程序结束被释放。
ii. 存储类型:
1. 无修饰符:作用在本类,且可以被扩展到其他类中使用。
2. static(静态型):全局静态变量,不可以被扩展。
3. extern(扩展型):从其它类中扩展变量到本类中使用。
6. 函数递归
a) 递归:就是自己调用自己本身叫递归。
b) 直接递归:自己调用自己本身。
c) 间接递归:自己调用别人,别人调用自己本身。
d) 迭代(循环)与递归
i. 递归代码精简,但消耗系统资源大。
ii. 可以递归,也可以迭代的,使用迭代。
宏定义函数:
1.定义:#define 宏定义函数名 函数名或表达式
例如:#define PRINTF(x)(x)*(x)
PS:宏定义函数,要注意,后面的表达式的每个变量需要用括号括起来
第七章:数组、字符串
一维数组:
1.一维数组
a) 声明赋值:数据类型 数组名[数组大小]; 例如:int arr[] = {1,2,3,4,5,6};
b) 数组名就是数组首元素的地址
c) 数组的访问:数组名[下标];例如:arr[0] = 1;//数组第一个元素。数组的下标是从0 开始,到元素个数减1结束。
2. 数组作为函数参数:
a) 作为形式参数时,数组的大小可以省略。例如:void fun(int a[]);
b) 作为实际参数时,只需要传入数组名既可。例如:fun (arr);
c) 数组作为参数,在函数内部改变数组的值时,函数外作为实际参数的数组的值也会跟着改变。
字符串:
1.字符串
d) 字符串也叫字符数组,是由n个字符组成的。
e) 声明定义:char str[大小] = “abcd”; 或 char str[] ={‘a’,’b’,’c’,’\0’}
f) 字符串的访问类似数组。格式化符号:%c、%s。
g) 字符串结束标志符号:’\0’。
h) 字符串的输入
函数 | 作用 |
Getchar() | 输入单个字符 |
Putchar() | 输出单个字符 |
Scanf() | 输入字符(%s) |
Printf() | 输出字符 (%s,%c) |
Gets() | 输入字符串 |
Puts() | 输出字符串 |
i) 字符串函数
函数 | 作用 |
Strcpy(str1,str2) | 函数复制,将str2复制到str1中,且str1的大小要大于等于str2 |
Strcat(str1,str2) | 将str2写入到str1的尾部 |
Strlen(str) | 计算字符串的长度 |
Strcmp(str1,str2) | 字符串的比较,从字符串的第一个字符开始比较,比较字符的ASCII码值,str1大于str2,返回大于0,相等返回0,小,返回小于0 |
j)
二维数组
1. 声明赋值:
a) int arr[2][3] ={“1,2,3”,”4,5,6”};
b) int arr[2][3] = {1,2,3,4,5,6};
2. 访问:arr[0][0]; //前面表示行,后面表示列,访问也是通过下标访问。
3. 二维数组就是一维数组的数组。
4. 二维数组作为参数时,行可以省略,但列不能省略
a) 例如:void fun(intarr[][3]);
第七章易错点:
1. 声明数组时,忘记在数组名称后面加中括号
2. 使用数组时,访问的下标超出数组的大小,并不存在数组
3. 忘记给数组初始化,就使用数组。
4. 字符串忘记考虑结束符 ’\0’ 。
5. 用系统函数,没有添加函数所在的库的头文件:string.h、stype.h、stdilb.h。