教学基本功比赛

Download Report

Transcript 教学基本功比赛

教学与教案设计
谌卫军
清华大学
1
内容结构
1. 课程定位
2. 教学内容设计
3. 教案设计
4. 课堂教学
5. 我的故事
2
1. 课程定位
 了解该课程在课程体系中的定位
 了解课程的教学对象
 教学理念与教学目标
3
1)该课程在课程体系中的定位

几年级的课程?

前置课程?后继课程?

授课学时,实验学时。
4
“计算机程序设计基础”

计算机软件专业的第一门专业基础
课,大一上学期;

前置课程:无;

后继课程:数据结构、操作系统、
编译原理等。

授课48学时,实验48学时。
5
2)了解课程的教学对象

讲课不是个人秀,而是让学生学到
知识,有进步

“知己知彼,方能百战不殆”,课
程深度,讲课速度?

学生构成一般是复杂的
6
授课对象:软件专业大一新生
35
30
25
10/60
35/60
10/60
20
35
5/60
15
10
0
5
0
10
0
熟悉电脑操
作,熟悉各
种应用软件
的使用,但
没写过程序
B
0
使用过C语
言或其他
语言,编
写过一些
小程序
0
A
曾经参加过
程序设计类
比赛(市、
省、全国)
10
5
0
C
D
没有接触
过太多的
计算机
结论:大部
分同学没有
任何编程基
础。
7
3)教学理念和教学目标

了解了课程和学生以后,要制订教
学理念和教学目标

个人观点:能力比知识更重要,任
何一门课程,应该是以提高学生的
各种能力为目标,而不仅仅是知识
的传授。
8
以“计算机程序设计基础”为例

学生善于
 读书;
 学习C语言的语法

学生不善于

解决实际的编程问题
9
课程目标

掌握C语言的基本语法

让学生掌握程序设计的基本原理和
方法,提高他们的能力

能力包括:自学能力、算法分析和
设计能力、动手实践能力和创新能
力。
10
知识
1
int x, y, t;
x = y = 3;
t = ++x || ++y;
y的值为:
(A)0
(B)4
(C)3
(D)1

某年的计算机等级考试
试题,考察的是知识
vs
能力
2
一个字符串,有小写字
母、大写字母和空格,
编写一个程序,把小写
字母放在最前,空格放
中间,大写字母放最后,
且小写大写字母原来的
顺序不能乱。

某年微软工程院的面试题,
考察的是能力
In general, we hope that after the course, the students will pass the programming test of a
leading software company such as Microsoft, if they go to a job interview... 
11
2. 教学内容设计
 内容为目标服务
 教学大纲:讲哪些内容,每部分
内容多少学时
 重点、难点、创新点
12
1)内容为目标服务

根据教学目标来安排教学内容及学
时数。

以“计算机程序设计基础”为例,
目标是提高学生能力,则教学内容
要做相应的调整,少讲知识型内容,
多讲能力型内容。
13
language syntax
1/3
programming examples
2/3
14
语法...
if (表达式1) 语句1;
else if (表达式2) 语句2;
else if (表达式3) 语句3;
……
else if (表达式m) 语句m;
else 语句m+1;
如果表达式1为真,执行语句1;否则如果表达式2为真,执
行语句2;否则如果表达式3为真,执行语句3;否则,…,
如果表达式m为真,执行语句m,否则执行语句m+1。
15
还是语法...
一般形式: for (表达式1; 表达式2; 表达式3)
{
真
语句块;
假
}
结束循环
16
编程案例
在8×8的棋盘上,放置8个皇后(棋子),使两两之
间互不攻击。所谓互不攻击是说任何两个皇后都要
满足:
(1)不在棋盘的同一行;
(2)不在棋盘的同一列;
(3)不在棋盘的同一对角线上。
因此可以推论出,棋盘共有8行,故至多有8个皇后,
即每一行有且仅有一个皇后。这8个皇后中的每一个
应该摆放在哪一列上是解该题的任务。
17
2)教学大纲

