☰
VBA编程入门知识地图:变量、表达式、循环、数组与文件读写
2026/10/29 3:17:55 网站建设 项目流程

简介:《Visual Basic编程基础教程》是一份面向零基础学习者的VBA入门材料,适合希望掌握宏与办公自动化、并系统理解Visual Basic语言基础的人群。全书从编程语言与翻译器、集成开发环境讲起,逐步覆盖图形界面搭建、变量声明与数值类型、数值表达式与类型转换、键盘输入和屏幕输出、条件分支、字符串操作、循环结构、数组与矩阵以及文件读写,并配合实例和章末练习,帮助读者建立从基本语法到小型应用的完整认知。压缩包内仅含1个PDF文件,大小约2.17MB,以教程正文为主体,章节编排清晰,便于按知识点检索和跟读。目前已有112人学习,说明这份轻量资料在入门阶段具有一定参考价值。读者可对照目录循序练习,重点体会控件与代码的配合、重复任务处理和文本数据处理,并借助练习检验理解,为后续编写简单VBA程序或深入学习打下基础。

1. 从一次运行说起:这张知识地图长什么样

VBA 最容易让人误判的一点,是它看起来太像“拖几个按钮就能跑”的玩具语言,于是很多人跳过类型和表达式直接抄代码,等到报错 13「类型不匹配」、报错 9「下标越界」找上门,才回头补底子。把 Visual Basic 编程入门的这张知识地图展开看,其实是两条主线的交叉:一条是语言本身的骨架——变量数值处理、字符串与表达式求值、条件与循环语句、过程与参数传递;另一条是宿主环境提供的运行平台——集成开发环境、控件与事件、文件句柄。前者决定你写得对不对,后者决定你写的东西能不能真正跑起来。

这份地图适合两类人:一类是正在系统学第一门编程语言、想把语法地基一次打牢的;另一类是已经能照着抄出能跑的宏,但被问一句“这里为什么要 ByVal”就卡住的。地图一旦成型,复习就不用从头翻书,只需要按模块回到对应位置查漏。

2. 语言底座与环境:翻译器、IDE 与控件三件套

2.1 编译器与解释器:同一行代码的两种命运

高级语言与机器之间隔着一层翻译。编译器的工作方式是一次性把整段源码翻成目标程序,翻译阶段就能揪出绝大部分问题,运行时只剩纯执行;解释器则是读一行、翻一行、执行一行,错误往往要等那行被真正跑到才暴露。VBA 的位置在两者之间:代码敲进代码窗口时,语法层面的错误会立刻被标红,但语义层面的错误——除以零、下标越界、类型不匹配——只有执行到那一行才炸。

这个差别直接决定调试顺序。先消灭语法错误,因为语法错误会阻断整段编译;再沿着执行路径布点,用输出语句确认“到底跑到哪一步才断的”。

Option Explicit Sub FirstRun() Dim total As Long Dim n As Long total = 100 n = 0 Debug.Print "开始计算" Debug.Print total \ n ' 运行期错误 11:除数为零 Debug.Print "这行不会执行" End Sub

Option Explicit强制所有变量必须先声明,拼错变量名时立刻报“变量未定义”,而不是悄悄新建一个空变量——这是最便宜的一道保险。Debug.Print把内容输出到立即窗口,不弹窗、不打断执行,是定位问题最轻量的手段。\是整数除法,除数为零时抛出运行期错误 11。

注意上面这段的执行结果:开始计算已经打印出来了,说明程序确实进到了这个过程里,是在第二行输出处断的。看懂“已经打到哪一行”,比看懂错误号本身更有用,因为错误号只告诉你出了什么错,输出记录才告诉你错在哪一段路径上。

提示:把Debug.Print当成临时的监控工具,问题定位完就删掉或注释掉。留一堆输出语句在正式过程里,下次打开立即窗口会分不清哪些是这次跑的。

2.2 IDE 的窗口分工:每块面板负责什么

集成开发环境之所以叫“集成”,是因为它把编辑、编译、调试、运行四件事塞进同一个界面。常见几块面板的分工要心里有数:工程资源管理器管模块和窗体的组织结构;属性窗口在设计期改控件属性,运行期不生效;代码窗口是通用声明段加各个事件过程;立即窗口用来即时求值和输出;本地窗口在断点停下时展示当前过程里所有变量的值;监视窗口盯住某个表达式,适合在循环里看变量怎么变;对象浏览器则用来查宿主对象模型里到底有哪些成员、参数是什么。

