对中学生学习算法与程序设计的建议

2014-12-13 14:40董天佑
中学教学参考·文综版 2014年12期
关键词:行数水仙花三位数

董天佑

随着信息技术新课程改革的不断推进,江苏省信息技术学业水平测试的实施,信息技术课的开设越来越规范,也越来越受到学校、教师和学生的重视。现在网络技术应用所涉及的知识体系比较庞大,对于中学生而言,要求掌握的知识都只是计算机网络技术中最基础的内容。即便如此,中学阶段的网络技术应用也对学校网络的软件、硬件设备要求极高,一般学校根本达不到要求,学生只能肤浅地通过知识的识记来完成网络技术的学习。更有甚者,有的学校在高二阶段通过使用题海战术来达到使学生信息技术学业水平测试过关的目的。这已经违背了我们开设技术课程的宗旨,学生既掌握不了真正的技术和技能,更谈不上知识和技能的迁移,只会简单的记忆和模仿。所以笔者建议中学生应该学习《算法与程序设计》,提高自己的综合能力。

一、中学生完全有能力学好《算法与程序设计》,提高自己的逻辑思维能力

《算法与程序设计》这门课有助于学生揭开计算机神秘的面纱。通过学习,学生不仅可以了解平时使用的计算机软件是如何开发出来的,还能从程序设计语言上了解计算机的工作原理和计算机软件的设计过程,甚至能设计出一些简单的软件。学习程序设计还可以培养学生独立思考、有条理地处理各种问题的能力,提高解决问题的效率,使学生在以后的生活、学习过程中受益。

二、程序设计的过程也是培养学生创新能力的过程

最简单的关于设计的定义就是一种“有目的的创作行为”。《算法与程序设计》其实也是在培养学生的创新能力。笔者在实际教学过程中,就遇到了这样的案例。

如用穷举法列举出所有的水仙花数。

水仙花数是指一个三位数,它的各数位上的数的立方和正好等于该数本身。如153=13+53+33,153即是一个水仙花数。

首先带领学生分析解决这个问题的算法,使用穷举法对所有三位数逐一筛选,求出所有水仙花数。对任意一个三位数i,其个位数用x表示,十位数用y表示,百位数用z表示(x,y,z均为0~9之间的数,z≠0),解决问题的方法:如果满足条件x3+y3+z3=i,那么i即是水仙花数。

分析完算法后,学生就自己去设计程序。在学生完成的程序中,至少可以用三种方法求出所有水仙花数。

方法一:

学生在VB中学习过整除(Mod)和取余(\)运算,可以用整除(Mod)和取余(\)运算表示出三位数中个位、十位、百位上的数字,然后根据判断条件筛选出所有的水仙花数。

源代码略。

方法二:

有的学生把每个三位数看成是一个三个数字字符组成的字符串,使用字符串函数来取出个位、十位、百位上的数字,然后根据判断条件筛选出所有的水仙花数。

For i = 100 To 999

x = Right(i, 1)

y = Mid(i, 2, 1)

z = Left(i, 1)

If x * x * x + y * y * y + z * z * z = i Then

Print i; "是水仙花数!"

End If

Next i

方法三:

学生直接使用百位、十位、个位作为循环变量,使用三个For循环的嵌套,用百位、十位、个位上的数字组成所有三位数,再与三个数位的立方和相比较,最后根据判断条件筛选出所有的水仙花数。

For z = 1 To 9

For y = 0 To 9

For x = 0 To 9

i = z * 100 + y * 10 + x

If x * x * x + y * y * y + z * z * z = i Then

Print i; "是水仙花数!"

End If

Next x

Next y

Next z

也许这就说明了学生的潜能是不可估量的。

三、程序设计的过程中还可以与数学学科的学习有效地整合

学习《算法和程序设计》要依靠许多数学的知识,因此可以让学生体会数学知识在程序设计中的运用。如用Print输出一个用“*”组成的菱形图案:

*