讲什么,讲多久,先讲什么、后讲
什么。
18
章节
名称
第1章
程序设计概述
3
第2章
数据类型与表达式 数据类型、常量、变量、运算符和表达式等
3
第3章
顺序结构程序设计 C语句、数据的输入与输出
2
第4章
选择结构程序设计 关系运算符和表达式、逻辑运算符和表达式、 2
if语句、switch语句
第5章
循环控制
for语句、while语句、do-while语句、
break和continue语句、程序举例
5
第6章
数组
一维数组、二维数组、字符数组、程序举例
3
第7章
函数
函数使用、变量作用范围、函数调用实现过程 3
第8章
指针
指针的基本概念、指针变量、指针与数组、指 8
针与字符串
第9章
结构体
结构体、结构体数组与指针、链表等
第10章 算法引论
第11章 编程规范与程序调试
主要内容
学时
6
算法分析、查找算法、排序算法、递推算法、 9
基于分治和回溯策略的递归算法
3
19
3)重点、难点、创新点

课程内容一定要主次分明;

课程内容要有创新,仍然是服务于
教学目标
20
以“计算机程序设计基础”为例

正确的学习方法

编程规范

程序的调试与测试

函数调用的实现过程
21
3. 教案设计
 搜集材料
 融会贯通
 教案设计的一些要求和技巧
22
1)搜集材料

教案制作要“站在巨人的肩膀上”,
要搜集尽可能多的相关课程的资料,
如课件、参考书、习题等;

资料来源:其他教师、互联网(其
他大学的相关课程、互联网作为知
识来源)
23
搜集其他大学相关课程的资料

构造一个著名大学列表

用google搜索每所大学计算机系的
主页

在系主页中,会有课程列表和描述,
寻找感兴趣的课程,再通过链接找
到相关课程的主页
24
美国大学研究生院计算机系排名.txt
国内呢?
25
26
27
28
29
直接用google去搜索相关课程
30
31
与教材配
套的PPT
32
互联网作为知识来源
维基
百科
33
百度
百科
34
2)融会贯通

资料多了是一种幸福,也是一种负
担,需要把别人的东西真正变成自
己的东西,从N到1;

资料的使用方法:原样照搬法、东
拼西凑法、加工改进法。
35
原样照搬法:不可取!
没有任何一个课件是完美的,
没有理解的课件是无法使用的。
36
常用方法1:东拼西凑法
 for循环语句
 for循环的语法
 for循环使用方法举例
 for循环编程举例
37
for循环的语法:来源1
一般形式: for (表达式1; 表达式2; 表达式3)
{
真
语句块;
假
}
结束循环
38
for循环使用方法举例:来源2
/* Frog lifetime */
int days;
for(days = 155; days > 0; days--)
{
work_all_day();
sleep_all_night();
}
die_quietly();
39
for循环编程举例:来源3
德国数学家高斯,在上小学的时候,老师出了
一道难题,计算1+2+3+…… + 100,高斯很快就在
自己的小石板上写出了答案5050,老师非常惊讶,
高斯怎么算得这么快呢?原来,高斯不是一个数一
个数按部就班地加起出来的,而是发现这些数字有
一个规律,一头一尾依次两个数相加,它们的和都
是一样的:1+100=101,2+99=101,一直到
50+51=101,一共是50个101,所以,他很快就把
答案算出来了。请编程解决该问题。
40
总之,既要精挑细选,又要有
机地融和,形成一个完整、和
谐的整体。
41
常用方法2:加工改进法
该问题(案例)是别人提出的,但你
觉得不满意,可以对它进行改进,成
为一个更好的例子。
42
例. 编程求π的近似值
 1 1 1

  4  1     
 3 5 7

当最后一项的绝对值小于等于 10 6 时,忽略掉以后项
43
思路分析
 1 1 1

  4  1     
 3 5 7

1 1 1
1   
3 5 7
1 1 1 1

 

1 3 5 7
bi
令ci 
ai
bi  1,  1, 1,  1
ai  1,
3,
5,
7, ,
44
思路分析(续)
1. 循环语句:循环控制条件+循环体;
2. 循环控制条件的设计:题目已指明,当最后
一项的绝对值小于等于 10-6 时,循环结束;
3. 循环体语句的设计:需计算每一项的值,并
把它们累加起来。ci = bi / ai
ai+1= ai + 2 ,初值为 1 ;
bi+1 = -1 * bi,初值为 1 。
45
具体实现
1. 任何一种循环语句均可,事件驱动,最
好是while或do-while;
2. 初始值的设置;
3. 先计算、后累加;
4. 第一项和最后一项。
46
void main( )
{
int num = 0;
// 总项数
double pi = 0, a = 1.0, b = 1.0, c = 1.0; // a为分母, b为分子
while( fabs(c) > 1e-6 )
{
pi = pi + c;
num = num + 1;
a = a + 2.0;
b = -b;
c = b / a;
}
// 累加每一项
// 总项数加1
// 计算下一项的分母
// 分子变正负号
// 计算下一项
pi = 4.0 * pi;
printf("pi = %.6f\n", pi);
printf("num = %d\n", num);
}
47
运行结果: pi = 3.141591, num = 500000
循环控制条件不同,则得到的精度不同:

将1e-6变为1e-7:pi = 3.141592, num = 5000000

将1e-6变为1e-5:pi = 3.141573, num = 50000

将1e-6变为1e-4:pi = 3.141393, num = 5000
48
3)教案设计:组织结构

章节结构清晰,各部分内容之间前
后关联、逻辑性强
49
第1章“程序设计概述”

这是一个计算机的时代;

计算机功能强大(深蓝、语音识别)

软件与程序

计算机程序设计

计算机语言

一个典型的C语言程序
50
操作系统第3章“存储管理”

单道程序存储管理

分区存储管理

页式存储管理

虚拟存储技术

Linux的存储管理
51
4)教案设计:内容安排

内容安排的一般模式:对于每一部
分内容A,为什么要引入A?A是什
么?如何使用A?Why-What-How

例如:“循环结构”的讲授
52
Why循环结构?
程序员失去循环语句,
世界将会怎么样?
53
 计算机的执行速度
–10,000,000行C代码/秒
• 程序员的编程速度
–12行可用的C代码/每天
• 编写一个运行时间为1秒的程序,需要
多少天?
54
What?
一般形式: for (表达式1; 表达式2; 表达式3)
{
真
语句块;
假
}
结束循环
55
How?
int
i;
for(i = 100;
{
i > 0;
printf(“%d\n”,
i -= 2)
i);
}
56
Why函数?
提高工作效率,减少重复劳动!
生活中亦如此...
57
58
在编程时...
我想从键盘读入一个数据
用scanf函数!
我想生成一个随机数
用rand函数!
我想计算一个字符串的长度
用strlen函数!
我想知道一个人的星座和属相 自己编写函数!
59
什么是函数?
 数学里面的函数:正弦函数、余弦函数、指数函数
等等;
 C语言里面的函数:也称为子程序(subroutine),
它是一组程序代码(包括数据和指令),用来完成
某个特定的功能。
 C语言的函数既可以有返回值,也可以无返回值,
不像Pascal等语言,严格地区分为函数
(function)和过程(procedure)。
60
如何使用函数?
函数原型
声明该函数
void main ( )
{
……
函数调用
使用该函数
……
}
函数定义
定义一个函数
函数的使用模式
61
5)教案设计:问题驱动

通过问题(例子)来引出内容,通
过问题来复习内容,不要干巴巴地
直接讲,而是用到什么讲什么。

其他专业也应该适用,如法律条例
很多,可用具体案件引出。
62
某参考书的目录
63
一个典型的C语言程序
问题描述
“编写一个程序,计算所有课程的
GPA(Grade Point Average)”
4分制(0-4)
64
计算方法
将每门课程的学分乘以学时,累加后除以
总学时,得出平均分。
例如:某学生的五门课程的学时和成绩为:
A课程4个学时,成绩92(A);
B课程3个学时,成绩80(B);
C课程2个学时,成绩98(A);
D课程6个学时,成绩70(C);
E课程3个学时,成绩89(B)。
为简化问题,假设
所有课程成绩均不
低于C,且学时数
相同。
GPA=(4*4+3*3+2*4+6*2+3*3)/(4+3+2+
6+3)=3.00
65
基本思路
 让用户输入成绩分别为A、B、C的课程数
 计算总分数(分子)
 计算总的课程数(分母)
 计算GPA
 在屏幕上显示计算结果