初学者最常忽略的是代码窗口顶部那两个下拉框。左边选对象,右边选事件,选中后会自动生成对应的事件过程骨架。手写过程名虽然也行,但拼错一个字母就不会被触发,而且不会报错——这是非常隐蔽的坑:界面点了没反应,代码看着却没问题。

命名上建议给自己定一套前缀规矩,控件按类型加前缀(文本框、标签、选项按钮、复选框各用固定前缀),变量按类型加前缀。这套规矩不是为了好看,是为了在代码里txt开头的名字一眼能认出是控件,而不至于把控件名和变量名搞混。

2.3 控件与事件:界面不是装饰

图形界面在 VBA 里承担两件事:收集输入、展示输出。控件本身只是容器,真正干活的是事件过程。不同控件的关键属性并不相同,混用就会翻车。

控件关键属性取值典型误用
标签Caption字符串想用它接收输入,其实它不可编辑
文本框Text字符串拿 Text 直接做算术,忘了先转换
选项按钮ValueTrue / False以为不同容器的也会互斥
复选框ValueTrue / False和选项按钮一样指望“只能选一个”
命令按钮Caption、Default字符串、布尔把逻辑全写在 Click 里,无法复用

选项按钮的互斥范围是“同一个容器”,而不是“整个窗体”。想分组,必须先把它们放进不同的框架控件里,否则同一窗体上的所有选项按钮会互相排斥,选中一个另一个自动弹起,调试半天找不到原因。

Private Sub UserForm_Initialize() txtName.Text = vbNullString ' 清空输入框 optA.Value = True ' 默认选中组内第一个选项 chkSave.Value = False ' 复选框与其他复选框互不影响 cmdOK.Enabled = False ' 先禁用,等输入合法再放开 End Sub Private Sub txtName_Change() cmdOK.Enabled = (Len(Trim(txtName.Text)) > 0) End Sub

Initialize在窗体加载时执行一次,适合做初始状态设置:清空输入、设默认选中项、把提交按钮先禁掉。Change事件在文本框内容每变化一次就触发一次,包括每敲一个字符,所以里面只适合做轻量判断,不要塞耗时操作。Enabled = False让按钮变灰不可点,Visible = False则是整个藏起来——两者的区别在于用户还看不看得见这个控件,别用错。

这里cmdOK.Enabled = (Len(Trim(txtName.Text)) > 0)一句同时用了Len和Trim:先去掉首尾空格,再算长度,全空格的输入也会被判为无效。少了Trim,用户敲三个空格就能点亮按钮,校验等于白做。

3. 变量、数值与表达式:类型、转换与优先级

3.1 数值类型与声明:先选类型,再谈计算

变量声明包含三件事:名字、类型、作用范围。类型选小了会溢出,选大了浪费内存(在今天多数场景下内存不是问题,但溢出的坑依然真实存在),选错了会静默丢精度。

类型占用范围 / 精度常见用途
Byte1 字节0 到 255计数、颜色分量
Boolean2 字节True(-1) / False(0)标志位
Integer2 字节-32768 到 32767小范围整数
Long4 字节约 ±21 亿行号、循环计数
Single4 字节约 7 位有效数字精度要求不高的实数
Double8 字节约 15 位有效数字一般数值计算
Currency8 字节定点,小数点后 4 位金额
Date8 字节日期与时间时间戳
String变长字符串文本处理
Variant至少 16 字节任意不确定类型时兜底

两条经验:循环计数一律用Long,因为Integer在数据量上千时很容易溢出,而且溢出报错的位置往往离真正的原因很远;金额一律用Currency或先放大成整数再算,Single、Double都是二进制浮点,0.1 这类十进制小数压根表示不精确,累加多了就会出现“明明该是 0.3,结果是 0.30000000000000004”的玄学。

Option Explicit Dim gCounter As Long ' 模块级:作用范围是整个模块 Sub CountDemo() Dim i As Long ' 过程级:只在当前过程内可见 Dim amount As Currency Static hits As Long ' 静态:过程结束后值仍然保留 For i = 1 To 100000 gCounter = gCounter + 1 Next i amount = 19.99 hits = hits + 1 Debug.Print gCounter, amount, hits End Sub

