iOS开发分分钟搞定C语言 —— 流程控制

一、流程控制分类及概念
在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值