本周,开始系统的学习swift的语法。
常量(let)和变量(var)
正常情况下表示整数首选Int,表示小数首选Double(Float很少使用),表示字符串首选String,表示真假首选bool
Swift具有强大的类型推断
如果可以的话尽可能省略类型标记,让编译器自动推断变量或常量额类型
&& - 短路与运算(而且)同时满足两边的条件为真时成立
|| - 短路或运算(或者)至少满足其中一边的条件为真时成立
let year = 1900
if year % 4 == 0 && year % 100 != 0 || year % 400 == 0
{
}
else
{
}
print("Hello, World!")
print("Hello, World!",terminator: " ")加上terminator: " "可以使print输出时不换行
unary 一元运算符
binary 二元运算符
ternary 三元运算符
三元运算符 question ? answer1 : answer2
“ ? ”两边一定要有空格
问号前面是一个产生Bool类型的变量,常量或表达式。如果其值为true,就取 : 前面的值,为false就取 : 后面的值
本周重点
循环结构
1.while循环 - 可能一次都不执行
var y = 1
var x = 2
while x <= 100
{
y += x
x += 1
}
print(y)
满足 while x <= 100 时,进入循环
当循环到 x > 100时,循环结束
2.repeat - while循环 - 至少执行一次
var u = 1
var i = 2
repeat
{
u += i
i += 1
}while i <= 100
print(u)
程序运行时repeat - while循环至少会执行一次
当while i <= 100 条件成立时
会继续循环,直到不满足条件
3.for循环
var b = 0
for a in 1...100
{
b += a
}
print(b)
for循环会循环1到100次,左右为闭区间
猴子吃桃
猴子有一堆桃子,每天吃一半多一个,吃了N天,还剩一个,问原来有多少个桃子
print("请输入天数")
var a = inputInt()
var b = 1
for _ in 1...a
{
b = (b+1)*2
}
print(b)
水仙花数
求100-999中的水仙花数,(若三位数abc,abc=a3+b3+c^3, 则称abc为水仙花数。如153,13+53+3^3=1+125+27=153,则153是水仙花数
for i in 100...999
{
let b = i % 10
let d = i / 100
let c = (i % 100) / 10
if i == b * b * b + c * c * c + d * d * d
{
print("\(i)是水仙花数")
}
else
{
print("\(i)不是水仙花数")
}
}
穷举法(穷尽所有的可能性直到找到正确答案)
百元百鸡
用100元买100只鸡,要求小鸡1元3只,公鸡5元每只,母鸡3元每只,问100元可以买到的鸡的方按
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)")
}
}
}
数组
1.创建数组
var a = [Int](count: 26, repeatedValue: 0)//定义一个放整数的数组(6个元素,初始值都是0)
var array1 = [String]()//定义一个放字符串的空数组
var array2: [Int] = []//定义一个放整数的空数组
var array3 = [99, 12, 65, 55, 100]
var array4 = [Int](count: 100, repeatedValue: 1)
var array5 = [String](count: 100, repeatedValue: "hehehe")
2.获取数组元素个数
print(array1.count)
3.对数组中的元素进行遍历
for i in 0..<array3.count
{
//[]是对数组进行下标运算(取出指定位置的元素)
print(array3[i])
}可以在循环中修改数组的值
只读循环(在循环过程中不能修改数组元素)
var sum = 0
for str in array3
{
sum += str
print(sum)
}
可以修改数组的值
index 表示数组中元素所在的位置,value表示数组中元素的值
for (index, value) in array1.enumerate()
{
print("\(index + 1). \(value)")
}
4.向数组中添加元素
array1.append("strawberry") append追加元素,加到数组的最后面
array1.insert("watermelom", atIndex: 2)insert追加元素,加到数组atIndex:X X的值位置
5.从数组中删除元素
array1.removeAtIndex(2) 删除数组中 位置2上的元素
array3.removeAll() 删除整个数组
6.数组的复制
let array6 = array1 复制array1到新建的array6
var array7 = array1[1...3] 只复制数组中的第2到第4个
7.数组加法
let array8 = array1 + array5
8.数组排序
var array = [23, 34, 42, 21, 43, 54, 67, 65]
array.sortInPlace() sortInPlace对数组进行排序,默认为升序
sortInPlace(>)降序
let newArray = array.sort() sort对数组进行排序,将排序结果给newArray数组,默认为升序
sort(>)降序
排序
1.简单选择排序,每次从剩下的元素中找最小的元素放到对应的位置
for j in 0..<array.count - 1
{
var minIndex = j 第一次循环中 假设第一个数为数组的最小数,即j = 0
for i in j + 1..<array.count
{
if array[i] < array[minIndex] 如果发现数组中有比第一个数小的数,就标记它的位置,并用它与剩下的数作比较
{
minIndex = i
}
}
(array[j], array[minIndex]) = (array[minIndex],array[j])
循环完后,将标记的数与第一个数做交换
}
直到完成整个循环
print(array)
2.冒泡排序:两两比较,前面元素比后面元素大就交换位置
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 == false//if !swapped {} 代码优化:如果在内部for进行完一次后,没有发生元素交换就终止循环
{
break
}
}
print(array)
本周在反复的使用循环结构做练习,在练习中熟悉循环结构。循环结构在以后Swift中有巨大的作用,为以后的编程打下基础。
网友评论