***

*****

***

*

我们用上图为例,分析一下,这是一个对称的图形,不仅上下对称,而且左右对称,为了使它的输出左右对称,在每一行的左侧都要填充相应个数的空格,在VB中使用Spc()函数来加入空格,然后用For循环输出连续的“*”号,当“*”号输出结束后,换下一行。

每一行输出的过程:

1)输出相应的空格Print Spc();

2)用For循环输出连续的“*”号;

3)换行。

在这里,图案的行数、每一行输出的“*”号的个数和每一行“*”号前的空格的个数可以是变化的。那么这几个数字和行数有什么关系?怎样建立数字和行数之间的关系呢?

首先,我们通过下表寻找每一行前保留的空格的个数的变化规律。

空格的个数数学关系行数iVB函数关系Abs(i)

12| -2 |-2Abs(-2)

21| -1 |-1Abs(-1)

30| 0 |0Abs(0)

41| 1 |1Abs(1)

52| 2 |2Abs(2)

从“*”号前保留的空格的数目上及我们对这些数字的分析,我们找到了一组循环变量i的取值:-2~2,也就是我们的行数是从-2行到2行。下面我们再分析一下,每一行输出“*”号的个数与行数有没有对应关系。

“*”的

个数数学关系函数关系

5-2*Abs(i)行数i

115-45-2*25-2*|-2|5-2*Abs(-2)-2

235-25-2*15-2*|-1|5-2*Abs(-1)-1

355-05-2*05-2*|0|5-2*Abs(0)0

435-25-2*15-2*|1|5-2*Abs(1)1

515-45-2*25-2*|2|5-2*Abs(2)2

由此,我们得到了两个对应关系,实际上这就类似于数学上函数的一一对应关系。

空格的个数与行数i的关系:| i |。

每一行输出的“*”号的个数与行数的关系:5-2*|i|,

即要重复输出5-2*| i |个“*”号。

Dim i, j, N As Integer

For i = -2 To 2

Print Spc(Abs(i));

For j = 1 To N - 2 * Abs(i)

Print "*";

Next j

Print

Next i

以这种方式分析问题,就可以让学生利用数学相关知识分析问题,再转换成相应的程序代码,解决问题。

综上所述,中学生完全有能力学习好《算法与程序设计》,通过自主学习分析、解决问题。在程序设计的过程中,学生除了获得解决问题的方法、提高自己的逻辑思维能力和创新能力外,也能获得解决问题的成就感,这种成就感又可以激发学生自主学习的欲望。

(以上程序均使用Visual Basic 6.0,在Windows XP操作系统下运行通过)

(责任编辑袁妮)endprint

随着信息技术新课程改革的不断推进,江苏省信息技术学业水平测试的实施,信息技术课的开设越来越规范,也越来越受到学校、教师和学生的重视。现在网络技术应用所涉及的知识体系比较庞大,对于中学生而言,要求掌握的知识都只是计算机网络技术中最基础的内容。即便如此,中学阶段的网络技术应用也对学校网络的软件、硬件设备要求极高,一般学校根本达不到要求,学生只能肤浅地通过知识的识记来完成网络技术的学习。更有甚者,有的学校在高二阶段通过使用题海战术来达到使学生信息技术学业水平测试过关的目的。这已经违背了我们开设技术课程的宗旨,学生既掌握不了真正的技术和技能,更谈不上知识和技能的迁移,只会简单的记忆和模仿。所以笔者建议中学生应该学习《算法与程序设计》,提高自己的综合能力。

一、中学生完全有能力学好《算法与程序设计》,提高自己的逻辑思维能力

《算法与程序设计》这门课有助于学生揭开计算机神秘的面纱。通过学习,学生不仅可以了解平时使用的计算机软件是如何开发出来的,还能从程序设计语言上了解计算机的工作原理和计算机软件的设计过程,甚至能设计出一些简单的软件。学习程序设计还可以培养学生独立思考、有条理地处理各种问题的能力,提高解决问题的效率,使学生在以后的生活、学习过程中受益。

