diff --git a/docs/programming/24fall/lec5.md b/docs/programming/24fall/lec5.md index ea9fd17..caa4ba3 100644 --- a/docs/programming/24fall/lec5.md +++ b/docs/programming/24fall/lec5.md @@ -1,4 +1,4 @@ -# 程序设计与算法基础 期末复习(上) +# 第五讲:期末复习(上) ## 1 变量与计算 @@ -15,7 +15,8 @@ int x; ![Alt text](lec5.assets/keyword.png) -> 例1.1-1 Which one below is NOT a valid identifier in the C programming language? +例1.1-1: +Which one below is NOT a valid identifier in the C programming language? A. printf B. _m$ C. 114514 @@ -31,7 +32,7 @@ unsigned short sht = 0; sht--; ``` -> 例1.2-1 0.1 + 0.2 == 0.3 ? +例1.2-1: 0.1 + 0.2 == 0.3 ? ```C int n=1; @@ -75,10 +76,11 @@ char f0 = '\x00041';// 和上面的是一样的 运算顺序问题,简单来说:赋值运算符和位运算符较低,略高的是算术运算,再高的是自增/减 -> 例1.3-1 若定义 `int a=1,b=2,c=3,d=4` 那么表达式 `(a>b?c>a?c-3:c-1:b==c?d-a:d-c)` 的值为 +例1.3-1: +若定义 `int a=1,b=2,c=3,d=4` 那么表达式 `(a>b?c>a?c-3:c-1:b==c?d-a:d-c)` 的值为 #### 表达式的结果 -> 例1.3-2 +例1.3-2: 表达式 `(3 例4-1 C语言中,通过函数调用只能获得一个返回值? +例4-1: +C语言中,通过函数调用只能获得一个返回值? - 函数名:用于标识函数 -> 例4-2 函数可以嵌套调用但不能嵌套定义? +例4-2: +函数可以嵌套调用但不能嵌套定义? - 参数表:用逗号分隔的参数类型和参数名,声明时参数名可以省略 -> 例4-3 若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是()。 +例4-3: +若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是()。 A.函数的实参和其对应的形参共占同一存储单元 B.形参只是形式上的存在, 不占用具体存储单元 C.同名的实参和形参占同一存储单元 @@ -232,7 +237,8 @@ void swap(int x,int y) { // 函数定义 } ``` ->例4-4 函数调用语句`function((a,b),c)`中含有的实参个数为? +例4-4: +函数调用语句`function((a,b),c)`中含有的实参个数为? ## 5 排序 |算法|平均时间复杂度|最好情况|最坏情况|稳定性| @@ -255,7 +261,8 @@ int *p = &a; // &是取地址运算符 声明中 `*` 只对**直接结合的标识符**生效 -> 例6.1-1 变量定义:`int *p, q;`中,`p`和`q`都是指针? +例6.1-1: +变量定义:`int *p, q;`中,`p`和`q`都是指针? **指针允许指向一个不完整类型**: @@ -265,7 +272,8 @@ int (*b)[3];// b是一个指针,指向一个数组,数组元素是int,数组长 int *c[]; // ? int (*d)[]; // d是一个指针,指向一个长度未知的数组,数组元素是int ``` -> 例6.1-2 Among the following statements, __ is equivalent to the declaration: `int *p[4];` +例6.1-2: +Among the following statements, __ is equivalent to the declaration: `int *p[4];` A.`int p[4];` B.`int **p;` C.`int *(p[4]);` @@ -305,9 +313,11 @@ printf("%d#%d", a, b); - 数组在很多情况下会进行到指针的**隐式转换** - `p[n]`和`*(p+n)`是**完全等价**的(你甚至可以写`1[a]`来访问数组的第一个元素) -> 例6.2-1 Given the declaration: `int a[3][3]={1,2,3,4,5,6,7,8,9};`, the value of `a[-1][5]` is ? +例6.2-1: +Given the declaration: `int a[3][3]={1,2,3,4,5,6,7,8,9};`, the value of `a[-1][5]` is ? -> 例6.2-2 Given the declaration: `int a[3][2]={1,2,3,4,5,6};` what is the value of expression `(a[1]+1)[0]`? +例6.2-2: +Given the declaration: `int a[3][2]={1,2,3,4,5,6};` what is the value of expression `(a[1]+1)[0]`? 隐式转换:C语言规定任何数组类型的左值表达式,当用于异于 @@ -321,7 +331,8 @@ printf("%d#%d", a, b); 1. 作为函数的参数时,数组名被转换成指向其首元素的指针 2. 更改数组元素时 -> 例6.2-3 According to the declaration: `int p[5], *a[5];` the expression ______ is correct. +例6.2-3: +According to the declaration: `int p[5], *a[5];` the expression ______ is correct. A.`p=a` B.`p[0]=a` C.`*(a+1)=p` @@ -329,7 +340,8 @@ D.`a[0]=2` 二维数组不能隐式转换为二级指针 -> 例6.2-4 For the function declaration `void f(char** p)`,the definition __ of var makes the function call `f(var)` incorrect。 +例6.2-4: +For the function declaration `void f(char** p)`,the definition __ of var makes the function call `f(var)` incorrect。 A.`char var[10][10];` B.`char *var[10];` C.`void *var = NULL;`