第 3 章程序控制结构
3.1 输入输出语句
3.2 顺序结构
3.3 选择结构
3.4 循环结构
3.5 辅助控制语句
3.6 常用算法举例
3.1 输入输出语句输入:信息从计算机外设传输到计算机内存。
输入的来源有:
键盘、鼠标、外存储设备。
( VB中输入的形式有,InputBox、文件)
输出:信息从计算机内存传输到计算机主机外。
输出去向有:
显示器屏幕、外存储设备、打印机
( VB中输出的形式有,MsgBox,print、文件)
3.1.1 InputBox函数若执行下列语句,时会出现下面所示的对话框:
x= InputBox("请输入一个数 ","给 x赋值 ","666",100,200)
若用户直接单击“确定”按钮,则 x将得到值 "666";若用户输入
"888"替换掉原默认值,再单击“确定”按钮,则 x将得到值 "888"。
InputBox函数的一般使用格式如下:
x1= InputBox(提示内容 [,标题 ] [,函数的默认值 ] [,x] [,y])
其中,提示内容 ——必填参数,是将出现在对话框的字符 。 标题 ——将出现在对话框标题栏的字符 。 函数的默认值 ——默认出现的输入内容 。 X和 y——
对话框出现的位置 ( 左上角点的水平,垂直坐标 ) 。

3.1.2 MsgBox函数和 MsgBox过程
x= InputBox("请输入密码字符 ")
If Len(x)<6 Then '当 x中的值少于 6个字符时,则执行下面语句
y=MsgBox("错误:您输入的字符串不足 6位 ",VbOkOnly,"密码消息 ")
End If
执行上述语句时若在输入框中输入少于 6个字符的内容,则会出现下面图所示的消息框;而输入 6个以上字符则不出现下面的消息框 。
MsgBox例注意消息框中出现的 提示内容、标题栏内容、按钮的形式 。

3.1.2 MsgBox函数和 MsgBox过程函数形式,变量名 = MsgBox( 提示 [,按钮 ][,标题 ] )
过程形式,MsgBox 提示 [,按钮 ] [,标题 ]
函数返回所选按钮整数值,
不同组的方式可用,+‖组合使用,如,vbOkOnly+vbCritical
r r
r r
例 3-1 编一程序,当用户单击图 中 的 Command1按钮时程序弹出输入框,要求用户输入信息;当用户输入信息并确定后,接着弹出含有,是,和,否,按钮的消息框 (标题为默认内容 )。
若用户单击,是,按钮则程序继续运行;若单击,否,按钮则程序退出。
程序如下:
Private Sub Command1_Click()
x = InputBox("请输入信息 ")
y = MsgBox(x,vbYesNo)
If y = 7 Then '如果用户单击,否,按钮,那么
End '结束程序
End If
End Sub
当用户在前一个输入框中输入,AAA‖时,弹出的消息框
3.1.3 Print方法
Print方法的作用是在 一些对象 上输出信息,其一般使用格式如下:
[对象 ].Print [Spc(n) | Tab(n)] [表达式列表 ] [结束符 ]
其中:
对象,可选参数 。 可以是窗体,图片框名称或打印机对象 。
Spc(n):可选参数 。 等效于 Space(n),表示输出 n个空格字符 。
Tab(n):可选参数;用来将插入点定位在绝对列号 n上;
Tab表示下一个打印区。
表达式列表,可选参数;是要打印的数值或字符串表达式。
结束符,可选参数(有,;);指定下一个字符的插入点位置。
例 3-2 Print方法的使用例 。 本程序执行后,输出的结果将如图所示 。
Private Sub Form_Click()
x = 50,y = "库存书 "
Print "ABC1"; "■■■■■ "
Print "ABC2","□□□□□ "
Picture1.Print
Picture1.Print "1234567890"
Picture1.Print Tab(3); "111"; y; "="; x; "本 "
Picture1.Print Spc(3); "222"; y; "="; x; "本 "
End Sub
3.1.4 格式输出输出数据的格式由 Format函数确定,Format的一般格式如下:
Format( 表达式,格式字符串 )
其中:
表达式,是要格式化的数值、日期或字符串类型表达式。
格式字符串,是一个加双引号的字符串,它说明前面的表达式按什么格式输出。格式字符串有三类:数值格式、日期格式和字符串格式。分别参见表 3-3、表 3-4和表 3-5。
举例,
Dim MyTime,MyDate,MyStr
MyTime = #17:04:23#
MyDate = #January 27,1993#
MyStr = Format(MyTime,"h:m:s") '返回 "17:4:23"
MyStr = Format(MyTime,"hh:mm:ss AMPM") ' 返回 "05:04:23 PM"
MyStr = Format(MyDate,"dddd,mmm d yyyy")' 返回 "Wednesday,Jan 27 1993"
' 用户自定义的格式
MyStr = Format(5459.4,"# #,# #0.00") ' 返回 "5,459.40"
MyStr = Format(334.9,"# # #0.00") ' 返回 "334.90"
MyStr = Format(5,"0.00%") ' 返回 "500.00%"
MyStr = Format("HELLO","<") ' 返回 "hello"
MyStr = Format("This is it",">") ' 返回 "THIS IS IT"