二、程序设计的过程也是培养学生创新能力的过程

最简单的关于设计的定义就是一种“有目的的创作行为”。《算法与程序设计》其实也是在培养学生的创新能力。笔者在实际教学过程中,就遇到了这样的案例。

如用穷举法列举出所有的水仙花数。

水仙花数是指一个三位数,它的各数位上的数的立方和正好等于该数本身。如153=13+53+33,153即是一个水仙花数。

首先带领学生分析解决这个问题的算法,使用穷举法对所有三位数逐一筛选,求出所有水仙花数。对任意一个三位数i,其个位数用x表示,十位数用y表示,百位数用z表示(x,y,z均为0~9之间的数,z≠0),解决问题的方法:如果满足条件x3+y3+z3=i,那么i即是水仙花数。

分析完算法后,学生就自己去设计程序。在学生完成的程序中,至少可以用三种方法求出所有水仙花数。

方法一:

学生在VB中学习过整除(Mod)和取余(\)运算,可以用整除(Mod)和取余(\)运算表示出三位数中个位、十位、百位上的数字,然后根据判断条件筛选出所有的水仙花数。

源代码略。

方法二:

有的学生把每个三位数看成是一个三个数字字符组成的字符串,使用字符串函数来取出个位、十位、百位上的数字,然后根据判断条件筛选出所有的水仙花数。

For i = 100 To 999

x = Right(i, 1)

y = Mid(i, 2, 1)

z = Left(i, 1)

If x * x * x + y * y * y + z * z * z = i Then

Print i; "是水仙花数!"

End If

Next i

方法三:

学生直接使用百位、十位、个位作为循环变量,使用三个For循环的嵌套,用百位、十位、个位上的数字组成所有三位数,再与三个数位的立方和相比较,最后根据判断条件筛选出所有的水仙花数。

For z = 1 To 9

For y = 0 To 9

For x = 0 To 9

i = z * 100 + y * 10 + x

If x * x * x + y * y * y + z * z * z = i Then

Print i; "是水仙花数!"

End If

Next x

Next y

Next z

也许这就说明了学生的潜能是不可估量的。

三、程序设计的过程中还可以与数学学科的学习有效地整合

学习《算法和程序设计》要依靠许多数学的知识,因此可以让学生体会数学知识在程序设计中的运用。如用Print输出一个用“*”组成的菱形图案:

*

***

*****

***

*

我们用上图为例,分析一下,这是一个对称的图形,不仅上下对称,而且左右对称,为了使它的输出左右对称,在每一行的左侧都要填充相应个数的空格,在VB中使用Spc()函数来加入空格,然后用For循环输出连续的“*”号,当“*”号输出结束后,换下一行。

每一行输出的过程:

1)输出相应的空格Print Spc();

2)用For循环输出连续的“*”号;

3)换行。

在这里,图案的行数、每一行输出的“*”号的个数和每一行“*”号前的空格的个数可以是变化的。那么这几个数字和行数有什么关系?怎样建立数字和行数之间的关系呢?

首先,我们通过下表寻找每一行前保留的空格的个数的变化规律。

空格的个数数学关系行数iVB函数关系Abs(i)

12| -2 |-2Abs(-2)

21| -1 |-1Abs(-1)

30| 0 |0Abs(0)

41| 1 |1Abs(1)

52| 2 |2Abs(2)

从“*”号前保留的空格的数目上及我们对这些数字的分析,我们找到了一组循环变量i的取值:-2~2,也就是我们的行数是从-2行到2行。下面我们再分析一下,每一行输出“*”号的个数与行数有没有对应关系。

“*”的

个数数学关系函数关系

5-2*Abs(i)行数i

115-45-2*25-2*|-2|5-2*Abs(-2)-2

235-25-2*15-2*|-1|5-2*Abs(-1)-1

