![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20220622_7f306b78-f218-11ec-9901-fa163eb4f6be.png)
Scala编程初级实践
实验目的
(1)掌握Scala语言的基本语法、数据结构和控制结构;
(2)掌握面向对象编程的基础知识,能够编写自定义类和特质;
(3)掌握函数式编程的基础知识,能够熟练定义匿名函数。熟悉Scala的容器类库的基本层次结构,熟练使用常用的容器类进行数据;
(4)熟练掌握Scala的REPL运行模式和编译运行方法。
实验平台
操作系统:Linux(推荐Ubuntu18.04.5)。
JDK版本:1.8或以上版本。
Scala版本:2.12.12。
实验内容和要求
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。
2) 模拟图形绘制
对于一个图形绘制程序,用下面的层次对各种实体进行抽象。定义一个Drawable的特质,包括一个draw方法,默认实现为输出对象的字符串表示。定义一个Point类表示点,混入了Drawable特质,并包含一个shift方法,用于移动点。所有图形实体的抽象类为Shape,其构造函数包括一个Point类型,表示图形的具体位置(具体意义对不同的具体图形不一样)。Shape类有一个具体方法moveTo和一个抽象方法zoom,其中,moveTo将图形从当前位置移动到新的位置,各种具体图形的moveTo可能会有不一样的地方。zoom方法实现对图形的放缩,接受一个浮点型的放缩倍数参数,不同具体图形放缩实现不一样。继承Shape类的具体图形类型包括直线类Line和圆类Circle。Line类的第一个参数表示其位置,第二个参数表示另一个端点,Line放缩的时候,其中,点位置不变,长度按倍数放缩(注意,缩放时,两个端点信息也改变了),另外,Line的move行为影响了另一个端点,需要对move方法进行重载。Circle类第一个参数表示圆心,也是其位置,另一个参数表示半径,Circle缩放的时候,位置参数不变,半径按倍数缩放。另外,直线类Line和圆类Circle都混入了Drawable特质,要求对draw进行重载实现,其中,类Line的draw输出的信息样式为“Line:第一个端点的坐标--第二个端点的坐标)”,类Circle的draw输出的信息样式为“Circle center:圆心坐标,R=半径”。如下的代码已经给出了Drawable和Point的定义,同时也给出了程序入口main函数的实现,请完成Shape类、Line类和Circle类的定义。
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20220622_7f66f49a-f218-11ec-9901-fa163eb4f6be.png)
编译运行程序,期望的输出结果如下:
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20220622_7f7ca1fa-f218-11ec-9901-fa163eb4f6be.png)
3) 统计学生成绩
学生的成绩清单格式如下所示,第一行为表头,各字段意思分别为学号、性别、课程名1、课程名2等,后面每一行代表一个学生的信息,各字段之间用空白符隔开。
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20220622_7ff66436-f218-11ec-9901-fa163eb4f6be.png)
给定任何一个如上格式的清单(不同清单里课程数量可能不一样),要求尽可能采用函数式编程,统计出各门课程的平均成绩、最低成绩和最高成绩;另外,还需按男女同学分开,分别统计各门课程的平均成绩、最低成绩和最高成绩。
测试样例1如下:
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20220622_80002b06-f218-11ec-9901-fa163eb4f6be.png)
样例1的统计结果输出为:
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20220622_801375e4-f218-11ec-9901-fa163eb4f6be.png)
测试样例2如下:
样例2的统计结果为:
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20220622_8086f7ee-f218-11ec-9901-fa163eb4f6be.png)
实验报告
参考书籍
扫码优惠购书
《Flink编程基础(Scala版)》
ISBN:9787302583677
作者:林子雨,陶继平
定价:69.80元
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20220622_80d9c870-f218-11ec-9901-fa163eb4f6be.png)
精彩推荐
Flink编程基础│FlinkCEP编程实践 Flink编程基础│DataStream API编程实践 Flink编程基础│DataSet API编程实践 数据分析实战│客户价值分析 数据分析实战│价格预测挑战 数据分析实战│时间序列预测 数据分析实战│KaggleTitanic生存预测