3.1.5 打印机输出
1,打印机对象
VB6 提供的打印机对象 ( Printer ) 允许用户使用安装在
Windows中的打印机 。 使用打印机对象的 Print方法可以把以往输出到屏幕的内容输出到打印机 。
( 1) 打印机对象的常用属性
FontCount:打印机可用的字体总数 。
FontName:字体名称 。 其值是字符串表达式,如,"宋体 "。
FontSize:字体大小 。 其值是数值表达式,用磅为单位 。
PrintQuality:打印质量 。 设置或返回打印机的分辨率,是整型数 ( -1~ -4对应分辨率从低到高 ) 。 如设置草稿质量:
Printer.PrintQuality= -1。
( 2) 打印机对象的常用方法
Print:打印 。 向打印机输出文本或数据 。
Pset,Line,Circle:分别为画点,画线,画园 。
PaintPicture:打印图形 。
EndDoc:文档结束 。
NewPage:用以结束 Printer对象中的当前页并前进到下一页 。
KillDoc:删除文档 。 立即终止当前的打印 。
( 3) 语句示例:
Printer.Print "VB编程 ",Printer.NewPage
Pi= 3.1415926,Printer.Print "Pi=";Pi
Printer.EndDoc
2,打印 VB代码在工程窗口内选择要打印哪个窗体或模块中的代码,接着打开,文件,菜单中的,打印,命令,出现如图 3-5所示的
,打印,对话框 。 在,范围,栏内选择,当前模块,;在
,打印内容,栏内选择,代码,。
图 3-5 打印对话框
3,打印 VB窗体方法一,在图 3-5对话框选择,窗体图像,即可 。
方法二,使用窗体的 PrintForm方法,其语法为:
[窗体名,] PrintForm
3.1.6 字型
Font对象包含格式化文本所需要的信息 。
经常用显示文本的对象的 Font属性来标识 Font对象 。
对象的 Font属性包括 6类子属性 。
设定字体各类属性的语句 (对当前对象设置可省略对象名 ):
设置字体类型语句,[对象名,]FontName [=字体类型 ]
设置字符尺寸语句,[对象名,]FontSize [=数值 ]
设置是否加粗语句,[对象名,]FontBold [=True / False]
设置是否倾斜语句,[对象名,]FontItalic [=True / False]
设置是否加删除线,[对象名,]FontStrikethru [=True / False]
设置是否加下划线,[对象名,]FontUnderline [=True / False]
3.2 顺序结构顺序结构是程序三种基本结构中的一种最常见、最简单的情景。
顺序结构一般由赋值语句、输出数据语句和输入数据语句组成。
3.2.1 赋值语句赋值语句的功能就是将一种数据送到某个内存变量存储单元 。
格式,变量名=数据 ( 或表达式 )
例如,X=5
又如,X=X+ 1
先计算赋值符号右边的表达式的值,然后把结果赋给左边的变量 。
注意与等于符号区分
3.2.2 输出数据输出数据是通过输出语句将 常量,变量的值,对象属性的值 或表达式的值 向 容器控件,显示器,打印机,磁盘文件 输送 。
( 1) 常见的输出语句类型,
MsgBox消息框; Print方法;写文件的语句 ( 见第 10章 ) 。
( 2) 输出的数据表达形式:
常量 ( 如,5,True,"Book") ; 变量 ; 对象属性的值 ( 如:
Text1.Text); 表达式 (如,2*x+1); 函数 ( 如,Sqr(16))等 。
( 3) 输出的位置:
容器控件(如窗体、图片框等) ; 显示器 ; 打印机 ; 磁盘文件 。
3.2.3 顺序结构的特征组成顺序结构的基本语句是一些输入,输出语句 。
写顺序结构程序时,须明白:先作什么? 后做什么?
例 3-3 编一个转换华氏温度与摄氏温度的程序,转换公式是:
F=9/5*C+32 (1)'将摄氏温度转换为华氏温度,F为华氏温度值
C=5/9*( F-32) (2)'将华氏温度转换为摄氏温度,C为摄氏温度值要求:单击,转华氏,按钮,则将摄氏温度转换为华氏温度;
单击,转摄氏,按钮,则将华氏温度转换为摄氏温度 。
例 3-3 温度转换程序界面
Text1 Text2
Command1 Command2
3.3 选择结构
3.3.1 单分支选择
If <表达式 > Then
<语句块 >
End If
或,If <表达式 > Then <语句 >
例,已知两个数 x和 y,比较它们的大小,
并使得 x大于 y。
If x<y Then
t=x
x=y
y=t
End If
或 If x<y Then t=x,x=y,y=t
3.3.2 二分支选择
If <表达式 > Then
<语句块 1>
Else
<语句块 2>
End If
If <表达式 > Then <语句 1> Else <语句 2>
计算分段函数
y x x x
x x x x




