swift入门测试题

创建项目要求:

  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 Foundation

enum 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=maxSpeed
        self.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.Electric
    
    func moveMethod(moveDescription: (PowerType) -> String) {
        print("该车动力类型是:\(moveDescription(self.powerType))")
    }
    
    required init(maxSpeed: Int, passengerNum: Int,weight:Int,powerType: PowerType ) {
        self.weight=weight
        self.powerType=powerType
        super.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.Hybrid
    var 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=weight
        self.owner=owner
        self.powerType=powerType
        super.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 in
        return "\(PowerType)"
    }
}

你可能感兴趣的:(Swift,swift)