循环break,continue 进制
/**
燕十八 公益PHP培训
课堂地址:YY频道88354001
学习社区:www.zixue.it
**/
// 顺序结构
/*
按顺序执行,
*
// 分支结构
// if ,单路分支
// if /else ,双路分支, 双路分支中,if/else中的2个代码段,必有且只有一段被执行.
// if /else if /else if .../ else 多路分支.
// switch case ,用来比较被判断的变量的多种可能值时便于用.
// while循环,
/*
while(表达式) {
代码段
}
表达式为真,就执行代码段,
执行完代码段,再回去判断表达式.
为真,.....
直到表达式为假的时候,结束循环
do {
代码段
}while(表达式);
先执行代码段,再判断表达式的真假
// do/while 至少执行一次.
for(语句1;语句2;语句4) {
语句3;
}
语句1, 先执行,且只执行1次.
然后 语句2 判断,如为真,则执行语句3,然后执行语句4
再
语句2判断..... 循环
直到语句2为假,for结束
*/
// break, continue
/*****
break
已知,教室内,有一个犯罪分子, 警察过来抓他.
犯罪分子隐藏的很好,只好一个人一个的来检查.
看他脚心有没有一颗痣.
张三[检查]
李四[检查]
王五[检查]
罪犯[抓捕活动结束,后面的不查了]
赵六
郑七
王八
*****/
for($i = 1;$i<10;$i++) {
if($i == 6) {
break;
} else {
echo $i,'<br />';
}
}
// 先别运行,思考打印结果: 1 2 3 4 5
// break 与 抓罪犯,
// break有破坏的意思,直接破坏整个循环语句,不再往下执行了.
// continue 继续
/***
已知,地铁口,有10个人,警察来查身份证.
一个人一个的来检查.
张三[检查]
李四[检查]
王五(哎哟,这不是刚子吗?连我都不认识了,邻居.
(警察认识王五,因此,王五就不检查了.继续检查下一位)
赵六
郑七
王八
***/
for($i = 1;$i<10;$i++) {
echo $i,'<br />';
}
// 1 2 3 4 5 6 7 8 9
for($i = 1;$i<10;$i++) {
if($i == 5) {
continue;
}
echo $i,'<br />';
}
// continue是继续的意思,是说你继续下一次循环单元吧,这次的可以跳过了.
/*
假设某人有100,000现金。每经过一次路口需要进行一次交费。
交费规则为当他现金大于50,000时每次需要交5%如果现金小于等于50,000时每次交5,000。
请写一程序计算此人可以经过多少次这个路口。
分析:给此人100 000元,初始条件.
判断条件: 钱至少>=5000
过路口:钱减少
*/
/**
for($money = 100000,$num=0;$money >= 5000;$num++) {
if($money > 50000) {
$money *= 0.95; // 扣了5%,即原来的0.95倍
} else {
$money -= 5000;
}
}
echo $num;
**/
for($money = 100000,$num=0;$money >= 5000;) { // 看此处,第2个";"号后竟然是空的??
if($money > 50000) {
$money *= 0.95; // 扣了5%,即原来的0.95倍
} else {
$money -= 5000;
}
$num += 1; // 把过桥记录加1
echo '第',$num,'次过桥后,剩余,',$money,'元<br />';
}
// 最简单的for循环
for(;;) {
echo 'haha';
} // 别运行,死循环了.
/***
之前碰到的一些怪事:
023的显示问题
二进制的问题
16进制面试题的问题.
药死小白鼠的问题.
如上,给我带来的疑惑,都是因为进制的问题.
***/
// 李开复在一个节目出的题
/***
某珠宝商,有31颗明月珍珠,光芒夺目
此商人呢,把珍珠分成了若干盒,每盒的珠子数量都不一样
分完后,发现特别的巧,
你想买1-31颗之间的珠子,
此商人 ,都能正好取出其中若干盒,正好能组成你要买的数量.
思路: 分成了几盒? 每盒又各是多少颗珠子呢?
8瓶水,1瓶有毒, 药死小老鼠,需要2小时时间.
只给你2小时时间,
问:最少,需要几只老鼠
***/
/****
日常生活 数数
1 2 3 4 5 6 7 8 9
10
[左数第2位的1,代表10个]
30
[左数第2位,1个值代表10]
同样的一个数字, 在不同的位置上,发挥的"重量"是不一样的.
有句广告词: 一片顶五片
1--> 1
10 --> 1代表10
100---> 1 代表 100
用术语来说:在不同位置上,发挥的"重量" ,叫"权值"
以10进制为例
1234 = 1000 + 200 + 30 + 4
因为
左数第4位的1,权值是1000,即以1顶1000,基数又是1,因此顶1000
左数第3位的2,权值是100, 即以1顶100,基数又是2, 因此顶200
左数第2位的3,权值是10, 即以1顶10, 基数又是3,因此顶30
左数第1位的4,权值是1, 即以1顶1, 基数又是4, 因此顶4
所以值 1000 + 200 + 30 + 4;
继续归纳:
左数第1位,权值是1, 10^0 ,10的0次方
左数第2位,权值是10, 10^1,
左数第3位,权值是100, 10^2
左数第4位,权值是1000,10^3
那么同学们回答,
(abcdef)10, 即10进制的abcdef的值是多少?
f*10^0 + e*10^1 + d*10^2 + c*10^3 + b*10^4 + a *10^5
归纳:
在10进制中,基数最大是9,因为到10,就把基数1进到第2位,来表示了.
0 1 2 3 4 5 6 7 8 9
扩展: 在M进制中, 基数的最大值是 M-1
来个8进制练一练
(abcd)8 , 即8进制的abcd值是多少?
(1234)8
左数第1位,权值是8^0, 基数*权值 = 4 * 8^0
左数第2位,权值是8^1, 基数*权值 = 3 * 8^1
左数第3位,权值是8^2, 基数*权值 = 2 * 8^2
左数第4位,权值是8^3, 基数*权值 = 1 * 8^3
计算出来,对应10进制是
4 * 1 + 3 * 8 + 2 * 64 + 1 * 512 = 668;
****/
echo 1234,'<br />'; // 10进制的1234
// 如果你想告诉PHP,你用的是8进制,请在数字前加0
echo 01234,'<br />';
echo 023,'<br />';
/*
在下面的这个例子,
前面加0代表8进制
而8进制,基数最大是7
现在出了一个9,自然就是"违法的"
碰到这种情况,PHP就会从9开始,把后面的值舍弃.
*/
echo 0239999,'<br />';
/*
看一看16进制
碰到16才进位,0-15都是单个的基数来表示
0 --------------------------->15
0 1 2 3 4 5 6 7 8 9 a b c d e f
ab(16)
左数第1位, 权值是16^0,基数是b,值是 b * 16^0
左数第2位, 权值是16^1,基数是a,值是 a * 16^`
因此 == b * 16^0 + a * 16^1
24(16) = 4*16^0 + 2*16^1 = 4 + 32 = 36
*/
// 如何告诉计算机这是16进制呢?
// 在前面加0x
$age = 0x1c;
echo $age;
/***********
程序员的冷笑话
程序员分不清 圣诞节,和万圣节
圣诞节: 12月25日, dec25
万圣节: 10月31日, oct31
在英语里,常常这么缩写进制
Binary :二进制数 10010100B
Decimal:十进制数 148D(可省略)
Octonary:八进制数 224O或Q
HexaDecimal :十六进制数 94H
在程序员眼里
dec25 ---> 10进制25
oct31 ---> 8进制31
25dec === 31oct
(25)10 === (31)8
************/
// 2进制, 自然基数只能是1,0两个
/*
1101 ===>
从左到右 代表
1*2^0 + 0*2^1 + 1*2^2 + 1*2^3 = 1 + 0 + 4 + 8 = 13
*/
// 如何在PHP中表示2进制
// 在PHP5.4中,已经开始引进二进制的直接表示
echo PHP_VERSION;
/**
某珠宝商,有31颗明月珍珠,光芒夺目
此商人呢,把珍珠分成了若干盒,每盒的珠子数量都不一样
分完后,发现特别的巧,
你想买1-31颗之间的珠子,
此商人 ,都能正好取出其中若干盒,正好能组成你要买的数量.
思路: 分成了几盒? 每盒又各是多少颗珠子呢?
分析: 计算机中,有一门很重要的课,叫信息论.
一种东西,他的状态,能用来标识信息.
比如:一只眼睛, 能闭,能睁
想用来表示心情,最多能表示分种?
答:2种. 因为眼睛只有2种"态位"
如果有2只眼睛的话,每只眼睛都能睁能闭,
组合起来,就能表示4种心情.
比如:
左开右开
左开右闭
左闭右开
左闭右闭
**/
/**
关键在这句话:
"正好取出其中若干盒"
那么每盒有几种状态?
答:2种,要么取,要么不取.
一个盒就能表示两种"态位"
不妨标记为取:1, 不取:0
只能表示2进制,如下
[1/0][1/0][1/0][1/0][1/0]
如果用二进制的知识来分析
左数第1盒, 权值是 1
左数第2盒, 权值是 2
左数第3盒, 权值是 4
左数第4盒, 权值是 8
左数第5盒, 权值是 16
17 = 10001 ,取第5盒+第1盒
29 = 11101 ,取第5,4,3,1盒
**/
/**
8瓶水,其中1瓶有毒, 拿小白鼠做试验,
药效发挥需要2小时时间,才能让白鼠死.
只给你2小时时间,
问:最少,需要几只老鼠
分析:
毒死需要2个小时,只给2个小时==>只能试1次.
分析: 2小时后,小白鼠,只有2种状态: 死/活
2只小白鼠,则有4种组合的状态.
N只小白鼠,则有2^N次组合的状态.
一共只有8只老鼠,最多需要8种状态,就能区分.
3只老鼠,组合8种状态.
因此,从理论上说, 3只老鼠足够了.
但3只老鼠如何试出来,自己用二进制的知识来组合一下.
**/
/****
有个商人不小心把40磅的砝码摔碎了,摔成了4块,
欲哭无泪时发现这4块砝码恰好可以组合成1-40的任意重量,
求这4块碎砝码的质量。
提示:组合的意思就不是单纯相加。
因为天平,你懂的。例如:2=3-1
N块砝码,一个天平,
某一砝码可以放左边,也可以放右边,也可以不放.
一个砝码表示 3种态位.
可标识为 0 1 2
[0/1/2][0/1/2][0/1/2][0/1/2]
以上可以组合出一个3进制数字来
想表示出连续的数字来,
然后,每个位上的权值,也要符合3进制的规律
权值是 1, 3,9, 27
1-->1
2-->3-1
3-->3
4-->3+1
5-->9-3-1
....
...
...
****/
/****
提示:
对于进制的学习,
如果没懂,不要太担心.
但要知道1: 有2进制 8进制,10进制,16进制
也要知道2:
在程序中,往往是数字前加0代表8进制
在数字前面加0X代表16进制.
****/
浙公网安备 33010602011771号