iOS基础(c)—程序结构的分类


------ 知之博客 期待与您交流! -------

程序结构的分类

  程序结构分为三类:
    1
)顺序结构

    顺序结构是最简单的程序结构,它是由若干个一次执行的处理步骤组成的。
   
按照顺序依次执行AB程序块。如图:
            

                         
顺序结构

    2)分支结构

    根据给定的条件进行判断,由判断的结果决定执行两个分支中的一个分支。如图:当P为真时执行A程序块,否则执行B程序块。无论条件P是否成立,AB程序块只能有一个被执行到,执行之后就离开了该选择结构。当B为空时,条件P为假时不执行任何操作。
         

                       分支结构

    3)循环结构

    又称为重复结构,给定条件成立时反复执行某一程序段。

    C语言中主要的循环语句由三个:

(1)      while循环语句

(2)      dowhile循环语句

(3)      for循环语句

流程图如下:

         

                                                   循环结构


分支结构

   1.  if语句实现分支控制

   一般形式(第一种形式):表达如果表达式为真,执行语句块1,否则不执行。

 

  If(表达式)

 {

     语句块1;

  }

  后续语句;


    原理:

            先计算小括号中的表达式的值

                  真(1

            会执行大括号中的语句

                  假(0

             不会执行大括号中的语句


   例一:猜数字游戏,输入一个数字,判断是不是5?如果是5打印“恭喜你”,如果不是5打印“很可惜”。

    代码如下:

    #include <stdio.h>

<pre name="code" class="cpp">    int main(int argc, const char * argv[]) {

    //先定义变量

    int num=0;

    //提示用户输入一个数

    printf("请输入一个数字:\n");

    //接收用户输入的数

    scanf("%d",&num);

    //判断这个数是否等于5

    if (num == 5) {

        printf("恭喜你!\n");

    }

    //如果等于5    提示    恭喜你

    printf("num =%d\n",num);

    //如果不等于 5   提示很可惜

    if (num != 5) {

        printf("很可惜!\n");

    }

    return 0;

    }
 

    2. if…else…语句及嵌套

    格式一(无嵌套):

  

  if ... else .... 的分支结构

      if(表达式){

        语句块1;

        //如果表达式为真,会执行此处的代码

      }else{

        //如果表达式为假了,会执行此处的代码

        语句块2;

   }

    格式二(嵌套)

  if ... else .... 的分支结构

      if(表达式){

        语句块1;

        //如果表达式为真,会执行此处的代码

      }else{

        //如果表达式为假了,会执行此处的代码

        语句块2;

  }

    例一的改进:

  void test(){

    int num=0;    //先定义变量

    printf("请输入一个数字:\n");   //提示用户输入一个数

    scanf("%d",&num);         //接收用户输入的数

    //判断这个数是否等于5

    // num == 5 为假可能是大于5,也可能是小于5

    if (num == 5) {

      

        printf("恭喜你!\n");  //如果等于了5,提示恭喜你

    }else{

       

        printf("很可惜!\n");   //否则提示很可惜

    }

  }

  int main(int argc, const char * argv[]) {

    //先定义变量

    int num=0;

   

    //提示用户输入一个数

    printf("请输入一个数字:\n");

    //接收用户输入的数

   scanf("%d",&num);

    //判断这个数是否等于5

    // num == 5 为假可能是大于5,也可能是小于5

    if (num == 5) {

        printf("恭喜你\n");

    }else{

        //再判断,如果这个数大于5 提示大于5

        if (num > 5) {

            printf("大于5了\n");

        }else{

            //否则提示  小于5

            printf("小于5了\n");

        }

    }

    return 0;

  }

    例二:输入一个属于0-100的成绩,按0-59(E),60-69(D),70-79(C),80-89(B),90-100(A) 分成几等。

     条件:

     分数>=0&&分数<=59   E

     分数>=60&&分数<=69  D

     分数>=70&&分数<=79    C

     分数>=80&&分数<=89    B

     分数>=90&&分数<=100   A

     分数<0||分数>100      不合法

  

    代码如下:

  #include <stdio.h>

  int main(int argc, const char * argv[]) {

    //定义变量,保存用户输入的分数

    int score=0;

    //提示用户输入一个分数

    printf("请输入一个分数:\n");

    //接收分数

   scanf("%d",&score);

    //校验分数是否合法(score<0||score>100)

   if (score<0 || score > 100) {

        printf("分数不合法!\n");

    }else{

        //当分数合法以后,再判断等级

        if (score<=59) {  //0-59 想反 60-100

           printf("E\n");

        }elseif(score<=69){  //60-69     70-100

           printf("D\n");

        }else if (score<=79){//70-79     80-100

            //C

           printf("C\n");

        }else if(score<=89){//80-89      90-100

            //B

           printf("B\n");

        }else{                          //90-100

           printf("A\n");

        }

    }

    return 0;

  }


    3. Switch语句

     格式:

   switch(表达式){

      case 常量表达式1: 语句1;

      case 常量表达式2: 语句2;

      case 常量表达式3: 语句3;

      case 常量表达式4: 语句4;

      case 常量表达式5: 语句5;

      case 常量表达式6: 语句6;

      default:

           printf("其他");

   }

    例三:接受用户输入,控制台打印菜名

    代码如下:

  #include <stdio.h>

  int main(int argc, const char * argv[]) {

    //提示用户点菜,1-7

    printf("本店开张,请点菜,请输入序号1-7\n");

    //定义变量,接收用户输入的内容

    int no;

    //接收用户输入的内容

    scanf("%d",&no);

    if (no<1 || no > 7) {

        printf("本店厨师还在写代码,还没时间更新菜谱\n");

        return 0;

    }

    //判断(switch)

    // 1 2 3 4 5

    switch(no){

        case 1: printf("玉米炒葡萄\n");

        case 2: printf("月饼炒辣椒\n");

        case 3: printf("爆炒妙脆角\n");

        case 4: printf("番茄炒卤蛋\n");

        case 5: printf("南瓜炒猪肝\n");

        case 6: printf("苹果炒西瓜\n");

        case 7: printf("天地无极\n");

    }

    return 0;

  }

    当输入结果4的时候,结果如下:

  本店开张,请点菜,请输入序号1-7

  4

  番茄炒卤蛋

  南瓜炒猪肝

  苹果炒西瓜

  天地无极

    很明显不是我们想要的结果,那么问题出在哪里呢?首先我们了解一个概念:case穿透

    某个case语句执行完成后,并没有结束,而直接向下执行其他的case语句这种现象就称之为case穿透

    如何防止case穿透?

    我们需要在每一个case语句结束之后,加上一句话:break; break  作用是结束switch语句。

    例四:switch语句与if语句混合使用案例:实现简单的计算器

    代码如下:

  #include <stdio.h>

  int main(int argc, const char * argv[]) {

    //定义变量保存用户输入的两个值  运算结果  输入的符号

    int num1,num2,op;

    float result=0.0f;

    //提示用户输入一个数

    printf("请输入第一个数:\n");

    //接收用户输入的第一个数

   scanf("%d",&num1);

    //提示输入运算符,然后在接收

    printf("请选择运算符:0.+  1.- 2.*  3./\n");

    //提示输入运算符,然后在接收

    scanf("%d",&op);

    if (op<0 || op >3) {

        printf("运算符不合法\n");

        return 0;

    }

    //提示输入另外一个数,然后再接收

    printf("请输入另外一个数:\n");

    //接收用户输入的第一个数

   scanf("%d",&num2);

    //开始计算

    //判断符号,进行计算

    switch (op) {

        case 0:

            result = num1+num2;

            break;

        case 1:

            result = num1-num2;

            break;

        case 2:

            result = num1*num2;

            break;

        case 3:

            result =num1/(float)num2;

    }

    printf("%d 和 %d运算的结果%.2f\n",num1,num2,result);

    return 0;

  }

三 循环结构

    循环结构是程序中一种很重要的结构,其特点是,在给定条件成立是,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序称为循环体。循环结构简单来说就是:循环一次又一次的执行相同的代码块

    1. While循环

    格式:

  while(表达式) {

     语句块;
  }


   例五 计算1+2+3+.....+100 的和

   代码如下:

  void test2(){

    //计算1+2+3+.....+100 的和

    //定义一个变量,存储当期执行的次数

    int i=1,sum=0;

    int n=0;

    //假设从键盘上输入一个数,计算1+2+3+....+n 的和

    printf("请输入一个数字:\n");

    //从键盘上接受一个数

    scanf("%d",&n);

    while (i<=n) {

        //用sum的值+i的值

        sum = sum+i;   //i = 1 sum = 1

        //0+1,   (0+1)+2

        //让循环条件为假的控制

        //        i=i+1;

        i++;

    }

   printf("1+2+3+....+%d=%d\n",n,sum);

  }

  int main(int argc, const char * argv[]) {

    test2();

    return 0;

  }

    使用循环的过程中一定要注意防止死循环的出现。

    2. do-while循环

    语法格式:

    

  do{

   //循环体

  }while(条件);

    注意点: do-while语句之后要有分号结束

    例六   //1+2+3+....+100

    代码如下:

  #include <stdio.h>

  int main(int argc, const char * argv[]) {

    int i=1,sum=0;

    do{

        //累加: 在上一次结果之上再加上某一个值

        sum+=i;

        i++;

    }while (i<=100);

    printf("sum =%d\n",sum);

    return 0;

  }

    关于while和do while对比

         1)当循环控制条件第一次判断不为假的时候while dowhile循环体执行的次数相同;

         2)当循环控制条件第一次判断为假的时候while循环的循环体执行 0次,do while执行1次;

     3. For循环

     for循环使用的频率是比较高的,接下来我们就用一个实际例子来对for循环做详细介绍。

     for循环实现打印 1000次我爱你

    构成循环有三个条件

        1)控制条件 i<1000

        2)循环体   printf("%d次说:我爱你!\n",i+1);

        3) 能够让控制条件为假的操作  i++

    注意

        1、初始化语句只会被执行1

        2、当条件不满足的时候,循环就结束

    代码如下:

  for(int i=0;i<1000;i++){

        printf("第%d次说:我爱你!\n",i+1);

    }

    如果控制条件没有定义的话,就有可能构成死循环,部分代码块如下:

    //for语句的死循环

   

  for(;;){

        printf("班长喜欢凤姐!\n");

    }

    printf("\n");


    例七  for循环的嵌套使用。打印以下图形

             *

             ***

            *****

           *******

         *********

         ***********

    代码如下:

  #include <stdio.h>

  int main(int argc, const char *argv[]) {

    //控制行数

    for (int i=1; i<=6; i++) {

      //控制空白

        for (int j=0; j<=6-i; j++) {

            printf(" ");

        }

      //控制 *

        for (int k=0; k<2*i-1; k++) {

            printf("*");

        }

      //打印回车

        printf("\n");

    }

    return 0;

  }

    4. break和continue的区别

     首先来看一个例子,根据这个例子找出break和continue的区别所在。

     例八  把100~200之间的不能被3整除的数输出

  #include <stdio.h>

  int main(int argc, constchar * argv[]) {

    //把100~200之间的不能被3整除的数输出

    // i%3!=0

    // i%3==0 continue;

    for (int i=100; i<=200; i++) {

        if (i%3==0) continue;

        printf("%d\t",i);

    }

    printf("\n");

    return 0;

  }

    运行结果为:

  100	101	103	104	106	107	109	110	112	113	
  115	116	118	119	121	122	124	125	127	128
  130	131	133	134	136	137	139	140	142	143
  145	146	148	149	151	152	154	155	157	158
  160	161	163	164	166	167	169	170	172	173	
  175	176	178	179	181	182	184	185	187	188	
  190	191	193	194	196	197	199	200	

    如果将例题中的continue换成break,那么运行结果为:

  100	101	
 

    由此可见breakcontinue的区别是:break用于跳出当前的循环(结束当前的循环),continue 作用,结束本次循环的剩余的语句,继续下一次循环。


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值