Small Basic中文站-快乐编程

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2888|回复: 29

用SmallBasic教小朋友学电脑编程

  [复制链接]
发表于 2014-6-30 11:57:44 | 显示全部楼层 |阅读模式
大家好!
    我和大家一样,是一位电脑爱好者。在DOS时代,有过一段教小朋友编程的经历。当时的条件远远不能和今天相比,在一般的中小学中还没有电脑。只能将一些小朋友组织到“少年宫”或“少科站”学电脑。使用的电脑,内存只有64k(不要认为我写错了,确实只有64k);外存是一张磁片。操作系统DOS,语言BASICA(QBASIC)。现在回顾起来老土的啦。老师也是边学边教,学生学得非常认真。小朋友在学电脑编程的过程中,学到了许多有用思想方法和技巧。循环、分支、子程序、过程、递归等等一应俱全,较高一些年级的学生(例如初中一、二年级)还学了一些数据结构的知识。所有这些对参与学习的同学都有很大好处,后来他们大部分都在大学的计算机系深造或出国留学。随着时代的发展,BASIC语言也渐渐退出了历史。但是,作为一种便捷、易学的计算机语言,对于初学者来说还是比较容易上手的。
好在微软有Smallbasic这一款软件,它涵盖了当年BASIC语言和LOGO语言的主要命令以及常用的数学函数,可以完成绝大部分任务。特别是它可以在WIN7WIN8下运行,而且运行后生成的EXE程序,可以直接调用。各位如果有兴趣教亲戚朋友的孩子学电脑编程的话,不妨试试Smallbasic。另外,如果你有时会写一些代码编个小程序玩玩,用它来写会感到很方便。
基于以上原因,我想将当年教小朋友编写电脑程序的内容整理出来,配上调试好的Smallbasic程序供大家参考并请批评指正。
文章共分上下两篇。上篇只用文本窗口,共有15课;下篇用到图形窗口,共有10课。每课有一、两个程序,教小朋友一个命令或一个方法。难度逐渐加深。最后几课借用的是“迷宫”、“八皇后”、“骑马遍历”等比较有趣的问题。每一课的内容只是提纲以及相关的程序代码。

回复

使用道具 举报

 楼主| 发表于 2014-6-30 11:58:55 | 显示全部楼层
A01课 你好,SmallBsica
本课内容提要:
1。如何运行Smallbasic
2Smallbasic窗口各个区域的功能。
3。菜单栏介绍。
4。编写程序时中西文的切换。
5Smallbasic程序的运行(F5键)。

程序A01-1
TextWindow.Write("输入你的名字:")
name=TextWindow.Read()
TextWindow.WriteLine(name+"你好!")

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-30 12:00:55 | 显示全部楼层
A02课 显示答案
——WriteWriteLine操作
本课内容提要:
1。数、字符、字符串、变量的概念。
2Write操作和WriteLine操作的区别。

程序A02-1
TextWindow.WriteLine(1)
TextWindow.WriteLine(05)
TextWindow.WriteLine("005")
a=10
TextWindow.WriteLine(a)
TextWindow.WriteLine("a")
TextWindow.WriteLine("  *")
TextWindow.WriteLine(" ***")
TextWindow.WriteLine("*****")
TextWindow.WriteLine(" ***")
TextWindow.WriteLine("  *")


回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-30 12:01:53 | 显示全部楼层
A03课  会变戏法的盒子
——赋值命令
本课内容提要:
1。向变量赋值:变量名=表达式。
2。字符串的连接:“+”。
3。两个变量相互交换它们的值,三角交换法。

程序A03-1
a=35
b="高老师"
TextWindow.WriteLine(a)
TextWindow.WriteLine(b)
TextWindow.WriteLine(b+"今年"+a+"")

程序A03-2  已知长方形的长和宽,求它的面积:
=10
=20
积面=*
TextWindow.WriteLine("面积="+积面)

注:这个程序中的变量用的是中文,说明程序中的变量名可以是英文字母,也可以是中文,当然也可以用汉语拼音。这对于小朋友来说会增加程序的可读性。

程序A03-3  交换ab两个变量的值
a=1
b=2
TextWindow.Write("a="+a)
TextWindow.WriteLine("b="+b)
c=a
a=b
b=c
TextWindow.Write("a="+a)
TextWindow.WriteLine("b="+b)

程序A03-4
a=1
b=2
TextWindow.Write("a="+a)
TextWindow.WriteLine("b="+b)
TextWindow.Pause()
c=a
a=b
b=c
TextWindow.Write("a="+a)
TextWindow.WriteLine("b="+b)
TextWindow.Pause()
TextWindow.Clear()
TextWindow.Write("a="+a)
TextWindow.WriteLine("b="+b)


程序A03-4与程序A03-3的不同是增加了两条命令:
TextWindow.Pause()
TextWindow.Clear()
它们的功能是在程序运行过程中暂停和刷新TextWindow


