1. 一个数字如果为正数,则它的signum为1;如果是负数,则signum为-1;如果是0,则signum为0。编写一个函数来计算这个值。

scala> def signum(x:Int):Int = if(x>0)1 else if(x==00 else -1
signum: (x: Int)Int
 
scala> signum(100)
res6: Int = 1
 
scala> signum(0)
res7: Int = 0
 
scala> signum(-2)
res8: Int = -1
 
2. 一个空的块表达式{}的值是什么?类型是什么?
回答:一个空的块表达式{}的值()。类型是Unit。
scala> def test = {}
test: Unit
 
scala> val t={}
t: Unit = ()
 
 
3. 指出在Scala中何种情况下赋值语句 x=y=1 是合法的。(提示:给x找个合适的类型定义。)
在x是Unit类型时,赋值语句x=y=1是合法的。但是这样的结果也许不是你的本意。
 
scala> var = 0
y: Int = 0
 
scala> var x=y=1
x: Unit = ()
 
4. 针对下列 Java 循环编写一个Scala版:for(int i=10; i>=0; i--) System.out.println(i);
 
for(i <- 0.to(10).reverse) println(i)
 
5. 编写一个过程countdown(n: Int),打印从n到0的数字。
scala> def countdown(n: Int){ for(i <- 0.to(n).reverse) println(i) } //注意{}块前没有=号
countdown: (n: Int)Unit
 
scala> countdown(10)
10
9
8
7
6
5
4
3
2
1
0
 
6. 编写一个for循环,计算字符串中所有字母的Unicode代码的乘积。举例来说,“Hello”中所有字符的乘积为9415087488L。
scala> var i: Long=1for(ch <- "Hello") i = i * ch.toInt //注意,使用Int会得到错误的结果,因为发生上溢出。
i: Long = 9415087488
 
scala> Int.MaxValue
res28: Int = 2147483647
 
7. 同样是解决前一个练习的问题,但这次不使用循环。(提示:在Scaladoc中查看StringOps)
scala> var product: BigInt = 1"Hello".foreach(product *= _.toInt)
product: BigInt = 9415087488
 
  1. def foreach(f:(A)⇒Unit):Unit
  2. [use case]Applies a function f to all elements of this string.
 
8. 编写一个函数 product(s: String),计算前面练习中提到的乘积。
scala> def product(s: String): BigInt = {var i: BigInt=1; s.foreach(i *= _.toInt); i}
product: (s: String)BigInt
 
scala> product("Hello")
res38: BigInt = 9415087488
 
9. 把前一个练习中的函数改成递归函数。
def product(s: String): BigInt={
 
    if(s == null || s.length == 0return 0
 
    else if( s.length == 1) s(0).toInt
 
    else s.head.toInt * product(s.tail)
 
}
 
10. 编写函数计算xn,其中n是整数,使用如下的递归定义:
  • xn=y2, 如果n是正偶数的话,这里的y=xn/2
  • xn·xn-1,如果n是正奇数的话。
  • x0=1。
  • xn=1/x-n,如果n是负数的话。
不得使用return语句。
 
def pow(x:Double, n:Int):BigDecimal={
 
  if(n == 0)  1
 
  else if(n > 0 && n % 2 == 0)  pow(x, n/2) * pow(x, n/2)
 
  else if(n > 0 && n % 2 == 1)  x * pow(x, n-1)
 
  else (n < 0)  1/pow(x, -n)
 
}
 
pow(0.1, -2)
 
//res122: BigDecimal = 1E+2
 

Ch02 控制结构和函数 - 练习的更多相关文章

  1. Scala学习(二)--- 控制结构和函数

    控制结构和函数 摘要: 本篇主要学习在Scala中使用条件表达式.循环和函数,你会看到Scala和其他编程语言之间一个根本性的差异.在Java或C++中,我们把表达式(比如3+4)和语句(比如if语句 ...

  2. Scala的控制结构和函数

    控制结构和函数 先看以下简单的一个条件表达式的demo object TestConditional { def main(args: Array[String]): Unit = { // scal ...

  3. 2.scala控制结构、函数、异常处理

    2.scala控制结构.函数.异常处理---小书匠,在线编辑器,MARKDOWN,Evernote,文件版本 a:focus { outline: thin dotted #333; outline: ...

  4. Python Revisited Day 04 (控制结构与函数)

    目录 4.1 控制结构 4.1.1 条件分支 4.1.2 循环 4.2 异常处理 4.2.1 捕获与产生异常 4.2.2 自定义异常 4.3 自定义函数 Tips 参数默认值为可变时 危险 4.3.1 ...

  5. 快学Scala-第二章 控制结构和函数

    知识点: 1.条件表达式 if(x>0) 1 else 0 scala每个表达式都有一个类型,如果一致则为它们的类型,如果为混合类型表达式,则为它们的公共超类型Any. if(x>0) 1 ...

  6. 《快学Scala》——控制结构和函数

    条件表达式 在Scala中if/else表达式有值,这个值就是跟在if或else之后的表达式的值.例如: if (x > 0) 1 else -1 上述表达式的值是1或-1,具体是哪一个取决于x ...

  7. Python3控制结构与函数

    1.if语句的另一种写法: expression1 if boolean_expression else expression2 boolean_expression为true时使用expressio ...

  8. 【scala】2.控制结构和函数

    简介 在Java或者C++中,我们把表达式和语句看做两种不同的东西.表达式有值,而语句执行动作. 在Scala中,几乎所有构造出来的语法结构都是有值的.这个特性使得程序更加的精简,也更易读. 1.条件 ...

  9. Scala具体解释---------控制结构和函数

    条件表达式: Scala的if else语法结构和Java的一样.只是,Scala的if else表达式有值.这个值就是跟在if或者else后面的表达式的值. 比如: if(x>0) 0 els ...

随机推荐

  1. 用ajax下载字节流形式的excel文件

    原因:ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的.文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件. 解决方 ...

  2. python pyenv

    使用pyenv安装多个版本的python 管理多个python环境使用 virtualenv 请看  http://www.cnblogs.com/juandx/p/5357518.html 安装py ...

  3. JSP之连接SQL Server

    1.在SQL Server中启用sa(请参考本人博客:http://www.cnblogs.com/zhouhb/archive/2011/02/15/1955324.html)2.在SQL Serv ...

  4. 《effective Go》读后记录:GO基础

    一个在线的Go编译器 如果还没来得及安装Go环境,想体验一下Go语言,可以在Go在线编译器 上运行Go程序. 格式化 让所有人都遵循一样的编码风格是一种理想,现在Go语言通过gofmt程序,让机器来处 ...

  5. IDEA2018.2破解方法

    前言 之前也试过多种方式,但是总是使用了一会儿又需要破解,今天又找了一个,不知道可以使用多久. 目前看是可以破解开的,所以分享一下. 适用于JetBrain旗下版本为2.3或2.4的所有产品 一.在 ...

  6. MySQL 大表数据定期归档

    数据库有一张表数据量很大,真正WEB项目只用到一个月内的数据,因此把一个月前的旧数据定期归档. 1 - 创建一个新表,表结构和索引与旧表一模一样 create table table_news lik ...

  7. 将ubuntu的home迁移至第二块磁盘

    在忍受了一整周的磁盘将满的报警之后,今天终于着手准备将占据64G磁盘中的44G的Home迁移至另外一块磁盘,当然,这也是使用Linux做PC OS的正确使用方式.在Linux的目录管理风格的基础上,这 ...

  8. Go语言基础之数组

    Go语言基础之数组 本文主要介绍数组(array)及它的基本使用. Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化 ...

  9. A - Black Box 优先队列

    来源poj1442 Our Black Box represents a primitive database. It can save an integer array and has a spec ...

  10. [Codeforces Round #507][Codeforces 1039C/1040E. Network Safety]

    题目链接:1039C - Network Safety/1040E - Network Safety 题目大意:不得不说这场比赛的题面真的是又臭又长...... 有n个点,m条边,每个点有对应的权值c ...