同步练习参考答案.docx_第1页
同步练习参考答案.docx_第2页
同步练习参考答案.docx_第3页
同步练习参考答案.docx_第4页
同步练习参考答案.docx_第5页
已阅读5页,还剩60页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

附录A 同步练习参考答案为了更好的学习本书中内容,我们在本附录中给出书中各章同步练习参考答案。A.1 第1章 准备开始1介绍说明Xcode界面中各个区域的作用。解答:参考书中第1.3.2节。其中号区域是工具栏,其中的按钮可以完成大部分工作。号区域是导航栏,主要是对工作空间中的内容进行导航。号区域是代码编辑区,我们的编码工作就是在这里完成的。2 请使用Xcode中API帮助文档,找“UIViewController”关键字的相关帮助信息。解答:打开Xcode的菜单HelpDocumentation and API Reference,打开如图A-1上述API帮助文档窗口,在搜索栏中输入“UIViewController”,敲键盘回车键搜索。图A1 API帮助文档A.2 第2章 第一个Swift程序1. 介绍说明Playground界面中各个区域的作用。解答:参考书中第2.1.1节。2请使用Xcode的Playground编写一个输出Hello Swift的字符串Swift程序。并解释代码的含义。解答:首先参考2.1.2节(编写HelloWorld过程)使用Xcode创建Playground文件。然后编写Playground文件内容,代码如下,运行结果如图A-2所示。import UIKitprintln(Hello Swift) 图A2 代码和运行结果代码解释如下:代码import Cocoa表示引入Cocoa框架,在本例中并没有使用到Cocoa框架中的内容,println(Hello Swift)是打印字符串到控制台。A.3 第3章 Swift基本语法1. 下面哪些是Swift合法标识符: A. 2variableB.variable2C._whatavariableD._3_E.$anothervarF.#myvarG.体重H. I. class答案:BCDGHI解释:其中答案G“体重”是中文采用Unicode编码,Swift的字母包含Unicode编码的中文字符。答案H也是采用Unicode编码的字符。答案I中class是关键字不能作为标识符,但是使用重音符号()括起来,就可以作为标识符使用了。2下面哪些不是Swift关键字的: A.ifB.thenC.gotoD.whileE.caseF._COLUMN_G.whereH. Class答案:BH解释:其中F是关键字,这种大写加下划线的关键字还有:_COLUMN_、_FILE_、_FUNCTION_和_LINE_。H答案Class不属于关键字,是因为首字母大写了。3. 描述下列代码的运行结果:let _Hello1 = Hello_Hello1 = Hello, Worldprintln(_Hello1)var _Hello2 = Hello_Hello2 = Hello, Worldprintln(_Hello2)答案:上述代码第行有编译错误。解释:_Hello1是常量,只能在声明的时候初始化,此后,不能能够被赋值。而第行代码给_Hello2赋值没有错误,因为_Hello2是变量。4. 下面有关Swift注释使用正确的是?A.if x 1 /注释1 else return false /注释2B./let _Hello1 = Hello/_Hello1 = Hello, World/println(_Hello1)C./*let _Hello1 = Hello_Hello1 = Hello, Worldprintln(_Hello1)*/D./*let _Hello1 = Hello_Hello1 = Hello, Worldprintln(_Hello1)*/答案:ABCD5. 下列表达式哪些不正确?A. var n1:Int = 10;B. var n1:Int = 10C. var n1 = 10D. var n1:Int = 10; var str:String = 20E. var n1:Int = 10; var str:String = 20F. var n1:Int = 10; var str:String = 20 答案:DFA.4 第4章 基本运算符1.下列程序段执行后t5的结果是( )。var t1 = 9, t2 = 11, t3=8var t4, t5 : Intt4 = t1 t2 ? t1 : t2+t1t5 = t4 t3 ? t4 : t3A. 8 B. 20 C. 11 D. 9答案:B解释:var t1 = 9, t2 = 11, t3=8代码是正确的,多个变量或常量可以在一行中声明,var t4, t5 : Int代码也是正确的。?是三元运算符。2.执行下列程序段后,b, x, y的值分别是( )。var x=6,y=8var b : Boolb = x y & x+ = -yA. true , 6, 8 B. false , 7, 7C. true, 7, 7 D. false, 6, 8答案:D解释:此题的难点在于&具有短路特点,前面表达式x y为假,后面表达式就不再计算了,所以结果为D。3.执行下列程序段后,b, x, y的值分别是( )。var x=6,y=8var b : Boolb = x+ = -y & x yA. true , 6, 8 B. false , 7, 7C. true, 7, 7 D. false, 6, 8答案:B解释:此题与上一题类似,不再解释。4设有定义var x=3.5, y=4.6, z=5.7,则以下的表达式中,值为true的是( )。A. x y | x z B. x != yC. z ( y + x ) D. x z )答案:BD解释:答案B不用解释,选择答案D是考察读者运算符的优先级,运算优先级如下从左到右逐渐变低:括号 一元运算符 二元运算符+、*、/和%等算术运算符 关系运算符 逻辑运算符5. 下列程序段执行后 b3 的结果是( )。var b1 = true, b2, b3 : Boolb3 = b1 ? b1 : b2A. 0 B. 1 C. true D. falseE. 无法编译答案:E解释:b2没初始化不能位于等号的右边。6. 下面关于使用操作符的哪些结果是对的?A. 1010 0000 0000 0000 4 的结果是0000 1010 0000 0000B. 1010 0000 0000 0000 4 的结果是1111 1010 0000 0000 C. 0000 1010 0000 0000 2的结果是0010 1000 0000 0000 D. 0000 1010 0000 0000 2B. 16/22C. 16*4D. 162)计算结果是4,答案B计算过程是先计算16/2结果为8,再与2进行异或运算,运算结果为10。答案D 162计算结果是64。8.执行下列程序段后,输出结果是( )。E提示:String是结构体,它是值类型。var a :String = 123, b :String = 123println(a = b)a = bprintln(a = b)A.false false B.false trueC.true true D.true falseE.编译错误答案:E解释:=恒等于不能比较结构体等值类型,只能比较引用类型,在Swift中引用类型只有类。println(a = b)语句会有编译错误。9.执行下列程序段后,输出结果是( )。提示:NSString是类,它是引用数据类型。var a :NSString = 123, b :NSString = 123println(a = b)a = bprintln(a = b)A.false false B.false trueC.true true D.true falseE.编译错误答案:B解释:NSString是Cocoa框架提供的类,可以进行=恒等于的比较,=是比较两个引用是否指向一个对象,换句话说是比较是否为同一个对象。在a = b赋值之前,即便是a和b的内容完全相等,但是println(a = b)输出false,这是时候a和b不是同一个对象,当a=b之后它们具体相同的引用了,println(a = b)输出true。10.执行下列程序段后,输出结果是( )。var a1 :String = 123, b1 :String = 123var a2 :NSString = 123, b2 :NSString = 123println(a1 = b1)println(a2 != b2)A.false false B.false trueC.true true D.true falseE.编译错误答案:CA.5 第5章 基本数据类型1. 下列数据哪些是值类型?A. 元组B. 枚举C. 结构体D. 类答案:ABC解释:整型、浮点型、布尔型、字符串、元组、集合、枚举和结构体属于值类型,而类属于引用类型。2. 下列数据哪些是引用类型?DA. 字符串B. 枚举C. 结构体D. 类E. 集合答案:D3. 下列说法正确的?ABA. Int是与平台相关有符号整型。B. UInt是与平台相关无符号整型。C. UInt16是与平台相关无符号整型。D. Int8是与平台无关的有符号整型。答案:AB4. 下列表示数字正确的是?ACDEA. 29B. 0X1CC. 0x1AD. 1.96e-2E. 9_600_000答案:ACDE解释:答案B中的x大写了,表示十六进制x字母小写。5. 判断对错?错Swift中的整数可以从小范围数到大范围数转换是自动的。答案:错解释:必须通过函数才能转换。6. 判断对错?Swift中的整数从大范围数到小范围数需要强制类型转换,有可能造成数据精度的丢失。答案:错解释:必须通过函数才能转换。7. 语句中能够正常运行的有哪些?A. let f:UInt8 = 10.0let i:UInt16 = 10let total = UInt16(f) + iprintln(total)B. let f:Double = 10.0let i:UInt16 = 10let total = UInt16(f) + iprintln(total)C. let n:UInt8 = 90let i:UInt16 = 10let total = UInt16(n) + iprintln(total)D. let n:UInt8 = 90let i:UInt16 = 10let total = UInt8(i) + nprintln(total)答案:BCD解释:答案A中let f:UInt8 = 10.0语句会有编译错误,因为10.0是浮点类型不能赋值给整数类型。8. 请描述元组类型,并举例说明?答案:元组类型是一种数据结构,在数学中有很大应用,在计算机中元组是关系数据库中的基本概念,元组表中的一条记录,每列就是一个字段。 在二维表里,因此元组也称为记录。例如:老师元组类型,老师有姓名和年龄元素,那么张老师可以表示为:(张三, 30) (name:张三, age:30)9. 有语句var 张老师 = (张三, 30),下面语句有语法错误的是?CA. let (name,age) = 张老师B. println(张老师.0) (张老师.1)C. println(张老师.name) (张老师.age)D. var (name,age) = 张老师答案:C解释:如果要使C选项也能正确编译,可以修改元组的定义:var 张老师 = (name : 张三, age : 30)10. Swift中的布尔值表示正确的是?ABA. trueB. falseC. 1D. 0答案:ABA.6 第6章 字符和字符串1. 关于Swif中的字符表示方式正确的是?A. u0001f603 B. u0001f603C. D. 答案:AC解释:答案B使用了单引号,在Swift不能使用单引号将字符括起来。答案D是标识符。2. 请说明下面转义符代表的含义?t n r 答案:t 水平制表符tabn 换行回车r 双引号 单引号 反斜线3. 下列表达式正确的是?A. let andSign1:Character = &B. let andSign2 = u26C. let lamda1:Character = D. var lamda2:String = u03bbE. let 熊: String = F. let 猫: Character = 答案:ABCDEF4. 判断对错: Character类型不支持=和!=运算符。String支持=和!=运算符。答案:错5. 判断对错: Character和String类型都支持=和!=运算符。答案:对A.7 第7章 控制语句1. 编程题:水仙花数是一个三位数,三位数各位的立方之和等于三位数本身。使用while循环计算水仙花数。参考答案:var i = 100, r = 0, s = 0, t = 0do r = i / 100 s = ( i - r * 100 ) / 10 t = i - r * 100 - s * 10 if ( i = r * r * r + s * s * s + t * t * t ) println ( i = ( i ) ) i+ while i 1000运行结果:i = 153 i = 370 i = 371 i = 4072. 编程题:水仙花数是一个三位数,三位数各位的立方之和等于三位数本身。使用do while循环计算水仙花数。参考答案:var i = 100, r = 0, s = 0, t = 0do r = i / 100 s = ( i - r * 100 ) / 10 t = i - r * 100 - s * 10 if ( i = r * r * r + s * s * s + t * t * t ) println ( i = ( i ) ) i+ while i 1000运行结果:i = 153 i = 370 i = 371 i = 4073. 编程题:水仙花数是一个三位数,三位数各位的立方之和等于三位数本身。使用for循环计算水仙花数。参考答案:var r = 0, s = 0, t = 0for var i = 100; i 1000; i+ r = i / 100 s = ( i - r * 100 ) / 10 t = i - r * 100 - s * 10 if ( i = r * r * r + s * s * s + t * t * t ) println ( i = ( i ) ) 运行结果:i = 153 i = 370 i = 371 i = 4074. 编程题:编写程序输出以下形式的金字塔图案。 * * *参考答案:var i,j : Intfor i=1; i=4; i+ for j=1; j=4-i; j+ print( ) for j=1; j=2*i-1; j+ print(*) println()5.能从循环语句的循环体中跳出的语句是( )。A. for 语句 B. break 语句 C. while 语句 D. continue语句答案:B6. 若有如下循环语句,则循环体将被执行( )。var x=5, y=20do y-=x x+ while(+x 3 )A. 16 B. 8 C. 4 D. 2答案:D8.给出下面代码段: let m = ?switch mcase 0: println(case 0)case 1: println(case 1)case 2: println(case 2) fallthroughdefault: println(default)下列m的哪些值将引起default的输出? A. 0 B. 1 C. 2 D. 3 答案:CD解释:Switch中的 switch语句默认每一个case是不能贯穿的,但是使用了fallthrough语句是贯通case。如果m = 2进入case 2分支,由于有fallthrough语句程序会进入到default分支,所以m = 2情况下也可以输出default。9.下列语句执行后,x 的值是( )。var a=3, b=4, x=5if +a b x=x+1A. 5 B. 3 C. 4 D. 6答案:A10.下列语句序列执行后,k 的值是( )。var i=6, j=8, k=10, n=5, m=7if ij | m0; i- j+=iA. 5 B. 6 C. 7 D. 8答案:B13.下列语句序列执行后,i的值是( )。var i=10do i-=2 while(i6)A. 10 B. 8 C. 6 D. 4答案:C 14.能构成多分支的语句是( )。A. for 语句 B. while 语句 C. switch 语句 D. do while 语句答案:C15.以下for循环的执行次数是( )。for(var x=0,y=0; (y = 0) & (x 4); x+) A. 无限次 B. 一次也不执行 C. 执行4次 D. 执行3次答案:C解释:for循环语句由三部分语句构成,即:初始化、循环条件、迭代,初始化部分可以同时初始化多个变量或常量,之间用逗号(,)分开,在迭代部分也可以有多个语句,之间也用逗号(,)分开,例如我们还可以把代码写成如下形式:for(var x=0,y=0; (y = 0) & (x 4); x+,y-) 16.以下由do while语句构成的循环执行的次数是( )。Bvar k = 0do +k while ( k j | m k- k+ else k-A. 12 B. 11 C. 10 D. 9答案:C19.下列语句序列执行后,k的值是( )。var j=8, k=15for var i=2; i != j; i+ j -= 2 k+A. 18 B. 15 C. 16 D. 17答案:D20.下列语句序列执行后,j 的值是( )。var j=3, i=2while -i != i/j j=j+2A. 2 B. 4 C. 6 D. 5答案:D21.下列代码执行的结果是?var x = 1, y = 6while y- = 6 x-println(x= (x) ,y = (y)A程序能运行,输出结果:x=0,y=5B程序能运行,输出结果:x=-1,y=4C程序能运行,输出结果:x=0,y=4D程序不能编译答案:C22.下列语句序列执行后,k 的值是( )。var x=6, y=10, k=5switch x % y case 0: k = x*y case 6: k = x/y fallthrough case 12: k = x-y fallthrough default: k = x*y-xA. 60 B. 5 C. 0 D. 54答案:D23以下由 for 语句构成的循环执行的次数是( )。for var i = 0; true; i+ A. 有语法错,不能执行 B. 无限次C. 执行1次 D. 一次也不执行答案:B24.简答题:请例举在switch中使用范围匹配。解答:let testscore = 80var grade:Characterswitch testscore case 90.100: grade = 优case 80.90: grade = 良case 60.80: grade = 中case 0.60: grade = 差default: grade = 无println(Grade = (grade)25.简答题:请例举在switch中使用元组类型。解答:var student = (id:1002, name:李四, age:32, ChineseScore:80, EnglishScore:89)var desc:Stringswitch student case (_, _, _, 90.100, 90.100): desc = 优case (_, _, _, 80.90, 80.90): desc = 良case (_, _, _, 60.80, 60.80): desc = 中case (_, _, _, 60.80, 90.100), (_, _, _, 90.100, 60.80): desc = 偏科case (_, _, _, 0.80, 90.100), (_, _, _, 90.100, 0.80): desc = 严重偏科default: desc = 无println(说明:(desc)A.8 第8章 集合1. 以下定义数组的语句中,不正确的是: A. let a : Array = 1,2B. let a : Int = 1,2C. var b: String = 张三,李四D. int Array a1,a2E. int a3=1,2,3,4,5答案:DE2.在一个应用程序中有如下定义:let a = 1,2,3,4,5,6,7,8,9,10为了打印输出数组a的最后一个元素,下面正确的代码是( )。A. println(a10)B. println(a9)C. println(aa.length)D. println(a(8)答案:B解释:D不对,是因为数组引用下标要使用中括号。3.下列语句序列执行后,打印输出结果是( )。var ages = 张三: 23, 李四: 35, 王五: 65, 董六: 19var copiedAges = agescopiedAges张三 = 24println(ages张三)A. 65 B. 35 C. 24 D. 23答案:D4.下列语句序列执行后,打印输出结果是( )。var n1 = 900, 200, 300var n2 = n1var n3 = n1n10 = 1000println(n10)println(n20)println(n30)A. 900 900900B. 800 900900C. 1000 900900D. 1000 800900答案:C5.判断对错:数组的元素是不能重复的。答案:错6.判断对错:字典由键和值两个集合构成,键集合中的元素不能重复,值集合中的元素可以重复。答案:对7. 编程题:编写一个程序说明Swift数组的使用。参考答案:var a = String()a.append(艾米)a.append(卡尔)a.append(埃里卡)var b = String()b += 鲍勃b += 新格b += 佛朗斯b += 格里亚b += aprintln(b)/删除元素b.removeAtIndex(3)/更新元素b4 = 约翰println(b)/遍历for item in b println (item)8. 编程题:假设有下面一个类的定义:class Employee var name : String / 姓名 var salary : Double / 工资 init (n : String) name = n salary = 0 编写一个程序说明Swift字典的使用。参考答案:class Employee var name : String / 姓名 var salary : Double / 工资 init (n : String) name = n salary = 0 var emp = Dictionary()emp144-25-5464 = Employee(n: Amy Lee)emp567-24-2546 = Employee(n: Harry Hacker)emp157-62-7935 = Employee(n: Gary Cooper)emp456-62-5527 = Employee(n: Francesca Cruz)/ 打印所有的条目println(emp)/ 删除一个条目eValueForKey(567-24-2546)/或 emp567-24-2546 = nil/ 替换一个条目eValue(Employee(n: Francesca Miller), forKey: 456-62-5527)/或 emp456-62-5527 = Employee(n: Francesca Miller)/ 查询一个值println(emp157-62-7935)println(-遍历-)/遍历for (id, emp) in emp println (key : (id) - value :()A.9 第9章 函数1. 下列函数定义不正确的是?() A. func count(string: String) - (vowels: Int, consonants: Int, others: Int) return (1, 2, 3)B.func count(string: String) - () C.func count2(string: String) D.func count3(String string) 答案:D解释:Swift中参数是要在数据类型之前,之间是冒号(:)连接。2. 关于函数参数列表下列写法正确的是?()func rectangleArea(W width:Double, H height:Double) - Double let area = width * height return areafunc rectangleArea(W width:Double, H height:Double) - Double let area = width * height return areafunc rectangleArea(#width:Double, #height:Double) - Double let area = width * height return areafunc rectangleArea(Double width, Double height) - Double let area = width * height return area答案:ABC解释:答案D的参数形式有误。3. 简单题:请写一个最简单形式的函数。答案:func test() 4. 填空题:请在下列代码横线出填写一些代码使之能够正确运行。func test1_ test1(Ravi)答案:(str:String)5. 有下列函数toLower定义代码,哪些调用语句正确的是。 () func toLower(#string: String) -String return A. toLower(string:Ravi)B. toLower(stringString:Ravi)A. toLower(#:Ravi)B. toLower(#:Ravi)答案:AB6. 有下列函数join定义代码,哪些调用语句正确的是。 () func join(str1:String,str2:String, with:String=) -String return str1+with+str2A. var out1 = join(Hello,World,with:,)B. var out2 = join(Hello,World) C. join(Hello,World,with:-)D. join(Hello,World,with:#)答案:ABCD解析:答案B只传递一个参数,第二个参数是默认值。答案C和D调用也是正确的,只是没有将返回值赋值给别的变量或常量。7. 有下列函数sum定义代码,哪些调用语句正确的是。 () func printNumbers(numbers: Int.) for number in numbers println(number) A. printNumbers(1,2)B. printNumbers(1,2,3,4,5,6)C. printNumbers(100.0, 20, 30)D. printNumbers(30.0f)答案:AB解析:答案C是传递参数的类型不对,不能是Double类型。答案D的30.0f是错误的表示形式。8. 有下列函数sum定义代码,哪些调用语句正确的是。 () func swapNumbers(inout x: Int, inout y: Int) let temp = x x=y y=tempvar x: Int = 1var y: Int = 2A. swapNumbers(x,y)B. swapNumbers(&x,&y)C. swapNumbers(inout:&x, inout:&y)D. swapNumbers(inout:x, inout:y)答案:B解析:swapNumbers是输出参数类型的函数,传递参数时候前面要加&。所以答案A有误,答案B是正确的。swapNumbers参数中的inout不是外部参数名,而是声明输入输出参数类型,答案C和D都是错误的。9.填空题:请在下列代码横线出填写一些代码使之能够正确运行。func addNumber(a:Int,b:Int) -Int return a+bvar mathFunction: _mathFunction = addNumbervar sum = mathFunction(1,2)答案: (Int,Int) -Int解析:(Int,Int) -Int是函数类型,函数类型可以作为数据类型使用。10. 填空题:请在下列代码横线出填写一些代码使之能够正确运行。func print_ print(1,Ravi)答案: (numb:Int, str:String)11. 填空题:请在下列代码横线出填写一些代码使之能够正确运行。func addNumber(a:Int,b:Int) - Int return a+bfunc add() - _ return addNumbervar out = add()(1,2)答案: (Int,Int) - Int解析:(Int,Int) -Int是函数类型,函数类型可以作为返回类型使用。12. 下列程序运行结果是?()func addNumber(a:Int,b:Int) - Int func print() println(a:(a) b:(b) print() return a+bprintln(addNumber(10,20)A. a:10 b:20B. 30C. a:10 b:2030D. 30a:10 b:20答案:C解析:print是嵌套函数,它是在addNumber函数内部声明的。13.编程题:给定一个无序数值,编写一个函数对数组进行排序。参考答案:func mySort(inout numbers:Int) var tmp:Int var n = for(var i=0;in;i+) for(var j=0;j numbersj+1) tmp=numbersj numbersj=numbersj+1 numbersj+1=tmp var numbers = 49,38,65,97,76,13,27,49mySort(&numbers)println(numbers)A.10 第10章 闭包1. 下面选择项中正确表示闭包定义的是一个? A. (参数列表) -返回值类型 语句组B. (参数列表) -返回值类型 in 语句组C. (参数列表) -返回值类型 语句组D. (参数列表) in 语句组答案:B2. 下面选择项中闭包表达式正确的是? A.var testEquality1 : (Int, Int) - Bool = return $0 = $1B.var testEquality2 : (Int, Int) - Bool = $0 = $1C.var testEquality3 : (Int, Int) - Bool = (a : Int, b : Int) - Bool in return a = bD.var testEquality4 : (Int, Int) - Bool = (a : Int, b : Int) - Bool return a = b答案:ABC3.使用闭包表达式实现两个相减?()A.var DoMath: (Int, Int) - Int = (a:Int, b:Int) - Int in return a-bB.var DoMath

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论