第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 分

)





目录
相关文章
|
程序员 Swift 开发者
26 函数式编程
函数式编程
65 0
|
2月前
|
机器学习/深度学习 数据采集 人工智能
函数式编程的实际应用
【10月更文挑战第12天】 函数式编程作为一种编程范式,在数据处理、金融、科学计算、Web 开发、游戏开发、物联网、人工智能等多个领域有着广泛应用。本文通过具体案例,详细介绍了函数式编程在这些领域的实际应用,展示了其在提高效率、确保准确性、增强可维护性等方面的显著优势。
144 60
|
1月前
|
数据采集 并行计算 算法
函数式编程
函数式编程是一种编程范式,它将计算视为数学函数的求值,并避免改变状态和可变数据。其核心思想是使用纯函数,减少副作用,提高代码的可读性和并行处理能力。
|
1月前
|
SQL 前端开发 测试技术
对函数式编程的深入理解
【10月更文挑战第25天】函数式编程提供了一种不同的编程思维方式,具有诸多优点,如提高代码质量、便于并发和并行编程、易于测试等。然而,它也存在一些局限性,需要根据具体的项目需求和场景来选择是否采用。随着对函数式编程的理解和应用的深入,它在现代软件开发中扮演着越来越重要的角色,为开发者提供了更多的编程选择和可能性。
17 1
|
2月前
|
并行计算 安全 数据处理
函数式编程和面向对象编程有什么区别?
【10月更文挑战第12天】 函数式编程与面向对象编程是两种不同的编程范式。前者强调数学函数的求值、不可变数据和纯函数,后者则以对象为核心,封装数据和方法。函数式编程更关注数据转换和计算过程,而面向对象编程关注对象的定义和交互。两者在数据处理、函数角色、代码结构、并发处理、灵活性和适用场景等方面存在显著差异。在实际开发中,可以根据需求选择合适的编程范式或结合使用。
94 4
|
4月前
|
自然语言处理 并行计算 大数据
什么是函数式编程
【8月更文挑战第2天】什么是函数式编程
125 13
|
Oracle JavaScript Java
函数式编程与Lambda表达式
函数式编程与Lambda表达式
|
安全 Java 数据库
Lambda表达式和函数式编程
Lambda表达式和函数式编程
193 4
Lambda表达式和函数式编程
|
并行计算 JavaScript 数据可视化
快速了解函数式编程
快速了解函数式编程
138 0
快速了解函数式编程
|
存储 SQL 分布式计算
深入理解函数式编程
深入理解函数式编程
深入理解函数式编程