s i n
c o s
2
3
1 0
3 0
单分支结构实现,y=cos(x)- x^3+3*x
If x<>0 Then y=sin(x)+sqrt(x*x+1)
双分支结构实现,If x<>0 Then
y=sin(x)+sqrt(x*x+1)
Else
y=cos(x)- x^3+3*x
End If
3.3.3 IF结构的嵌套若 IF结构 中的 <语句段 1>或 <语句段 2>至少有一个又 是一个完整的 IF结构。 就 属于 IF结构的嵌套情况。
比如:给定三个数 a,b,c,判断其能否构成一个三角形的三边?。若“能”,则进一步判断能否构成直角三角形。
a=InputBox("请输入变量 a的值 ") '给定变量 a的数值
b=InputBox("请输入变量 b的值 ") '给定变量 b的数值
c=InputBox("请输入变量 c的值 ") '给定变量 c的数值
If (a+b>c) And (b+c>a) And (c+a>b) Then '外层 If的分支一
IF ( a^2+b^2=c^2) Or (b^2+c^2=a^2) Or (c^2+a^2=b^2) Then
Print "a,b,c能构成直角三角形 "
Else
Print "a,b,c能构成一般三角形 "
End If
Else '外层 If分支二
Print "a,b,c不能构成三角形 "
End If
内层 If

3.3.4 多分支选择
1.用 If实现多分支选择格式如下:
If <表达式 1> Then
<语句块 1>
ElseIf <表达式 2> Then
<语句块 2>

