《第3章流程控制及程序调试.pdf》由会员分享,可在线阅读,更多相关《第3章流程控制及程序调试.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、VB.NET 程序设计实验指导 第 1 页 共 13 页 第 3 章 流程控制及程序调试 3.1 知识要点 1.选择结构 选择结构一般分为单分支、双分支和多分支。(1)单分支一般使用:IfThen 结构;(2)双分支一般使用:IfThenElse 结构IIF 函数;(3)多分支有几种方式:IfThenElseIf 结构Select Case 结构IIF 函数嵌套。2.循环结构 循环结构一般分为两种情况:(1)适合循环次数已知的 ForNext 循环(2)适合循环次数未知的 Do WhileLoop 循环 注意在循环中一定要考虑到可以让循环终止的条件,避免形成死循环。3.循环嵌套(1)For 循
2、环嵌套:典型问题(输出规律图形、求表达式的值)(2)混合嵌套:典型问题(求表达式的值)(3)多重嵌套:典型问题(穷举法的问题)4.循环强制终止 Exit For 可以强制终止 For 循环,Exit Do 可以强制终止 Do 循环。强制终止语句一般会跟选择结构结合使用。5.程序调试(1)程序中的错误一般分为语法错误、运行时错误和逻辑错误,我们在调试中一般主要解决逻辑错误。(2)VB.NET 的三种工作模式:设计模式、运行模式(点击“启动调试”后进入的模式,代码可读不可改)、调试模式(运行后点击“全部中断”后进入的模式,代码可读可改)。(3)常用调试方法:设置断点、逐语句、逐过程。主要目的是让程
3、序中断下来,检查各变量的值是否跟预期相同。VB.NET 程序设计实验指导 第 2 页 共 13 页 6.异常处理(1)结构化异常处理:一般采用 TryCatchFinally 语句。(2)非结构化异常处理:主要采用 On Error 语句。3.2 习题参考答案 一、选择题 1.A 分析:X 的初值为 5,If 语句的条件并不成立,所以 Then 后的语句并未执行,因此 X 和 Y 的值未变。2.C 分析:如果使用 C 的代码,结果是当 X0 也输出 0,与题目要求不符。3.C 分析:内外层循环各执行 3 次,所以共循环 9 次,即输出对话框共出现 9 次。4.A 分析:B 和 C 是不合法的语
4、句;D 不是强制终止语句。5.C 分析:F=1 是将阶乘的初值设为 1,求阶乘时初值不能是 0,否则阶乘值永远都是 0;Sum=Sum+F 是求各阶乘的和,也可表述为 Sum+=F,但 Sum=F 不对,这样仅仅是 10!,并没有加上 1 到 9 的阶乘。6.D 分析:Select Case 并没有限制后面表达式的类型。二、填空题 1.循环次数未知 2.不会 分析:在For循环体中改变循环变量不会导致语法错误和运行时错误,但会打乱原本的循环步伐。3.内 VB.NET 程序设计实验指导 第 3 页 共 13 页*4.程序运行结果为:分析:从第 1 行到第 6 行,前面依次有 5、4、3、2、1、
5、0 个空格。外循环控制换行,第 1 个内循环控制空格的输出,第 2 个内循环控制“*”号的输出。5.Int 分析:请首先注意 X 是 Double 类型,Y 是整形。程序首先得到一个X 值(例如 3.8),然后赋给 Y,则 Y 的值就是 4 了。接着进入条件嵌套语句。如果 X=0,那么再判断 Y 是否大于 X,如果成立(4 3,成立),则 X=3,否则 X=4。目前的功能和 Int 相同。读者可自行举一个四舍五入不进位的例子和一个负数的例子,会发现也跟 Int 函数结果相同,即取小于或等于的最大整数。6.Len(X)和 IIF(Mid(X,i,1)=“e”,1,0)分析:应该把字符串 X 的第
6、 1 个字符一直到最后一个字符都判断一遍,因此 For 循环终值即是字符串长度。首先用 Mid 函数取得字符串中各字符,然后判断其是否为“e”,如果是返回 1,即 N 自加 1,否则为 0,即不自加。三、简答题 1.顺序结构、选择结构和循环结构。2.行式 If 语句结尾处没有 End If;块状 If 语句的 Then 后面不能有任何语句,结尾一定要有 End If。3.在 For 循环中,如果步长为 0,会导致死循环;如果步长为负数,要想循环至少进行一次,则循环初值必须大于终值;如果出现死循环,可采用 Exit For 语句终止运行。4.用“Case x To y”的格式书写。5.Exit
7、For 语句只能终止本层循环,如果要终止外循环,必须在外循环中添加 Exit For 语句。6.VB.NET 的工作模式有设计模式、运行模式和调试模式。代码的输VB.NET 程序设计实验指导 第 4 页 共 13 页 入和编辑可在设计模式或调试模式下进行。7.程序的错误类型有语法错误、运行时错误和逻辑错误;最易察觉的是语法错误;会引发系统意外崩溃的是逻辑错误。8.在程序中需要暂停的代码处可插入断点;插入方法:可在需插入断点的代码左侧灰色区域处单击,出现一个红色圆点,同时代码变为黄色背景;删除方法:在红色圆点上再次单击即可删除断点。2.3 实训指导 实训 1:分别用 If 语句计算个人收入中应扣
8、除的所得税款项 一、实训要求 创建一个名称为 Appl 的项目,保存在 Practice3 文件夹中,要求:在单击按钮事件过中,通过键盘输入某人当月收入值(不超过20000元);扣除免税的确 1600 元后,剩下的收入按表 1 所示的税率缴纳所得税,要求用嵌套的 If 语句实现。表 1 个人所得税税率表 级数 全月应纳税额(扣除 1600 元后)税率 1 500 元以内的部分 5%2 5002000 元的部分 10%3 20005000 元的部分 15%4 500020 000 元的部分 20%相同的实训要求,请用 Select Case 语句实现。相同的实训要求,请用非嵌套的 If 语句和逻
9、辑运算符实现。二、拓展问题 1.如果要判断用户输入的值是否小于等于 20000 呢?三、参考代码 要求:VB.NET 程序设计实验指导 第 5 页 共 13 页 要求:Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click Dim income,income_tax,tax As Single income=InputBox(请输入您的收入(不能超过):)income_tax=income-1600 If income_tax=0 Then
10、 tax=0 Else If income_tax=500 Then tax=income_tax*0.05 Else If income_tax=2000 Then tax=income_tax*0.1 Else If income_tax=5000 Then tax=income_tax*0.15 Else tax=income_tax*0.2 End If End If End If End If MsgBox(您应纳税:&tax&元。)End Sub Private Sub Button2_Click(ByVal sender As System.Object,ByVal e As S
11、ystem.EventArgs)Handles Button2.Click Dim income,income_tax,tax As Single income=InputBox(请输入您的收入(不能超过):)income_tax=income-1600 Select Case income_tax Case Is=0:tax=0 Case Is=500:tax=income_tax*0.05 Case Is=2000:tax=income_tax*0.1 Case Is=5000:tax=income_tax*0.15 Case Else tax=income_tax*0.2 End Sel
12、ect MsgBox(您应纳税:&tax&元。)End Sub VB.NET 程序设计实验指导 第 6 页 共 13 页 要求:实训 2:数据排序、方程求解 一、实训要求 创建一个名称为 App2 的项目,保存在 Practice3 文件夹中,要求:用随机数对象生成 3 个值在 1099 之间的随机正整数,然后按从小到大的顺序重新排列并输出。二、实训提示与说明 1.假设 3 个随机数保存在变量 A.B.C 中,可以通过比较与交换,让 A.B 这 2 个变量中较小的值保存在 A 中,较大的值保存在 B 中;同理在变量 A.C 中,找出较小值保存在 A 中,而将较大值保存在 C 中;在剩下的B.C
13、 这 2 个变量中,按同样的方法让较小值保存在 B 中,即实现数据的升序排列。三、拓展问题 1.在窗体上添加 1 个命令按钮,通过编写命令按钮的单击事件过程实现:生成 4 个随机正整数并按从大到小的顺序。2.在窗体上再添加 1 个命令按钮,通过编写单击事件过程实现根据公式2,1x=aacbb242求一元二次方程 a2x+bx+c=0 的解,要求分别考虑 2 个不同实数根,相同实数根和 1 对共轭复根的情况。四、参考代码 Private Sub Button3_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles But
14、ton3.Click Dim income,income_tax,tax As Single income=InputBox(请输入您的收入(不能超过):)income_tax=income-1600 If income_tax 0 And income_tax 500 And income_tax 2000 And income_tax 5000 Then tax=income_tax*0.2 MsgBox(您应纳税:&tax&元。)End Sub VB.NET 程序设计实验指导 第 7 页 共 13 页 Private Sub Button1_Click(ByVal sender As S
15、ystem.Object,ByVal e As System.EventArgs)Handles Button1.Click Dim A,B,C,t As Integer Dim R As New Random A=R.Next(10,99)B=R.Next(10,99)C=R.Next(10,99)Debug.WriteLine(A、B、C的值是:&A&,&B&,&C)If A B Then t=A:A=B:B=t If A C Then t=A:A=C:C=t If B C Then t=B:B=C:C=t Debug.WriteLine(排序后A、B、C的值是:&A&,&B&,&C)En
16、d Sub Private Sub Button2_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles Button2.Click Dim A,B,C,D,t As Integer Dim R As New Random A=R.Next(10,99)B=R.Next(10,99)C=R.Next(10,99)D=R.Next(10,99)Debug.WriteLine(A、B、C、D的值是:&A&,&B&,&C&,&D)If A B Then t=A:A=B:B=t If A C Then t=A:A=C:C=t
17、If A D Then t=A:A=D:D=t If B C Then t=B:B=C:C=t If B D Then t=B:B=D:D=t If C D Then t=C:C=D:D=t Debug.WriteLine(排序后A、B、C、D的值是:&A&,&B&,&C&,&D)End Sub 三数排序:四数排序:VB.NET 程序设计实验指导 第 8 页 共 13 页 Private Sub Button3_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles Button3.Click Dim a,b,c,del
18、ta As Single Dim x1,x2 As Object a=InputBox(请输出系数a的值:)b=InputBox(请输出系数b的值:)c=InputBox(请输出系数c的值:)delta=b 2-4*a*c If delta=0 Then x1=(-b+Math.Sqrt(delta)/(2*a)x2=(-b-Math.Sqrt(delta)/(2*a)Else delta=-delta x1=(-b)/(2*a)&+&Math.Sqrt(delta)/(2*a)&i x2=(-b)/(2*a)&-&Math.Sqrt(delta)/(2*a)&i End If Debug.W
19、riteLine(x1=&x1)Debug.WriteLine(x2=&x2)End Sub 求一元二次方程的解:实训 3:求自然数 一、实训要求 创建一个名称为 App3 的项目,保存在 Practice3 文件夹中。要求:分别用 ForNext 循环语句和 Do WhileLoop 循环语句计算1+4+7+1000 的值,输出该值和退出循环后循环变量的值。二、拓展要求 1.在窗体上再添加 1 个命令按扭,通过编写命令按扭的单击事件过程实现:计算 1+4+7+10+之和小于等于 1000 的最大总和与最后一项的值。三、拓展部分提示 1.退出循环后,其实已经多算了一项的值,因此要减去多余值才是
20、正确的。四、参考代码 VB.NET 程序设计实验指导 第 9 页 共 13 页 Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click Dim i,isum As Integer For i=1 To 1000 Step 3 isum=isum+i Next MsgBox(和为:&isum&,&循环变量的值为:&i)End Sub Private Sub Button2_Click(ByVal sender As System.Object
21、,ByVal e As System.EventArgs)Handles Button2.Click Dim j,jsum As Integer j=1 Do While j=1000 jsum=jsum+j j=j+3 Loop MsgBox(和为:&jsum&,&循环变量的值为:&j)End Sub Private Sub Button3_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button3.Click Dim k,ksum As Integer k=1 Do While ksum=1
22、000 ksum=ksum+k k=k+3 Loop k=k-3 ksum=ksum-k MsgBox(小于的最大和为:&ksum&,&最后一项的值为:&k)End Sub ForNext 循环代码:Do WhileLoop 循环代码:拓展要求代码:VB.NET 程序设计实验指导 第 10 页 共 13 页 实训 4:算术试题 一、实训要求 创建一个名称为 App4,保存在 Practice3 文件夹中,要求:给出 100 以内整数除法测试题,被除数、除数和商均为整数,能整除。如果用户输入的答案正确,给出肯定信息,然后再出新题;如果答案错误,则要求再次回答;每题最多输入 3 次答案,3 次皆错
23、程序将给出正确答案,然后再出新题。如果输入-1,程序终止运行。二、实训提示 1.关于:要实现 A/B 能整除,可生成 B、C 这 2 个 10 以内的随机数,然后令 A=B*C。2.关于:如果输入答案正确,则再出新题,因此要用到循环(次数未知);答案错误,要求再次回答,也要利用循环;答案只能输入 3次,这里需要用一个变量来记录答案输入的次数。三、拓展要求 1.在窗体上再添加 1 个命令按钮,通过编写命令按钮的单击事件过程实现:出 10 道试题,每题 10 分,答题完毕后给出总分。四、参考代码 实训要求代码:VB.NET 程序设计实验指导 第 11 页 共 13 页 Private Sub Bu
24、tton1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click Dim A,B,C,i,flag As Integer Dim R As New Random Randomize()B=R.Next(1,10)C=R.Next(1,10)A=B*C i=InputBox(A&/&B&=?,计算题)Do While i -1 If i=C Then MsgBox(正确!)Randomize()B=R.Next(1,10)C=R.Next(1,10)A=B*C i=InputBo
25、x(A&/&B&=?,计算题)Else MsgBox(错误!,MsgBoxStyle.Critical)For flag=2 To 3 i=InputBox(A&/&B&=?,计算题)If i=C Then Exit For Else MsgBox(错误!,MsgBoxStyle.Critical)If flag=3 Then MsgBox(正确答案应为:&C)End If End If Next Randomize()B=R.Next(1,10)C=R.Next(1,10)A=B*C i=InputBox(A&/&B&=?,计算题)End If Loop End End Sub VB.NET
26、 程序设计实验指导 第 12 页 共 13 页 Private Sub Button2_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button2.Click Dim A,B,C,i,shang As Integer Dim score As Integer Dim R As New Random For i=1 To 10 B=R.Next(1,10)C=R.Next(1,10)A=B*C shang=InputBox(A&/&B&=?,计算题)If shang=C Then score=sc
27、ore+10 End If Next MsgBox(答题完毕,您的分数是:&score)End Sub 拓展要求代码:实训 5:利用泰勒级数展开式求正弦函数值 一、实训要求 创建一个名称为 App5,保存在 Practice3 文件夹中,要求:根据下列sinx的泰勒级数展开式计算sin300,直到某项的绝对值小于108为止。二、实训提示 1.此问题可参考教材 p73 例 3.15 的做法。2.上述公式中的 x 是弧度数,要先将 300转换成弧度。公式:角度*Math.PI/180。三、拓展要求 1.在 003600范围内,计算并在即时窗口中输出 sin00、sin300、sin600、sin3
28、600的函数值。提示:300的计算后,只要将度数改成其它值即可。但是当计算到 1800的时候,求得的分母值就会很大,甚至超出了长整型的取值范围,就无法计算了。考虑到 001800的正弦和 18003600的正弦相同,只是正负不同,因此在程序中可以判断输入的度数是否大于 1800,如.!7!5!3753xxxxVB.NET 程序设计实验指导 第 13 页 共 13 页 Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click Dim i,j A
29、s Integer Dim fenmu As Long 分母的值 Dim gexiang As Single 各项的值 Dim sum As Single 表达式总和 Dim sign As Integer 正负号标志 Dim x As Single x是弧度数 Dim du As Integer 角度数 du=InputBox(请输入您要计算的角度数(0-360):)If du=0 And du=10 (-8)sum=sum+sign*gexiang i=i+1 fenmu=1 For j=1 To 2*i-1 fenmu=fenmu*j Next gexiang=x (2*i-1)/fenmu sign=-sign Loop If du=0 And du 180 Then MsgBox(du&度的正弦值为:&sum)Else MsgBox(du&度的正弦值为:&-sum)End If End Sub 果超过了,就计算 x-180 的正弦,最后取负即可。例如计算 2700的正弦,则先计算 900的正弦,再取负即可。四、参考代码
限制150内