843 / 学习讲义

预备基础 / 00

预备篇:读懂符号与程序

一次解决一个小问题。从具体例子开始,理解条件,再亲手算一遍。

00 / 预备篇:读懂符号与程序 · 小节 1

把符号读成一句话

读完这一节,你会

读懂集合、条件、下标和求和,不把符号当成暗号。

预备基础 · 技术讲解 · 本节来源与考点

前置知识:从这里开始即可 · 符号回看

从一个问题开始

“所有借阅者中,至少一人逾期”怎样写得不含糊?

把这件事讲清楚

集合是按规则确定的一组对象。xAx\in A读作“x属于A”;ABA\subseteq B表示A中每个元素也在B中。ABA\cap B是同时属于两者,ABA\cup B是至少属于一个。\varnothing是空集。命题是能判断真假的陈述。“且”要两项都真,“或”允许同时真。PQP\Rightarrow Q表示P成立时Q必成立,不保证反向。\forall读“任意”,\exists读“存在”。

下标xix_i是第i个数,不是乘法。i=1nxi\sum_{i=1}^{n}x_i表示从第1个加到第n个。函数f(x)f(x)给输入x对应输出;同一输入不能随意对应不同输出。

为什么成立 · 关键推导

先说清对象范围,再写条件,最后检查反例。否定“每个人都完成”应是“存在一个人没完成”,不是“所有人都没完成”。否定“存在”时则变成“所有都不”。

入门例题 / 1

A={1,2,3},B={3,4}。逐个检查成员,交集只有3,并集去重复为{1,2,3,4}。这样算是因为集合不计顺序、不计重复。

典型应用与变式 / 2

设三天借书量x1=2,x2=0,x3=5x_1=2,x_2=0,x_3=5,总量i=13xi=2+0+5=7\sum_{i=1}^{3}x_i=2+0+5=7。若“逾期就提醒”为真,不能推出“提醒就一定逾期”,也可能是到期前提醒。

停一下,自己试一试

先独立作答;卡住时看提示,完成后再对照解析。

概念判断

空集和{0}相同吗?

需要一点提示

比较元素个数。

查看过程、答案与错因

不相同。空集没有元素,{0}有一个元素0。常见错误是把“什么都没有”和“数值为零”混淆。

计算与执行过程

A={1,2,4},B={2,3,4},求交、并。

需要一点提示

先圈共同元素,再合并去重。

查看过程、答案与错因

交集{2,4},并集{1,2,3,4}。重复的2与4各写一次。

条件与错误辨析

否定“每个方案都便宜且安全”。

需要一点提示

否定全称和“且”。

查看过程、答案与错因

存在一个方案不便宜或不安全;只要其中一个要求失败即可,不能要求两者同时失败。

带走这一句

先翻译成普通话,再用小例子检查符号。

00 / 预备篇:读懂符号与程序 · 小节 2

先数清可能性:排列与组合

读完这一节,你会

分清分步选择与分类选择、顺序有关与无关。

预备基础 · 技术讲解 · 本节来源与考点

前置知识:把符号读成一句话 · 符号回看

从一个问题开始

从5名同学中选2人值班,选组长与组员和只选两个人有什么差别?

把这件事讲清楚

互斥的几类选择相加;一个任务分成连续步骤,各步可选数量相乘。阶乘n!n!是从1乘到n,并约定0!=10!=1。从n个不同对象选k个并排顺序,排列数Ank=n!(nk)!A_n^k=\frac{n!}{(n-k)!};只选集合不排顺序,组合数Cnk=n!k!(nk)!C_n^k=\frac{n!}{k!(n-k)!}。使用公式前要问:能否重复?是否区分顺序?对象是否不同?

为什么成立 · 关键推导

先排k个位置,选择数依次是n、n−1……。若不看顺序,同一k人组被排了k!k!次,所以除以k!k!。允许重复的k位密码每位n选,数量是nkn^k,不能套不重复排列。

