第5章 函数式编程

简介: 第5章 函数式编程

填空题

1-1

函数返回值的类型是由在定义函数时所指定的函数类型。

T

F


1-2

可以在一个函数中定义另一个函数 。

T

F


1-3

在代码中,对于某个自己设计的函数,那么该函数声明、函数调用、函数定义(亦称函数的实现)三者在代码中的先后位置关系通常为:“函数声明”先于“函数调用”,“函数调用”先于 “函数定义”。

T

F


1-4

一个被调函数的函数体中,又可以出现函数调用语句,这种调用现象称为函数的嵌套调用。

T

F


1-5

1-7.print()函数是输出函数。

T

F


1-6

递归函数是指函数定义中调用函数自身的函数,在其递归链中必定以一个或多个基例结尾。

T

F


1-7

在创建自定义函数时,若函数名称与内置函数相同,则会代替内置函数。

T

F


选择题

2-1


99.对于下述代码,哪个描述是正确的?

val one: PartialFunction[Option[Int], String] = {
case Some(_) => "one"
}
A.
one.isDefinedAt(Some(1)) == true
B.
one.isDefinedAt(1) == true
C.
one.isDefinedAt(Some(100)) == false
D.
one.isDefinedAt(None) == true


2-2

关于函数def sum(args:Int*) = {var r = 0 ; for(arg <- args) r += arg ; r}} 输出结果不一致的是?

Sum是求和功能,所以D不一致; Scala允许你指明函数的最后一个参数可以是重复的,即我们不需要指定函数参数的个数,可以向函数传入可变长度参数列表。Scala 通过在参数的类型之后放一个星号来设置可变参数(可重复的参数)

A.

sum(1,2,3)

B.

sum(6)

C.

sum(2,4)

D.

sum(1,1,1,2)


2-3

下列表达式不是过程的是?

C是单纯取值,其他有打印的过程

A.

def foo(num:Int) = {println(num * 2)}

B.

def foo() {println("Hello World")}

C.

def foo(num:Int) = {num * 2}

D.

def foo():Unit = {println("Hello World")}


2-4

对于函数

def getGoodsPrice(goods:String) = {
    val prices = Map(“book” -> 5, “pen” -> 2, “sticker” -> 1)
    prices.getOrElse(goods, 0)
}

结果说法错误的是?

A.

getGoodsPrice("book") // 等于 5

B.

getGoodsPrice("pen") // 等于 2

C.

getGoodsPrice("sticker") // 等于 1

D.

getGoodsPrice("sock") // 等于 “sock”


2-5

关于函数def fac(n:Int, x:String="x", y:Int=0) = {println(x*(n+y))} 输出结果不一致的是?

A.

fac(2)

B.

fac(1, y=1)

C.

fac(1, "x")

D.

fac(1, "x", 1)


2-6

scala 中,以下说法错误是?

A.

scala 中, 可以在类中定义类。

B.

scala 中, 可以在函数中定义函数。

C.

scala 中, 不可以在类中定义object。

D.

scala 中, 可以在函数中定义类。


2-7

scala中def mul(x:Int)(y:Int) = x*y称作

A.

柯里化函数

B.

匿名函数

C.

高阶函数

D.

偏应用函数


2-8

如果需要使用scala库中的sqrt函数,如sqrt(2),下列引用包的方式错误的是?

A.

import scala.math._

B.

import sqrt

C.

import math._

D.

import math.sqrt


2-9

h0313. 关于函数def fac(n:Int) = { var r = 1 ; for(i <- 1 to n) r = r * i ; r} fac(5)输出结果正确的是?

A.

15

B.

120

C.

200

D.

300


2-10

编写一个函数,返回Int数组中最大最小的数字?

A.

def maxmin(nums:Array[Int]){

val max = nums.max

val min = nums.min

(max, min)

}

B.

def maxmin(nums:Array[Int]) = {
nums.max -> nums.min

}

C.

def maxmin(nums:Array[Int]) = {

val max = nums.max

val min = nums.min

max,min

}

D.

def maxmin(nums:Array[Int]) = {

val max = nums.sorted.head

val min = nums.sorted.last

(max,min)

}


2-11

对于拉链操作

val key = Array(1, 2)

val value = Array(“one”,”two”)

val m = key.zip.toMap

返回结果正确的是?

A.

m(1) 等于 “one”

B.

m(2) 等于 “one”

C.

m(“one”) 等于 “1”

D.

m(“two”) 等于 1


2-12

h0314. 以下关于闭包描述错误的是

A.

闭包是一个函数,其返回值依赖于声明在函数包部的一个或多个变量。

B.

通常来讲,可以将闭包看作是可以访问一个函数里面局部变量的另一个函数。

C.

对于def mulBy(factor: Double) = (x: Double) => factor * x; val triple = mulBy(3);,函数triple是一个闭包。

D.

对于def mulBy(factor: Double) = (x: Double) => 3 * x; val triple = mulBy(3);,函数triple是一个闭包。


2-13

h0315. 有关柯里化描述错误的是

A.

柯里化是指将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数作为参数的函数。

B.

