译者序 写给学生的话 写给教师的话 致 谢 第1章 轻松入门 …… 1 1.1 Karel介绍 …… 2 1.1.1 Karel的编程 …… 2 1.1.2 Karel的世界 …… 3 1.1.3 Karel的内置函数 …… 3 1.2 教Karel解决问题 …… 4 1.2.1 开始起步 …… 4 1.2.2 定义函数 …… 5 1.2.3 完善程序 …… 6 1.2.4 使用库函数 …… 7 1.2.5 分解策略 …… 7 1.3 控制语句 …… 9 1.3.1 条件语句 …… 9 1.3.2 循环语句 …… 11 1.3.3 解决通用问题 …… 13 1.4 逐步求精法 …… 15 1.4.1 一个逐步求精法的练习 …… 15 1.4.2 自上而下设计的原则 …… 15 1.4.3 求精**个子问题 …… 16 1.4.4 编写下一层代码 …… 17 1.4.5 完成 …… 18 1.5 Karel世界里的算法 …… 19 总结 …… 20 复习题 …… 22 练习题 …… 22 第2章 JavaScript简介 …… 34 2.1 数据和类型 …… 35 2.2 数值���据 …… 35 2.2.1 JavaScript中数字的表示 …… 36 2.2.2 算术表达式 …… 36 2.2.3 优先级 …… 38 2.3 变量 …… 38 2.3.1 变量声明 …… 39 2.3.2 赋值 …… 39 2.3.3 自增和自减操作符 …… 40 2.3.4 命名约定 …… 41 2.3.5 常量 …… 41 2.3.6 顺序计算 …… 42 2.4 函数 …… 42 2.4.1 用JavaScript实现函数 …… 43 2.4.2 库函数 …… 45 2.5 字符串数据 …… 46 2.5.1 字符串操作 …… 47 2.5.2 编写简单的字符串函数 …… 48 2.6 在浏览器中运行JavaScript …… 49 2.6.1 “Hello World”程序 …… 49 2.6.2 JavaScript和Web …… 51 2.6.3 JavaScript程序的HTML模板 …… 51 2.7 测试和调试 …… 53 2.7.1 防御式编程 …… 54 2.7.2 成为一名**的调试者 …… 54 2.7.3 编程的各个阶段 …… 54 2.7.4 心理障碍的一个例子 …… 57 2.7.5 编写有效的测试程序 …… 58 2.8 软件维护 …… 60 总结 …… 61 复习题 …… 63 练习题 …… 65 第3章 控制语句 …… 68 3.1 布尔数据 …… 69 3.1.1 关系操作符 …… 69 3.1.2 逻辑操作符 …… 70 3.1.3 短路求值 …… 72 3.2 if语句 …… 73 3.2.1 if语句的其他形式 …… 74 3.2.2 “?:”操作符 …… 75 3.3 switch语句 …… 76 3.4 while语句 …… 78 3.5 for语句 …… 81 3.5.1 for和while的关系 …… 84 3.5.2 嵌套的for语句 …… 84 3.6 算法编程 …… 86 3.6.1 早期的平方根算法 …… 87 3.6.2 寻找*大的公约数 …… 89 3.6.3 欧几里得算法 …… 90 3.7 避免使用模糊的真假值 …… 92 总结 …… 93 复习题 …… 94 练习题 …… 95 第4章 简单图形 …… 100 4.1 图形版“Hello World” …… 101 4.2 类、对象和方法 …… 102 4.2.1 创建对象 …… 102 4.2.2 向对象发送消息 …… 103 4.2.3 引用 …… 104 4.2.4 封装 …… 105 4.3 图形对象 …… 105 4.3.1 GRect类 …… 105 4.3.2 GOval类 …… 108 4.3.3 GLine类 …… 109 4.3.4 GLabel类 …… 109 4.4 图形窗口 …… 114 4.5 创建图形化应用程序 …… 115 4.5.1 指定坐标和大小 …… 115 4.5.2 使用简单的分解策略 …… 117 4.5.3 在图形应用程序中使用控制语句 …… 119 4.5.4 返回图形对象的函数 …… 121 总结 …… 122 复习题 …… 123 练习题 …… 124 第5章 函数 …… 132 5.1 快速回顾函数 …… 133 5.1.1 函数定义的语法 …… 133 5.1.2 传递参数 …… 134 5.1.3 可选参数 …… 134 5.1.4 谓词函数 …… 135 5.2 程序库 …… 136 5.2.1 创建自己的程序库 …… 136 5.2.2 信息隐藏原则 …… 137 5.2.3 接口概念 …… 138 5.3 一个支持随机选择的程序库 …… 138 5.3.1 设计RandomLib.js库的接口 …… 139 5.3.2 实现RandomLib.js库 …… 140 5.3.3 使用RandomLib.js库 …… 142 5.4 函数调用的机制 …… 144 5.4.1 调用函数的步骤 …… 144 5.4.2 组合函数 …… 145 5.4.3 跟踪组合函数 …… 146 5.5 递归函数 …… 149 5.5.1 fact的递归公式 …… 149 5.5.2?跟踪递归过程 …… 150 5.5.3 递归的信仰之跃 …… 153 5.5.4 斐波那契函数 …… 153 5.5.5 计算斐波那契序列中的项 …… 154 5.5.6 在递归实现中获得信心 …… 155 5.5.7 递归实现的效率 …… 155 总结 …… 158 复习题 …… 159 练习题 …… 160 第6章 编写交互式程序 …… 164 6.1 一等函数 …… 165 6.1.1 将函数声明为数据值 …… 165 6.1.2 传递函数作为参数 …… 166 6.2 一个简单的交互式示例 …… 167 6.3 控制对象的属性 …… 169 6.4 响应鼠标事件 …… 170 6.4.1 简单的画线程序 …… 171 6.4.2 在画布上拖动对象 …… 173 6.5 基于计时器的动画 …… 175 6.5.1 setTimeout和setInterval函数 …… 175 6.5.2 动画的简单示例 …… 176 6.5.3 跟踪动画的状态 …… 177 6.6 扩展图形库 …… 179 6.6.1 GArc类 …… 179 6.6.2 GPolygon类 …… 181 6.6.3 GCompound类 …