355-05-2*05-2*|0|5-2*Abs(0)0

435-25-2*15-2*|1|5-2*Abs(1)1

515-45-2*25-2*|2|5-2*Abs(2)2

由此,我们得到了两个对应关系,实际上这就类似于数学上函数的一一对应关系。

空格的个数与行数i的关系:| i |。

每一行输出的“*”号的个数与行数的关系:5-2*|i|,

即要重复输出5-2*| i |个“*”号。

Dim i, j, N As Integer

For i = -2 To 2

Print Spc(Abs(i));

For j = 1 To N - 2 * Abs(i)

Print "*";

Next j

Print

Next i

以这种方式分析问题,就可以让学生利用数学相关知识分析问题,再转换成相应的程序代码,解决问题。

综上所述,中学生完全有能力学习好《算法与程序设计》,通过自主学习分析、解决问题。在程序设计的过程中,学生除了获得解决问题的方法、提高自己的逻辑思维能力和创新能力外,也能获得解决问题的成就感,这种成就感又可以激发学生自主学习的欲望。

(以上程序均使用Visual Basic 6.0,在Windows XP操作系统下运行通过)

(责任编辑袁妮)endprint

随着信息技术新课程改革的不断推进,江苏省信息技术学业水平测试的实施,信息技术课的开设越来越规范,也越来越受到学校、教师和学生的重视。现在网络技术应用所涉及的知识体系比较庞大,对于中学生而言,要求掌握的知识都只是计算机网络技术中最基础的内容。即便如此,中学阶段的网络技术应用也对学校网络的软件、硬件设备要求极高,一般学校根本达不到要求,学生只能肤浅地通过知识的识记来完成网络技术的学习。更有甚者,有的学校在高二阶段通过使用题海战术来达到使学生信息技术学业水平测试过关的目的。这已经违背了我们开设技术课程的宗旨,学生既掌握不了真正的技术和技能,更谈不上知识和技能的迁移,只会简单的记忆和模仿。所以笔者建议中学生应该学习《算法与程序设计》,提高自己的综合能力。

一、中学生完全有能力学好《算法与程序设计》,提高自己的逻辑思维能力

《算法与程序设计》这门课有助于学生揭开计算机神秘的面纱。通过学习,学生不仅可以了解平时使用的计算机软件是如何开发出来的,还能从程序设计语言上了解计算机的工作原理和计算机软件的设计过程,甚至能设计出一些简单的软件。学习程序设计还可以培养学生独立思考、有条理地处理各种问题的能力,提高解决问题的效率,使学生在以后的生活、学习过程中受益。

二、程序设计的过程也是培养学生创新能力的过程

最简单的关于设计的定义就是一种“有目的的创作行为”。《算法与程序设计》其实也是在培养学生的创新能力。笔者在实际教学过程中,就遇到了这样的案例。

如用穷举法列举出所有的水仙花数。

水仙花数是指一个三位数,它的各数位上的数的立方和正好等于该数本身。如153=13+53+33,153即是一个水仙花数。

首先带领学生分析解决这个问题的算法,使用穷举法对所有三位数逐一筛选,求出所有水仙花数。对任意一个三位数i,其个位数用x表示,十位数用y表示,百位数用z表示(x,y,z均为0~9之间的数,z≠0),解决问题的方法:如果满足条件x3+y3+z3=i,那么i即是水仙花数。

分析完算法后,学生就自己去设计程序。在学生完成的程序中,至少可以用三种方法求出所有水仙花数。

方法一:

学生在VB中学习过整除(Mod)和取余(\)运算,可以用整除(Mod)和取余(\)运算表示出三位数中个位、十位、百位上的数字,然后根据判断条件筛选出所有的水仙花数。

源代码略。

方法二:

有的学生把每个三位数看成是一个三个数字字符组成的字符串,使用字符串函数来取出个位、十位、百位上的数字,然后根据判断条件筛选出所有的水仙花数。

For i = 100 To 999

