学习目标
1.【掌握】switch-case结构
2.【理解】case语句穿透
3.【理解】Xcode断点调试
4.【理解】while循环结构初体验
5.【掌握】while循环结构的应用
6.【理解】break和continue
一、switch-case结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
switch(表达式){ case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; ... break; case 常量表达式n: 语句n; break; default: 语句n+1; break; } |
计算表达式的值,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后跳出switch语句,继续执行程序。如果逐个比较都没有相等的值,则执行default后的代码,然后跳出switch,继续执行程序。
和if-else的区别:
1.能够使用switch-case结构写的代码一定可以使用if结构写出来,但能够使用if结构写出来的代码,不一定可以使用switch-case结构。
2.switch-case结构 只能直接做等值判断,判断switch后的值是否和给定的case值相等。if结构,不仅可以做等值判断 还可以做范围判断。
3.如果是做范围判断推荐使用if语句,如果是做等值判断则推荐使用switch语句。
switch语句注意事项:
1.表达式的类型(case语句后的值)必须是整型或可以转变为整型的值(byte、short、char和int类型)。
2.值1、值2...值n只能为常数或常量,不能为变量。
3.功能代码部分可以写任意多句。
4.break关键字的意思是中断,指结束switch语句,break语句为可选。
5.case语句可以有任意多句,可以不用加括号“{}”。
6.default语句可以写在switch语句中的任意位置,功能类似于if语句中的else。
执行流程:在执行的过程中,如果遇到break语句,则跳出switch语句。如果没有遇到break语句,则一直执行到switch语句的结束。
7.case后面不可以直接定义变量,使用定义的这个变量的作用域 8)如果在case后面定义的变量必须加上大括号
二、case语句穿透
case语句执行的过程中,如果在每一个case语句后没有break,则一旦进入某个分支后就会一直执行到switch结束。break的作用是直接跳出switch语句,当然还有其他作用,待会整理循环结构笔记的时候再说。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
int year = 0, month = 0; printf("请输入年份和月份:"); scanf("%d%d",&year,&month); switch (month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf("%d年的%d月有31天\n",year,month); break;//这里就是使用了case穿透,1,3,5,7,8,10,12任意分支满足,都会执行他们后面所有代码,直到遇到break跳出switch case 4: case 6: case 9: case 11: printf("%d年的%d月有30天\n",year,month); break; case 2: //判断年份是否为闰年. if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){ printf("%d年的%d月有29天\n",year,month); }else{ printf("%d年的%d月有28天\n",year,month); } break; default: printf("你是都教授吗?\n"); break; } |
穿透的作用:不同case语句执行的代码相同,就可以使用穿透来简写代码。
三、Xcode断点调试
在程序运行期间,我们可以通过Xcode提供的断点调试监视CPU执行代码的步骤,变量的值的变化,以便我们排查BUG。下面图例就是使用断点调试功能的图解,不是很详细,将就吧。。。整理笔记时间太短了,还得做练习,断点调试教程我会单独在【Xcode教程】栏目发布的。
Xcode如何显示行号:
在Xcode -》 Preferences -》 Text Editing -》 第一个选项,勾选Lines numbers。
添加断点:
设置断点不起作用:
删除断点:拖动断点到空白处,即可彻底删除断点。
调试程序:Command + R 运行后,如果设置了断点,则直接进入调试视图
四、while循环结构初体验
循环结构可以将一段代码重复执行指定次数,C语言中的循环结构有while循环结构、do-while循环结构和for循环结构。当然由goto语句和if判断也能组成循环,不过全世界人民都不建议使用goto语句。今天我们要讲解的是while循环结构的语法和应用场景。
1 2 3 |
while(条件表达式){ 那段需要被反复不停执行的代码,也叫循环体; } |
执行过程:先判断while后面小括号里的表达式是否为真,为真则执行大括号里的循环体,然后再次判断while后面小括号里的表达式,为真再次继续执行,然后。。。直到while后面的表达式为假,则立即停止while循环。
关于死循环:
1 2 3 |
while (1){ printf("表达式一直为真。。。所以,死循环!"); } |
循环体一直反复不停的执行,永远不会结束,这种循环我们就叫做死循环。我们在写循环的时候,要特别注意合理利用死循环。
五、while循环结构的运用
第一种场景:确定循环体,也确定循环的次数。
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <stdio.h> int main() { int i = 0; //将一句话输出2万次 while (i < 20000){ printf("欢迎你来六阿哥的博客\n"); i++; } return 0; } |
第二种场景:确定循环体,不确定循环次数,但确定循环结束或者继续的条件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <stdio.h> #include <stdlib.h> int main(int argc, const char * argv[]){ int money = arc4random_uniform(101); int guess = -1; while (guess != money){ printf("请猜一下我给了你多少钱吧:"); scanf("%d",&guess); if(guess > money){ printf("你猜得太大了\n"); }else if(guess < money){ printf("你猜得太小了\n"); } } printf("恭喜你,正确\n"); return 0; } |
第三种场景:遍历指定范围的数,将每1个数据都找出来
1 2 3 4 5 |
int i = 100; while ( i <= 150){ printf("%d\n",i); i++; } |
第四种场景:找出指定范围中符合特定条件的数
1 2 3 4 5 6 7 8 9 10 11 12 |
int i = 100; while (i <= 999){ int bai = i / 100; int shi = i % 100 / 10; int ge = i % 10; //只取出满足条件的值 if(bai * bai *bai + shi * shi * shi + ge * ge * ge == i){ printf("%d\n",i); } i++; } |
第五种场景:求累加和与平均值
1 2 3 4 5 6 7 8 |
int i = 1; int sum = 0; while (i <= 5){ sum += i; i++; } printf("sum = %d\n",sum); |
第六种场景:求最大值和最小值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <stdio.h> #include <limits.h> int main(int argc, const char * argv[]){ int max = INT32_MIN; //先声明1个擂台变量.用来保存最大值的. int i = 0; while (i < 5){ printf("请输入第%d个数:\n",i+1); int num = 0; scanf("%d",&num); //每循环1次 就拿刀了用户输入的1个数据. //如果输入的是第1个数据 那么就直接将这个数据赋值给max。 // if(i == 0) // { // max = num; // } //拿刀用户输入的这个数据 和擂台上的数据做比较. if(num > max){ max = num; } i++; } printf("max = %d\n",max); return 0; } |
六、break和continue
break关键字:
可以使用在switch-case结构之中。如果在其中使用了break,就代表结束这个switch-case结构。
还可以使用在循环体之中。如果在循环体之中遇到了break,就会立即结束当前循环结构。
1 2 3 4 5 6 7 8 |
int i = 0; while (i < 5){ printf("我爱你们\n"); if(i == 2){ break;//i等于2的时候直接结束while循环,最终i的值也只停留在2 } i++; } |
continue关键字:
只能用在循环体之中,如果在循环体之中遇到了continue,会立即结束本次循环。再判断循环条件,决定是否要继续下一次循环。
1 2 3 4 5 6 7 8 9 10 |
int i = 0; while (i < 5){ if(i == 2){ continue;//当i等于2的时候,直接结束本次循环 } i++;//因为i等于2就结束了本次循环,所以i++没有被执行。最终i的值为2 printf("%d\n",i); } |