入门例题 / 1

5人选组长和组员:第一职务5选,第二4选,共20。只选2人则每组被正反计两次,20/2=10。

典型应用与变式 / 2

从3本设计书和2本技术书中各选1本:3×2=6。只选1本书是3+2=5。两题差别在“各选一本”和“合计一本”。

停一下,自己试一试

先独立作答;卡住时看提示,完成后再对照解析。

概念判断

四位0—9密码可以重复且首位可为0,共多少?

需要一点提示

每一位都独立有10种选择。

查看过程、答案与错因

10⁴=10000。密码不是四位整数;不能擅自排除首位0。

计算与执行过程

6人任选3人,再从其中选队长。

需要一点提示

先组合,再选职务。

查看过程、答案与错因

C₆³×3=20×3=60;也可先6选队长,再从5人选2人,6×10=60。

条件与错误辨析

抽取两张卡不放回,是否总能把两次概率直接相乘?

需要一点提示

第二次剩下的卡改变了。

查看过程、答案与错因

可以乘条件概率,不能默认两次同概率且独立。计数的乘法原理不等于概率独立性。

带走这一句

先画选择步骤,最后才套排列组合公式。

00 / 预备篇:读懂符号与程序 · 小节 3

让计算机按顺序做事

读完这一节,你会

手动跟踪短程序,知道变量在每一步如何变化。

预备基础 · 技术讲解 · 本节来源与考点

前置知识:先数清可能性:排列与组合 · 符号回看

从一个问题开始

统计三个借阅数2、0、5,程序怎样得到7而不是只记住最后的5?

把循环展开成状态表

把循环展开成状态表。步骤文字在图下。2位置 00位置 15位置 2i=0 → sum=2
1 / 3

读第0项2,累加器由0变2;循环边界是i<n。

原创教学示意 · 手动播放,可随时暂停;折叠或离开小节时停止。

把这件事讲清楚

变量是存值的有名位置。C中int表示整数,double表示浮点数。=把右侧结果放进左侧变量,==才是比较相等。if按条件选择,for重复步骤。数组a[0]是第一个元素,长度n的合法下标是0到n−1。函数把一段计算封装成有名称的操作,参数是输入,return给出结果。以下均为教学伪代码,使用←表示赋值,不要求安装环境。

为什么成立 · 关键推导

执行顺序:初始化sum←0;i←0;若i<n则把a[i]加到sum;i←i+1;重新判断。循环不变式是“进入第i轮前,sum等于前i个数的和”。初始化满足,逐轮保持,i=n时得到总和。

入门例题 / 1

a=[2,0,5]:i=0时sum由0到2;i=1仍2;i=2到7;i=3退出。选择累加而不是覆盖,是因为要保留前面结果。

典型应用与变式 / 2

求平均数:函数mean(a,n)先检查n>0,再求和并除以n。C写(double)sum/n以得到小数。例如sum=7,n=3,整数除法得2,转换后约2.333。

停一下,自己试一试

先独立作答;卡住时看提示,完成后再对照解析。

概念判断

在C中if(x=0)和if(x==0)一样吗?

需要一点提示

一个修改值,一个询问。

查看过程、答案与错因

不一样。x=0会把x设为0,表达式值为0,条件判假;x==0比较而不修改。

计算与执行过程

跟踪s←0;对i=1到4执行:若i为偶数则s←s+i。

需要一点提示

列出真正执行加法的轮次。

查看过程、答案与错因

只有i=2、4相加,最终s=6。奇数轮仍执行条件检查,但不加。

条件与错误辨析

数组长3时循环i<=3有何问题?

需要一点提示

最后一次访问哪个下标?

查看过程、答案与错因

会访问a[3],越界;应i<3。空数组时不能读a[0],求平均也不能除以0。

对照完整 C / SQL 示例与语法说明 →

带走这一句

