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

来源:互联网 发布:淘宝卖家折扣出错 编辑:程序博客网 时间:2024/06/04 23:23


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

程序结构的分类

  程序结构分为三类:
    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;  }

    运行结果为:

  100101103104106107109110112113  115116118119121122124125127128  130131133134136137139140142143  145146148149151152154155157158  160161163164166167169170172173  175176178179181182184185187188  190191193194196197199200

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

  100101
 

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


0 0
原创粉丝点击