1. 变量的定义与使用(数
据类型、整型、实型)
2. 算术运算
3. 输入和输出
66
#include <stdio.h> /* 编译预处理,文件包含 */
void main( )
/* 主函数 */
{
int nA, nB, nC; /* 成绩为A、B、C的课程数*/
double totalCourses, totalPoints, gpa;
printf("你得了多少个A?
scanf(“%d”, &nA);
printf("你得了多少个B?
scanf("%d", &nB);
printf("你得了多少个C?
scanf("%d", &nC);
");
//输入成绩为A的课程数
");
");
totalPoints = nA * 4 + nB * 3 + nC * 2;
totalCourses = nA + nB + nC;
gpa = totalPoints / totalCourses;
printf("你的GPA是:%.2f", gpa);
}
67
6)教案设计:案例教学

案例教学是一种重要的教学手段,
将讲授内容融入在案例之中。通过
案例教学,可以实现具体与抽象、
理论与实践的有机结合,从而培养
学生分析问题、解决问题的能力。

哈佛商学院的经济管理案例。
68
案例不是简单的小例子,而是精心设计
的,具有完整内容的单元,往往覆盖多
个知识点。
69
字符数组
• 定义和引用
• 字符串
- 字符串常量,例如:"china"
- 没有字符串变量,用字符数组来存放字符串
- 字符串以'\0'为结束标志
• 字符数组的初始化
例:static char str[8]={112,114,111,103,114,97,109,0};
static char str[8]={'p','r','o','g','r','a','m','\0'};
static char str[8]="program";
static char str[]="program";
Page 70
70
输出一个字符串
main()
{ static char
c[10]={'I','','a','m','','a','b','o','y'};
int i;
for(i=0;i<10;i++)
printf("%c",c[i]);
printf("\n");
}
运行结果:
I am a boy
71
案例1. 凯撒密码
问题背景:
史上最早的一种加密系统是由Julius Caesar
发明的:若需要加密的字母是字母表中的第N个字
母,那么就用第(N+K)个字母来代替它,其中K是
某个固定的整数(凯撒使用的是K=3)。通常把空
格字符看成是第0个字符,即总共有27个字符。例
如,若K=1,则消息“ATTACK AT DAWN”就会
被加密为“BUUBDLABUAEBXO”。
72
问题描述:
读入一部词典和加密后的文字,程序将
确定所使用的K值,并显示经过解密后的原
始内容。原始内容仅包含字母和空格。
输入:词典不超过100行,每行是一个大
写单词,长度不超过20,词典以'#'结尾。加
密后的文字只有一行,长度不超过250。注:
词典不一定包含原文所有单词,且无序。
73
算法思路
1. K=1, 2, 3, … 26,逐一进行测试;
2. 根据K值,对密文进行解密,得到一行文
字,即“单词”序列;
3. 将这些“单词”与词典进行比较,统计
出有效单词的个数;
4. 选择有效单词数最多的。
74
关键技术
1. 对密文进行解密,得到“单词”序列;
2. 单词抽取;
3. 在词典中查找特定的单词;
4. 有效单词的统计;
5. 有效单词个数的最大值。
75
案例要生动有趣,而且要富有挑战
性,能吸引人。
76
案例2. 猜数字游戏
问题描述:
电脑随机产生一个数字不重复的四位数,
由玩家来猜,每猜一次,电脑将显示形如
“*A*B”的结果,A代表位置正确数字也正
确,B代表数字正确但位置不正确,例如:
2A2B。总共有10次机会。
77
78
案例设计

对于计算机程序设计课程的案例,
包括以下内容:问题描述、问题分
析、算法设计、编码和测试。

以“猜数字游戏”为例
79
问题描述:
电脑随机产生一个数字不重复的四位数,
由玩家来猜,每猜一次,电脑将显示形如
“*A*B”的结果,A代表位置正确数字也正
确,B代表数字正确但位置不正确,例如:
2A2B。总共有10次机会。
80
问题分析
1. 如何随机产生一个数字不重复的四位数?
2. 对于玩家猜测的一个四位数,如何计算
相应的A和B的数量?
3. 如何实现“总共有十次机会”?
81
在ANSI C中生成随机数
1、要产生随机数需要在程序开头加入头文件
#include <stdlib.h>
2、rand()是产生随机数的函数,
int rand(void);
它可生成0至RAND_MAX的整数,RAND_MAX =
0x7FFF = 32767
82
已知目标数和猜测数,如何计算相应的A和
B的数量?
 假设目标数为T1 T2 T3 T4,
猜测数为G1 G2 G3 G4;
 一种方法:Ti和Gi相比,相同则A加1;不相
同则把Ti和剩余三个猜测位相比,若有相同
者,则B加1。
83
算法思路
1. 随机产生一个数字不重复的四位数,将它拆
分为四位数字T1 T2 T3 T4;
2. 让用户输入一个数字不重复的四位数,将它
拆分为四位数字G1 G2 G3 G4;
3. 计算相应的A和B的数量;
4. 如果结果为4A0B,则成功;否则,将猜测的
次数加1,如果不超过10,则转第2步;否则
猜测失败。
84
编码与测试
略…
85
7)教案设计:启发式教学

教学的目的是让学生获得知识、提
高能力,而要做到这一点,前提是
学生的参与。而学生的参与程度取
决于各种教学设计,如启发式教学。

启发式教学的最高境界是:教师尚
未细述,而学生已经给出了答案。
86
例1:“存储管理”
如何实现多道存储管理?

内存的分配

内存的回收

内存的管理(数据结构)
87
例2:“变量的定义与使用”
why变量?
茄子750克、肉片50克、
葱姜蒜50克、酱油、盐、
糖、鸡粉适量,水淀粉
适量。
有何共同点?
88
例3:“数据文件格式解析”
该案例用于复习以下内容

二进制、十六进制

整数编码

实数编码
89
问题描述:
1. K线数据(结束时间、开盘价、最高价、最低
价、收盘价、成交金额、成交量等)
2. 一只股票的所有K线数据保存在同一个文件当
中;
3. 已知一个数据文件和所有的K线信息,要求解
析数据文件的格式(文件头的长度、记录的长
度、每个字段的含义)。
文件样例…
90
91
基本思路:
1. 切分记录。数据文件的大体结构为:文件头、
记录1、记录2、记录3、…,但文件头的长度不
知,记录的长度不知;
2. 找到某个记录所对应的交易信息;
3. 将两者进行比较,寻找规律。
92
记录样例
6F 45 CA 71 48 4E 00 B0 52 4E 00 B0 2A 4E 00 B0
3E 4E 00 B0 9D 90 76 04 5E 0A 39 00 4C BC 16 00
BE 09 1F 00 3C 00 00 00
结束时间:2009-9-8下午14:55,开盘20.04,最高20.05,最低20.01
收盘20.03,金额7488万,成交量37382手。
9C 45 CA 71 F0 14 00 B0 0E 15 00 B0 E6 14 00 B0
0E 15 00 B0 6A 78 02 95 DF D5 17 00 25 08 0E 00
BA CD 09 00 31 00 00 00
结束时间:2009-9-8下午15:00,开盘5.36,最高5.39,最低5.35
收盘5.39,金额840万,成交量15621手。
93
谜底揭晓
 时间:4个字节,格式:YYMMDDHHMM,年
份用2位表示,要减去1990;
 开盘价、最高价、最低价、收盘价、金额各占4
个字节,低28位为有效数字,高4位为指数,大
于8则进行除法;小于8则进行乘法;
 成交量:4个字节,整数;
 其他:不知…
94
样例
16进制编码数据 有效数字
指数 解码数据
9D 90 76 04
0x476909D 0x00 74879133
C7 DE 9F 11
0x19FDEC7 0x01 272544710
6A 78 02 95
0x502786A 0x09 8404797.8
4F 42 68 A6
0x668424F 0x0A 1074960.15
32 0F 00 B0
0x0000F32 0x0B 3.89
95
8)教案设计:创新教学方法