x = Right(i, 1)

y = Mid(i, 2, 1)

z = Left(i, 1)

If x * x * x + y * y * y + z * z * z = i Then

Print i; "是水仙花数!"

End If

Next i

方法三:

学生直接使用百位、十位、个位作为循环变量,使用三个For循环的嵌套,用百位、十位、个位上的数字组成所有三位数,再与三个数位的立方和相比较,最后根据判断条件筛选出所有的水仙花数。

For z = 1 To 9

For y = 0 To 9

For x = 0 To 9

i = z * 100 + y * 10 + x

If x * x * x + y * y * y + z * z * z = i Then

Print i; "是水仙花数!"

End If

Next x

Next y

Next z

也许这就说明了学生的潜能是不可估量的。

三、程序设计的过程中还可以与数学学科的学习有效地整合

学习《算法和程序设计》要依靠许多数学的知识,因此可以让学生体会数学知识在程序设计中的运用。如用Print输出一个用“*”组成的菱形图案:

*

***

*****

***

*

我们用上图为例,分析一下,这是一个对称的图形,不仅上下对称,而且左右对称,为了使它的输出左右对称,在每一行的左侧都要填充相应个数的空格,在VB中使用Spc()函数来加入空格,然后用For循环输出连续的“*”号,当“*”号输出结束后,换下一行。

每一行输出的过程:

1)输出相应的空格Print Spc();

2)用For循环输出连续的“*”号;

3)换行。

在这里,图案的行数、每一行输出的“*”号的个数和每一行“*”号前的空格的个数可以是变化的。那么这几个数字和行数有什么关系?怎样建立数字和行数之间的关系呢?

首先,我们通过下表寻找每一行前保留的空格的个数的变化规律。

空格的个数数学关系行数iVB函数关系Abs(i)

12| -2 |-2Abs(-2)

21| -1 |-1Abs(-1)

30| 0 |0Abs(0)

41| 1 |1Abs(1)

52| 2 |2Abs(2)

从“*”号前保留的空格的数目上及我们对这些数字的分析,我们找到了一组循环变量i的取值:-2~2,也就是我们的行数是从-2行到2行。下面我们再分析一下,每一行输出“*”号的个数与行数有没有对应关系。

“*”的

个数数学关系函数关系

5-2*Abs(i)行数i

115-45-2*25-2*|-2|5-2*Abs(-2)-2

235-25-2*15-2*|-1|5-2*Abs(-1)-1

355-05-2*05-2*|0|5-2*Abs(0)0

435-25-2*15-2*|1|5-2*Abs(1)1

515-45-2*25-2*|2|5-2*Abs(2)2

由此,我们得到了两个对应关系,实际上这就类似于数学上函数的一一对应关系。

空格的个数与行数i的关系:| i |。

每一行输出的“*”号的个数与行数的关系:5-2*|i|,

即要重复输出5-2*| i |个“*”号。

Dim i, j, N As Integer

For i = -2 To 2

Print Spc(Abs(i));

For j = 1 To N - 2 * Abs(i)

Print "*";

Next j

Print

Next i

以这种方式分析问题,就可以让学生利用数学相关知识分析问题,再转换成相应的程序代码,解决问题。

综上所述,中学生完全有能力学习好《算法与程序设计》,通过自主学习分析、解决问题。在程序设计的过程中,学生除了获得解决问题的方法、提高自己的逻辑思维能力和创新能力外,也能获得解决问题的成就感,这种成就感又可以激发学生自主学习的欲望。

(以上程序均使用Visual Basic 6.0,在Windows XP操作系统下运行通过)

(责任编辑袁妮)endprint

猜你喜欢
行数水仙花三位数
摆三位数
积是三位数还是四位数
英语专业八级统测改错试题语言特征
玉米超多穗行数基因型通15D969 的 单倍体育种效应
水仙花
摆三位数
养水仙花
玉米超多穗行数DH系15D969的发现
三位数密码