热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

swift入门测试题

创建项目要求:创建macOS的CommandLineTool项目。ProductName:填写学生学号学生姓名OrganizationName

创建项目要求:


  1. 创建macOS的Command Line Tool项目。
  2. Product Name:填写学生学号+学生姓名
  3. Organization Name:填写学生姓名
  4. Organization Identifier:填写学生学号

考试内容与要求


  1. 定义动力类型(PowerType)枚举,具体要求:
    枚举名:PowerType
    枚举值:
    Electric:表示电力动力
    Petrolic:表示燃油动力
    Hybrid:表示混合动力
  2. 定义人的性别(Gender)枚举,具体要求:
    枚举名:Gender
    枚举值:
    Male:表示男性性别
    Female:表示女性性别
  3. 定义车主(Owner)结构体,具体要求:
    结构体名:Owner
    简介:记录车主个人信息
    存储属性:
    name:字符串类型,表示业主姓名
    gender:Gender枚举类型,表示业主性别
    age:整型,表示业主年龄
    TEL:字符串类型,表示业主电话号码
  4. 定义交通工具工作系统(WorkSystem)协议,具体要求:
    协议名称:WorkSystem
    简介:表示交通工具工作系统
    协议属性powerType:
    属性名:powerType
    类型:PowerType枚举,只读get类型
    简介:交通工具的动力系统类型
    协议方法moveMethod:
    方法名:moveMethod
    简介:描述交通工具的移动方式
    参数1:moveDescription,类型为闭包(PowerType)->String
    返回值:无
  5. 定义交通工具(Vehicle)类,具体要求:
    类名:Vehicle
    简介:通用的交通工具类型
    继承父类:无
    实现协议:无
    存储属性:
    maxSpeed:整型变量,表示交通工具最高运行速度
    passengerNum:整型变量,表示交通工具载客人数
    指定初始化器:
    形参:考生决定形参类型和顺序。
    功能:为存储属性赋值
    便利初始化器:

    成员方法describe:
    方法名:describe
    简介:对交通工具的简单描述
    形参:无
    返回值:String
    功能:返回描述交通工具对象的字符串,考生决定字符串内容。
  6. 定义高铁(CRH)类,具体要求:
    类名:CRH
    简介:高速铁路交通工具
    继承父类:Vehicle
    实现协议:WorkSystem
    存储属性:
    weight:整型变量,表示高铁的总备重
    实现协议属性
    计算属性:

    指定初始化器:
    形参:考生决定形参类型和顺序
    功能:对子类存储属性和父类存储属性赋值
    便利初始化器:
    形参:isCRH380,布尔类型
    功能:1)如果isCRH380实参为真,构造最高速度为380的高铁对象;2)否则,构造最高速度低于380的高铁对象
    重写父类方法describe:
    功能:返回描述高铁CRH对象的字符串。考生决定字符串内容,必须包括最高速度和乘客数信息。
    实现协议方法moveMethod
    功能:打印出moveDescription闭包返回的字符串,闭包传参为powerType对象。
  7. 定义汽车(Automobile)类,具体要求:
    类名:Automobile
    简介:汽车交通工具
    继承父类:Vehicle
    实现协议:WorkSystem
    存储属性:
    weight:整型变量,表示汽车的总备重
    owner:元组类型,表示车主,元组包括车主姓名和电话号,类型均为字符串
    实现协议属性
    计算属性:
    averageSpeed:表示汽车的平均速度。双精度类型。get set类型计算属性。计算方法:平均速度averageSpeed为最高速度maxSpeed的1/2
    指定初始化器:
    形参:考生决定形参类型和顺序
    功能:对子类存储属性和父类存储属性赋值
    便利初始化器:

    重写父类方法describe:
    功能:返回描述汽车对象的字符串。考生决定字符串内容,必须包括最高速度、乘客数和车主信息。
    实现协议方法moveMethod
    功能:打印出moveDescription闭包返回的字符串
  8. 执行以下逻辑功能:

  1. 使用指定构造器构造高铁CRH对象,打印出describe方法返回值
  2. 使用便利构造器构造高铁CRH380对象,打印出describe方法返回值
  3. 构造3个车主Owner对象。将3个Owner对象存入字典,字典key为车主姓名,value为车主Owner对象
  4. 遍历存储车主Owner的字典,为每位车主owner构造汽车Automobile对象,并将这3个汽车Automobile对象保存在数组中
  5. 使用for循环遍历保存Automobile对象的数组。在每次循环中,1)打印汽车Automobile对象的describe方法返回值;2)调用汽车Automobile对象的moveMethod方法,闭包中描述汽车的动力类型

参考输出


CRH高速铁路最高速度300,可乘坐1000乘客
CRH高速铁路最高速度380,可乘坐1000乘客
汽车最高速度120,可乘坐5名乘客,车主是:张三(13888888888)
该车动力类型是:Hybrid
汽车最高速度120,可乘坐5名乘客,车主是:李四(13999999999)
该车动力类型是:Hybrid
汽车最高速度120,可乘坐5名乘客,车主是:王五(13555555555)
该车动力类型是:Hybrid