结合课程的内容和特点,善于发现
和总结规律,提出新的、适合于该
类课程的教学方法。

以“计算机程序设计基础”为例。
96
教学方法
源代码
问题描述
1. 大量的编程案例
算法
2. 编程模式
3. 在线训练系统
97
编程模式

定义:一些经常使用的算法片段。

累加模式:计算一组数据之和;

最大值模式:寻找一组数据当中的
最大值/最小值。
98
累加模式
永真模式
高斯的难题
脆弱的输入
方式
编程实现:
1+2+3+…
… + 100
编程实现:
对用户的输
入进行合法
性检查。
?
编程实现:
输入一组整
数,统计其
中正数和负
数的个数。
当输入为0
时结束。
对其他专业的启发?
99
在线训练系统

即使算法思路正确,也不一定能编
写出相应的代码并正确运行。

“机考”、“机练”,平时作业和
期末考试均为编程题,学生提交的
是源代码;

为了便于学生自习,开发了一个功
能强大的在线训练系统。
100
101
102
9)教案设计:内容要生动有趣

听课是一个体力活,时间长了容易
疲倦;

生动有趣的内容容易留下深刻的印
象,且记得牢。
103
方法一

用生活中的例子来类比,把单调抽
象的内容变成具体形象的内容。
104
例1:一维数组的定义和引用
过山车有何特点?
1.
2.
3.
4.
5.
若干节车厢组成
物是人非
有序
大小相同
有名字(风神、飞天凤凰)
105
什么是数组?
定义:一组有序、有名、具有相同数据类型
的变量。
 有名:数组有一个名字,如RollerCoaster;
 有序:数组元素连续存放,0, 1, 2, …;
 同类型:长度相同,如int, double, char;
 变量:数组元素的值可变。
