循环章节的参考例题.doc_第1页
循环章节的参考例题.doc_第2页
循环章节的参考例题.doc_第3页
循环章节的参考例题.doc_第4页
循环章节的参考例题.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

7.2 运行下列程序,输出什么图形?Private Sub Command1_Click() cls For r = 1000 To 1200 Step 100 Circle (2000, 2000), r Next rEnd Sub7.3 有如下程序:Private Sub Form_Click() x = InputBox(输入x) y = x: n = 1: p = x: t = 1 Do p = -1 * p * x * x t = t * (2 * n) * (2 * n + 1) y = y + p / t n = n + 1 Loop Until Abs (p / t) = 0.000001 Print yEnd Sub运行该程序后所实现的数学运算式是_ B 。A) B) C) D) 7.4 在窗体上画一个命令按钮,名称为Command1。然后编写如下程序:Private Sub Command1_Click() For I=1 To 4 For J=0 To I Print Chr$(65+I); Next J Print Next IEnd Sub程序运行后,如果单击命令按钮,则在窗体上显示的内容是AA) BBB)AC)BD)AACCCBBCCBBBDDDDCCCDDDCCCCEEEEEDDDDEEEEDDDDD7.5 下面程序运行时,外层、中层和内层循环次数分别为_ C _。Private Sub Form_Click()For a = 1 To 3For b = 1 To aFor c = b To 3Next: Next: NextEnd SubA) 21 8 6B) 3 3 3 C) 3 6 14 D) 8 6 37.6 阅读以下程序,写出程序的功能:在窗体上打印输出:将用户输入的任意一个正整数分解为质因子之积Private Sub Form_Click() Dim x As Integer, i As Integer x = InputBox(输入正整数x=) i = 2: Print x; =; Do Until x i If x Mod i = 0 Then If x = i Then Print i Else Print i; *; End If x = x i Else i = i + 1 End If LoopEnd Sub习题7.7 程序代码填空:由键盘输入一个正整数,找出大于或等于该数的第一个素数。Private Sub form_Click() Dim p As Integer, x As Integer, flag As Boolean flag = False 此处设置flag为标志性变量,初始值为False,表示没有找到素数 x = InputBox(请输入一个正整数) Do While Not flag p = 2: flag =True 此处设置flag为标志性变量,假设x是素数,用flag为TRUE来标志 Do While flag And (p = a And n = A And n = a And n = A And n = Z Then 若该字符为大写,则改成小写 Mid(s, i, 1) = LCase(n) 直接替换s字符串中的第i个字符,注意只有Mid函数才能这样用 End If Next i TxtS = s 将互换后的结果s显示在文本框中End Sub习题7.10 随机产生10个两位正整数,分别统计其中偶数和奇数的个数,以及各类的数据之和。仿照课本148149页例7-6的思路Private Sub Form_Click() Dim JNum As Integer, ONum As Integer, JSum As Integer, OSum As Integer Dim n As Integer, i As Integer For i = 1 To 10 通过For循环,控制随机产生10个数据 n = Int(Rnd * (99 - 10 + 1) + 10) 利用随机整数产生公式产生一个两位正整数n Print n; 输出两位正整数n If n Mod 2 = 0 Then 若为偶数 ONum = ONum + 1 偶数计数器ONum累加1 OSum = OSum + n 偶数累加器OSum累加n Else JNum = JNum + 1 奇数计数器JNum累加1 JSum = JSum + n 奇数累加器JSum累加n End If Next i Print Print 奇数的个数有:; JNum; 偶数的个数有:; ONum Print 奇数之和为:; JSum; 偶数之和为:; OSumEnd Sub习题7.11 统计某个单词在句子中出现的次数。分析: 仿照课本148149页例7-6的思路首先求出输入的字符串长度,然后从字符串中分离出单词,即对每个字符判断:若不为空格或其他语句结束标点,将每个字符连接到当前单词的字符串变量;若为空格或其他语句结束标点,表示一个单词结束,将当前单词与查找单词比较,若不等,当前单词置空,否则,出现的次数计数器累加1。Private Sub CmdCount_Click() Dim char As String * 1, fword As String Dim word As String, num As Integer, s As String, i As Integer s = TxtS 提取在文本框中用户输入的内容 fword = TxtWord 提取在文本框中用户输入的查找单词 For i = 1 To Len(s) char = Mid(s, i, 1) 提取用户输入内容的的每个字符 If char And char ? And char ! And char . Then 若此字符不为空格或其他语句结束标点 word = word & char 将每个字符连接到当前单词的字符串变量 ElseIf LCase(word) LCase(fword) Then若为空格或其他语句结束标点,表示一个单词结束,将当前单词与查找单词比较 word = 若不等,当前单词置空 Else num = num + 1 否则,出现的次数计数器累加1 End If Next i MsgBox fword & 在上述句子中出现了 & num & 次End Sub习题7.12 某次比赛,有十个评委打分,平分规则:去掉一个最高分,去掉一个最低分,其余八个分数求平均分,所得平均分即为参赛者的最后得分。仿照课本143144页例7-3,以及课本累加和求最值算法Private Sub Form_Click() Dim mark As Single, aver As Single, i As Integer, max As Single, min As Single aver = 0 累加器设置初值为0 For i = 1 To 10 mark = InputBox(请输入第 & i & 位评委的打分, 评委给参赛者打分) 接收用户输入的一个打分 Print mark; 输出一个评委打分 If i = 1 Then max = mark: min = mark 将第一个评委打分作为Max和Min的初值 Else If mark max Then 每一个评委打分若有比最大值大的打分,则替换当前最大值 max = mark End If End If aver = aver + mark 将每一个评委打分进行累加 Next i aver = (aver - max - min) / 8 去除最高分、最低分,其余八个分数求平均分 Print Print 该参赛者的平均得分为:; aver 输出结果aver平均分End Sub习题7.13 Fibonacci数列的递推公式如下:编写程序打印出某个数据范围内的Fibonacci数列,数据范围m由InputBox函数输入,每行只显示4个数。分析:采用迭代法完成数列的输出Private Sub Form_Click()Dim i As Integer, m As Long, fibo1 As Long, fibo2 As Long, fibo As Long m = InputBox(请输入Fibonacci数列的数据范围(上限) fibo1 = 1 : fibo2 = 1 fibo1和fibo2表示前两项数列项,并根据题目的公式设置其初值为1 i = 2 变量i记录目前已经求出的数列项的数目 Print fibo1, fibo2, 输出第一、二项 Do fibo = fibo1 + fibo2 根据题目的公式,根据前两项迭代求出第三项 If fibo m Then Exit Do 若求出的数列项fibo超出数据范围(上限)m,则结束 i = i + 1 数列项的数目增一 Print fibo, 输出求出的数列项fibo If i Mod 4 = 0 Then Print 每输出显示4个数,换行 fibo1 = fibo2 为下一次迭代求数列项作准备,更新前两项数列项的值 fibo2 = fibo LoopEnd Sub习题7.14 实现在图片框中实现数字回文金字塔的显示。分析:仿照课本150页例题7-7。归纳找出每行输出的规律:第i行,先输出9-i个空格,紧接着依次输出1i和i-11这些数字字符,最后换行Private Sub Picture1_Click() Dim i As Integer, j As Integer For i = 1 To 9 Picture1.Print Spc(9 - i); 输出9-i个空格,此处也可用循环实现 For j = 1 To i Picture1.Print CStr(j); 依次输出1i Next j For j = i - 1 To 1 Step -1 Picture1.Print CStr(j); 依次输出i-11 Next j Picture1.Print 换行 Next iEnd Sub习题7.15 编写代码实现2进制数到十进制的转换。仿照课本148149页例7-6的思路,结合多项式求和算法Private Sub CmdTrans_Click()Dim B As String, D As Double, dot As Integer, i As Integer B = TxtB 接收用户在文本框中输入的2进制数 dot = InStr(B, .) 取得小数点的位置 If dot = 0 Then dot = Len(B) + 1 对于纯整数的处理,单独设置小数点的位置 For i = 1 To Len(B) If Mid(B, i, 1) = 1 Then If dot i Then D = D + 2 (dot - i - 1) 对于整数部分的数据乘权累加处理 Else D = D + 2 (dot - i) 对于小数部分的数据乘权累加处理 End If End If Next i TxtD = CStr(D) 输出对应的10进制数DEnd Sub习题7.16 根据用户输入的英文句子中,找出最长的英文单词。分析:在习题7.11的基础上增加有关单词长度的判断,可结合最值算法:(1)要用到当前单词、当前单词长度、最长单词、最长单词长度等变量(2)首先求出输入的字符串长度,然后从字符串中分离出单词,即对每个字符判断:若不为空格,将每个字符连接到当前单词的字符串变量,当前单词长度计数器加1;若为空格,表示一个单词结束,将当前单词长度与最长单词长度比较,若长,当前单词替代最长单词。当前单词置空,当前单词长度清除为0。Private Sub CmdFind_Click() Dim length As Integer, maxlength As Integer, char As String * 1 Dim word As String, maxword As String, s As String, i As Integer s = TxtS For i = 1 To Len(s) char = Mid(s, i, 1) If char And char ? And char ! And char . Then word = word & char length = length + 1 长度累加 Else If length maxlength Then 若比目前的最长单词长,则替换最长单词,并记录其长度 maxword = word maxlength = length End If word = length = 0 End If Next i TxtMax = maxwordEnd Sub习题7.17 规范文章:每句句子开头字母必须大写,句中单词小写。分析:仿照课本148149页例7-6的思路对输入的任意大小写文章进行整理,规则:所有句子开头为大写字母,其他为小写字母,句子结束符为“.”、“?” 、“!”。要实现句首大写,其他为小写,必须设置一个变量,存放当前处理的字符的前一个字符,来判断前一字符是否为句子的结束符。Private Sub CmdEdit_Click() Dim c0 As String * 1, c1 As String * 1, i As Integer c1表示当前正在规范的字符,c0表示当前处理的字符的前一个字符 TxtNew = : c0 = . For i = 1 To Len(TxtOld) c1 = Mid(TxtOld, i, 1) Select Case c0 Case !, ., ? c1 = UCase(c1) Case Else c1 = LCase(c1) End Select TxtNew = TxtNew & c1 c0 = c1 Next iEnd Sub习题7.18 图片框中在周期性地在任意位置随机打印任意颜色的点11Private Sub Timer1_Timer() Dim i As Integer, x As Long, y As Long, r As Integer, g As Integer, b As Integer For i = 1 To 2000 x = Int(Rnd * Picture1.Width) 使用随机数据公式产生随机位置坐标 y = Int(Rnd * Picture1.Height) r = Int(Rnd * 256) 使用随机数据公式产生随机颜色 g = Int(Rnd * 256) b = Int(Rnd * 256) Picture1.PSet (x, y), RGB(r, g, b) 调用Pset方法在图片框中打印点 Next iEnd SubPrivate Sub Form_Load() Timer1.Enabled = True Timer1.Interval = 1000End Sub习题7.19 猴子吃桃问题。小猴一天摘了若干个桃子,它很贪吃,当天就吃掉了一半还多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都是如此,到了第七天要吃时,却只剩下了一个。问小猴那天共摘了多少只桃子?(提示:这是一个“递推”问题,可以采用本章介绍的迭代法,找出前后两天吃桃数的迭代关系式)分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子设第n天的桃子为Xn,那么它是前一天的桃子数Xn-1的二分之一减一。即Xn= Xn-1/2 1,继而推出迭代公式Xn-1=(Xn+1)*2Private Sub Form_Click() Dim x As Integer, i As Integer x = 1 Print 第 7 天的桃子数为 1 只 For i = 6 To 1 Step -1 x = (x + 1) * 2 Print 第; i; 天的桃子数为; x; 只 Next iEnd Sub习题7.20 输出1100以内的所有素数,要求每行显示5个。(提示:在素数算法的基础上,再次使用“穷举法”)Private Sub Form_Click() Dim i As Integer, x As Integer, n As Integer For x = 1 To 100 For i = 2 To x - 1 如果能被某个数据i整除,则x就不是素数,没必要继续除下去,直接提前结束循环 If x Mod i = 0 Then Exit For Next i If i = x Then 若是循环正常结束,即循环变量i=x,说明x是素数 n = n + 1 Print x, If n Mod 5 = 0 Then Print End If Next xEnd Sub实验7-5计算表达式:s= ,x1,2,要求计算精度为第n项的值小于10-5。分析:这是一个多项式求和问题,即本章介绍的累加问题,请试用通项式法完成,完成程序代码编写。Private Sub CmdCal_Click() Dim s As Double, t As Double, fact As Double, x As Double Dim i As Integer, n As Integer x = Val(TxtX) If x 2 Or x 1 Then MsgBox X必须在1,2范围内, vbExclamation, 数据输入错误 TxtX = TxtX.SetFocus Else s = -x: n = 0 设置初值 Do n = n + 1 fact = 1 For i = 1 To 2 * n + 1 fact = fact * i Next t = 2 * n * (-1) (n + 1) * x (2 n) / fact s = s + t Loop Until Abs(t) 10 (-5) TxtS = Format(s, 0.00000) End IfEnd Sub实验7-6用迭代法求x=。分析:求平方根的迭代公式为:,要求前后两次求出的x的差的绝对值小于10-5,具体算法如下:(1)设定一个x的初值x0;(2)用迭代公式求出x的下一个值x1(3)再将x1代入上述公式,求出x的下一个值x2;(4)如此继续下去,直到前后两次求出的x值满足以下关系:|xn+1-xn| 0 Then x1 = a/2 Do x2 = (x1 + a / x1) / 2 If Abs(x2 - x1) 10 (-5) Then Exit Do x1 = x2 Loop TxtRoot = Format(x2, 0.00000) Else MsgBox a必须大于0, vbExclamation, 数据输入错误 Txta = Txta.SetFocus End IfEnd Sub实验7-7阅读下列程序代码,问单击窗体,则将会产生什么运行结果?若代码中n是通过Int(26 * Rnd) + 1得到,请通过单步调试,弄清楚程序代码的功能。 Private Sub Form_Click() Cls n = 6 For i = 1 To n For j = i - 1 To n + i - 2 Print Chr(Asc(A) + j Mod n); Next j Print Next iEnd Sub循环显示指定数量的字母序列。从中大家可以学到相应的知识点:循环显示数据实验7-8搬砖问题:36块砖,36人搬,男的搬4块,女的搬3块,2个小儿抬1块,要求1次全部搬完,问需男、女、小儿各多少人。分析:可采用穷举法完成程序的编写。Private Sub Form_Click()Dim man As Integer, woman As Integer, child As IntegerPrint 36块砖36人搬1次全部搬完的人员方案如下: For man = 1 To 36 / 4 For woman = 1 To 36 / 3 For child = 2 To 36 Step 2 If man * 4 + woman * 3 + child / 2 = 36 And man + woman + child = 36 Then Print 男; man; 女; woman; 小儿; child End If Next child Next woman Next manEnd Sub实验7-9两个乒乓球队进行比赛,各出三个人。甲队为A、B、C三人,乙队为X、Y、Z三人,已经抽签决定了比赛名单。有人向队员打听比赛的对阵情况,A说他不和X比,C说他不与X、Z比,编程逻辑推导出两队对阵情况。Private Sub Form_Click()Dim A As Integer, B As Integer, C As Integer1、2、3分别模拟甲队所对阵的乙队队员X、Y、Z三人,或者也可以直接用X、Y、Z的ASCII的值表示 For A = 1 To 3 For B = 1 To 3 For C = 1 To 3 If A 1 And C 1 And C 3 And A B And A C And B C Then Print 两队对阵情况如下: Print A & 对 & Chr(Asc(X) - 1 + A) Print B & 对 & Chr(Asc(X) - 1 + B) Print C & 对 & Chr(Asc(X) - 1 + C) End If Next Next NextEnd Sub实验7-10编程求出1000之内的所有完数,如图7-15所示。“完数”是指一个数恰好等于它的因子之和,如6的因子为1,2,3,而61+2+3,因而6就是完数。求出任意正整数的所有因子。请完善程序代码:Option ExplicitPrivate Sub CmdCal_Click() Dim n As Integer, I As Integer, s As String, sum As Integer n = 2 Do While n = 1000 sum = 0 s = Str(n) + = For I = 1 To n 2 If n Mod I = 0 Then sum = sum + I s = s + Str(I) + + End If Next I If n = sum Then s = Left(s, Len(s) - 1) Picture1.Print s End If n = n + 1 LoopEnd Sub实验7-12编写如图7-16所示的点菜程序:要求实现能同时将菜单中的多个菜同时选中一次性添加以及同时删除,不允许菜被点重。Private Sub Form_Load()lstmenu.AddItem 宫宝鸡丁lstmenu.AddItem 红烧狮子头lstmenu.AddItem 西湖醋鱼lstmenu.AddItem 栗子鸡lstmenu.AddItem 青菜香菇lstmenu.AddItem 鱼香肉丝lstmenu.AddItem 番茄炒蛋lstmenu.AddItem 红烧蹄胖lstmenu.AddItem 松鼠桂鱼lstmenu.AddItem 油焖茄子lstmenu.AddItem 凉拌海蛰lstmenu.AddItem 白斩鸡lstmenu.AddItem 五香牛肉CmdAdd.Enabled = False CmdRemove.Enabled = FalseCmdClear.Enabled = FalseCmdClose.Enabled = TrueEnd SubPrivate Sub lstchoose_Click()If lstchoose.ListCount 0 Then CmdRemove.Enabled = TrueEnd IfEnd SubPrivate Sub lstmenu_Click() CmdAdd.Enabled = lstmenu.SelCount 0End SubPrivate Sub CmdClose_Click() Unload MeEnd SubPrivate Sub CmdClear_Click() lstchoose.Clear CmdClear.Enabled = False CmdRemove.Enabled = FalseEnd SubPrivate Sub CmdRemove_Click() Do lstchoose.RemoveItem lstchoose.ListIndex Loop Until lstchoose.SelCount = 0 If lstchoose.ListCount = 0 Then CmdRemove.Enabled = False CmdClear.Enabled = False End IfEnd SubPrivate Sub CmdAdd_Click()Dim i As Integer, j As Integer, flag As BooleanFor i = 0 To lstmenu.ListCount - 1 If lstmenu.Selected(i) Then flag = True: j = 0 Do While flag And j = lstchoose.ListCount - 1 If lstchoose.List(j) = lstmenu.List(i) Then flag = False j = j + 1 Loop If flag Then lstchoose.AddItem lstmenu.List(i) End IfNext iCmdAdd.Enabled = lstmenu.SelCount 0If lstchoose.ListCount 0 Then CmdClear.Enabled = TrueEnd Sub实验7-13实现国际象棋棋盘的绘制,如图7-17。(利用line方法实现)Private Sub Form_Load() Picture1.Height = 6400 Picture1.Width = 6400 Picture1.ScaleHeight = 6400 Picture1.ScaleWidth = 6400End SubPrivate Sub Picture1_Click()Dim W As Integer, H As Integer, X As Integer, Y As IntegerDim i As Integer, t As Integer, j As Integer W = Picture1.ScaleWidth 8 H = Picture1.ScaleHeight 8 X = 255: Y = 0 For i = 1 To 8 Picture1.CurrentX = 0 Picture1.CurrentY = (i - 1) * H t = X: X = Y: Y = t For j = 1 To 8 If j Mod 2 = 0 Then Picture1.Line -Step(W, H), RGB(X, X, X), BF H = -H Else Picture1.Line -Step(W, H), RGB(Y, Y, Y), BF H = -H End If Next j Next iEnd Sub

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论