评分与量化标准


  1. 综合:程序无语法错误,能正常运行,输出符合预期(5分)
  2. 考点:类定义、类继承、属性和方法、协议、枚举、闭包、数组字典(10分)
  3. 考点:结构体、可选、下标、扩展、元组、变量别名、便利构造器(4分)
  4. 其他:代码风格良好,在代码中写清楚注释,注明题目要求(1分)
  5. 扣分项:程序无法运行、代码可读性差无法理解(-10分)

参考代码

import Foundationenum PowerType{case Electric//表示电力动力case Petrolic//表示燃油动力case Hybrid//表示混合动力
}enum Gender{case Male//表示男性性别case Female//表示女性性别
}struct Owner {var name:String//字符串类型,表示业主姓名var genderGender:Gender//枚举类型,表示业主性别var age:Int//整型,表示业主年龄var TEL:String//字符串类型,表示业主电话号码
}protocol WorkSystem{var powerType : PowerType {get}mutating func moveMethod(moveDescription:(PowerType)->String)
}class Vehicle {var maxSpeed:Int //整型变量,表示交通工具最高运行速度var passengerNum:Int //整型变量,表示交通工具载客人数init(maxSpeed:Int,passengerNum:Int) {self.maxSpeed=maxSpeedself.passengerNum=passengerNum}convenience init(a:Bool){if(true){self.init(maxSpeed: 1, passengerNum: 1)}else{self.init(maxSpeed: 0, passengerNum: 0)}}func describe() ->String {return "这是Vehicle"}
}class CRH: Vehicle,WorkSystem {var weight:Int //整型变量,表示高铁的总备重var powerType: PowerType = PowerType.Electricfunc moveMethod(moveDescription: (PowerType) -> String) {print("该车动力类型是:\(moveDescription(self.powerType))")}required init(maxSpeed: Int, passengerNum: Int,weight:Int,powerType: PowerType ) {self.weight=weightself.powerType=powerTypesuper.init(maxSpeed: maxSpeed, passengerNum: passengerNum)}convenience init(isCRH380:Bool) {if(true){self.init(maxSpeed: 380, passengerNum: 1000, weight: 100, powerType: PowerType.Electric)}else{self.init(maxSpeed: 100, passengerNum: 99, weight: 99, powerType: PowerType.Electric)}}override func describe() ->String {return "CRH高速铁路最高速度\(self.maxSpeed),可乘坐\(self.passengerNum)乘客"}
}class Automobile: Vehicle,WorkSystem {var weight:Int //整型变量,表示汽车的总备重var owner:(String,String) //元组类型,表示车主,元组包括车主姓名和电话号,类型均为字符串var powerType: PowerType = PowerType.Hybridvar averageSpeed :Double{//表示汽车的平均速度。双精度类型get{return 0.5 * Double(maxSpeed)}}func moveMethod(moveDescription: (PowerType) -> String) {print("该车动力类型是:\(moveDescription(self.powerType))")}required init(maxSpeed: Int, passengerNum: Int,weight:Int ,owner:(String,String),powerType: PowerType){self.weight=weightself.owner=ownerself.powerType=powerTypesuper.init(maxSpeed: maxSpeed, passengerNum: passengerNum)}override func describe() ->String {return "汽车最高速度\(self.maxSpeed),可乘坐\(self.passengerNum)名乘客,车主是:\(self.owner.0)(\(self.owner.1))"}
}
//使用指定构造器构造高铁CRH对象,打印出describe方法返回值
var c1=CRH(maxSpeed: 300, passengerNum: 1000,weight:1000,powerType: PowerType.Electric)
print(c1.describe())
//使用便利构造器构造高铁CRH380对象,打印出describe方法返回值
var c2=CRH(isCRH380:true)
print(c2.describe())
//构造3个车主Owner对象。将3个Owner对象存入字典,字典key为车主姓名,value为车主Owner对象
var o1=("王五","13555555555")
var o2=("张三","13888888888")
var o3=("李四","13999999999")
var a1 = Automobile(maxSpeed: 120, passengerNum: 5,weight:10 ,owner:("王五","13555555555"),powerType: PowerType.Hybrid)
var a2 = Automobile(maxSpeed: 120, passengerNum: 5,weight:10 ,owner:("张三","13888888888"),powerType: PowerType.Hybrid)
var a3 = Automobile(maxSpeed: 120, passengerNum: 5,weight:10 ,owner:("李四","13999999999"),powerType: PowerType.Hybrid)
var dic = ["王五":o1, "张三":o2, "李四":o3]
//遍历存储车主Owner的字典,为每位车主owner构造汽车Automobile对象,并将这3个汽车Automobile对象保存在数组中
var array = [ Automobile]()
for (_,o) in dic
{var a = Automobile(maxSpeed: 120, passengerNum: 5,weight:10 ,owner:o,powerType: PowerType.Hybrid)array.append(a)
}
//使用for循环遍历保存Automobile对象的数组。在每次循环中,1)打印汽车Automobile对象的describe方法返回值;2)调用汽车Automobile对象的moveMethod方法,闭包中描述汽车的动力类型
for a in array
{print(a.describe())a.moveMethod {(PowerType) -> String inreturn "\(PowerType)"}
}


推荐阅读
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
author-avatar
瀡訫飛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有