4.6 练习及解析
(1)将下列描述翻译成Swift表达式。
小李买了5支铅笔、1块橡皮、3本作业本和11个书签。每支铅笔2元,每块橡皮3元,每本作业本2.5元,每个书签0.5元,计算小李所花多少钱。
解析:
//共26元 var sum = 5*2+1*3+3*2.5+11*0.5
(2)设计一个表达式来生成1~7之间的随机数。
解析:
// arc4random()为Swift标准函数库中的随机数生成函数 var rand = arc4random()%7+1
(3)语、数、外3门科目进行测试,当3门科目的成绩都大于60且总分不小于200分时,成绩才为合格,使用Swift表达式来描述上述逻辑。
解析:
var Language=60 var Math=65 var English=70 if Language>60 && Math>60 && English>60 && (Language+Math+English)>200 { print("合格") }
(4)编写闰年判断的表达式。
闰年:1.能够被400整除。
2.能够被4整除但是不能够被100整除。
解析:
var year = 2016 if year%400==0 || ((year%4==0) && (year%100 ! = 0)) { print("闰年") }
(5)学校乒乓球比赛需要每班出一名主选手和一名辅助选手参赛,比赛分为上下两场,上半场主选手得分超过30分则下半场需要辅助选手进行,否则下半场依然由主选手进行,使用条件运算符(三目运算符)描述下半场比赛出赛的选手。
解析:
var mark = 40 var people = mark>30 ? "主选手" : "辅助选手"
(6)打印如下图案:
********** *? ? ? ? ? ? ? ? * *? ? ? ? ? ? ? ? * **********
解析:
for indexH in 1...4 { //每行有10列符号 print("") for indexV in 1...10 { //第一行和最后一行为* if indexH==1 || indexH==4 { print("*", separator: "", terminator: "") }else{ //第一列和最后一列为* if indexV==1 || indexV==10 { print("*", separator: "", terminator: "") }else{ //其余为? print("? ", separator: "", terminator: "") } } } }
print()函数会自动在打印末尾添加换行符,使用带3个参数的print()函数,并且将后两个参数设置为空字符串可以屏蔽print函数的自动换行功能。
(7)打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。
解析:
for item in 100...999 { //获取个位数字 var dig = item%10 //获取十位数字 var tens = item/10%10 //获取百位数字 var hundred = item/100 //获取结果 这里可以考虑用pow(Double, Double) 函数代替dig*dig*dig var sum = dig*dig*dig + tens*tens*tens + hundred*hundred*hundred if sum == item { print(item) } }
(8)猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
解析:
var count = 1 for day in 1...9 { count = (count+1)*2 } print(count)
(9)两个乒乓球队进行比赛,每队各出三人。甲队为p1、p2、p3三人,乙队为q1、q2、q3三人。抽签决定了比赛名单后,有人向队员打听比赛的名单。p1说他不和q1比,p3说他不和q1、q3比,请编写程序列出三队赛手的名单。
解析:
//标识甲队 var p1 = 1 var p2 = 2 var p3 = 3 //标识乙队 var q1 = 0 var q2 = 0 var q3 = 0 for indexI in 1...3 { q1 = indexI for indexJ in 1...3 { q2 = indexJ for indexK in 1...3 { q3 = indexK if indexI ! = indexJ && indexI ! = indexK && indexJ ! = indexK { if q1 ! = p1 && p3 ! = q1 && p3 ! = q3 { print(q1, q2, q3) } } } } } //输出 2,3,1
(10)求1+2! +3! +...+20!的和。
解析:
var sumC = 0 for var index in 1...20 { var tmp = 1 while index > 0{ tmp *= index index -= 1 } sumC+=tmp } print(sumC) //输出2561327494111820313
(11)打印倒金字塔
* * * * * * * * * * * * * * * *
解析:
for indexJ in 1...7 { if indexJ < indexI{ //先打因左侧空格 print(" ", separator: "", terminator: "") }else if indexJ+(indexI-1)<=7 { //再打印* print("*", separator: "", terminator: "") } } //换行 print("") }