一、流程控制分类及概念
在iOS开发中,流程控制是非常常用也是非常重要的,流程控制分为以下三种:
1.顺序结构:默认的流程结构。按照书写顺序执行每一条语句。
2.选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码。
3.循环结构:在给定条件成立的情况下,反复执行某一段代码。
二、选择结构
在C语言中常用的选择结构有两种,if 和switch 。
1.if选择结构
常用个格式:
(1)if (表达式) 语句1;
if(age>18) printf("已经成年了!");
(2)if(表达式) 语句1; else 语句2;
if(age>18) printf("已经成年了!");
else printf("还是未成年!");
(3)if(表达式) { }
if(age>18) {
printf("已经成年了!");
}
(4)if -else if-else
if(age>18) {
printf("已经成年了!");
else
printf("未成年人!");
if (number <0)
printf("负数");
else
printf("正数");
2.switch 选择结构
常用格式:
(1)switch(表达式) {
case 数值1:
break; …
break;
}
int a = 10;
switch (a) {
case 0:
printf("这是一个0");
break;
case 5:
printf("这是一个5");
break;
case 10:
printf("这是一个10");
break;
default:
printf("什么也不是");
break;
}
使用switch 的注意点:
1.拿到条件表达式的返回值(注意返回值必须是整型)
2.利用条件表达式的返回值和switch后面大括号中的每一个case进行比较, 判断条件表达式的返回值和case后面的整数是否相等 条件表达式 == 整数
3.如果条件表达式的返回值等于某一个case后面的整数, 那么就会执行该case后面的语句
4.执行完语句之后如果遇到break就会结束整个switch语句, 也就是说后面的所有语句都不会被执行
5.如果前面的case不满足, 也就是前面的case的整数和条件表达式的返回值不相等就会继续判断后面的case
6.如果前面所有的case都不满足, 就会执行default后面的语句
if和Switch的转换
题目:要求用户输入一个分数,根据输入的分数输出对应的等级
A 90~100 99/10 = 9 90/10= 9 98/10 = 9 100/10 = 10
B 80~89 89/10 = 8
C 70~79
D 60~69
E 0~59
用if来实现:
#include <stdio.h>
int main()
{
// 1.提示用户输入学生的分数
printf("请输入一个0~100的分数\n");
// 2.定义变量保存用户输入的分数
int score = -1;
// 3.接收用户输入的分数
scanf("%d", &score);
// 4.判断用户输入的分数输出对应的等级
if (score >= 90 && score <= 100) {
printf("A\n");
}else if (score >= 80 && score <= 89)
{
printf("B\n");
}else if (score >= 70 && score <= 79)
{
printf("C\n");
}else if (score >= 60 && score <= 69)
{
printf("D\n");
}else if (score >= 0 && score <= 59)
{
printf("E\n");
}else{
printf("少喝点三鹿\n");
}
}
利用switch来实现:
switch (score/10) {
case 10:
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
printf("D\n");
break;
case 6:
printf("C\n");
break;
default:
printf("E\n");
break;
}
if语句和switch语句选择
分支比较多且无法穷尽或进行大量列举 时最好用if, Switch对遇见判断非常不利
如果数据量不是很大, 并且数据是固定的可以用Switch
理论上Switch的效率比if高
在swich中,输入字符会存在内存缓存的问题,可以用getchar()函数来解决。
三、循环结构
C语言提供了多种循环语句,可以组成各种不同形式的循环结构,在开发中最常用的循环结构有以下几种:
goto语句和if语句构成循环;
while语句;
do-while语句;
for语句;
一般来说一个循环需要以下几部分构成:
循环控制条件
循环退出的主要依据,来控制循环到底什么时候退出
循环体
循环的过程中重复执行的代码段
能够让循环结束的语句(递增、递减、真、假等)
能够让循环条件为假的依据,否则退出循环
1.while循环
while循环概念: 如果条件成立,就会执行循环体中的语句(“循环体”就是while后面大括号{}中的内 容)。然后再次判断条件,重复上述过程,直到条件不成立就结束while循环
while 循环的格式:
while ( 条件 )
{
语句1;
语句2;
….
}
使用while循环的陷阱
(1)任何数值都有真假性
while (1) {//死循环
printf("123\n");
}
printf("123\n"); // 永远执行不到
(2)当一个变量与一个常量进行== 或 != 的时候,通常把常量写在前面
int num = 3;
while (3 == num) {
printf("num = %d\n",num);
num++;
}
(3)while 后如果只有一条语句它可以省略大括号
空语句它也是一条语句
while小括号后面不可以直接写分号
// while省略大括号的时候条件满足就会执行while后面的第一条语句
while (0)
printf("123\n");
printf("456\n");
(4)作用域问题
while (1) {
int a = 10;
}
printf("a = %d\n", a); // 访问不到
while (0)
int a = 10; // 作用域混乱
printf("a = %d\n", a);
(5)分号问题
while (1);//空语句
{
printf("123\n");
}
(6)最简单的死循环
while (1);
2.do-while循环语法格式
do - while 常用的格式:
do {
语句1;
语句2;
....
} while ( 条件 );
do-while语句语义:
当执行到do-while循环时,首先会执行一遍循环体中的语句(“循环体”就是do后面大括号{}中的内容)。接着判断while中的条件,如果条件成立,就执行循环体中的语句。然后再次判断条件,重复上述过程,直到条件不成立就结束while循环
while循环特点:
do-while循环的特点:不管while中的条件是否成立,循环体中的语句至少会被执行一遍。
do - while 和while 非常相似,那么来对这俩做下对比:
while, 先判断再执行
int x = 0;
while (x < 0) {
x++;
}
printf("x = %d\n", x);
输出结果:x = 0
do-while, 先执行再执行
int y = 0;
do {
y++;
} while (y < 0);
printf("y = %d\n", y);
输出结果:x = 1
while循环在iOS开发中有时候也会用到,在循环次数很多的时候,就要用到while,如果在循环中有要先判断然后在循环的话就要选择do- while。
for循环
C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循 环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。
for循环开始时,会先执行初始化表达式,而且在整个循环过程中只执行一次初始化表达式。
接着判断循环条件表达式,如果条件成立,就会执行循环体中的语句(“循环体”就是for后面大括号{ }中的内容)
循环体执行完毕后,接下来会执行循环后的操作表达式,然后再次判断条件,重复上述过程,直到条件不成立就结束for循环。
什么情况下用for
当变量只是用来控制循环的次数的时候用for更节约内存
int i = 0;
while (i < 3) {
printf("i = %d\n", i);
i++;
}
printf("循环结束后 i = %d\n", i);
什么情况下用while
当变量在循环结束后还需要使用,就用while
for (int j = 0; j < 3; j++) {
printf("j = %d\n", j);
}
printf("循环结束后 j = %d\n", j);// 不能访问j
iOS开发中,一般情况下while和for可以互换, 但是如果循环执行完毕之后就不需要使用用于控制循环的增量, 那么用for更好。
for循环的嵌套
循环语句的循环体中存在其他的循环语句就是循环嵌套,称之为循环嵌套
注意: 在iOS开发中一般循环嵌套不超过三层
外循环执行的次数 * 内循环执行的次数就是总共执行的次数
格式一:
while(条件表达式)
{
while((条件表达式)
{
语句;
...
}
}
格式二:
for (;;)
{
for (;;)
{
for (;;)
{
for (;;)
{
}
}
}
}
格式三:
for (;;)
{
while((条件表达式)
{
语句;
...
}
}
格式四:
while((条件表达式)
{
for (;;)
{
语句;
...
}
}
用嵌套循环打印图形:
尖尖向上的三角形:
int main (){
for (int i = 1; i<7; i++) {
for (int j = 1; j<i; j++) {
printf("*");
}
printf("\n");
}
尖尖向下的三角形:
int main ( ){
for (int i = 1; i<7; i++) {
for (int j = i; j<7; j++) {
printf("*");
}
printf("\n");
总结规律:
尖尖朝上(向下递增),改变内循环的条件表达式,让内循环的条件表达式随着外循环的i值变化
尖尖朝下(朝下递减),改变内循环的初始化表达式,让内循环的初始化表达式随着外循环的i值变化
打印99乘法表
int main () {
// 打印九九乘法表
for (int i = 1; i < 6; i++) {
for (int j = 1; j<i; j++) {
printf("%i*%i=%i ",j,i,i*j);
}
printf("\n");
}
四、break和continue
首先break和continue是循环结构中的两个重要的关键字,他们的功能相似,都是跳出循环,但是执行结果却是完全不一样的.
break:当在循环结构体中遇到break时,如果break上面的条件满足需求那么立即跳出循环,直接到main入口.
continue:当在循环结构图中遇到continue时,如果continue上面的条件满足需求,那么立即跳出当前循环,但没有完全跳出循环.
版权声明:本文为博主原创文章,为了能相互促进,相互学习,请关注新浪微博:极客James