• 2020寒假学习(3)


    Scala语言实验

    1. 计算级数
      请用脚本的方式编程计算并输出下列级数的前 n 项之和 Sn,直到 Sn 刚好大于或等于 q
    为止,其中 q 为大于 0 的整数,其值通过键盘输入。
    例 如 , 若 q 的 值 为 50.0 , 则 输 出 应 为 : Sn=50.416695 。 请 将 源 文 件 保 存 为
    exercise2-1.scala,在REPL模式下测试运行,测试样例:q=1时,Sn=2;q=30时,Sn=30.891459;
    q=50 时,Sn=50.416695。
    import scala.io.StdIn
    object test_demo
     {
        def main(args: Array[String])
        {
          while(2>1){
            var Sn=0.0
            println("请输入n")
            var n:Long=StdIn.readLine().toLong
            var i=1.0
            while(Sn<n)
            {
              Sn=Sn+(i+1)/i
              i=i+1
            }
            println("计算级数为:",Sn)
          }
          }
       }
    

      运行结果:

    2. 模拟图形绘制
    case class Point(var x:Double,var y:Double)extends Drawable
      {
           def shift(deltaX:Double,deltaY:Double)
           {
                x+=deltaX
                y+=deltaY
               }
      }
     trait Drawable
    {
      def draw(){println(this.toString)}
    }
    abstract class Shape(var location:Point)//location是Shape的一个可变字段
    {
      def moveTo(newLocation:Point)//默认实现,只是修改位置
      {
        location=newLocation
      }
      def zoom(scale:Double)
    }
    class Line(beginPoint:Point,var endPoint:Point)extends Shape(beginPoint)with Drawable
    {
      override def draw()
      {
        println(s"Line:(${location.x},${location.y})--(${endPoint.x},${endPoint.y})")//按规定格式重载click
      }
    
      override def moveTo(newLocation:Point)
      {
        endPoint.shift(newLocation.x-location.x,newLocation.y-location.y)//直线移动时,先移动另外一个端点
        location=newLocation //移动位置
      }
    
      override def zoom(scale:Double)
      {
        val midPoint=Point((endPoint.x+location.x)/2,(endPoint.y+location.y)/2) //求出中点,并按中点进行缩放
        location.x=midPoint.x+scale*(location.x-midPoint.x)
        location.y=midPoint.y+scale*(location.y-midPoint.y)
        endPoint.x=midPoint.x+scale*(endPoint.x-midPoint.x)
        endPoint.y=midPoint.y+scale*(endPoint.y-midPoint.y)
      }
    }
    
    class Circle(center:Point,var radius:Double)extends Shape(center)with Drawable
    {
      override def draw() //按规定重载click
      {
        println(s"Circle center:(${location.x},${location.y}),R=$radius")
      }
    
      override def zoom(scale:Double)
      {
        radius=radius*scale //对圆的缩放只用修改半径
      }
    }
    
    object MyDraw
    {
      def main(args:Array[String])
      {
        val p=Point(10,30)
        p.draw()
    
        val line1=new Line(Point(0,0),Point(20,20))
        line1.draw()
        line1.moveTo(Point(5,5))
        line1.draw()
        line1.zoom(2)
        line1.draw()
    
        val cir=new Circle(Point(10,10),5)
        cir.draw()
        cir.moveTo(Point(30,20))
        cir.draw()
        cir.zoom(0.5)
        cir.draw()
      }
    
    }
    

      运行结果:

    3. 统计学生成绩
    import scala.collection.mutable.ArrayBuffer
    object Operate{
      def main(args:Array[String]){
        var students:ArrayBuffer[Student] = new ArrayBuffer[Student]()
        students.append(new Student(301610, "male", 80, 64, 78))
        students.append(new Student(301611, "female", 65, 87, 58))
        students.append(new Student(301612, "female", 44, 71, 77))
        students.append(new Student(301613, "female", 66, 71, 91))
        students.append(new Student(301614, "female", 70, 71, 100))
        students.append(new Student(301615, "male", 72, 77, 72))
        students.append(new Student(301616, "female", 73, 81, 75))
        students.append(new Student(301617, "female", 69, 77, 75))
        students.append(new Student(301618, "male", 73, 61, 65))
        students.append(new Student(301619, "male", 74, 69, 68))
        students.append(new Student(301620, "male", 76, 62, 76))
        students.append(new Student(301621, "male", 73, 69, 91))
        students.append(new Student(301622, "male", 55, 69, 61))
        students.append(new Student(301623, "male", 50, 58, 75))
        students.append(new Student(301624, "female", 63, 83, 93))
        students.append(new Student(301625, "male", 72, 54, 100))
        students.append(new Student(301626, "male", 76, 66, 73))
        students.append(new Student(301627, "male", 82, 87, 79))
        students.append(new Student(301628, "female", 62, 80, 54))
        students.append(new Student(301629, "male", 89, 77, 72))
        println(students.length)
        println(students(1).toString)
    
        getData(students)
        getDataMale(students)
        getDataFeMale(students)
      }
    
      def getData(value: ArrayBuffer[Student]){
        var Mathaverage:Double=0
        var MathSum:Double = 0
        var MathMin:Double = value(0).Math
        var MathMax:Double = 0
    
        var Englishaverage:Double=0
        var EnglishSum:Double = 0
        var EnglishMin:Double = value(0).English
        var EnglishMax:Double = 0
    
        var Physicsaverage:Double=0
        var PhysicsSum:Double = 0
        var PhysicsMin:Double = value(0).Physics
        var PhysicsMax:Double = 0
    
        var number = value.length
        for (i <- 0 until value.length){
          MathSum = value(i).Math+MathSum
          EnglishSum = value(i).English+EnglishSum
          PhysicsSum = value(i).Physics+PhysicsSum
    
          if(value(i).Math>MathMax){
            MathMax=value(i).Math
          }
          if(value(i).English>EnglishMax){
            EnglishMax=value(i).English
          }
          if(value(i).Physics>PhysicsMax){
            PhysicsMax=value(i).Physics
          }
          if(value(i).Math<MathMin){
            MathMin=value(i).Math
          }
          if(value(i).English<EnglishMin){
            EnglishMin=value(i).English
          }
          if(value(i).Physics<PhysicsMin){
            PhysicsMin=value(i).Physics
          }
        }
    
        Mathaverage=MathSum/number
        Englishaverage=EnglishSum/number
        Physicsaverage=PhysicsSum/number
        println("course"+"	"+"average"+"		"+"min"+"		"+"max"+"	")
        println("Math   : "+Mathaverage+"		"+MathMin+"	"+MathMax)
        println("English: "+Englishaverage+"		"+EnglishMin+"	"+EnglishMax)
        println("Physics: "+Physicsaverage+"		"+PhysicsMin+"	"+PhysicsMax)
      }
    
      def getDataMale(value: ArrayBuffer[Student]){
        var Mathaverage: Double = 0
        var MathSum: Double = 0
        var MathMin: Double = value(0).Math
        var MathMax: Double = 0
    
        var Englishaverage: Double = 0
        var EnglishSum: Double = 0
        var EnglishMin: Double = value(0).English
        var EnglishMax: Double = 0
    
        var Physicsaverage: Double = 0
        var PhysicsSum: Double = 0
        var PhysicsMin: Double = value(0).Physics
        var PhysicsMax: Double = 0
    
        var number = 0
    
        for (i <- 0 until value.length) {
          if (value(i).gender.equals("male")) {
            number = number + 1
    
            MathSum = value(i).Math + MathSum
            EnglishSum = value(i).English + EnglishSum
            PhysicsSum = value(i).Physics + PhysicsSum
    
            if (value(i).Math > MathMax) {
              MathMax = value(i).Math
            }
            if (value(i).English > EnglishMax) {
              EnglishMax = value(i).English
            }
            if (value(i).Physics > PhysicsMax) {
              PhysicsMax = value(i).Physics
            }
            if (value(i).Math < MathMin) {
              MathMin = value(i).Math
            }
            if (value(i).English < EnglishMin) {
              EnglishMin = value(i).English
            }
            if (value(i).Physics < PhysicsMin) {
              PhysicsMin = value(i).Physics
            }
          }
    
        }
    
        Mathaverage=MathSum/number
        Englishaverage=EnglishSum/number
        Physicsaverage=PhysicsSum/number
        println("course"+"	"+"average"+"		"+"min"+"		"+"max"+"	"+"(Male)")
        Mathaverage=Mathaverage.toInt
        Englishaverage=Englishaverage.toInt
        Physicsaverage=Physicsaverage.toInt
        println("Math   : "+Mathaverage+"		"+MathMin+"	"+MathMax)
        println("English: "+Englishaverage+"		"+EnglishMin+"	"+EnglishMax)
        println("Physics: "+Physicsaverage+"		"+PhysicsMin+"	"+PhysicsMax)
      }
    
      def getDataFeMale(value: ArrayBuffer[Student]){
        var Mathaverage:Double=0
        var MathSum:Double = 0
        var MathMin:Double = value(1).Math
        var MathMax:Double = 0
    
        var Englishaverage:Double=0
        var EnglishSum:Double = 0
        var EnglishMin:Double = value(1).English
        var EnglishMax:Double = 0
    
        var Physicsaverage:Double=0
        var PhysicsSum:Double = 0
        var PhysicsMin:Double = value(1).Physics
        var PhysicsMax:Double = 0
    
        var number = 0
    
        for (i <- 0 until value.length){
          if(value(i).gender.equals("female")){
            number=number+1
    
            MathSum = value(i).Math+MathSum
            EnglishSum = value(i).English+EnglishSum
            PhysicsSum = value(i).Physics+PhysicsSum
    
            if(value(i).Math>MathMax){
              MathMax=value(i).Math
            }
            if(value(i).English>EnglishMax){
              EnglishMax=value(i).English
            }
            if(value(i).Physics>PhysicsMax){
              PhysicsMax=value(i).Physics
            }
            if(value(i).Math<MathMin){
              MathMin=value(i).Math
            }
            if(value(i).English<EnglishMin){
              EnglishMin=value(i).English
            }
            if(value(i).Physics<PhysicsMin){
              PhysicsMin=value(i).Physics
            }
          }
        }
    
        Mathaverage=MathSum/number
        Englishaverage=EnglishSum/number
        Physicsaverage=PhysicsSum/number
        println("course"+"	"+"average"+"		"+"min"+"		"+"max"+"	"+"(FeMale)")
        Mathaverage=Mathaverage.toInt
        Englishaverage=Englishaverage.toInt
        Physicsaverage=Physicsaverage.toInt
        println("Math   : "+Mathaverage+"		"+MathMin+"	"+MathMax)
        println("English: "+Englishaverage+"		"+EnglishMin+"	"+EnglishMax)
        println("Physics: "+Physicsaverage+"		"+PhysicsMin+"	"+PhysicsMax)
      }
    }
    class Student(id1:Int,gender1:String,Math1:Double,English1:Double,Physics1:Double){
      var id:Int = id1
      var gender:String = gender1
      var Math:Double = Math1
      var English:Double = English1
      var Physics:Double = Physics1
    
      override def toString = s"Student($id, $gender, $Math, $English, $Physics)"
    }
    

      运行结果:

  • 相关阅读:
    WC2021 游记
    TC11054
    P5904
    CF741D
    CF1467 题解
    [CTSC2008]网络管理 [树剖+整体二分]
    [HNOI2015]接水果[整体二分]
    [SDOI2010]粟粟的书架 [主席树]
    整体二分的一些见解[整体二分学习笔记]
    P2710 数列[fhq treap]
  • 原文地址:https://www.cnblogs.com/janeszj/p/12248645.html
Copyright © 2020-2023  润新知