回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-30 12:03:28 | 显示全部楼层
A04课    猜猜心中想的数
——键盘输入操作
本课内容提要:
1。键盘输入操作:Read操作。
2。数学函数的运用:math.Floor()取整操作;
                   math.Remainder()取余操作;
                   math.Round()四舍五入操作。
3。文本窗口的定位:textwindow.Top属性;
                   textwindow.Left属性。

程序A04-1  莱蒙托夫猜数字游戏
TextWindow.WriteLine("请你任意想一个数")
TextWindow.Pause()
TextWindow.WriteLine("把这个数加上2")
TextWindow.Pause()
TextWindow.WriteLine("再乘以3")
TextWindow.Pause()
TextWindow.WriteLine("再减去5")
TextWindow.Pause()
TextWindow.WriteLine("再减去你心中想的数")
TextWindow.Pause()
TextWindow.WriteLine("请你将计算结果告诉我")
y=TextWindow.Read()
x=(y-1)/2
TextWindow.WriteLine("哈哈,你心中想的那个数一定是"+x)


程序A04-2  99个苹果分给怎么分?(取整和取余)
a=99
TextWindow.WriteLine("现在有"+a+"个苹果,你打算分给几个人?")
b=TextWindow.Read()
c=math.Floor(a/b)
d=math.Remainder(a,b)
TextWindow.WriteLine("每人"+c+""+"余剩"+d+"")

程序A04-3 求三门学科成绩的总分和平均分。(小数一位四舍五入)
TextWindow.Top=25
TextWindow.Left=20
TextWindow.Write("语文=")
语文=TextWindow.Read()
TextWindow.Write("数学=")
数学=TextWindow.Read()
TextWindow.Write("英文=")
英文=TextWindow.Read()
总分=语文+数学+英文
TextWindow.WriteLine("总分="+总分)
平均=总分/3
TextWindow.WriteLine("平均="+平均)
平均=math.Round(10*平均)/10
TextWindow.WriteLine("平均="+平均)
注:第二个平均成绩是经过四四舍五入处理的。程序开始加上的两条命令是为了固定文本窗口的位置,免得它不断的往后退。


回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-30 12:04:30 | 显示全部楼层
A05课 电脑出算术题
——随机函数和If-then-else1
本课内容提要:
1。一定范围之内的随机整数math.GetRandomNumber()
2。分支的概念。
前面几课的程序按结构来看都属于一种顺序结构,即程序的执行是按语句的先后顺序一条一条逐一完成的。其实,生活中有更多的事却是要按条件的不同来分别处理,形成分支,这就要用到有选择结构的程序。

程序A05-1  电脑随机出一道两位数的加法题
a=math.GetRandomNumber(100)
b=math.GetRandomNumber(100)
TextWindow.Write(a+"+"+b+"=")
c=textwindow.Read()

程序A05-2  改进上一个程序,让电脑判别答案是否正确。
a=math.GetRandomNumber(100)
b=math.GetRandomNumber(100)
d=a+b
TextWindow.Write(a+"+"+b+"=")
c=textwindow.Read()
If a+b=c Then
  TextWindow.WriteLine("ok")
Else
  TextWindow.Write("X    ")                   ‘打上一个叉
  TextWindow.WriteLine(a+"+"+b+"="+d)         ‘给出正确答案
  EndIf

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-30 12:06:23 | 显示全部楼层
A06课  数字的排列
——If-then-else2
本课内容提要:
本课内容提要:
[size=14.0000pt]1.关系表达式的概念。
[size=14.0000pt]2.取大数函数math.max()和取小数函数math.min()
关系表达式的格式是:
数学表达式 + 关系运算符 + 数学表达式
其中关系运算符有:大于>,小于<,等于=,不大于<=
                  不小于>=,不等于<>


程序A06-1  输入两个数,让电脑将较大的数挑出来。
a=textwindow.Read()
b=textwindow.Read()
If
a<b
Then

a=b
EndIf
textwindow.WriteLine("max="+a)

程序A06-2  输入3个数,让电脑将最大的数挑出来。
a=textwindow.Read()
b=textwindow.Read()
c=textwindow.Read()
If
a<b
Then

a=b
EndIf
If
a<c
Then

a=c

EndIf
textwindow.WriteLine("max="+a)

程序A06-3  输入3个数,让电脑将它们从小到大排列起来。
a=textwindow.Read()
b=textwindow.Read()
c=textwindow.Read()
If
a>b
Then

d=a

a=b

b=d
EndIf
If
a>c
Then

d=a

a=c

c=d
EndIf
If
b>c
Then

d=b

b=c

c=d

endif
textwindow.WriteLine(a+"..."+b+"..."+c)

