Skip to content

Commit

Permalink
Update lec5.md
Browse files Browse the repository at this point in the history
  • Loading branch information
yelan187 authored Dec 14, 2024
1 parent 6c6f49b commit 2396356
Showing 1 changed file with 27 additions and 15 deletions.
42 changes: 27 additions & 15 deletions docs/programming/24fall/lec5.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 程序设计与算法基础 期末复习(上)
# 第五讲:期末复习(上)

## 1 变量与计算

Expand All @@ -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
Expand All @@ -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;
Expand Down Expand Up @@ -75,10 +76,11 @@ char f0 = '\x00041';// 和上面的是一样的
运算顺序问题,简单来说:赋值运算符和位运算符较低,略高的是算术运算,再高的是自增/减
<img src="lec5.assets/priority.png" width="60%">

> 例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<x<5)` 的值恒为`1`?
表达式 `(1<=n<=10)`能正确地表示`n`属于`[1, 10]`?
表达式 `(3==x==3)` 的值恒为`0`?
Expand Down Expand Up @@ -199,14 +201,17 @@ int f[][4] = {

## 4 函数
- 类型:决定函数的**返回值**。若对函数类型未加显式说明,则函数的隐含类型为`int`
> 例4-1 C语言中,通过函数调用只能获得一个返回值?
例4-1:
C语言中,通过函数调用只能获得一个返回值?

- 函数名:用于标识函数
> 例4-2 函数可以嵌套调用但不能嵌套定义?
例4-2:
函数可以嵌套调用但不能嵌套定义?

- 参数表:用逗号分隔的参数类型和参数名,声明时参数名可以省略

> 例4-3 若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是()。
例4-3:
若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是()。
A.函数的实参和其对应的形参共占同一存储单元
B.形参只是形式上的存在, 不占用具体存储单元
C.同名的实参和形参占同一存储单元
Expand All @@ -232,7 +237,8 @@ void swap(int x,int y) { // 函数定义
}
```
>例4-4 函数调用语句`function((a,b),c)`中含有的实参个数为?
例4-4:
函数调用语句`function((a,b),c)`中含有的实参个数为?
## 5 排序
|算法|平均时间复杂度|最好情况|最坏情况|稳定性|
Expand All @@ -255,7 +261,8 @@ int *p = &a; // &是取地址运算符

声明中 `*` 只对**直接结合的标识符**生效

> 例6.1-1 变量定义:`int *p, q;`中,`p``q`都是指针?
例6.1-1:
变量定义:`int *p, q;`中,`p``q`都是指针?

**指针允许指向一个不完整类型**:

Expand All @@ -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]);`
Expand Down Expand Up @@ -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语言规定任何数组类型的左值表达式,当用于异于
Expand All @@ -321,15 +331,17 @@ 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`
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;`
Expand Down

0 comments on commit 2396356

Please sign in to comment.