三、编程题4.16 设计工程,已知圆的半径r,求圆面积S。
【解答】设圆半径为r,圆面积为S。
根据数学知识,已知圆半径r,求圆面积S的公式为:2rSπ=。
设计步骤如下。
(1)建立应用程序用户界面,如图4-1所示。
(2)设置对象属性:Label1的Caption属性为“已知圆半径r=”;Text1的Text属性为空;Command1的Caption属性为“圆面积为:”;Label2的Caption属性为空;Label2的BorderStyle属性为1-Fixed Single。
各控件的属性设置如图4-2所示。
图4-1 建立用户界面图4-2 设置各控件的属性(3)编写程序代码。
写出“圆面积为:”命令按钮Command1的Click事件代码为:Private Sub Command1_Click( )Const pi = 3.14Dim r As Single, S As Singler = V al(Text1.Text)S = pi * r ^ 2Label2.Caption = SEnd Sub运行程序时,在文本框输入圆半径的值,单击“圆面积为:”按钮后,输出结果如图4-3所示。
也可以不用文本框接收输入值,改用InputBox函数接收圆的半径r,求圆面积S,代码如下。
图4-3 程序运行结果Private Sub Form_Load( )ShowConst pi = 3.1415926Dim r As Single, S As Singler = V al(InputBox("输入半径:", "计算圆面积", "10")) FontSize = 18 S = pi * r ^ 2Print "圆面积:"; S End Sub程序运行时,首先显示如图4-4所示的对话框,在该对话框的文本框中输入数字,按Enter 键或单击“确定”按钮后,才能显示窗体。
图4-4 输入对话框用InputBox 函数输入文本虽然很方便,但是由于输入框弹出后将暂停程序的运行,直到用户响应,因此输入框不符合VB 自由环境的精神。
输入框适合于像要求用户输入口令等这样不常见的输入方式。
还可以用更好的用户输入方式,如文本框、选项按钮等。
4.17 已知平面坐标系中两点的坐标,求两点间的距离。
【解答】 由数学知识可知,已知两点坐标(x A , y A )、(x B , y B ),求两点间距离的计算公式为2A B 2A B )()(y y x x s -+-=建立用户界面如图4-5所示。
在该界面中用TextBox 控件输入数据,用Label 控件输出数据。
为了形象地表示两点之间的距离,可用Picture 控件插入一幅图,该图用画图软件绘制。
命令按钮Command1的Click 事件代码为:Private Sub Command1_Click( ) Dim xa As Single, xb As Single Dim ya As Single, yb As Single Dim s As Single xa = Val(Text1.Text) ya = V al(Text2.Text)xb = V al(Text3.Text) yb = V al(Text4.Text)s = Sqr((xb - xa) ^ 2 + (yb - ya) ^ 2) Label6.Caption = s End Sub程序运行结果如图4-6所示。
图4-5 设计用户界面图4-6 程序运行结果4.18 在文本框中输入三种商品的单价、购买数量,计算并输出所用的总金额。
【解答】假设第一种商品的单价和购买数量分别是a1和a2,第二种商品的单价和购买数量分别是b1和b2,第三种商品的单价和购买数量分别是c1和c2,所用总金额为x。
通过TextBox控件输入这三种商品的单价、购买数量,然后利用公式x = a1*a2+b1*b2+c1*c2进行计算,最后输出x的值。
设计步骤如下。
(1)建立应用程序用户界面,并设置对象属性,如图4-7所示。
图4-7 计算商品总金额(2)编写程序代码。
写出Command1_Click( )的事件代码为:Private Sub Command1_Click( )Dim a1 As Single, b1 As Single, c1 As SingleDim a2 As Integer, b2 As Integer, c2 As IntegerDim x As Singlea1 = V al(Text1.Text)a2 = V al(Text2.Text)b1 = V al(Text3.Text)b2 = V al(Text4.Text)c1 = V al(Text5.Text)c2 = V al(Text6.Text)x = a1 * a2 + b1 * b2 + c1 * c2Text7.Text = xEnd Sub4.19 设计工程,输出在指定范围内的三个随机数,范围在文本框中输入。
【解答】随机函数Rnd( )可以返回一个(0,1)区间中的随机小数,那么,Rnd * a语句可以返回(0,a)区间中的随机实数(带小数)。
若n, m均为整数,则表达式:Int((m + 1 – n) * Rnd) + n的值是闭区间[ n,m ]中的一个随机整数。
设计步骤如下。
(1)设计程序界面及设置控件属性。
新建一个工程,进入窗体设计器,在窗体中增加一个框架控件Frame1,一个命令按钮Command1和三个标签Label1~Label3。
选定Frame1,在其中增加两个文本框Text1和Text2以及一些标签。
修改对象属性参见表4-1。
设置属性后的窗体如图4-8所示。
表4-1 属性设置(2)编写程序代码。
Private Sub Command1_Click( )Randomizen = V al(Text1.Text)m = V al(Text2.Text)Label4.Caption = Int((m + 1 – n) * Rnd) + nLabel5.Caption = Int((m + 1 – n) * Rnd) + nLabel6.Caption = Int((m + 1 – n) * Rnd) + nEnd Sub运行程序,在文本框中输入范围值后,单击“生成随机数”按钮,可以不断生成指定范围之内的随机整数,如图4-9所示。
图4-8 设计用户界面图4-9 生成随机数4.20 使用大小写转换函数设计程序,实现在文本框中输入英文字母,按“转大写”按钮,文本变为大写;按“转小写”按钮,文本变为小写。
【解答】本题主要使用大小写转换函数UCase( )和LCase( ),另外还用到了KeyUp(键抬起)事件。
设计步骤如下。
(1)建立应用程序用户界面,并设置对象属性。
新建一个工程,进入窗体设计器,在窗体中增加一个标签Label1,一个文本框Text1和三个命令按钮Command1~Command3,参照图4-10设置各个对象的属性。
(a)(b)(c)图4-10 大小写转换(2)设计代码。
首先设计文本框的KeyUp事件代码,使得输入的字符存入文本框的Tag属性中:Private Sub T ext1_KeyUp(KeyCode As Integer, Shift As Integer)Text1.Tag = Text1.TextEnd Sub编写命令按钮Command1的Click事件代码:Private Sub Command1_Click( )Text1.Text = UCase(Text1.Tag)End Sub编写命令按钮Command2的Click事件代码:Private Sub Command2_Click( )Text1.Text = LCase(Text1.Tag)End Sub编写命令按钮Command3的Click事件代码:Private Sub Command3_Click( )Text1.Text = Text1.TagEnd Sub4.21 设某职工应发工资x元,试求各种票额钞票总张数最少的付款方案。
【解答】可以从最大的票额(100元)开始,算出所需的张数,然后在剩下的部分算出较小票额的张数,直到最小票额(1元)。
设计步骤如下。
(1)建立应用程序用户界面。
新建一个工程,进入窗体设计器,增加一个命令按钮Command1,14个标签Label1~Label14,七个文本框Text1~Text7。
用户界面如图4-11(a)所示。
(a)(b)图4-11 建立程序界面与程序运行结果(2)设置对象属性,参见表4-2。
其中标签的标题属性参见图4-11(a)。
表4-2 属性设置(3编写命令按钮Command1的Click事件代码:Private Sub Command1_Click( )x = V al(Text1.Text) ' x为实发工资数y = x \ 100 : Text2.Text = y ' 求100元票张数并显示x = x – 100 * y ' 求剩余款项y = x \ 50 : Text3.Text = y ' 求50元票张数并显示x = x – 50 * y ' 求剩余款项y = x \ 10 : Text4.Text = y ' 求10元票张数并显示x = x – 10 * y ' 求剩余款项y = x \ 5 : Text5.Text = y ' 求5元票张数并显示x = x – 5 * y ' 求剩余款项y = x \ 2 : Text6.Text = y ' 求2元票张数并显示x = x – 2 * y : Text7.Text = x ' 求1元票张数并显示End Sub编写文本框Text1的Change事件代码:Private Sub T ext1_Change( )' 当在Text1中输入新数时,清空其他文本框中的内容Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""Text7.Text = ""End Sub运行结果如图4-11(b)所示。
【说明】文本框的Change事件当文本框中的内容被改变时发生。
下面用信息对话框来输出各种票额钞票张数的付款方案,如图4-12所示。
图4-12 信息对话框只需将图4-11中多余的文本框和标签删去,并改写命令按钮的Click事件代码如下:Private Sub Command1_Click( )x = val(Text1.Text) ' x为实发工资数y1 = x \ 100 ' 求100元票张数x = x Mod 100 ' 求剩余款项y2 = x \ 50 ' 求50元票张数x = x Mod 50 ' 求剩余款项y3 = x \ 10 ' 求10元票张数x = x Mod 10 ' 求剩余款项y4 = x \ 5 ' 求5元票张数x = x Mod 5 ' 求剩余款项y5 = x \ 2 ' 求2元票张数x = x Mod 2 ' 求1元票张数Text1.SelStart = 0Text1.SelLength = Len(Text1.Text)Text1.SetFocusa = "===========================" & Chr(13)a = a & Format(Y1 & "张百元票,", "@@@@@@@@@@") & _Format(Y2 & "张50元票", "@@@@@@@@@@") & Chr(13)a = a & Format(Y3 & "张10元票,", "@@@@@@@@@@@") & _Format(Y4 & "张5元票", "@@@@@@@@@@") & Chr(13)a = a & Format(Y5 & "张2元票,", "@@@@@@@@@@@") & _Format(x & "张1元票", "@@@@@@@@@@") & Chr(13)a = a & "===========================" & Chr(13)a = a & "共计" & Text1.Text & "元"c = MsgBox(a, 0, "应发工资")End Sub【说明】文本框的SelStart属性用来设置(或返回)所选择的文本的起始点,如果没有文本被选中,则指出插入点的位置。