程序A03-4  利用取大数函数和取小数函数完成程序A06-3
a=textwindow.Read()
b=textwindow.Read()
c=textwindow.Read()
a1=a
b1=b
a=math.Min(a1,b1)
b=math.Max(a1,b1)
a1=a
c1=c
a=math.Min(a1,c1)
c=math.Max(a1,c1)
b1=b
c1=c
b=math.Min(b1,c1)
c=math.Max(b1,c1)
textwindow.WriteLine(a+"..."+b+"..."+c)


==================未完待续================

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-2 13:04:36 | 显示全部楼层
A07课 奇数和偶数
——If-then-else3
本课内容提要:
1.逻辑运算符和逻辑表达式。
逻辑运算符:逻辑与And,逻辑或Or,逻辑非Not
2。由逻辑运算符将关系表达式连接构成逻辑表达式,在程序中作为分支结构的条件。

程序A07-1   由电脑随机产生3100以内的自然数,只将其中大于30的偶数显示出来。
a=math.GetRandomNumber(100)
b=math.GetRandomNumber(100)
c=math.GetRandomNumber(100)
If
a>30
And
a/2=math.Floor(a/2)
Then

TextWindow.WriteLine(a)
EndIf
If
b>30
And
b/2=math.Floor(b/2)
Then

TextWindow.WriteLine(b)
EndIf
If
c>30
And
c/2=math.Floor(c/2)
Then

TextWindow.WriteLine(c)
EndIf

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-2 13:07:12 | 显示全部楼层
A08课 充分地操作
——While-Endwhile循环
本课内容提要:
[size=14.0000pt]1.重复的操作,构成循环。
[size=14.0000pt]2.无条件的循环和有条件的循环。

程序A08-0  1开始,将自然数不断显示出来。
TextWindow.Top=25
TextWindow.Left=25
x=1
start:                     ' 标号,作为一段程序开始的标志
TextWindow.Write("  "+x)
x=x+1
Goto start                 '  回到start:继续运行


程序A08-1  让电脑显示10100以内的自然数。
i=0
While
i<10
i=i+1
TextWindow.WriteLine("i="+math.GetRandomNumber(100))
EndWhile


程序A08-2  键盘上输入10个数,让电脑将它们累加。
i=0
While
i<10

s=s+textwindow.Read()

i=i+1

EndWhile
TextWindow.WriteLine("s="+s)



回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-5 14:24:15 | 显示全部楼层
A09课  数列求和
——For-endfor

本课内容提要:
运用For-endfor命令做循环操作。



程序A09-1  S=1+5+9+···+97的和。
a=1
TextWindow.Write(a)
For
i=1
To
99

s=s+a

a=a+4

TextWindow.Write("+"+a)
EndFor

TextWindow.WriteLine("="+s)


程序A09-2  S=1+5+9+···共100个数字的和。
a=1
TextWindow.Write(a)
For i=1 To 99
  s=s+a
  a=a+4
  TextWindow.Write("+"+a)
EndFor
  TextWindow.WriteLine("="+s)

程序A09-3  S=1+1/2+1/3+......+1/100  的和。
For i=1 To 100
  s=s+1/i
  TextWindow.Write("I="+i)
  TextWindow.WriteLine("   1/i="+1/i)
  EndFor
  TextWindow.WriteLine("s="+s)

程序A09-4  例有一数列:112358.....,让计算机根据规律找出该数列前10个数,并且求出他们的累加和。(该数列的规律:从第三个数起,每个数都是前两个数的和。)
a=1
TextWindow.WriteLine(a)
b=a
TextWindow.WriteLine(b)
For
i=3
To
10
c=a+b
TextWindow.WriteLine(c)
a=b
b=c
EndFor

程序A09-5 相传古印度国王要嘉奖国际象棋的发明者塞萨,问塞萨有何要求,回答:“陛下只要在国际象棋棋盘的第一格放上一粒麦子,第二格放二粒,以后每一格放的麦子数是前一格的两倍,一直放满棋盘的64格,其他什么都不要。”国王一口答应,但算了一天一夜,也没算完,请编程为国王计算到底要多少麦子。
如果一立方米麦子有142000颗,如果造一个高4米、宽10米的粮仓,该饶地球赤道多少圈?(地球赤道一圈以4万公里计)

x=1
y=1
For i=1 To 63
  x=x*2
  y=y+x
endfor
  TextWindow.WriteLine("需要"+y+"粒麦子")
  y=math.Floor(y/142000)
  TextWindow.WriteLine("堆起来有"+y+"立方米")
  y=math.Floor(y/4/10/1000)
  TextWindow.WriteLine("需要建造高10米高4米的粮仓"+y+"")
  y=math.Floor(y/40000)
  TextWindow.WriteLine("沿着赤道绕地球"+y+"")
==================未完待续================

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|Small Basic中文站-快乐编程 ( 闽ICP备09051788号 |

GMT+8, 2017-10-17 22:42 , Processed in 0.287001 second(s), 8 queries , File On.

Powered by Discuz! X3.3

快速回复 返回顶部 返回列表