把程序当成逐行更新的表,别靠“看起来像”猜结果。

00 / 预备篇:读懂符号与程序 · 小节 4

数组、指针与结构体怎样配合

读完这一节,你会

区分位置和值,看懂链表节点所需的最小C语法。

预备基础 · 技术讲解 · 本节来源与考点

前置知识:让计算机按顺序做事 · 符号回看

从一个问题开始

图书记录既要存编号又要找到下一本,为什么一个整数不够?

插入节点:先接后继,再接前驱

插入节点:先接后继,再接前驱。步骤文字在图下。ABCS
1 / 3

原链表A→B→C,新节点S尚未接入。

原创教学示意 · 手动播放,可随时暂停;折叠或离开小节时停止。

把这件事讲清楚

数组把同类型元素连续存放。地址是位置的标识;指针保存地址。C中&x取得x的地址,*p在p指向合法对象时读写该对象。NULL表示不指向有效对象,不能解引用。结构体把不同字段组合为记录:struct Node { int value; struct Node *next; }; next保存下一节点的地址。p->value读取指针p所指结构体的value字段。

指针不是它所指的值;复制指针会让两个指针访问同一对象。动态分配要检查失败,释放后不能继续使用该块内存。这里先通过箭头理解,链表章再动手操作。

为什么成立 · 关键推导

画两个层次:变量框中写地址,箭头指向对象框;改变p会换指向,改变*p会改对象值。数组访问a[i]须满足0≤i<n;先确认对象存在,再沿箭头访问。

入门例题 / 1

x=3,p=&x,随后*p=8。因为p仍指向x,最后x=8。若只把p设为NULL,则x仍8,改变的是指针本身。

典型应用与变式 / 2

节点A=(4,指向B),B=(7,NULL)。从A访问next得到B,再读value得7;B的next为NULL说明到尾端,不应再读NULL->value。

停一下,自己试一试

先独立作答;卡住时看提示,完成后再对照解析。

概念判断

q=p后,修改*q是否可能改变*p?

需要一点提示

画两根箭头。

查看过程、答案与错因

如果它们仍指向同一个合法对象,会改变同一份值。复制地址没有复制对象。

计算与执行过程

a=[10,20,30],i=1,a[i]=a[i-1]+5后数组是什么?

需要一点提示

C数组从0编号。

查看过程、答案与错因

[10,15,30]。只更新第二项,第一、三项不变。

条件与错误辨析

释放节点后继续沿它的next访问安全吗?

需要一点提示

释放后对象还属于程序吗?

查看过程、答案与错因

不安全,属于释放后使用。应先保存需要的next,再释放当前节点;保存的next也必须指向仍存活的节点。

对照完整 C / SQL 示例与语法说明 →

带走这一句

先看地址指向谁,再看读写的是地址还是对象。

章末 / 把知识接起来

综合训练

原创综合训练

5人选2人作无职务区别的小组;跟踪数组[2,3,4]的累加;指出循环i<=3的问题。

需要一点提示

分别确认顺序、累加不变式和合法下标。

查看过程、答案与错因

组合C₅²=10;s从0变2、5、9;长度3只能访问0、1、2,i=3越界。计数组合不考虑成员先后,程序循环却必须按明确执行顺序。

一点一点,积累下来。

今日学习

00:00:00

累计学习

00:00:00

学习天数

0 天

点击“开始计时”后累计时间。同一科目内切换章节或刷新会接续;切换科目不会自动启动另一科。仅当前获得焦点的可见页面累计,离开、关闭或休眠期间不补计。两科的时间与成就分别保存。

记录保存在当前浏览器,关闭后仍保留;清除网站数据会删除记录。每天累计满 1 分钟记为一个学习日,不要求连续打卡。

学习成就

已达成 0 / 10

成就记录投入与阅读进展,不代表掌握程度。阅读类成就随已读标记更新,撤销标记后会重新计算。