程序设计基础-Visual Basic(2019秋)

沈阳师范大学 刘立群

目录

  • 认识 Visual Basic
    • ● 认识 Visual Basic
    • ● 对象的属性、事件和方法
    • ● 控件的容器-窗体
    • ● 文本编辑工具-文本框
    • ● 命令按钮和标签
  • 程序设计基础
    • ● 语句和语法规则
    • ● 数据类型和常量变量
    • ● 运算符与表达式
    • ● 常用内部函数
    • ● 输入与输出
  • 基本控制结构和算法
    • ● 程序结构与算法
    • ● 选择结构的语句实现
    • ● 循环结构的语句实现
    • ● 穷举和递推问题求解
    • ● 嵌套循环解百钱百鸡问题
    • ● 星形矩阵的显示问题
  • 常用标准控件
    • ● 选择控件和滚动条--设置文字格式
    • ● 列表框及组合框—购票系统
    • ● 计时器与图片控件—自动变换的交通灯
    • ● 图形操作—小球运动
  • 数组和过程
    • ● 数组的定义与一维数组的应用
    • ● 二维数组
    • ● 控件数组
    • ● 自定义过程
    • ● 参数传递
    • ● 变量的作用域
  • 键盘鼠标事件与菜单设计
    • ● 鼠标键盘事件--小鸡吃虫游戏
    • ● 菜单程序设计--控制移动字幕
  • 通用对话框与文件操作
    • ● 通用对话框与文件操作
    • ● 文件操作--打开保存数据实例
嵌套循环解百钱百鸡问题

3.5  嵌套循环解百钱百鸡问题

3.5.1 循环的嵌套

在循环语句中使用另一个循环语句称为循环的嵌套,也称多重循环。For循环、Do循环和While循环都可以互相嵌套,利用循环的嵌套可以实现更复杂的程序设计。两个For语句嵌套的形式:


例如:

For i = 1 To 3

For j = 1 To 3

Print i, j

Next

Next

执行过程:

  i=1  j=1        输出11

j=2        输出12

j=3        输出13  (内层循环完毕,进行外层的下一次循环)

  i=2  j=1        输出21

j=2        输出22

j=2        输出22         

  i=3  j=1        输出31

j=2        输出32

j=3        输出33

 

不论何种嵌套,外循环都要完整地包含内循环,不允许交叉。程序代码需要有良好的注释和排版风格,否则嵌套的循环语句往往会引起一些程序理解上的混乱。

【例1】用三重循环求解水仙花数,“水仙花数”是一个三位数,例如153=13+53+33

Dim i %, j%, k%    

For i = 1 To 9

   For j = 0 To 9

        For k = 0 To 9             

             Ifi*100+10*j+ k=i^3+j^3+k^3 Then

                   Print i*100*10*j+ k

             End If

         Next k

    Next j

Next i

程序运行结果如图1所示。


3.5.2 百钱百鸡问题

百元买百鸡问题:今有鸡翁一,值钱伍;鸡母一,值钱三;鸡雏三,值钱一。凡百钱买百鸡,问鸡翁、母、雏各几何?

答曰:鸡翁四,值钱二十;鸡母十八,值钱五十四;鸡鶵七十八,值钱二十六。又答:鸡翁八,值钱四十;鸡母十一,值钱三十三,鸡鶵八十一,值钱二十七。又答:鸡翁十二,值钱六十;鸡母四、值钱十二;鸡鶵八十 四,值钱二十八。”

“百鸡问题”是中古时期,关于不定方程整数的典型问题,邱建对此有精湛和独到的见解。

【例2】百元买百鸡问题求解,已知鸡翁5元一只,母鸡3元一只,小鸡1元三只,现用100元买100只鸡,求能买鸡翁、母鸡、小鸡各多少只?

算法设计:此题宜采用穷举法求解,即对所有可能解,逐个进行试验,若满足条件,就得到一组解,否则继续测试,直到循环结束为止。


求解过程如下:

①假设公鸡母鸡小鸡分别为A,B,C。

②满足的条件:

                               A+B+C=100

                               A*5+B*3+C/3=100

③确定取值范围:

                               A:1~20        B:1~33           C:1~100

编写程序代码如下:

For a=1 to 20

    For b=1 to 33

       For c=1 to 100

           if a+b+c=100 and a*5+b*3+c/3=100 then

                 Print a,b,c

           end if

        Next c

     Next b

Next a


简化后的代码如下:

For a=1 to 20

    For b=1 to 33

           c=100-a-b

           if a*5+b*3+c/3=100 then

                 Print a,b,c

           end if

 Next a,b


程序运行时ijk的值分别按下列顺序测试:

i       j         k

1      1        98

1      2        97

….

1      33       66

2      1        97

2      2        96

….

20     33       47

程序运行结果如图2所示,共有三组满足条件的值。

======================================================================================



=====================================================================================