• cs106a编程方法学作业解答(2)


    第二次作业

    problem #1

    第一题要求做一个由相同大小矩形砖块搭建而成的金字塔。砖块尺寸和底层砖块数由用户指定。要求是金字塔必须坐落在屏幕底部中央,而且每一层比下一层恰少一块砖。做出来应该是这个效果:

    我的想法是利用两个for循环嵌套在一起实现。代码如下:

    /*
    * File: Pyramid.java
    * ------------------
    * This program is a stub for the Pyramid problem, which draws
    * a brick pyramid.
    */

    import acm.program.*;
    import acm.graphics.*;

    public class Pyramid extends GraphicsProgram {

                public void run() {
                         int brickWidth;
                         int brickHeight;
                         int bricksInBase;
                         int windowWidth=getWidth();//获取窗口宽度

                         int windowHeight=getHeight();//获取窗口高度
                         println("This program will draw a pyramid of bricks in a window");
                         brickWidth=readInt("Enter brickWidth:");
                         brickHeight=readInt("Enter brickHeight:");
                         bricksInBase=readInt("Enter bricksInBase:");
                         for(int i=0;i<bricksInBase;i++){        //从底部开始绘制第i+1行
                                      int r=bricksInBase-i;           //r表示第i+1行的砖块数
                                      int y=windowHeight-(i+1)*brickHeight; //确定第i+1行砖块的纵坐标位置

                                      for(int j=0;j<r;j++){          //绘制第i+1行第j+1块砖块
                                                int x=(windowWidth-(bricksInBase-i)*brickWidth)/2+j*brickWidth;  //确定这一块的横坐标位置
                                                GRect Brick= new GRect(x,y,brickWidth,brickHeight);
                                                add(Brick);
                                      }

                         }

              }

    }

    problem #2

    第二题要我们画出如下图所示的彩虹:

    要求是,彩虹不能碰到窗口底部。彩虹的顶点必须在窗口中可见。

    题目实现起来非常直白,因此有一点儿乏味:

    /*
    * File: Rainbow.java
    * ------------------
    * This program is a stub for the Rainbow problem, which displays
    * a rainbow by adding consecutively smaller circles to the canvas.
    */

    import java.awt.Color;

    import acm.program.*;
    import acm.graphics.*;


    public class Rainbow extends GraphicsProgram {

                   public void run() {
                            int windowWidth=getWidth();
                            int windowHeight=getHeight();
                            GRect sky = new GRect(0,0,windowWidth,windowHeight);
                            sky.setColor(Color.CYAN);
                            sky.setFilled(true);
                            sky.setFillColor(Color.CYAN);
                            add(sky);
                            GOval circle1= new GOval(-143,27,1040,1040);
                            circle1.setFilled(true);
                            circle1.setFillColor(Color.RED);
                            add(circle1);
                            GOval circle2= new GOval(-123,47,1000,1000);
                            circle2.setFilled(true);
                            circle2.setFillColor(Color.ORANGE);
                            add(circle2);
                            GOval circle3= new GOval(-103,67,960,960);
                            circle3.setFilled(true);
                            circle3.setFillColor(Color.YELLOW);
                            add(circle3);
                            GOval circle4= new GOval(-83,87,920,920);
                            circle4.setFilled(true);
                            circle4.setFillColor(Color.GREEN);
                            add(circle4);
                            GOval circle5= new GOval(-63,107,880,880);
                            circle5.setFilled(true);
                            circle5.setFillColor(Color.BLUE);
                            add(circle5);
                            GOval circle6= new GOval(-43,127,840,840);
                            circle6.setFilled(true);
                            circle6.setFillColor(Color.MAGENTA);
                            add(circle6);
                            GOval circle7= new GOval(-23,147,800,800);
                            circle7.setFilled(true);
                            circle7.setFillColor(Color.CYAN);
                            add(circle7);


                }

    }

    problem #3

    如图,要求做一个这样的带文本的图。要求是整个图在窗口中居中。文本在各自的方框中居中。也是一道没啥好说的题,比较无趣。

    /*
    * File: GraphicsHierarchy.java
    * ----------------------------
    * This program is a stub for the GraphicsHierarchy problem, which
    * draws a partial diagram of the acm.graphics hierarchy.
    */

    import acm.program.*;
    import acm.graphics.*;

    public class GraphicsHierarchy extends GraphicsProgram {

                  public void run() {
                         int windowWidth=getWidth();
                         int windowHeight=getHeight();
                         int boxWidth=readInt("Enter class box ");
                         int boxHeight=readInt("Enter class box height:");
                         int x1,x2,x3,x4,x5,y1,y2;
                         x1=windowWidth/2;
                         y1=windowHeight/3;
                         y2=windowHeight*2/3;
                         x2=windowWidth/8;
                         x3=windowWidth*3/8;
                         x4=windowWidth*5/8;
                         x5=windowWidth*7/8;
                         GLine line1=new GLine(x1,y1,x2,y2);
                         add(line1);
                         GLine line2=new GLine(x1,y1,x3,y2);
                         add(line2);
                         GLine line3=new GLine(x1,y1,x4,y2);
                         add(line3);
                         GLine line4=new GLine(x1,y1,x5,y2);
                         add(line4);
                         GRect box1=new GRect(x1-boxWidth/2,y1-boxHeight,boxWidth,boxHeight);
                         add(box1);
                         GRect box2=new GRect(x2-boxWidth/2,y2,boxWidth,boxHeight);
                         add(box2);
                         GRect box3=new GRect(x3-boxWidth/2,y2,boxWidth,boxHeight);
                         add(box3);
                         GRect box4=new GRect(x4-boxWidth/2,y2,boxWidth,boxHeight);
                         add(box4);
                         GRect box5=new GRect(x5-boxWidth/2,y2,boxWidth,boxHeight);
                         add(box5);
                         GLabel label1=new GLabel("GObject",x1,y1);
                         int a1=(int)label1.getWidth();
                         int b1=(int)label1.getAscent();
                         label1.move(-a1/2,-boxHeight/2+b1/2);
                         add(label1);
                         GLabel label2=new GLabel("GLabel",x2,y2);
                         int a2=(int)label2.getWidth();
                         int b2=(int)label2.getAscent();
                         label2.move(-a2/2,boxHeight/2+b2/2);
                         add(label2);
                         GLabel label3=new GLabel("GLine",x3,y2);
                         int a3=(int)label3.getWidth();
                         int b3=(int)label3.getAscent();
                         label3.move(-a3/2,boxHeight/2+b3/2);
                         add(label3);
                         GLabel label4=new GLabel("GOval",x4,y2);
                         int a4=(int)label4.getWidth();
                         int b4=(int)label4.getAscent();
                         label4.move(-a4/2,boxHeight/2+b4/2);
                         add(label4);
                         GLabel label5=new GLabel("GRect",x5,y2);
                         int a5=(int)label5.getWidth();
                         int b5=(int)label5.getAscent();
                         label5.move(-a5/2,boxHeight/2+b5/2);
                         add(label5);

            }

    }

    problem #4

    此题要求用户输入一元二次方程的系数a b c 然后给出解。若无实根,则提示用户。

    /*
    * File: Quadratic.java
    * --------------------
    * This program is a stub for the Quadratic problem, which finds the
    * roots of the quadratic equation.
    */

    import acm.program.*;

    public class Quadratic extends ConsoleProgram {

                    public void run() {
                             println("Enter coefficients for the quadratic equation:");
                             double a=readInt("a:");
                             double b=readInt("b:");
                             double c=readInt("c:");
                             double x=b*b-4*a*c;
                             if(x<0){
                                       println("The equation has no real solutions!");
                            }
                            else{
                                       double y=Math.sqrt(x);
                                       double p=(-b+y)*0.5/a;
                                       double q=(-b-y)*0.5/a;
                                       println("The first solution is "+p);
                                       println("The second solution is "+q);

                            }
                   }

    }

    problem #5

    提示用户输入一串正整数,从中找出最大的和最小的,并使用用户指定的数作为输入完毕的标示。

    /*
    * File: FindRange.java
    * --------------------
    * This program is a stub for the FindRange problem, which finds the
    * smallest and largest values in a list of integers.
    */

    import acm.program.*;

    public class FindRange extends ConsoleProgram {

              public void run() {
                      int sentinel=readInt("Enter a integer as sentinel:");
                      println("This program finds the smallest and largest integers in a list. Enter values,one per line,using a "+sentinel+"to signal the end of the list");
                      int a=readInt("?");
                      int largest=0;
                      int smallest=1000000;
                      if(a==sentinel){
                               println("No values have been entered!");
                      }
                      else{
                               while (a!=sentinel){
                                       if(a>largest){
                                              largest=a;
                                       }
                                       if(a<smallest){
                                              smallest=a;
                                       }
                                       a=readInt("?");
                               }
                               println("The smallest value is "+smallest);
                               println("The largest value is "+largest);
                     }
             }
    }

    problem #6

    最后一题是角谷猜想的一个简易验算的程序。提示用户输入一个正整数,要求显示出验算步骤和步骤数。

    /*
    * File: Hailstone.java
    * --------------------
    * This program is a stub for the Hailstone problem, which computes
    * Hailstone sequence described in Assignment #2.
    */

    import acm.program.*;

    public class Hailstone extends ConsoleProgram {

                 public void run() {
                         println("This program computes Hailstone sequences.");
                         int a=readInt("Enter a number:");
                         int count=0;
                         while (a!=1){
                                    if(a%2==0){
                                          a=a/2;
                                          println(2*a+" is even,so I take half = "+a);
                                          count=count+1;
                                    }
                                    else{
                                          a=3*a+1;
                                          println((a-1)/3+" is odd,so I take 3n+1 ="+a);
                                          count=count+1;
                                    }
                          }
                          println("The process took "+count+" steps to reach 1");
                 }

    }

  • 相关阅读:
    electron 整合 serialport
    javascript 中字符串转化utf8字节数组, 然后在将字节数组转化十六进制字符串
    linux 之 非root用户安装mysql5.7.27
    linux(CentOS7) 之 zookeeper 下载及安装
    linux(CentOS7) 之 ntp时间同步配置步骤
    linux(CentOS7) 之 克隆虚拟机并配置网络(固定ip)
    linux(CentOS7) 之 MySQL 5.7.30 下载及安装
    linux(CentOS7) 之 jdk1.8 下载及安装
    Vue.prototype定义原型属性或方法
    Map接口中的常用方法
  • 原文地址:https://www.cnblogs.com/livingisgood/p/4000366.html
Copyright © 2020-2023  润新知