[ Else
语句块 n+1 ]
End If
不管有几个分支,依次判断,当某条件满足,执行相应的语句块,其余分支不再执行;若条件都不满足,且有 Else子句,则执行该语句块,否则什么也不执行。
注意,ElseIf不能写成 Else If。
例 3-4 已知百分制成绩 mark,显示对应的五级制成绩,
哪些正确,哪些错误?
方法一
I f m a r k > = 90 T he n
P r i nt " 优 "
E l s e I f m a r k > = 80 T he n
P r i nt " 良 "
E l s e I f m a r k > = 70 T he n
P r i nt " 中 "
E l s e I f m a r k > = 60 T he n
P r i nt " 及格 "
E l s e
P r i nt " 不及格 "
E nd I f
方法二
I f m a r k < 60 T he n
P r i nt " 不及格 "
E l s e I f m a r k < 70 T he n
P r i nt " 及格 "
E l s e I f m a r k < 80 T he n
P r i nt " 中 "
E l s e I f m a r k < 90 T he n
P r i nt " 良 "
E l s e
P r i nt " 优 "
E nd I f
方法三
I f m a r k > = 60 T he n
P r i nt " 及格 "
E l s e I f m a r k > = 70 T he n
P r i nt " 中 "
E l s e I f m a r k > = 80 T he n
P r i nt " 良 "
E l s e I f m a r k > = 90 T he n
P r i nt " 优 "
E l s e
P r i nt " 不及格 "
E nd I f
2,用 Select Case实现多分支选择形式:
Select Case <变量或表达式 >
Case <表达式列表 1>
<语句块 1>
Case <表达式列表 2>
<语句块 2>

