第6章习题及答案_第1页
第6章习题及答案_第2页
第6章习题及答案_第3页
第6章习题及答案_第4页
第6章习题及答案_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、Visual Basic(.NET)程序设计(第2版)第6章 过程 习题及答案一、选择题1Sub过程与Function过程最根本的区别是:(A) 前者可以使用Call或直接使用过程名调用,后者不可以(B) 后者可以有参数,前者不可以(C) 两种过程参数的传递方式不同(D) 前者无返回值,但后者有返回值答案:D知识点:Sub过程、Function过程难度:1提示:无题解:无2在定义函数过程时,不可能用到的关键字是:(A) Exit(B) As (C) Sub(D) End答案:C知识点:Function过程难度:1提示:无题解:无3在定义通用过程时,下列关键字中不能用来修饰形参的是:(A) By

2、Val(B) ByRef (C) Optional(D) Static答案:D知识点:Sub过程、Function过程难度:1提示:无题解:无4在同一模块中定义了两个同名的过程,以下哪一项可以让它们实现重载:(A) 返回值类型不同(B) 参数类型不同 (C) 参数名称(D) 参数传递方式不同答案:B知识点:过程重载难度:1提示:无题解:无5以下关于递归的说明中正确的是:(A) 递归有直接递归和间接递归(B) 递归过程可以无限次调用自己(C) 递归过程的形参必须是按地址传递(D) 递归过程必须有返回值答案:A知识点:递归难度:1提示:无题解:无6.下列定义一个Function过程的首部,语法正确

3、的是()。(A)Function MyFunc(ByVal i As Integer) As Integer(B)Function MyFunc(var i :Integer):Integer(C)Function MyFunc(Dim i As Integer) As Integer(D)Function Integer MyFunc()答案:A知识点:Function过程难度:1提示:无题解:无7.在Sub过程MySub中,不等过程执行结束就将控制权立即返回调用者的语句为()。(A)End Sub(B)End MySub(C)Exit Sub(D)Exit MySub答案:C知识点:Sub

4、过程难度:1提示:无题解:无8.Function过程MyFunc返回整型值,过程中不等到执行结束就将控制权立即返回调用者的语句为( )。(A)End(B)Return(C)Exit(D)MyFunc答案:B知识点:Function过程难度:1提示:无题解:无9对于通用过程,下列叙述中正确的是( )。(A)过程的定义不能嵌套,但过程调用可以嵌套(B)过程的定义可以嵌套,但过程调用不能嵌套(C)过程的定义和调用都不能嵌套(D)过程的定义和调用都可以嵌套答案:A知识点:调用过程难度:1提示:无题解:无10有过程定义如下: Private Sub Fun(x As Integer, y As Inte

5、ger, z As Integer)则下列调用语句不正确的是( )。(A)Call Fun(a,b,c)(B)Call Fun(3,4,c)(C)Fun a,5(D)Fun(a,b,c)答案:C知识点:Function过程难度:1提示:无题解:无11在过程中定义的变量,如果希望在离开该过程后,还能保存过程中局部变量的值就应该使用( )关键字在过程中定义变量。(A)Dim(B)Private(C)Public(D)Static 答案:D知识点:定义变量难度:1提示:无题解:无12在过程内定义的变量(不在控制结构语句块中)也称为( )。(A)全局变量(B)模块级变量(C)局部变量(D)静态变量答案

6、:C知识点:定义变量难度:1提示:无题解:无13在过程定义中用_关键字表示形参是按地址传递的。(A)Var(B)ByDef(C)ByVal(D)ByRef答案:D知识点:参数传递方式难度:1提示:无题解:无7下面过程运行后显示的结果是_。 Sub Main() Dim x, y As Integer x = 12 : y = 34 Call f(x, y) Console.WriteLine(x & , & y) Console.Read() End Sub Public Sub f(ByRef n As Integer, m As Integer) n = n Mod 10 m = m 10

7、 End Sub(A)2,34(B)12,34(C)2,3(D)12,3答案:A知识点:参数传递方式难度:2提示:无题解:无二、判断题1如果过程的一个形参使用了ByRef关键字修饰,且调用时相应的实参是一个变量,则实参变量的数据类型必须与形参相同。答案:知识点:参数传递方式难度:1提示:无题解:无2因为函数过程有返回值,所以只能用在表达式中,不能使用Call语句调用。答案:知识点:调用过程难度:1提示:无题解:无3事件过程只能在事件发生时由系统调用,不能在程序中使用代码直接调用。答案:知识点:调用过程难度:1提示:无题解:无4可以使用Static关键字修饰过程的形式参数,使之可以用作静态过程级