106
例2:二进制
这是什么?
是某种可爱
的动物?
或仅仅是一
些ASCII字符
的组合?
107
在计算机科学中,基本信息单元是bit(位)!
 每个bit是一个二进制数:0或1;
 任何信息都可用若干个bit所组成的位流来表示
(即编码:整数、实数、字符等);(why bit?)
 二进制的bit容易用计算机硬件来表示和实现,如
电路的接通与断开、电压的高与低,等等;
 但对于人来说,二进制的位流是一个“梦魇”,
因此需要把数据的外在含义和内部实现区别
开来,即程序员的角度和计算机的角度。
108
计算机
程序员
01000011
‘C’
01010011
‘S’
01000101
‘E’
00110001
‘1’
00000010
2
109
例3:虚拟存储管理
110
方法二

风趣幽默、寓教于乐。
111
例1:逻辑运算符和逻辑表达式
用逻辑运算符将关系表达式或逻辑量连接起来
的式子,就是逻辑表达式。
C 语言提供了 3 种逻辑运算符,包括:
(1)
(2)
(3)
&&
||
!
(逻辑与,双目运算符)
(逻辑或,双目运算符)
(逻辑非,单目运算符)
112
a && b
a || b
a b
真
假
a b
真
假
真
真
假
真
真
真
假
假
假
假
真
假
!a
a
!a
真
假
假
真
113
如何用逻辑表达式描述:报纸上的
征婚广告,女征男,年龄大于30,
有车、有房、年薪大于10万。
114
int Age, NumOfCars, NumOfHouses;
double Salary;
if((Age >= 30) && (NumOfCars > 0) &&
(NumOfHouses > 0) &&
(Salary > 100000))
{
arrange a meeting...
}
115
例2:函数的参数传递
☺ 实参:在调用一个函数时,所指定的参数称为
“实际参数”,可以是常量、变量或表达式;
☺ 形参:在定义一个函数时,所指定的参数称为
“形式参数”,必须是一个变量。
实参
形参
调用者
接收变量
函数
1. 匹配?
2. 个数?
3. 方向?
返回值
116
void main( )
{
int salary, nCars, nHouses;
salary = 3000;
nCars = 0;
nHouses = 0;
DayDreaming(salary, nCars, nHouses);
printf("%d %d %d", salary, nCars, nHouses);
}
void DayDreaming(int salary, int cars, int houses)
{
salary = salary * 3;
cars += 2;
houses ++;
}
117
例3:递归函数
从前有座山,山上有座庙,庙里有一个老和尚
和一个小和尚,老和尚正在给小和尚讲故事。
讲的是什么故事呢?他说,从前……
118
void tell_story( )
{
int old_monk, young_monk;
tell_story ( );
?
// 递归调用
}
119
void tell_story( )
{
static int old_monk, young_monk;
old_monk = old_monk + 1; // 年龄大了一岁
young_monk = young_monk + 1;
if(old_monk <= 60)
// 递归形式
tell_story ( );
else
printf("对不起,已退休!"); // 递归边界
}
120
方法三

图片和动画的使用,一图胜千言。
121
例:汉诺(Hanoi)塔问题
相传在古印度的Bramah庙中,有位僧人整天把三根柱
子上的金盘倒来倒去,原来他是想把64个一个比一个小
的金盘从一根柱子上移到另一根柱子上去。移动过程中
遵守以下规则:每次只允许移动一只盘,且大盘不得落
在小盘上。
A
B
C
122
在A柱上有3只盘子,从小到大分别为1号,
2号,3号。怎么移?
分七步!
A
B
C
1
2
3
123
10)教案设计:一个例子

