实验三顺序及选择结构程序设计一、实验目的1、掌握顺序结构程序的设计方法。
2、掌握赋值语句、注释语句、InputBox()函数、MsgBox语句与函数的使用方法。
3、掌握Print方法、Tab函数、字体类型、打印机输出的使用。
4、掌握简单块If语句、多分支块If语句、行If语句、IIf()函数的使用。
5、掌握情况语句(Select Case)的使用。
二、实验内容要求:实验一、实验二中选做一个,实验三、实验四中选做一个1、实验一。
2、实验二。
3、实验三。
4、实验四。
三、实验指导1、实验一。
用InputBox()函数输入弧度值,将弧度值转换为角度值(度、分、秒)的形式,然后在窗体上打印出来。
【提示】利用InputBox()函数输入弧度值后,首先把弧度值转换为原始角度值,然后取整,结果就为角度值中的度值,然后把原始角度值减去度值,把结果转化为分值,采用类似思维即可求出结果。
【参考代码】Private Sub Cmd1_Click()Dim s As Single, a As Integer, b As Integer, c As IntegerConst pi As Single = 3.14159s = Val(InputBox("请输入弧度值:"))s = s * 180 / pia = Int(s)s = s - as = s * 60b = Int(s)s = s - bc = s * 60Print "对应的角度值为:"; a & "度" & b & "分" & c & "秒。
"End Sub程序运行界面如图4.1所示。
图4.1程序运行界面2、实验二。
所谓“水仙花数”是指一个三位数,其各位数的立方和等于该数,如:153=13+53+33利用InputBox()函数输入一个三位的整数,判断其是否为水仙花数。
【提示】利用InputBox()函数输入一个三位的整数赋值给一个变量,分别求出其百位、十位、个位数字,之后进行判断(用块IF语句),所以代码应该写在命令按钮的单击事件中,在取三位数的个位、十位、百位时,可以使用整除法(bw = n \ 100),也可以使用取整法(bw = Int(n / 100))来编写。
【参考代码】Private Sub Cmd1_Click()Dim n As Integer, gw As Integer, sw As Integer, bw As Integern = InputBox("请输入一个三位数:")bw = n \ 100sw = (n - bw * 100) \ 10gw = n - bw * 100 - sw * 10If gw ^ 3 + sw ^ 3 + bw ^ 3 = n ThenPrint n; "是水仙花数。
"ElsePrint n; "不是水仙花数。
"End IfEnd Sub程序运行界面如图4.2所示:图4.2 程序运行界面3、实验三。
编写程序,为航空公司计算票价的优惠率,假设优惠率规定如下:①在旅游旺季7~9月份,如果订票数超过20张,票价优惠15%;20张以下,优惠5%。
②在旅游淡季1~5月份、10月份和十一月份,如果订票数超过20张,票价优惠30%;20张以下,优惠20%。
③其它情况一律优惠10%。
根据月份和订票张数决定票价的优惠率。
【提示】本例有两重条件,所以用嵌套实现,首先判断月份,在月份确定的情况下判断订票张数,代码应该写在命令按钮的单击事件中。
【参考代码】Private Sub Cmd1_Click()Dim m As Integer, n As Integer, r As Integerm = Val(Text1.Text)n = Val(Text2.Text)Select Case mCase 7 To 9If n < 20 Then r = 5 Else r = 15Case Is < 5, 10, 11If n < 20 Then r = 20 Else r = 30Case Elser = 10End SelectLabel4.Caption = "所订机票的优惠率为:" & r & "%"End Sub运行界面如图4.3所示。
图4.3 程序运行界面4、实验四。
编写程序,在窗体上添加两个框架(Frame)控件,在其中各自添加2个两个单选按钮,标题属性如下,根据选中情况在文本框内显示结果。
【提示】单选按钮是否被选中的状态用Value来表示,当单选按钮被选中用语句:单选按钮. Value=True来表示,可以使用各种选择语句来实现。
【参考代码】Private Sub Cmd1_Click()'方法1,用并行ElseIf语句。
If Opt1.V alue = True And Opt3.Value = True ThenText1.Text = "我是" & Opt1.Caption & Opt3.CaptionElseIf Opt1.Value = True And Opt4.Value = True ThenText1.Text = "我是" & Opt1.Caption & Opt4.CaptionElseIf Opt2.Value = True And Opt3.Value = True ThenText1.Text = "我是" & Opt2.Caption & Opt3.CaptionElseIf Opt2.Value = True And Opt4.Value = True ThenText1.Text = "我是" & Opt2.Caption & Opt4.CaptionEnd IfEnd Sub本题也可以使用其它选择语句来实现,如:'方法2,用块If语句嵌套块If语句。
If Opt1.V alue = True ThenIf Opt3.V alue = True ThenText1.Text = "我是" & Opt1.Caption & Opt3.CaptionElseText1.Text = "我是" & Opt1.Caption & Opt4.CaptionEnd IfElseIf Opt3.V alue = True ThenText1.Text = "我是" & Opt2.Caption & Opt3.CaptionElseText1.Text = "我是" & Opt2.Caption & Opt4.CaptionEnd IfEnd If图4.4 程序运行界面常见算法:C语言求最小公倍数和最大公约数三种算法最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接求最小公倍数算法:最小公倍数=两整数的乘积÷最大公约数求最大公约数算法:(1)辗转相除法有两整数a和b:①a%b得余数c②若c=0,则b即为两数的最大公约数③若c≠0,则a=b,b=c,再回去执行①例如求27和15的最大公约数过程为:27÷15余1215÷12余312÷3余0因此,3即为最大公约数[cpp]view plaincopy1.#include<stdio.h>2.void main() /* 辗转相除法求最大公约数 */3.{4.int m, n, a, b, t, c;5. printf("Input two integer numbers:\n");6. scanf("%d%d", &a, &b);7. m=a; n=b;8.while(b!=0) /* 余数不为0,继续相除,直到余数为0 */9. { c=a%b; a=b; b=c;}10. printf("The largest common divisor:%d\n", a);11. printf("The least common multiple:%d\n", m*n/a);12.}⑵相减法有两整数a和b:①若a>b,则a=a-b②若a<b,则b=b-a③若a=b,则a(或b)即为两数的最大公约数④若a≠b,则再回去执行①例如求27和15的最大公约数过程为:27-15=12( 15>12 ) 15-12=3( 12>3 )12-3=9( 9>3 ) 9-3=6( 6>3 )6-3=3( 3==3 )因此,3即为最大公约数[cpp]view plaincopy1.#include<stdio.h>2.void main ( ) /* 相减法求最大公约数 */3.{4.int m, n, a, b, c;5.printf("Input two integer numbers:\n");6. scanf ("%d,%d", &a, &b);m=a; n=b;7./* a, b不相等,大数减小数,直到相等为止。
*/8.while ( a!=b)9.if (a>b) a=a-b;10.else b=b-a;11. printf("The largest common divisor:%d\n", a);12. printf("The least common multiple:%d\n", m*n/a);13.}⑶穷举法有两整数a和b:① i=1②若a,b能同时被i整除,则t=i③ i++④若 i <= a(或b),则再回去执行②⑤若 i > a(或b),则t即为最大公约数,结束改进:① i= a(或b)②若a,b能同时被i整除,则i即为最大公约数,结束③ i--,再回去执行②有两整数a和b:① i=1②若a,b能同时被i整除,则t=i③ i++④若 i <= a(或b),则再回去执行②⑤若 i > a(或b),则t即为最大公约数,结束改进:① i= a(或b)②若a,b能同时被i整除,则i即为最大公约数,结束③ i--,再回去执行②1.#include<stdio.h>2.void main () /* 穷举法求最大公约数 */3.{4.int m, n, a, b, i, t;5. printf("Input two integer numbers:\n");6. scanf ("%d,%d", &a, &b);m=a; n=b;7.for (i=1; i<= a; i++)8.if ( a%i == 0 && b%i ==0 ) t=i;9. printf("The largest common divisor:%d\n", t);10. printf("The least common multiple:%d\n", m*n/t);11.}12./* 改进后的13. for (t= a; t>0; t-- )14. if ( a%t == 0 && b%t ==0 ) break;15.*/[cpp]view plaincopy1.//穷举法求最小公倍数2.for (i= a; ; i++ )3.if ( i % a == 0 && i % b ==0 ) break;4. printf("The least common multiple:%d\n", i )5.6.//多个数的最大公约数和最小公倍数7.for (i= a; i>0; i-- )8.if (a%i==0&&b%i==0&&c%i==0) break;9. printf("The largest common divisor:%d\n", i);10.for (i= a; ; i++ )11.if (i%a==0&&i%b==0&&i% c==0) break;12. printf("The least common multiple:%d\n", i )。