Dim在过程内部声明的是局部变量,过程一结束就释放;在模块顶部的通用声明段声明的是模块级变量,整个模块都能访问;Static声明的局部变量则在两次调用之间保留值,适合做“这个函数被调了多少次”这类计数。三者作用范围完全不同,写错地方的表现是“值莫名其妙被清零”或“值莫名其妙被带到了下一次调用”。

3.2 表达式求值:优先级、结合性与隐式转换

同一个算式,加不加括号结果能差一倍。VBA 的运算优先级大致是:乘方最高,然后是取负、乘除、整数除、取模、加减,接着是字符串连接,再是比较运算,最后是逻辑运算(Not、And、Or、Xor 依次降低)。同一优先级从左到右结合,只有乘方是右结合。

Debug.Print 2 + 3 * 4 ^ 2 ' 50,先算 4^2,再乘 3,最后加 2 Debug.Print (2 + 3) * 4 ^ 2 ' 80,括号改变了整体结构 Debug.Print 10 \ 3 ' 3,整数除法,舍去小数 Debug.Print 10 Mod 3 ' 1,取余数 Debug.Print 10 \ 3 & "余" & 10 Mod 3 ' "3余1",连接发生在算术之后 Debug.Print "1" + 1 ' 2,加号在这里当算术加 Debug.Print "1" & 1 ' "11",连接符永远拼字符串

最后两行是最典型的踩坑点:+遇到全数字的字符串会试图做加法,做不了就报类型不匹配;&则不管两边是什么,一律转成字符串拼接。所以拼接文本时不要用+,一律用&,能省掉大量“有时候对、有时候报错”的麻烦。

取模还有个细节:被除数为负时,结果的符号跟着被除数走,-10 Mod 3得到-1而不是2。用取模做循环索引(比如每三项换一行)时,如果下标可能为负,先把它偏移到正数区间再取模。

3.3 类型转换与内置函数:看不见的舍入

类型转换函数是把一个值从一种类型搬到另一种类型的工具:转整数、转长整、转双精度、转字符串、转布尔、转日期、转货币。真正需要记住的不是函数名,而是它们各自的舍入规则。

Debug.Print Int(-7.5) ' -8,向下取整(往负无穷方向) Debug.Print Fix(-7.5) ' -7,向零取整(直接砍掉小数) Debug.Print CInt(2.5) ' 2,银行家舍入:恰好 .5 时取偶 Debug.Print CInt(3.5) ' 4 Debug.Print Round(2.5) ' 2,同样走银行家舍入 Debug.Print Val("12abc") ' 12,从左边开始解析,遇到非数字停止 Debug.Print Val("abc") ' 0,解析不出来就是 0

Int和Fix在正数区间结果一样,一进负数就分道扬镳:一个往更小的方向走,一个往零的方向走。做分页、分块、取整下标时这两个千万别随手挑一个用,差一位就是下标越界。CInt和Round都采用银行家舍入,遇到恰好 .5 时向偶数靠拢,所以 2.5 变成 2、3.5 变成 4——如果你按“四舍五入”的心智模型去对账,这里必然对不上,金额类计算要么用定点类型,要么自己写明确的舍入规则。

Val是个宽容得有点危险的函数:它从左往右解析,遇到第一个不能组成数字的字符就停,解析失败返回 0。好处是不会报错,坏处是“用户输了 abc”和“用户输了 0”在你眼里没有区别。需要区分这两种情况时,先用IsNumeric判断,再决定要不要转换。

3.4 字符串函数族与比较

字符串处理是 VBA 用得最多的部分,函数不多但每个都有边界。

Dim s As String s = " VBA-2024-Report " Debug.Print Len(s) ' 19,首尾空格也算长度 Debug.Print Len(Trim(s)) ' 15,去掉首尾空格后 Debug.Print Left(Trim(s), 3) ' "VBA" Debug.Print Right(Trim(s), 6) ' "Report" Debug.Print Mid(Trim(s), 5, 4) ' "2024",第 5 个字符起取 4 个 Debug.Print InStr(Trim(s), "-") ' 4,第一次出现的位置 Debug.Print InStr(5, Trim(s), "-") ' 9,从第 5 个字符开始找 Debug.Print Replace(Trim(s), "-", "_") ' "VBA_2024_Report" Debug.Print StrComp("abc", "ABC", vbTextCompare) ' 0,忽略大小写视为相等

