print函数
print("Hello,world")
: 默认情况下print函数输出后会自动换行,如果不希望换行可以通过指定terminator参数设定自己的终止符来替换掉默认的换行符
Naming Constants and Variables (标识符的命名规则)
- 字母(Unicode字符)、数字、下划线,数字不能开头
- 大小写敏感
- 不能使用关键字做标识符
- 驼峰标识 - 第一个单词全小写以后每个单词首字母大写
- 见名知意
: var用来定义变量,let用来定义常量
print("请输入圆的半径: ", terminator: "" )
let r = inputDouble()
let perimeter = 2 * M_PI * r
let area = M_PI * r * r
print(String(format: "周长: %.2f", perimeter))
print(String(format: "面积: %.2f", area))
: 正常情况下表示整数首选Int, 表示小数首选Double, 表示字符串首选String, 表示真假首选Bool.
String Interpolation (字符串插值)
print("\\\\(a) + \\\\(b) = \\\\(a + b)")
print("\\\\(a) - \\\\(b) = \\\\(a - b)")
print("\\\\(a) * \\\\(b) = \\\\(a * b)")
print("\\\\(a) / \\\\(b) = \\\\(a / b)")
print("\\\\(a) % \\\\(b) = \\\\(a % b)")
转义字符 - \\n(换行符), \\t(制表符)
print("Hello, World!", terminator: "\\\\n")
print("大家好", terminator: "\\\\t")
print("")
Swift中的运算
: 运算符
-算术运算符: + - * / %
-关系运算符: == != > >= < <=
-短路运算符: && ||
: Swift中加减乘除运算的左右两边类型必须一致
let x: Double = 321.99999
print(x / Double(b))
print(Int(x) / b)
: && - 短路与运算(而且) || - 短路或运算(或者)
let year = 2000
let c1 = year % 4 == 0 // 四年一闰
let c2 = year % 100 != 0 // 百年不闰
let c3 = year % 400 == 0 // 四百年又闰
if (c1 && c2) || c3 {
print("\\\\(year)年是闰年")
}
else {
print("\\\\(year)年不是闰年")
}
: 用科学计数法表示小数
y = 1.23e4
print(y) // 12300.0
y = 1.23e-4
print(y) // 0.000123
: 忽略不计
y = 0xAp3
print(y) // 80.0
y = 0x10p-2
print(y) // 4.0
: 复合赋值运算符
a += b
a -= b
a *= b
a /= b
a %= b
print(a)
: 元组(tuple) - 用一个变量或者一个常量保存多项数据信息的类型
(x, y) = (y, x) // 用元组交换两个变量的值
: 比较运算符 (关系运算符) 产生bool类型的值要么是true,要么是false
: 三元条件运算符 -- question ? answer1 : answer2 (问号前面是一个产生Bool类型的变量常量或表达式,如果其值为true就取冒号前面的值,如果其值为False则取冒号后面的值)
- 三元条件运算的?前面一定要加空格!!!
let msg = username == "admin" && password == "123456" ? "登录成功!!!" : "非法用户!!!"
: 可以使用圆括号改变运算顺序
分支语句
: if - else
- 输入年和月 输出这个月有多少天
print("请输入年和月用空格隔开(例如: 1980 2)")
let year = inputInt()
let month = inputInt()
let day: Int
if month < 1 || month > 12 {
print("瓜西西的")
exit(0) // 程序退出不再执行
}
else if month == 2 {
day = year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? 29 : 28
}
else if month == 4 || month == 6 || month == 9 || month == 11 {
day = 30
}
else {
day = 31
}
print("\\\\(year)年\\\\(month)月有\\\\(day)天")
- 分段函数求值
print("x = ", terminator: "")
let x = inputDouble()
let y: Double
if x < -1 {
y = 2 * x - 5
}
else if x <= 1 {
y = 3 * x + 7
}
else {
y = 4 * x - 3
}
print("f(\\\\(x)) = \\\\(y)")
: switch - case 语句
- 摇色子决定做什么事
let face = Int(arc4random_uniform(6)) + 1
switch face {
case 1:
print("扮鬼脸")
case 2:
print("吻对方")
case 3:
print("真心话")
case 4:
print("唱一首")
case 5:
print("听指挥")
case 6:
print("脱一件")
default:
print("色子坏了!!!")
}
- IT从业人员等级评定
print("请输入你的月薪: ", terminator: "")
let salary = inputInt()
if salary >= 0 {
switch salary {
case 0:
print("你是一个无业游民")
case 1...30000:
print("你是一个小码畜")
case 30001...60000:
print("你是一个小码奴")
case 60001...100000:
print("你是一个大码农")
case 100001...200000:
print("你是一个光荣的IT民工")
case 200001...500000:
print("你是一个优秀的IT工程师")
case 500001..<10000000:
print("你是IT精英")
case 10000000..<100000000:
print("你是IT大哥, 我服")
default:
print("你是头上有光环的IT领袖, 求带")
}
}
else {
print("你丫有病!!!")
}
循环语句
: for循环
- 水仙花数 - 153 = 1^3 + 5^3 + 3^3
func cube(n: Int) -> Int {
return n * n * n
}
for i in 100...999 {
let a = i % 10 // 个位
let b = i / 10 % 10 // 十位
let c = i / 100 // 百位
if i == cube(a) + cube(b) + cube(c) {
print(i)
}
}
- 猴子吃桃
var sum = 1
for _ in 0..<9 {
sum = (sum + 1) * 2
}
print(sum)
- 求m的n次方(m和n都是正整数)
print("m = ", terminator: "")
let m = inputInt()
print("n = ", terminator: "")
let n = inputInt()
var val = 1.0
for _ in 0..<n {
val *= Double(m)
}
print("\\\\(m)的\\\\(n)次方 = \\\\(val)")
: while 循环 (有可能一次都不执行)
- 求阶乘
print("n = ", terminator: "")
let n = inputInt()
var val = 1.0
var i = 2
while i <= n {
val *= Double(i)
i += 1
}
print("\\\\(n)! = \\\\(val)")
- 求1-100之间的偶数的和
var sum = 0
var i = 2
while i <= 100 {
sum += i
i += 2
}
print(sum)
- 用for循环求1-100之间的偶数的和
var sum = 0
for i in 1...100 {
if i % 2 == 0 {
sum += i
}
}
print(sum)
: repeat - while 循环(程序至少执行一次)
var i = 1
repeat {
print("\\\\(i). Hello, world!")
i += 1
} while i <= 100
: 分支语句&&循环语句的重要应用
- Craps赌博游戏
func roll() -> Int {
return Int(arc4random_uniform(6)) + 1
}
var money = 1000
repeat {
print("玩家总资产: ¥\\\\(money)元")
var debt: Int
repeat {
print("请下注: ", terminator: "")
debt = inputInt()
} while debt <= 0 || debt > money
var needsGoOn = false
let firstPoint = roll() + roll()
print("玩家摇出了\\\\(firstPoint)点")
switch firstPoint {
case 7, 11:
money += debt
print("玩家胜!!!")
case 2, 3, 12:
money -= debt
print("庄家胜!!!")
default:
needsGoOn = true // 游戏继续
}
while needsGoOn {
let currentPoint = roll() + roll()
print("玩家摇出了\\\\(currentPoint)点")
if currentPoint == 7 {
money -= debt
print("庄家胜!!!")
needsGoOn = false
}
else if currentPoint == firstPoint {
money += debt
print("玩家胜!!!")
needsGoOn = false
}
} } while money > 0 print("你破产了!!!")
- 百钱百鸡 - GET: 穷举法(穷尽所有的可能性直到找到正确答案)
for x in 0...20 {
for y in 0...33 {
let z = 100 - x - y
if 5 * x + 3 * y + z / 3 == 100 && z % 3 == 0 {
print("公鸡: \\\\(x), 母鸡: \\\\(y), 小鸡: \\\\(z)")
}
}
}
- 冒泡排序: 两两比较, 前面的元素比后面的元素大就交换位置
var array = [29, 98, 35, 12, 47, 66, 53, 79]
for i in 0..<array.count - 1 {
var swapped = false
for j in 0..<array.count - 1 - i {
if array[j] > array[j + 1] {
(array[j], array[j + 1]) = (array[j + 1], array[j])
swapped = true
}
}
if !swapped {
break
}
}
print(array)
- 简单选择排序: 每次从剩下元素中找最小的元素放到对应的位置
var array = [29, 98, 35, 12, 47, 66, 53, 79]
for i in 0..<array.count - 1 {
var minIndex = i
for j in i + 1..<array.count {
if array[j] < array[minIndex] {
minIndex = j
}
}
(array[i], array[minIndex]) = (array[minIndex], array[i])
}
print(array)
数组
: 创建数组
var array1 = [String]()
var array2: [String] = []
var array3 = ["apple", "grape", "banana", "apple", "orange"]
var array4 = [String](count: 100, repeatedValue: "")
: 获取数组元素个数
print(array1.count)
print(array2.count)
print(array3.count)
print(array4.count)
: 对数组中的元素进行遍历
for index in 0..<array3.count {
// []是对数组进行下标运算(取出指定位置的元素)
print(array3[index])
if index == 1 {
array3[index] = "litch"
}
}
print(array3)
: 向数组中添加元素
array1 += ["strawberry"] // +=即在数组的最后加入相当于.append
array1.append("pear")
array1.insert("waxberry", atIndex: 0) // .insert即在数组的指定位置加入
array1.insert("watermelon", atIndex: 2)
array1.insert("lemon", atIndex: array1.count) //在这个数组的最后加入
print(array1)
: 从数组中删除元素
array1.removeAtIndex(2) // 指定位置删除
print(array1)
array1.removeFirst() // 删除第一个
print(array1)
array1.removeAll() // 全部删除
print(array1)
//array5.removeAll() 全部删除
//array5.removeAll(keepCapacity: <#T##Bool#>) 只删除元素不回收空间
//array5.removeAtIndex(2) 删除指定位置的元素
//array5.removeRange(0...2)//删除一个范围内的
: 数组的复制
var array5 = array3 // 复制数组
array5[0] = "pitaya" // 数组的0号位置元素替换为"pitaya"
print(array3)
print(array5)
var array6 = array3[1...3] // 复制数组的一部分
print(array6)
: 数组的+运算
let array7 = array1 + array3
print(array7) // 元素排列为 - 先排列array1的元素再排列array3的元素
: 只读循环(在循环过程中不能修改数组元素)
for str in array3 {
print(str)
}