北京市第五届青年教师教学基本功
比赛参赛教案

获最佳教案奖
文件…
124
4. 课堂教学
 教师的状态
 课堂交流
 辅助工具的使用
125
1)教师的状态

声音响亮,给人的感觉很投入、很
有激情

适当的表情和肢体动作

正确处理好授课内容与PPT之间的关
系
126
2)课堂交流

以学生为中心,师生互动、课堂交
流充分。

交流形式包括:老师提问学生回答,
学生提问老师回答,学生提问学生
回答。

在教案设计和课堂教学安排中,要
大量地使用“课堂交流”这一方式。
127
例1:有符号二进制数的取值范围
 假设我们有4个二进制位:
- 它所能够表示的最小数为 -8;
- 它所能够表示的最大数为 7;
 假设我们有n个二进制位:
- 它所能够表示的最小数为 –2n-1 ;
- 它所能够表示的最大数为 2n-1–1 ;
例如:
n = 8,取值范围:-128(-27) ~ 127(27 – 1) ;
n=16,取值范围: -215 ~ 215 – 1;
n=32,取值范围: -231 ~ 231 – 1 。
128
例2:if语句的形式之一
if (表达式) 语句1;
// 语句1,只一句
如果表达式为真,执行语句1;否则什么都不做
例如:
if (x > y) printf(“最大值是 %d”, x);
if (temperature > 38)
printf("You have a fever. \n");
printf("Go see the doctor \n"); 有点问题吧?
129
计算绝对值
问题描述:
计算x的绝对值|x|,把结果保存在abs变量中。
方案1
if(x >= 0) abs = x;
if(x < 0 ) abs = -x;
方案2
abs = x;
if(x < 0) abs = -x;
方案3
if(x >= 0) abs = x;
else abs = -x;
哪一个正确?
130
例3:多级指针
void main( )
{
int homer, *lisa;
int *bart[3];
lisa = &homer;
bart[0] = lisa;
*(bart + 2) = malloc(2*sizeof(int));
Test(lisa, &bart[1]);
}
430430
1
…
12ff7c
12ff78
① 0012ff7c
12ff74 ③00430430
12ff70
⑥ 0012ff7c
② 0012ff7c
homer
(int )
lisa
(int *)
bart[2]
(int *)
bart[1]
(int *)
bart[0]
(int *)
void Test(int *marge, int **maggie) 12ff6c
{
…
*maggie++ = marge;
maggie
**maggie = 1;
⑦ 0012ff70
0012ff74 (int **)
12ff1c ⑤
}
④ 0012ff7c marge
131
12ff18
(int *)
例4:回文问题
问题描述:
回文是指具有如下特性的一个短语:该
短语顺过来读和反过来读所得到的字母序列
是完全相同的。例如:“level” 就是一个回
文。编写一个程序,输入一个短语,然后判
断它是否是回文。
132
算法思路
回文判断用首尾比较算法,将字符串的第
一个字符与最后一个字符进行比较,第二个
字符和倒数第二个字符进行比较,...。若出
现不相等的情形,则立即退出。
133
"level"
str
l
e
v
e
l
'\0'
0
1
2
3
4
5
1. str[0] ↔ str[4]:'l' ↔ 'l'; 若字符串长度
2. str[1] ↔ str[3]:'e' ↔ 'e'; 为N,则最多
3. str[2] ↔ str[2]
需要 N / 2 次
4. 完成!
比较即可。
134
#include <string.h>
#include <stdio.h>
void main( )
{
char str[80], flag;
int i, j;
printf("输入一个字符串:");
scanf("%s", str);
i = 0; j = strlen(str)-1;
• 如何测试本
flag = 'Y';
程序?
for(; i < j; i++, j--)
{
• 汉字回文?
if(str[i] != str[j])
{
flag = 'N';
break;
}
}
if(flag == 'Y') printf("%s是一个回文\n", str);
else printf("%s不是一个回文\n", str);
}
135
测试数据:
输入一个字符串:a
输入一个字符串:aa
a是一个回文
aa是一个回文
输入一个字符串:ab
输入一个字符串:aba
ab不是一个回文
aba是一个回文
输入一个字符串:abb
输入一个字符串:abccba
abb不是一个回文
abccba是一个回文
输入一个字符串:abcdefghijkl
abcdefghijkl不是一个回文
136
3)辅助工具的使用