Len把空格也算进去,所以做长度校验前先Trim。Mid的第三个参数省略时表示“从起始位置一直取到末尾”,但起始位置超过字符串长度会返回空串而不是报错,这种沉默在解析固定格式文本时特别容易掩盖错位。InStr带起始位置的版本常被忽略,从中间继续找下一处匹配时它是必需品,返回值是 0 表示没找到——判断条件要写> 0,而不是<> ""。

字符串比较默认是区分大小写的,具体行为由模块顶部的Option Compare决定:用二进制比较时按字符编码逐位比,用文本比较时不区分大小写。同一个=号在不同模块里结果可能不同,跨模块复制代码后行为变了,八成就是这行声明不一样。

4. 输入输出、流程与数据:MsgBox、If、循环、数组与过程

4.1 输入输出:MsgBox 与 InputBox 的返回值

弹窗是最直接的交互方式。输出用消息框,能带按钮组合和图标;输入用输入框,返回的永远是字符串。

Sub AskAndShow() Dim ans As VbMsgBoxResult Dim raw As String ans = MsgBox("是否继续?", vbYesNo + vbQuestion, "确认") If ans = vbYes Then raw = InputBox("请输入数量", "输入", "0") If Len(Trim(raw)) = 0 Then Exit Sub ' 取消或什么都没输,都会走到这里 Debug.Print Val(raw) * 2 End If End Sub

MsgBox的返回值是枚举常量,不是字符串;判断时用vbYes、vbNo、vbCancel这些常量,别硬编码数字。InputBox在用户点取消时返回空字符串,用户什么都不输也是空字符串——两者无法区分。做“取消要回退、留空要报错”的逻辑时,这个设计会让你难受,实用做法是取消时给一个哨兵值,或者干脆换成一个自定义窗体,用按钮的返回值明确表达意图。

按钮组合用加号拼接:vbYesNo决定有哪几个按钮,vbQuestion决定图标,第三个参数是标题栏文字。默认按钮、是否模态这些行为由另外的常量控制,拼接顺序不影响结果。

4.2 条件执行:If、Select Case 与逻辑运算

条件分支的本质是把“情况”翻译成“表达式”。单分支、双分支、多分支用If一路写下去,分支超过三四个就该换Select Case,因为层层嵌套的If在复查时几乎没法快速看清楚哪条路径覆盖不到。

Select Case score Case Is >= 90 grade = "A" Case 80 To 89 grade = "B" Case 70, 75, 76 To 79 grade = "C" Case Else grade = "D" End Select

Case后面能写三种形式:具体值(多个用逗号分隔)、区间(80 To 89)、比较(Is >= 90)。判断顺序是从上往下,命中一个就跳出整块,所以范围的书写顺序很关键——把宽范围写在前面,后面的分支永远进不去。Case Else是兜底,不写的话所有条件都不满足时直接跳过整个结构,变量保持原值,这种沉默在统计类代码里会悄悄污染结果。

关系运算符除了常见的等于、不等于、小于、大于,还有Like(模式匹配)和Is(对象比较)。逻辑运算符And、Or、Xor、Not按位也能算,用在布尔值上就是真值运算。需要留神的是,VBA 的And和Or两边都会求值,没有短路行为——如果右边是个会报错的表达式(比如除以零、访问空对象),即使左边已经能定真假,右边照样会执行并炸掉。写条件时把最可能报错的放到后面不管用,得先用嵌套If把风险隔开。

4.3 循环:For-Next、Do-Loop 与无条件跳转

循环分两大类:次数已知用For-Next,次数未知但有终止条件用Do-Loop。

Dim i As Long Dim total As Long For i = 1 To 10 Step 2 total = total + i If total > 20 Then Exit For ' 提前跳出 Next i Debug.Print total, i ' 循环结束后 i 会停在越界后的值 Dim n As Long n = 1 Do While n <= 5 ' 前测:条件不成立一次都不执行 n = n + 1 Loop Do n = n - 1 Loop Until n <= 0 ' 后测:至少执行一次

For-Next的步长可以是负数,Step -1就是从大到小;步长为 0 会造成死循环,且不会报错,只会卡死在那里,这是最典型的翻车现场之一。Exit For跳出当前这层循环,嵌套时只跳出最内层。循环变量在循环体里被改写,会影响下一次迭代的取值,如果确实需要手动调整,宁可用Do-Loop+ 自己维护的计数器,别去动For的计数变量。