[ Case Else
<语句块 n+1> ]
End Select
<表达式列表 i>:是与 <变量或表达式 >同类型的下面四种形式之一:
单个常量或有确定值的表达式 例,,A”
一组值 (用逗号分隔 ) 例,2,4,6,8
表达式 1 To 表达式 2 例,60 To 100
Is 关系运算符表达式 例,Is < 60
数值型或字符串表达式注,Select Case 后不能出现多个变量; Case后不能出现变量及有关运算符 。
例 3-5 已知变量 strC中存放了一个字符,判断该字符是字母字符、数字字符还是其他字符。
用多分支 If结构实现,
If Ucase(strC) >=" A" And Ucase (strC) <=" Z" Then
Print strC + "是字母字符 "
ElseIf strC >=" 0" And strC <=" 9" Then
Print strC + "是数字字符 "
Else
Print strC + "是其他字符 "
End If
用 Select Case语句实现,
Select Case strC
Case "a" To "z","A" To "Z"
Print strC + "是字母字符 "
Case "0" To "9"
Print strC + "是数字字符 "
Case Else
Print strC + "是其他字符 "
End Select
转换为大写例例 输入百分制成绩 mark,显示对应的等级制成绩方法一 方法二 方法三
S e l e c t C a s e m a r k S e l e c t C a s e m a r k S e l e c t C a s e m a r k
C a s e m a r k > = 90 C a s e I s > = 90 C a s e I s > = 90
P r i n t " 优 " P r i n t " 优 " P r i n t " 优 "
C a s e m a r k > = 80 C a s e I s > = 80 C a s e 80 T o 89
P r i n t " 良 " P r i n t " 良 " P r i n t " 良 "
C a s e m a r k > = 70 C a s e I s > = 70 C a s e 70 T o 79
P r i n t " 中 " P r i n t " 中 " P r i n t " 中 "
C a s e m a r k > = 60 C a s e I s > = 60 C a s e 60 T o 69
P r i n t " 及格 " P r i n t " 及格 " P r i n t " 及格 "
C a s e El s e C a s e El s e C a s e El s e
P r i n t " 不及格 " P r i n t " 不及格 " P r i n t " 不及格 "
En d S e l e c t En d S e l e c t En d S e l e c t
哪些能实现,哪些不能实现? 例
3.3.5 条件函数
( 1) IIf函数形式是:
IIf(表达式,当表达式为 True时的值,当表达式为 False时的值)
例如,求 x,y中大的数,放入 Tmax变量中,语句如下:
Tmax=IIf( x > y,x,y)
( 2) Choose函数形式是:
Choose(数字类型变量,值为 1的返回值,值为 2的返回值 …… )
例如,Nop是 1-4的值,转换成 +,-,×,÷ 运算符的语句如下:
Op= Choose( Nop,"+","-","× ","÷ ")
当 Nop值为 1,返回字符串,+‖给变量 Op; Nop值为 2,返回字符串
,-‖给变量 Op ;依次类推。 当 Nop是 1-4的非整数,系统自动取 Nop
的整数办法在判断;若 Nop不在 1-4之间,函数返回 Null值。
例 3-6 下列程序运行时,若键入 2,则该程序的运行结果是 。
Private Sub Command1_Click()
x = InputBox("请输入一个数 ")
Select Case x
Case Is < -3
Print (2 * x + 1) / (3 * x + 3)
Case -3 To 3
Print 4 * x ^ 2 + 1
Case Is > 3
Print (5 * x + 1) / (6 * x-3)
End Select
End Sub
3.4 循环结构
3.4.1 For… Next循环
格式
For 循环变量=初值 to 终值 [Step 步长 ]
语句块
[Exit For]
语句块
Next 循环变量循环体循环次数
)1(步长 初值终值I n t
例,For I=2 To 13 Step 3 循环执行次数
Print I,输出为,
Next I 2 5 8 11
Print,Print ―I=―,I I=14
4)1( 3 213I n t
3.4.1 For… Next循环简单应用:
例 3-7 对 1~ 10000区间的奇数从最小数开始逐个累加求和,检测总和首次超过 32767时就终止循环。并输出,(1) 最后所加的那个数;( 2)一共加了多少个数;( 3)实际总和。
例 3-8 依次打印 ASCII码值从 48到 66的所有字符,并对照打印出每个字符的 ASCII码值。
例 3-9 任意输入一串字符,由计算机找出其中有多少个英文字母,A‖或,a‖ 。
练习:打印数字 1~100
求 1+2+…+100
3.4.2 Do循环
Do语句用于控制循环次数未知的循环结构 。 有两种语法形式:
形式 1:
Do { While|Until }<条件 >
语句块
[Exit Do
语句块 ]
Loop
形式 2:
Do
语句块
[Exit Do
语句块 ]
Loop { While|Until} <条件 >
用 do循环改写输出 1、
2…100 ;和 1+2+…+100
例 3-10 十进制整数转换为二进制整数程序 。 从文本框输入一个十进制整数 m,将 m转换为二进制数,再将该二进制数以字符串形式输出 。
Private Sub Command1_Click()
Dim m As Integer 'm代表十进制数
Dim n1 As String 'n1存放一位二进制数的字符值
Dim n As String 'n存放一个二进制数组成的字符串
m = Val(Text1)
n = "" '初始化 n为空字符串
Do While m <> 0 '只要当前部分商 m( 被除数 ) 不为 0就进入循环
r = m Mod 2 '得到一位二进制数
n1 = Trim(Str(r))?将所得的二进制数位转化成字符,去掉前后的空格 。
n = n1 & n '将所得一位字符连接到字符串 n中
m = m \ 2 '由当前的部分商计算新的部分商
Loop '返回循环句首 Do继续判断
Print Text1; "的二进制数形式为 "; n
End Sub
用普通法求最大公约数例 3.11 用 辗转相除法求 两自然数 m,n的最大公约数和最小公倍数。
分析:求最大公约数的算法思想:
(1)对于已知两数 m,n,使得 m>n;
(2) m除以 n得余数 r;
(3)若 r=0,则 n为最大公约数结束;否则执行 (4);
(4)m?n,n?r,再重复执行 (2)。
例 求 m=14,n=6 的最大公约数,
If m < n Then t = m,m = n,n = t
r=m mod n
Do While r < > 0
m=n
n=r
r= m mod n
Loop
Print "最大公约数 =",n
m n r
14 6 2
6 2 0
m=m-n m>n
n=n-m n>m
m,n为公约数 m=n
辗转相减法
Do While m <> n
If m > n Then
m = m - n
Else
n = n - m
End If
Loop
m n
14 6
8 6
2 6
2 4
2 2
3.4.3 循环的嵌套
定义,一个循环的循环体又是一个完整的循环结构时,称为循环的嵌套。
例如:
For i = 1 To 2
For j = 1 To 3
Print i;j,
Next j
Print
Next i
外循环
A
内循环
B
打印结果:
11 12 13
21 22 23
3.4.3 循环的嵌套例 3.12 打印九九乘法表,
For i = 1 To 9
For j = 1 To 9
se = i & "× " & j & "=" & i * j
Picture1.Print Tab((j - 1) * 9 + 1); se;
Next j
Picture1.Print
Next i
思考,要 打印上三角或下三角程序如何改动?
例,判断素数 素数是大于等于 2的正整数,它只能被 1和自己整除 。 判别某数 m是否为 素数 最简单的方法是,对于 m,从 i=2,3,…,
m-1中 判别 m能否 被 i整除,只要有一个 i能整除 m,就说明 m不是素 数
Dim i As Integer,m As Integer,tag As Boolean
m = inputbox(,输入一个正整数,)
tag = True
For i = 2 To m – 1
If (m Mod i) = 0 Then tag = False
Next i
If tag Then Print m;,是素数,
例 3-15 求 100以内的所有素数 。
Private Sub Command1_Click()
Dim i As Integer,m As Integer,tag As Boolean
For m = 2 To 100 '对 100以内的每个数逐个判断
tag = True ' tag值内 True时标志 m为素数
For i = 2 To m – 1 ' 内循环对一个具体数 m进行判断
If (m Mod i) = 0 Then tag = False 'm能被 i整除,该 m不是素数
Next i
If tag Then Print m ' m不能被 i=2~ m-1整除,m是素数,显示
Next m
End Sub
对于循环的嵌套,要注意以下事项:
(1)内循环变量与外循环变量不能同名;
(2)外循环必须完全包含内循环,不能交叉;
(3)不能从循环体外转向循环体内,也不能从外循环转向内循环,
反之则可以。
正确 错误
For ii =1 To 10
For ii=1 To 20

Next ii
Next ii
For ii =1 To 10
For jj=1 To 20

Next jj
Next ii
For ii =1 To 10

Next ii
For ii =1 To 10

Next ii
For ii =1 To 10
For jj=1 To 20

Next ii
Next jj
不是嵌套
3.5 辅助控制语句
3.5.1 GoTo型控制
1,GoTo语句使用 GoTo语句将无条件地转移到指定的语句去执行 。 GoTo语句的格式如下:
GoTo {<语句 标号 >|<行号 >}
作用:无条件地转移到标号或行号指定的那行语句,
标号是一个字符序列,行号是一个数字序列,
2,On-GoTo语句
On-GoTo语句类似于情况语句,用于多分支程序设计 。 格式为:
On <数值表达式 > GoTo <行号或语句标号列表 >
示例:
On m GoTo 11,22,Start,Loop1
3.5.2 Exit语句多种,Exit For,Exit Do,Exit Sub,Exit Function等 。
作用:退出某种控制结构的执行 。
3.5.3 End语句多种,End,End If,End Select,End With,End Type,End Sub,End Function等 。
作用,End结束一个程序的运行;其余表示某个结构的结束。
3.5.4 With语句形式如下,With 对象语句块
End With
作用:对某个对象执行一系列的操作,而不用重复指出对象的名称。
With Label1
.Height = 2000
.Width = 2000
.FontSize=22
.Caption = "This is MyLabel"
End With
Label1.Height = 2000
Label1.Width = 2000
Label1.FontSize=22
Label1.Caption = "This is MyLabel"
等价于注意:
(1) 用 With语句只能对同一个对象使用,即 With结构里面的语句都是对同一对象执行的,不能用一个 With结构来设置多个不同对象;
(2) With结构里面的语句块省略了对象名,但不能省略点号(,,‖)。
3.6 常用算法举例算法是对某个问题求解过程的描述。
3.6.1 累加,连乘
1,累加求 1~ 100中 5或 7的倍数的和,
Sum = 0
For i = 1 To 100
If i Mod 5 = 0 Or i Mod 7 = 0 Then
Sum = Sum + i
End If
Next i
Print Sum
思考,若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?
例 3-13 先求 1~ 20中所有能被 5整除的数之和,然后将范围扩大到求 1
~ 200中所有能被 5整除的数之和。
3.6.1 累加、连乘
2,连乘例 3-14 求 某数 的双阶乘 n!!
(如 20 !! = 20× 18× … × 2)。
Private Sub Command1_Click()
Dim T As Double
'连乘结果较大用 Double型变量
Dim n As Integer,MaxN As Integer
MaxN = InputBox("输入 MaxN")
T = 1
For n = 2 To MaxN Step 2
T = T * n
Next n
Print MaxN; "!! = "; T
End Sub
如:求 3~ 10中所有自然数的乘积:
t = 1
For i =3 To 10
t = t * i
Next i
Print t
例 3-14a,求 e=1+1/1!+1/2!+…+1/n!+… 。 (1) n=10,e=?;(2) n=100,e=?
3.6.3 最大、最小值问题在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,
若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与存放最大值的变量比较,若该数大于最大值,则用该数替换最大值变量中的内容;依次逐一比较 。
例 3-16 随机产生 10个 100~ 200之间的整数,求最大值 。
Private Sub Command1_Click()
Max = 100
For i = 1 To 10
x = Int(Rnd * 101 ) + 100 ' 随机产生 1个 100~ 200之间的整数
Print x;
If x > Max Then Max = x
Next i
Print
Print "最大值 ="; Max
End Sub
最小值问题原理类似,但先假设一个较大的数为最小值的初值 。
例 3-17 任意输入一串字符,求其中 Ascii码最小的字符 。
3.6.4 穷举法
“穷举法”也称为“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。
例 3-18 百元买百鸡问题 。 假定小鸡每只 5角,公鸡每只 2元,母鸡每只 3
元 。 现在有 100元钱要求买 100只鸡,编程列出所有可能的购鸡方案 。
设母鸡,公鸡,小鸡各为 x,y,z只,根据题目要求,列出方程为:
x+y+z=100
3x+2y+0.5z=100
三个未知数,两个方程,此题有若干个解。
解决此类问题采用“试凑法”,把每一种情况都考虑到。
方法一:最简单三个未知数利用三重循环来实现。
方法二:从三个未知数的关系,利用两重循环来实现。
3.6.5 递推法
“递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从老值的基础上递推出新值,并由新值代替老值。
例 3-19 猴子吃桃子 。 小猴在一天摘了若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半零一个,到第 7天早上要吃时只剩下一个了,问小猴那天共摘了多少个桃子?
分析:这是一个,递推,问题,先从最后一天推出倒数第二天的桃子
,再从倒数第二天的桃子推出倒数第三天的桃子 …… 。
设第 n天的桃子为 xn,那么它与前一天桃子数 Xn-1的关系是:
2)1(
1
2
1
1
1


nn
nn
xx
xx
也就是:
1、任意输入 10个数,输出这 10个数以及它们的最大值、最小值、平均值。
2、实验 3综合应用题 2
3、实验 3综合应用题 5
练习题