程序调试(参考答案)概要_第1页
程序调试(参考答案)概要_第2页
程序调试(参考答案)概要_第3页
程序调试(参考答案)概要_第4页
程序调试(参考答案)概要_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

(二) 程序调试(参考答案)程序调试题的操作步骤是:(1)建立一标准EXE工程,将这一模块程序添加到工程中。如果你是通过双击标准模块程序Model1.BAS进入Visual Basic系统的,则首先需要添加一个窗体模块。(2)将该标准模块程序Model1.BAS中代码的指定的错误修改正确或在指定的空位填上适当的语句,并在窗体模块中编写代码(常常写在窗体的Click()事件中)调用标准模块中的Sub过程或用户自定义函数(如果在标准模块程序Model1.BAS有多个过程或函数,要注意调用的先后顺序,否则得不到正确结果),调试运行程序,使其能输出正确结果。(3)按试题要求保存工程。如果你的计算机中没有模块程序Model1.BAS,你必需先自己新建一工程,再添加一个默认标准模块,将题目所附的参考程序输入(可复制粘贴),将其中用-n-(n为1,2,3,4,5)部分删除后改为合适的内容或将用* 错误n * 标示的下一语句中的错误改正,然后调试运行程序使其达到该题目的要求。1已有一模块文件Modify.Bas。该模块中的Summary过程是用于计算1!+2!+.+20!,并打印出计算结果,但不完整,请在横线上填入必要的内容,使其完整。Modify.Bas模块中的nFactor函数过程用于计算n!。 程序如下:Public Function nFactor(ByVal n As Integer) As Double Dim i As Integer Dim temp As Double temp=1 For i = 1 To n temp = temp * i Next i nFactor = tempEnd FunctionPublic Sub summary() Dim sum As Double Dim i As Integer Dim n As Integer n = 20 For i = 1 To n sum = sum + nFactor(i) Next i Form1.Print sum= & sum End Sub2已有一模块文件Modify.Bas。该模块中的Calculate过程是产生100个0,99范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 程序如下:Public Sub calculate() Dim a(1 To 100) As Integer Dim x(1 To 10) As Integer Dim i As Integer, p As Integer 产生100个0,99范围内的随机整数 每行10个打印出来 For i = 1 To 100 * 错误1 * a(i) =int( Rnd * 100) If a(i) 10 Then Form1.Print Space(2); a(i); Else Form1.Print Space(1); a(i); End If If i Mod 10 = 0 Then Form1.Print Next i 统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数 并将统计结果保存在数组x(1),x(2),.,x(10)中,将统计结果打印出来 For i = 1 To 100 * 错误2 * p = Int(a(i) mod 10) 求个位上的数字 If p = 0 Then p = 10 * 错误3 * x(p) = x(p) + 1 Next i Form1.Print 统计结果 For i = 1 To 10 p = i If i = 10 Then p = 0 * 错误4 * Form1.Print 个位数为 + Str(p) + 共 + Str(x(i) + 个 个位数为0统计结果保存在x(10)中 Next iEnd Sub3.已有一模块文件Modify.Bas。该模块中的Findat过程是用于在一个字符串变量中查找at,并用消息框给出查找结果的报告:没有找到或找到的个数,但不完整,请在横线上填入必要的内容,使其完整。 程序如下:Public Sub Findat() 在字符串str1中查找at Dim str1 As String Dim length As Integer 字符串长度 Dim sum As Integer 查到的个数 Dim i As Integer str1 = InputBox(请输入一个字符串) length = len(str1) i = 1 sum = 0 Do While i R Form1.Print 太大了,继续猜! Case Else Form1.Print 太小了,继续猜! End Select times = times + 1 * 错误3 * Loop While times 5 Then Form1.Print 猜数失败,游戏结束! * 错误4 * Form1.Print 正确答案为 & Str(R) End IfEnd Sub5.已有一模块文件Modify.Bas。该模块中的ArmstrongNumber过程是用于求出1-999之间所有的Armstrong数,并打印出来,但不完整,请在横线上填入必要的内容,使其完整。所谓Armstrong数是指一个数等于它每位上数字的立方和。例如:371=33+73+13,那么371就是一个Armstrong数。 程序如下:Public Sub ArmstrongNumber() Dim armstrong As Integer Dim i As Integer Dim hundred As Integer 百位上的数字 Dim ten As Integer 十位上的数字 Dim one As Integer 个位上的数字 For i = 1 To 999 hundred = i 100 ten = (i - hundred * 100) 10 one = i mod 10 If i = hundred3 + ten3 +one3 Then Form1.Print i; is ar mstrong number End If Next iEnd Sub6.已有一模块文件Modify.Bas。该模块中的 CountTo60 过程是用于从一堆一分、二分、五分的硬币中取出20枚,使其总值为60分,要求输出取法的数量及每一种取法的一分、二分、五分的个数。 程序如下:Public Sub CountTo60() 从一堆一分、二分、五分的硬币中取出20枚,使其总值为60分 输出取法的数量及每一种取法的一分、二分、五分的个数 Dim one As Integer 一分硬币个数 Dim two As Integer 二分硬币个数 Dim five As Integer 五分硬币个数 Const n = 20 总数20枚 Dim k As Integer 取法数量 k = 0 For one = 1 To n * 错误1 * For two = 1 To n - one five = n - one - two * 错误2 * If one + two*2 + five*5 = 60 Then k = k + 1 Form1.Print one=; one; two=; two; five=; five End If * 错误3 * Next two * 错误4 * Next one Form1.Print k=; kEnd Sub7.已有一模块文件Modify.Bas。该模块中的TJ过程是将一批数据中小于零的数及它们的积打印出来,但不完整,请在横线上填入必要的内容,使其完整。Modify.Bas模块中的SCSJ过程是产生数据,数据的取值范围为-10 10 之间的随机数。 程序如下:Private Const n = 10Private a(1 To n) As IntegerTJ过程是将一批数据中小于零的数及它们的积打印出来数据由SCSJ过程产生,数据的取值范围为-10 10 之间的随机整数Public Sub TJ() Dim i As Integer Dim t As Single t=1 For i = 1 To 10 If a(i)0 Then t = t * a(i) End If Next i Form1.Print T=; tEnd SubPublic Sub SCSJ() Randomize Form1.Print 原始数据 Dim i As Integer Dim j As Integer For i = 1 To n 随机产生0或1,为0时取负,为1时取正 j = Int(Rnd * 2) If j=0 Then j = -1 a(i) = j * Int(Rnd * (n + 1) Form1.Print a(i); Next i Form1.PrintEnd Sub8.已有一模块文件Modify.Bas。该模块中的Money过程是用于统计一个有7个工作人员的餐厅发工资所需的100元、50元、10元、5元和1元的票面数,但不完整,请在横线上填入必要的内容,使其完整。 Modify.Bas模块中的SalaryData过程是给出7个员工的工资。(工资单位是元) 程序如下:Dim salary(7) As IntegerPublic Sub Money() Dim hundred As Integer, totalhundred As Integer 100元票面数量、总数量 Dim fifty As Integer, totalfifty As Integer 50元票面数量、总数量 Dim ten As Integer, totalten As Integer 10元票面数量、总数量 Dim five As Integer, totalfive As Integer 5元票面数量、总数量 Dim one As Integer, totalone As Integer 1元票面数量、总数量 Dim totalsalary As Integer 工资总计 Dim i As Integer, temp As Integer totalhundred = 0 totalfifty = 0 totalten = 0 totalfive = 0 totalone = 0 totalsalary = 0 For i = 1 To 7 temp = salary ( i ) hundred = Int(temp / 100) temp = temp hundred * 100 fifty = Int(temp / 50) temp = temp - fifty * 50 ten = Int(temp / 10) temp = temp - ten * 10 five = Int(temp / 5) temp = temp - five * 5 one = temp totalhundred = totalhundred + hundred totalfifty = totalfifty + fifty totalten = totalten + ten totalfive = totalfive + five totalone = totalone + one totalsalary = totalsalary + salary ( i ) Next i Form1.Print 共需100元 & Str(totalhundred) & 张 Form1.Print 共需50元 & Str(totalfifty) & 张 Form1.Print 共需10元 & Str(totalten) & 张 Form1.Print 共需5元 & Str(totalfive) & 张 Form1.Print 共需1元 & Str(totalone) & 张 Form1.Print 合计 & Str(totalsalary) & 元End SubPublic Sub SalaryData() salary(1) = 1398 salary(2) = 1765 salary(3) = 689 salary(4) = 1500 salary(5) = 832 salary(6) = 590 salary(7) = 1200End Sub9.已有一模块文件Modify.Bas。该模块中的 MaxLine 过程用于查找一个5行4列的二维数组中行平均值最大的行,并将该行所有数据调整到第一行的位置。 Modify.Bas模块中的DataProduce 过程用于产生原始数据;Average 过程用于计算各行的平均值;PrintArray过程用于打印二维数组和行平均值。 程序如下:Dim a(1 To 5, 1 To 4) As IntegerDim ave(1 To 5) As IntegerPublic Sub MaxLine() Dim i As Integer Dim j As Integer Dim temp As Integer Dim Line_no As Integer 最大平均值的行号 找出最大平均值所在行 Line_no = 1 For i = 2 To 5 * 错误1 *If ave(Line_no) ave(i) Then * 错误2 * Line_no = i End If Next i 交换第一行与最大平均值所在行 For j = 1 To 4 temp = a(1, j) * 错误3 * a(1, j)= a (Line_no, j) a (Line_no, j) = temp Next j 交换对应行的平均值 temp = ave(1) ave(1) = ave(Line_no) ave(Line_no) = temp 打印交换后的数据 Form1.Print 交换后的数据和平均值 PrintArrayEnd SubPublic Sub DataProduce() Dim i As Integer Dim j As Integer 产生5*4数组 For i = 1 To 5 For j = 1 To 4 a(i, j) = Int(100 * Rnd) Next j Next iEnd SubPublic Sub Average() Dim i As Integer Dim j As Integer Dim sum As Integer 计算各行平均值 For i = 1 To 5 sum = 0 For j = 1 To 4 * 错误4 * sum = sum + a(i, j) Next j ave(i) = sum / 4 Next i 将数组和平均值打印出来 Form1.Print 原始数据和平均值 PrintArrayEnd SubPublic Sub PrintArray() Dim i As Integer Dim j As Integer For i = 1 To 5 For j = 1 To 4 Form1.Print a(i, j); Spc(3); Next j Form1.Print 平均值=; ave(i) Next iEnd Sub10已有一模块文件Modify.Bas。该模块中的 Wrap 过程用于判断一个字符串是否“回文”。所谓“回文”是指字符串顺读与倒读都是一样的,如“潮起潮落,落潮起潮”。 程序如下:Public Sub Wrap() Dim length As Integer Dim str1 As String Dim strleft As String Dim strright As String Dim k As Integer str1 = InputBox(请输入任意的字符串) 输入任意字符串, 如“潮起潮落,落潮起潮” *错误1* length = len(str1) k = 1 Do *错误2* strleft = mid(str1, k,1) 从左边起逐个取出一个字符 *错误3* strright =mid(str1, length +1 k ,1) 从右边起逐个取出一个字符 *错误4* If strleft strright Then Exit Do End If k = k + 1 Loop While k length / 2 Then Form1.Print str1 & 是回文 Else Form1.Print str1 & 不是回文 End IfEnd Sub11.已有一模块文件Modify.Bas。该模块中的BubbleSort过程是冒泡排序法;GenerateData过程产生10个1,20之间互不相同的随机整数;Swap过程交换两个变量的数值。 程序如下:Private Const n = 10Private a(1 To n) As IntegerBubbleSort过程是冒泡排序Swap过程交换两个变量数值GenerateData过程产生10个1,20之间互不相同的随机整数Public Sub BubbleSort() Dim i As Integer, j As Integer i = 1 Do For j = i + 1 To n If a(j) a(i) Then * 1 * Swap a(j), a(i) 去掉括号,或改为 call Swap (a(j), a(i) End If Next j i = i + 1 * 2 * Loop While i n Form1.Print 排序结果 For i = 1 To n Form1.Print a(i); Next iEnd SubPublic Sub GenerateData() Dim i As Integer Dim j As Integer Dim b As Boolean For i = 1 To n b = False Do While Not b a(i) = Int(20 * Rnd + 1) b = True * 3 * For j = 1 To i 1 If a(i) = a(j) Then b = False Exit For End If Next j Loop Form1.Print a(i) Next iEnd Sub* 4 *Public Sub Swap(a As Integer, b As Integer) 去掉ByVal,数组不能以ByVal 传递 Dim temp As Integer temp = a a = b b = tempEnd Sub12.已有一模块文件Modify.Bas。该模块中的 Transfer 过程用于将一个十六进制整数转换为十进制整数;number 函数过程用于将一个十六进制符号转换为数值。 程序如下:Public Sub Transfer() Dim Hex As String 十六进制数 Dim Dec As Double 十进制数 Dim temp As String Dim i As Integer Dim n As Integer Hex = InputBox(输入一个十六进制整数) * 错误1 * n = len(Hex) i = 0 Do * 错误2 * temp = Mid(Hex, n - i , 1) * 错误3 * Dec = Dec + number(temp) * 16 i i = i + 1 Loop While i a(j) Then Swap a(i),a(j) End If Next j Form1.Print a(i) Next i Form1.print a(i) 或 a(10) 即最后一个End SubPublic Sub Swap(a As Integer, b As Integer) Dim temp As Integer temp = a a = b b = tempEnd Sub14.已有一模块文件Modify.Bas。该模块中的PrintArray过程是用于打印一个5行5列的数字方阵,并使两对角线上元素均为1,其余均为2。要求打印的数字方阵两列数字之间空3格,两行之间空一行。 程序如下:Public Sub PrintArray() 下面程序用于打印5行5列的数字方阵 使两对角线上元素均为1,其余均为2 要求打印的数字方阵两列数字之间空3格,两行之间空一行 只要修改标出出错位置的下面那一条语句 Dim a(5, 5) As Integer Dim i As Integer, j As Integer For i = 1 To 5 For j = 1 To 5 * 错误1 * If i j and i 6 - j Then a(i, j) = 2 Else a(i, j) = 1 End If * 错误2 * Form1.Print a(i, j) & Space(3); 数字与空字符串不能相加 Next j * 错误3 * Form1.Print : Form1.Print Next iEnd Sub15.已有一模块文件Modify.Bas。该模块中的Combination过程是用于计算在m个数据中取出n个数据的排列组合值,计算公式为Cmn=m!/(n!*(m-n)!)。Modify.Bas模块中的nFactor函数过程用于计算n!。 程序如下:Public Sub Combination() Dim m As Integer Dim n As Integer Dim Cmn As Long Do m = Val(InputBox(请输入一个整数m) n = Val(InputBox(请输入一个整数n(n=m) * 错误1 * Loop While m =n * 错误2 * Cmn = nFactor(m) /( nFactor(n) * nFactor(m - n) Form1.Print 排列组合数为; CmnEnd SubPublic Function nFactor(ByVal n As Integer) As Double Dim i As Integer Dim temp As Double temp = 1 For i = 1 To n temp = temp * i Next i *错误 3 * nFactor = temp 去掉nFactor (n)中的(n)部分 * 错误4 *End Sub16.已有一模块文件Modify.Bas。该模块中的FindMax过程是用于查找一批数据中的最大数,并打印出最大数的值及最大数在数组中的下标值,但不完整,请在横线上填入必要的内容,使其完整。Modify.Bas模块中的GenerateData过程用于产生30个1-500之间的随机整数并5个一行打印出来。 程序如下:Dim a(30) As IntegerPublic Sub FindMax() Dim Position As Integer 最大数在数组中的下标 Dim max As Integer 最大数 Dim i As Integer GenerateData max = a(1) Position =1 For i = 2 To 30 If a(i) max Then max = a(i) Position = i End If Next i Form1.Print 最大值= & Str(max) Form1.Print 最大值的下标= & Str(Position)End SubPublic Sub GenerateData() Dim i As Integer For i = 1 To 30 a(i) = Int(500 * Rnd() + 1) Form1.Print a(i), If i Mod 5 = 0 Then Form1.Print Next iEnd Sub17.已有一模块文件Modify.Bas。该模块中的 Prime 过程是求出100到200之间所有的素数,并打印出来,但不完整,请在横线上填入必要的内容,使其完整。程序如下:Public Sub prime() 打印出100到200之间所有的素数,并统计素数的个数 Dim i As Integer Dim j As Integer Dim k As Integer Dim t As Integer 统计素数的个数 Dim b As Boolean For i = 100 To 200 b =

温馨提示

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

评论

0/150

提交评论