前测和后测的区别是“条件判断发生在循环体之前还是之后”。Do While ... Loop先判后做,条件一开始就不成立时循环体一次也不进;Do ... Loop While先做后判,循环体至少执行一次。读文件、取记录这类操作,如果用后测循环,文件为空时会先读到一次空数据,后续处理全是脏值——这类错误不会报错,只会让结果默默偏掉。

无条件跳转(GoTo)在入门阶段主要剩两个正当用途:跳转到过程末尾的统一清理段(关文件、释放对象),以及错误处理标签。用它来组织正常流程的跳转,读代码的人只能顺着行号一行行追,代价远大于收益。

4.4 数组、过程与文件读写

数组是把一组同类型值放在一个名字下,用下标访问。声明时给的是上界,下界默认从 0 开始,这一点和很多人的直觉相反:Dim a(5)是 6 个元素,不是 5 个。

Dim grid(1 To 3, 1 To 4) As Double Dim r As Long, c As Long For r = LBound(grid, 1) To UBound(grid, 1) For c = LBound(grid, 2) To UBound(grid, 2) grid(r, c) = r * c Next c Next r

显式写出1 To 3这样的下界,可以绕开“到底从 0 还是从 1 开始”的反复确认。遍历时用LBound和UBound取边界,而不是把数字写死,数组大小一变循环照样正确。二维数组按行列两层循环,外层走第一维、内层走第二维,顺序写反结果一样但可读性差,复查时容易看错行列。

动态数组用ReDim重新分配,带Preserve可以保留已有数据,但只能改最后一维的大小——想扩充第一维,只能新开一个数组整体搬过去。

Function AvgOfArray(ByVal arr() As Double) As Double Dim i As Long, s As Double If UBound(arr) < LBound(arr) Then AvgOfArray = 0 Exit Function End If For i = LBound(arr) To UBound(arr) s = s + arr(i) Next i AvgOfArray = s / (UBound(arr) - LBound(arr) + 1) End Function

函数和子程序的区别只有一条:函数有返回值,子程序没有。函数通过给“函数名”赋值来返回结果,执行到End Function或Exit Function就返回。参数默认按引用传递,也就是过程内部改了形参,调用方的实参跟着变;加了ByVal才是复制一份进去改。数组参数写成arr() As Double表示接收一个数组,前面再加ByVal表示传副本。

Sub WriteReport(ByVal path As String) Dim fnum As Integer fnum = FreeFile Open path For Output As #fnum Print #fnum, "id,name" Print #fnum, 1 & "," & "A" Close #fnum End Sub

文件操作四步:拿一个空闲句柄、打开、读写、关闭。FreeFile返回当前可用的文件号,比自己拍一个数字安全。For Output会清空原文件重写,想追加用For Append,想读用For Input。Print #后面用逗号分隔多个值时,会按固定的列宽填充空格,写出来的不是标准分隔文本;要拼成一行规整内容,用&自己拼字符串再整体写入。读完必须Close,不关文件会导致后续打开同名文件失败,或者内容还没真正落到磁盘——这类问题重启程序后又“自己好了”,最容易被当成偶发故障。

读的一端有三个函数常混:按行读、按分隔符读字段、整块读。行内有逗号时用按字段读会提前截断,而每行长度不固定时用行读更稳。

5. 易漏点:五个最容易翻车的地方

有些知识点单独看都懂,凑在一起写就出错。下面五处是复习时最值得单独过一遍的,每条都按“漏在哪、为什么会漏、怎么补”来说。

5.1 整数除法与取模:负数一进来就不对了

易漏点:\和Mod在负被除数下的结果方向。

为什么容易漏:教科书例子几乎都是正数,10 \ 3、10 Mod 3的答案背下来就以为掌握了,负数场景根本没试过。

怎么补:记住一条规则——\的结果向零取整,Mod的结果符号跟着被除数。拿-10 \ 3得到-3,-10 Mod 3得到-1。写循环索引时先偏移再取模,把被除数抬到非负区间;实在绕不清,用x - (x \ n) * n手算一遍和Mod的结果对照。

5.2 加号与连接符:类型不匹配的源头

易漏点:拼字符串时用+代替&。

为什么容易漏:两边都是数字文本时+恰好能算出结果,代码看起来是“对的”,直到某天遇到一个非数字字符串才突然报错 13,而报错的位置往往在很久之后。