根据所授课程的特点和内容,选择
合适的辅助工具,其目的是以直观、
形象的形式展示相应的内容。
137
基于分治策略的递归算法
分而治之(divide-and-conquer)的算法
设计思想:
1. Divide:把问题划分为若干个子问题;
2. Conquer:以同样的方式分别去处理各
个子问题;
3. Combine:把各个子问题的处理结果综
合起来,形成最终的处理结果。
138
139
Visual studio
140
猜数字游戏
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int Target, T1, T2, T3, T4;
int Guess, G1, G2, G3, G4;
int nA, nB, NumGuess;
double d;
// 随机产生一个数字不重复的四位数
srand((unsigned)time( NULL ));
while(1)
{
d = (double)rand() / (RAND_MAX+1);
Target = 1000 + (int)(d * 9000);
// 将它拆分为四位数字
T1 = Target / 1000;
T2 = (Target / 100) % 10;
T3 = (Target / 10) % 10;
T4 = Target % 10;
if((T1 != T2) && (T1 != T3) && (T1 != T4)
&& (T2 != T3) && (T2 != T4)
&& (T3 != T4))
break;
}
NumGuess = 0;
while(1)
{
printf("输入一个不重复的四位数:");
scanf("%d", &Guess);
// 将它拆分为四位数字
G1 = Guess / 1000;
G2 = (Guess / 100) % 10;
G3 = (Guess / 10) % 10;
G4 = Guess % 10;
// 计算相应的A和B的数量
nA = 0; nB = 0;
if(T1 == G1) nA++;
else if((T1==G2)||(T1==G3)||(T1==G4))
if(T2 == G2) nA++;
else if((T2==G1)||(T2==G3)||(T2==G4))
if(T3 == G3) nA++;
else if((T3==G1)||(T3==G2)||(T3==G4))
if(T4 == G4) nA++;
else if((T4==G1)||(T4==G2)||(T4==G3))
if(nA == 4 && nB == 0)
{
......
}
}
nB++;
nB++;
nB++;
nB++;
141
142
main
AnnulusArea
printf
scanf
CircleArea
函数调用关系图
143
void main( )
{
double inner, outer, area;
printf("请输入内圆的半径和外圆的直径:");
scanf("%lf %lf", &inner, &outer);
area = AnnulusArea(inner, outer / 2.0);
printf("%f", area);
}
main函数的栈帧
inner
outer
2.0
10.0
area
144
main函数
……
area = AnnulusArea(inner, outer / 2.0);
……
5.0
2.0
double AnnulusArea(double inner, double outer)
{
double InnerArea, OuterArea, area;
……
}
main函数的栈帧
inner outer AnnulusArea函数的栈帧
area
2.0
10.0 inner outer
2.0 5.0
InnerArea OuterArea
area
145
146
5. 我的故事
1)阶段一:初始阶段

刚毕业留校,没有任何教学经验,
不知如何上课。

第一门课:在课件制作上,把教材
上的内容照搬上PPT,写了很多字;
在上课时照本宣科。

结果:学生很不满意。
147
2)阶段二:学习阶段

教师的责任感要求把课讲好,不为
别的,只为学生。

去参加学校组织的教学培训;

去旁听教学名师的课程;

去网上搜集国内外同行的优秀讲义
并融会贯通。
148
3)阶段三:提高阶段

参加清华大学第二届青年教师教学基本功
比赛,获理工科组一等奖;

参加北京市第五届青年教师教学基本功比
赛,获理工科组一等奖;

清华大学“青年教师教学优秀奖”;

第十二届霍英东教育基金会高等院校青年
教师奖。
149
总 结
 课程定位准确:了解课程、了解学生、
先进的教学理念和教学目标
 教学内容合理:内容安排合理,重点
突出,有创新点
 教案设计优秀:参考借鉴、融会贯通、
追求完美
 课堂教学:充满激情、课堂气氛热烈
150
最后两句话,与各位同仁共勉

为何要做好教学工作?为了不辜
负学生的信赖和期待。

教学之路,前途光明,道路曲折。
151
Thanks
152