8、变量。答案:知识点:形式参数难度:1提示:无题解:无5在窗体模块中,不能定义全局通用过程。答案:知识点:Sub过程、Function过程难度:1提示:无题解:无6对于函数过程,如果不给函数名赋值,则函数不返回任何值。答案:知识点:Function过程难度:1提示:无题解:无7*定义通用过程时有几个形参,则调用该过程时必须提供几个实参。答案:知识点:可选参数难度:1提示:无题解:无8过程参数的默认传递方式是按值传递。答案:知识点:参数传递方式难度:1提示:无题解:无9因为Sub过程没有返回值,所以Return语句不能用在Sub过程中。答案:知识点:Sub过程难度:1提示:无题解:无10*使用命名

9、参数调用通用过程时,实参的顺序可以不与相应的形参相同。答案:知识点:命名参数难度:1提示:无题解:无三、读程序题1. 运行下面控制台程序,输出的内容是( )。 1 Sub Main() 2 Console.WriteLine(f(3.0, 7) 3 Console.Read() 4 End Sub 5 Public Function f(x As Single, n As Integer) As Single 6 If n = 0 Then 7 f = 1 8 Else 9 If n Mod 2 = 1 Then10 f = x * f(x, n 2)11 Else12 f = f(x, n

10、2) x13 End If14 End If15 End Function答案:27知识点:递归难度:4提示:无题解:无2*以下是一个按钮的Click事件过程与一个函数过程,当单击此按钮时,文本框中显示的是 。 1 Private Sub Button1_Click() Handles Button1.Click 2 Dim i As Integer 3 i = 8 4 TextBox1.Text = f1(i, 11) + i 5 End Sub 6 Private Function f1(intVar1 As Integer, Optional intVar2 As _ 7 Integer

11、 = 10) As Integer 8 If intVar2 10 Then intVar1 = intVar2 9 f1 = intVar1 + intVar210 End Function答案:30知识点:可选参数难度:2提示:无题解:无3阅读下面控制台程序,当Value过程形参前有ByVal关键字时,运行程序,在窗口中显示的第一行内容是 (1) ,第二行内容是 (2) 。若将形参表中的ByVal关键字改为ByRef,再执行本程序,窗口中显示的第一行内容是 (3) ,第二行内容是 (4) 。 1 Sub Main() 2 Dim x, y As Integer 3 x = 10 : y =

12、 15 4 Call Value(x, y) 5 Console.WriteLine(x & & y) 6 Console.Read() 7 End Sub 8 Private Sub Value(ByVal m As Integer, ByVal n As Integer) 9 m = m * 2 : n = n - 510 Console.WriteLine(m & & n)11 End Sub答案:(1)20 10;(2)10 15;(3)20 10;(4)20 10知识点:参数传递方式难度:3提示:无题解:无4下面是一个控制台程序,窗口中输出的结果第一行是 (1) ,第五行是 (2)

13、。 1 Sub Main() 2 Dim x, y As Integer 3 Dim n, z As Integer 4 x = 1 : y = 1 5 For n = 1 To 6 6 z = f1(x, y) 7 Console.WriteLine(n & & z) 8 Next 9 Console.Read()10 End Sub11 Private Function f1(ByRef x As Integer, ByRef y As Integer) As Integer12 Dim n As Integer13 Do While n = 414 x = x + y15 n = n +

14、 116 Loop17 Return x18 End Function答案:(1)1 6;(2)5 26知识点:参数传递方式难度:3提示:无题解:无5窗体上有一个按钮Button1和两个文本框TextBox1、TextBox2。下面是这个窗体模块的全部代码。运行程序,第一次单击按钮时,两个文本框中的内容分别是 (1) 和 (2) ;第二次单击按钮,两个文本框中的内容又分别是 (3) 和 (4) 。 1 Dim y As Integer 模块级变量 2 Private Sub Button1_Click() Handles Button1.Click 3 Dim x As Integer 4 x

15、 = 2 5 TextBox1.Text = f2(f1(x), y) 6 TextBox2.Text = f1(x) 7 End Sub 8 9 Private Function f1(ByRef x As Integer) As Integer10 x = x + y : y = x + y11 f1 = x + y12 End Function13 14 Private Function f2(ByRef x As Integer,ByRef y As Integer) As Integer15 f2 = 2 * x + y16 End Function答案:(1)10;(2)10;(3

16、)58;(13)58知识点:参数传递方式难度:4提示:无题解:无6运行如下程序,控制台窗口中显示内容的第一行是 (1) ;第二行是 (2) 。 1 Sub Main() 2 Call Test(2) 3 Console.Read() 4 End Sub 5 6 Private Sub Test(ByRef x As Integer) 7 x = x * 2 + 1 8 If x 6 Then 9 Call Test(x)10 End If11 x = x * 2 + 112 Console.WriteLine(x)13 End Sub答案:(1)23;(2)47知识点:递归难度:4提示:无题解

17、:无7下面控制台程序在窗口中显示的两行内容分别是 (1) 与 (2) 。如果将sub1过程的第二个形参y前的ByRef删除,则在窗体上显示的内容是 (3) 与 (4) 。 1 Sub Main() 2 Dim x As Integer, y As Integer, z As Integer 3 x = 1 : y = 2 : z = 3 4 Call sub1(x, x, z) 5 Call sub1(x, y, y) 6 Console.Read() 7 End Sub 8 Private Sub sub1(ByRef x As Integer, ByRef y As Integer, By

18、Ref z As Integer) 9 x = 3 * z10 y = 2 * z11 z = x + y12 Console.WriteLine(x & & y & & z)13 End Sub答案:(1)6 6 12;(2)6 10 10;(3)9 6 15;(4)6 4 10知识点:参数传递方式难度:5提示:无题解:无8假设下面控制台程序中的4条语句:语句语句,每次只使用其中的一条语句。当使用语句时,输出的内容是 (1) ;当使用语句时,输出的内容是 (2) ;当使用语句时,输出的内容是 (3) ;当使用语句时,输出的内容是 (4 。 1 Public Sub Main() 2 Dim

19、x As Integer 3 Console.WriteLine(a(x) * 2) 语句 4 Console.WriteLine(x + a(x) * 2) 语句 5 Console.WriteLine(x + a(x) + a(x) 语句 6 Console.WriteLine(x + a(a(x) 语句 7 Console.Read() 8 End Sub 9 Private Function a(ByRef y As Integer) As Integer10 y = y + 111 a = y + 112 End Function答案:(1)4;(2)4;(3)5;(4)4知识点:参

20、数传递方式难度:4提示:无题解:无9.下面程序段运行的输出结果是( ): 1 Dim i, j, x As Integer 2 For i = 1 To 6 Step 2 3 For j = i To 4 4 x = i * j 5 Console.Write(x & ,) 6 Next 7 Next答案:1,2,3,4,9,12,知识点:循环嵌套难度:1提示:无题解:无10.运行下面控制台程序,在窗口中输出的内容是( )。 1 Sub Main() 2 Console.WriteLine(f(24, 18) 3 Console.ReadKey() 4 End Sub 5 6 Public F

21、unction f(m As Integer, n As Integer) 7 Do While m n 8 If m n Then 9 m = m - n10 Else11 n = n - m12 End If13 Loop14 f = m15 End Function答案:6知识点:Function过程、调用过程难度:2提示:无题解:无四、完善程序题1弦截法求方程x-2sinx=0的根。如图所示,弦截法的原理为:对于方程,找一个单调有根区间x1,x2,连接和两点,连线与横轴交点的横坐标为:反复使用r取代x1或x2来缩小有根区间。当或时(e为给定的精度),即认为r是方程的数值解。请完善下面程

22、序。x2图 弦截法解方程f(x)x*xyx1f(x2)f(x1)r1r2f(r1)f(r2) 1 Private Sub Button1_Click() Handles Button1.Click 2 Dim x1, x2 As Single 3 Dim e As Single : Dim r As Single 4 e = 0.000001 5 x1 = Val(TextBox1.Text) 6 x2 = Val(TextBox2.Text) 7 If f(x1) * f(x2) 0 Then 8 TextBox3.Text = 请重新选取两点 9 Exit Sub10 End If11 D

23、o12 r = (1) 13 If Math.Abs(f(r) e Or Math.Abs(x2 - x1) e Then14 (2) 15 ElseIf f(r) * f(x1) 0 Then16 (3) 17 ElseIf f(r) * f(x2) 0 Then 若是零巧数,则显示 6 Console.Write(i & ) 7 Console.WriteLine(n) 8 End If 9 Next10 Console.Read()11 End Sub12 Function s(n As Integer) As Integer13 Dim k, m As Integer14 k = (n

24、 100) Mod 10 获取百位数15 If k = 0 Then16 m = (2) + n Mod 10017 If m * 9 = n Then18 Return m19 Else20 (3) 21 End If22 Else23 Return -124 End If25End Function答案:(1)s(i);(2)(n 1000) * 100;(3)Return -1知识点:参数传递方式难度:3提示:无题解:无3.本程序判断一个四位数的各位数逆向排列形成的新的四位数是否是原四位的整数倍(2倍以上),并输出满足条件的四位数,如871221874。请完善本程序。 1 Sub Mai

25、n() 2 Dim t As Boolean, i, k As Integer 3 For i = 1000 To 9999 4 Call f( (1) ) 5 If t Then 6 Console.Write(i & :) 7 Console.WriteLine(k & = & i & * & k i) 8 End If 9 Next10 Console.Read()11 End Sub12 Sub f(n As Integer, ByRef m As Integer, ByRef flg As Boolean)13 Dim i As Integer14 flg = False15 m =

26、 016 i = n17 Do While i 018 m = (2) 19 i = i 1020 Loop21 If m Mod n = 0 And m n 1 Then22 flg = (3) 23 End If24 End Sub答案:(1)i , k , t;(2)m*10+i Mod 10;(3)True知识点:Sub过程难度:4提示:无题解:无五、编程题1编写递归函数求1+2+3+n的值。答案:见题解。知识点:Function过程难度:2提示:无题解:以下函数Add返回1+2+3+n的值。 1 Private Function Add(n As Integer) As Intege

27、r 2 If n = 1 Then 3 Return 1 4 Exit Function 5 End If 6 Return n + Add(n - 1) 7 End Function2编写判断某年是否为闰年的函数。该函数有一个整型参数表示年份,返回值为逻辑型,当该年份是闰年时,函数返回值为True,否则返回False。答案:见题解。知识点:Function过程难度:1提示:闰年是指能被4整除的年份,不包括去掉后面两个零之后不能被4整除的世纪年。如:2000年是闰年,1900年不是闰年。题解:解法一: 1 Private Function Leapyear(year As Integer) A

28、s Boolean 2 If (year Mod 4 = 0 And year Mod 100 0) Or year Mod 400 = 0 Then 3 Return True 4 Else 5 Return False 6 End If 7 End Function解法二,更简洁的写法: 1 Private Function Leapyear(year As Integer) As Boolean 2 Return year Mod 4 = 0 And year Mod 100 0 Or year Mod 400 = 0 3 End Function3编写程序调用例6.4中的函数过程Fib

29、,计算Fibonacci数列中从第几项开始起数列项的值超过10000。答案:第21项。知识点:调用过程难度:1提示:无题解:以下是控制台程序的Main过程,调用教材中的Fib函数。 1 Sub Main() 2 Dim n As Integer 3 n = 1 4 Do 5 If Fib(n) 10000 Then Exit Do 6 n = n + 1 7 Loop 8 Console.WriteLine(n) 9 Console.Read()10 End Sub4编写一个首部为C(m As Integer,n As Integer)As Integer的函数,函数的返回值为: (其中n 0

30、,m n,m 0,设0!=1)答案:见题解。知识点:Function过程难度:1提示:无题解: 1 Private Function c(m As Integer, n As Integer) As Integer 2 Return f(m) / f(n) / f(m - n) 3 End Function 4 Private Function f(i As Integer) As Long 5 If i = 1 Or i = 0 Then 6 Return 1 7 Else 8 Return i * f(i - 1) 9 End If10 End Function5编写函数S(m As In

31、teger,n As Integer) As Long,此函数返回m+mm+mmm+mm(n个m)的值。比如S(2,5)的返回值为2+22+222+2222+22222的值。答案:见题解。知识点:Function过程难度:1提示:无题解:解法一: 1 Private Function s(m As Integer, n As Integer) As Long 2 Dim i As Integer 3 Dim s1 As String 4 For i = 1 To n 5 s1 = s1 & m 6 s = s + s1 7 Next 8 End Function解法二: 1 Private Function s(m As Integer, n As Integer) As Long 2 Dim i As Integer 3 Dim lng1 As Long 4 For i = 1 To n 5 lng1 = lng1 * 10 + m 6 s = s + lng1 7 Next 8 End Fun

温馨提示

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

评论

0/150

提交评论