怎么补:给自己定死规矩——文本拼接只用&,+只用于数值相加。审代码时搜一遍+,凡是两边可能不是数字的地方全部改掉。这条规矩在拼接 SQL 片段、路径、日志行时同样适用。

5.3 ByRef 默认:函数顺手改了你的变量

易漏点:参数不加修饰时默认按引用传递,过程内部对形参的修改会回写到调用方。

为什么容易漏:调用处看不出任何“这个变量会被改”的痕迹,过程内部改形参也不会报错,等发现某个变量值莫名其妙变了,代码往往已经几百行。

怎么补:默认全部写ByVal,只有明确需要“让过程回写结果”时才用ByRef,并且在过程名或注释里标出来。数组、对象这类大结构传引用是效率考虑,但语义上要清楚:进去的是同一个东西,不是复印件。

5.4 循环边界:后测循环和步长为零

易漏点:Do ... Loop While至少执行一次;For步长为 0 会死循环。

为什么容易漏:后测循环在正常数据下和前置判断的结果完全一致,只有空数据时才暴露差异;步长为 0 的情况写成变量后肉眼更难发现。

怎么补:凡是“先判断再处理”的场景,一律用前测形式,把“数据为空就一次都不做”变成默认行为。For的步长如果是变量,加一句保护判断,步长为零时直接退出。写完循环,拿空集合和单元素集合各跑一遍,这是最省时间的自检。

5.5 文件句柄与写入格式

易漏点:忘记Close,以及Print #用逗号分列。

为什么容易漏:不关文件在单次运行里通常不出问题,只在连续操作同名文件时暴露;逗号分列写出来的内容在文本编辑器里看着有空格,肉眼看不出异常,程序读回来时才知道字段对不上。

怎么补:把“打开—读写—关闭”写成固定三段,关闭放在统一收尾处,出错也先跳到收尾再退出。写文件统一用&拼好整行再写入,避免依赖默认列宽。写完后立刻用读函数读一遍前几行验证格式,比事后排查省事得多。

6. 查漏补缺:三轮复习路线与自检清单

复习这件事,最怕的是“从头再翻一遍书”,因为翻完还是不知道哪里不会。更有效的做法是用三轮不同粒度的动作,把知识从“见过”推到“能写出来”。

第一轮用来自测地图是否完整。合上书,在白纸上默写这张图:语言层(类型、表达式、字符串)、控制层(条件、循环、跳转)、结构层(数组、过程、文件)、环境层(IDE 面板、控件、事件)。哪一层画不出来,就回到对应章节补那一块,不用重读全篇。第二轮做定点复现:每个模块挑一个最小例子手写一遍,不抄、不查,写完再对照。第三轮只做错题:把之前报过的错误号、卡住的地方列出来,逐个确认“现在能说清为什么”。

模块自检问题没答上来就回看
类型Integer 溢出会在什么量级发生?金额该用什么类型?3.1
表达式2 + 3 * 4 ^ 2等于多少?+和&有什么区别?3.2
转换Int(-7.5)和Fix(-7.5)差在哪?3.3
字符串Mid起始位置越界会怎样?InStr找不到返回什么?3.4
输入输出输入框点取消返回什么?能和“输入为空”区分吗?4.1
分支Case的书写顺序会影响结果吗?4.2
循环前测和后测循环在空数据下差在哪?4.3
数组Dim a(5)有几个元素?Preserve能改哪一维?4.4
过程参数默认按什么传递?函数怎么返回结果?4.4
文件打开、写入、关闭分别用哪几条语句?4.4

我自己有个习惯:每次写超过二十行的过程,先在纸上把“输入是什么、输出是什么、中间会碰哪几个类型”三行写清楚,再动手敲代码。有次偷懒跳过这一步,一个循环里整数溢出,报错位置在三十行开外,追了整整一下午,最后发现根因只是计数器用了两字节的整型。从那以后我每次开新过程都强制走一遍这三行,写完再回头对照,返工次数明显下来了。

这份笔记对应的入门教程本身就是按模块推进的,从环境、类型、输入输出一路走到循环、数组、过程和文件,配了练习,适合拿来自学或者当复习的骨架。需要完整电子版的话,可以按文末说明获取,配合上面的三轮路线用,比从头到尾顺着读一遍效率高不少。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询