有时,使用柯里化将某个函数参数单拎出来,可以提供更多用于类型推断的信息。

C.

将函数def add(x: Int, y: Int) = x + y,变形为def add(x: Int)(y: Int) = x + y的过程是一个柯里化过程。

D.

柯里化是多参数列表函数的特例。


2-14

h0316. 高阶函数是指?

A.

在程序中应该首先被定义的函数。

B.

将函数作为参数,并返回结果为函数的函数。

C.

函数参数为函数或返回结果为函数的函数。

D.

执行时间长的函数。


填空题

4-1

主函数的值

主函数的值是程序的

入口代码、出口代码

1 分

,通常为

零值、非零值

1 分

,表示程序正常结束;否则表示程序异常结束。

请填:入口代码、出口代码,零值、非零值。


4-2

设在主函数中有以下定义和函数调用语句,且fun函数定义为:

void fun( double b[10][22]){……}


则下面主函数调用上面函数,请在横线上完成调用语句。

1. main()
2. {double s[10][22];
3.  int n;
4. …


fun(s)

2 分

;//调用函数fun … }


4-3

某函数有返回值,某次调用该函数结束后,该函数能够返回的值的个数为

1

2 分

个(填数字)。


4-4

函数重载就是一种

多态

2 分

,相同的函数名,对应多个不同的函数体。


4-5

已知如下函数

int oddeven(int n)
{
    int i=0,j=0;
    while(n)
    {
        if(n%10%2)
            i++;
        else
            j++;
        n/=10;
    }
    if(i&&j)
        return 1;
    else
        if(i&& !j)
            return 2;
        else
            return 3;
}


函数调用oddeven(2008);返回值是

3

2 分

 

函数调用oddeven(1002);返回值是

1

2 分


函数调用oddeven(33557);返回值是

2

2 分


4-6

下列代码运行结果是

c

2 分

1. a = 'a'
2. print a > 'b' or 'c'


4-7

完成程序,将列表list1转为Series序列x,x索引序列为默认值。

from pandas import Series

x =

Series(list1)

3 分


4-8

有定理显示:如果散列表长度TableSize是某个

4*k + 3

2 分

(其中k是正整数,表达式不能含空格)形式的素数时,平方探测法就可以探查到整个散列表空间。


4-9

分数 2

作者 陈春晖

单位 浙江大学

列表加元组可以表示二维表。

be755b3a1051415bb1685faa9d8088a5.png


下面程序用三种不同方式打印表格内容,请填空完成与第一种方式输出一样的后面两种方式,不要加无用空格。

students=[(3180102988,"褚好"),
                  (3170102465,"王凯亮"),
                  (3160104456,"李永"),
                  (3171104169,"陈鑫"),
                  (318400429,"徐杭诚")]
for row in students: #按行存取
    print(row[0],row[1])
print()
for id,name in students: #按行拆包存取
    print(


id,name

1 分

) print() for index in range(len(students)): #按索引存取 print(


students[index][0],students[index][1]

1 分

)





目录
相关文章
|
6月前
|
程序员 Swift 开发者
26 函数式编程
函数式编程
36 0
|
5月前
|
JavaScript 前端开发 算法
函数式编程
函数式编程
14 0
|
8月前
|
Oracle JavaScript Java
函数式编程与Lambda表达式
函数式编程与Lambda表达式
|
并行计算 JavaScript 数据可视化
快速了解函数式编程
快速了解函数式编程
102 0
快速了解函数式编程
|
安全 Java 数据库
Lambda表达式和函数式编程
Lambda表达式和函数式编程
165 4
Lambda表达式和函数式编程
|
移动开发 JavaScript 前端开发
九、函数与函数式编程
纵观JavaScript中所有必须需要掌握的重点知识中,函数是我们在初学时最容易忽视的知识点。可能会有很多人、很多文章告诉你面向对象很重要,原型很重要,可是却很少有人告诉你,面向对象中所有的重点难点,几乎都与函数息息相关。 包括我之前几篇文章介绍的执行上下文,变量对象,闭包,this等,都是围绕函数的细节来展开。
110 0
|
存储 SQL 分布式计算
深入理解函数式编程
深入理解函数式编程
深入理解函数式编程
|
存储 Java 编译器
面向对象编程 V.S 函数式编程
面向对象编程 V.S 函数式编程
129 0
面向对象编程 V.S 函数式编程
2. 函数式编程
上篇说 ReactiveX.io (官网)给的定义是,Rx是一个使用可观察数据流进行异步编程的编程接口,ReactiveX结合了观察者模式、迭代器模式和函数式编程的精华! 什么是 函数式编程 Functional Programming 简单说 Fun...
945 0
我对函数式编程的理解
渐渐地我们所熟悉的语言基本都或多或少地支持了函数式编程的特性,也越来越多地在各种场合听到“函数式编程”。那么究竟什么是函数式编程呢?它会对我们带来什么影响?这些是我需要去探究的。看了一些书,查了一些资料,我觉得John Hughes的[Why Functional Programming Matters](https://www.cs.kent.ac.uk/people/staff/dat/mir
2170 0