C语言 循环语言

20 篇文章 0 订阅
10 篇文章 0 订阅

# 流程控制基本概念

##1.什么是程序结构

- 结构化程序设计(structuredprogramming)是进行以模块功能和处理过程设计为主的详细设计的基本原则。

- 其概念最早由E.W.Dijikstra在1965年提出的,是软件发展的一个重要的里程碑。它的主要观点是采用自顶向下、逐步求精及模块化的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。结构化程序设计主要强调的是程序的易读性。

    +[点我了解更多](http://baike.baidu.com/link?url=Btsz1Mb-YAYHjAB3EgCauPRoPRmZtDjTdmPSR0eDwJGwlKm7TASMRqgRBfYeXGwuPlDsT9y-t_G7L2_DtiHdca)

##2.程序结构分类

- 默认情况下,程序的运行流程是这样的:运行程序后,系统会按书写从上至下顺序执行程序中的每一行代码, 但是这并不能满足我们所有的开发需求

- 为了方便我们控制程序的运行流程,C语言提供3种流程结构,不同的流程结构可以实现不同的运行流程。这3种流程结构分别是顺序、选择、循环三种基本控制结构构造.

    +顺序结构:默认的流程结构。按照书写顺序从上至下执行每一条语句。

   + (http://7xj0kx.com1.z0.glb.clouddn.com/Snip20150514_1.png)

   + (http://7xj0kx.com1.z0.glb.clouddn.com/911.png)

    +选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码。

    +![](http://7xj0kx.com1.z0.glb.clouddn.com/Snip20150514_2.png)

    +![](http://7xj0kx.com1.z0.glb.clouddn.com/933.png)

+ 循环结构:在给定条件成立的情况下,反复执行某一段代码。

 

# switch-case语句穿透问题

##1.case的穿透问题

- switch里面的case只要匹配一次其它的都失效,包括default. 正是因为switch的这个特性, 所以可能导致程序出现逻辑错误

- 为了避免上述情况,C语言还提供了一种break语句,专用于跳出switch语句,break语句只有关键字break,没有参数。

    +在每一个case语句之后增加 break 语句, 使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果

    +有时候也可用巧妙的利用case的穿透问题来简化代码

- 示例

   int num;

   printf("输入一个1-7之间的数: ");

   scanf("%d",&num);

   switch (num){

       case 1:

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

       //    break;

       case 2:

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

       //    break;

       case 3:

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

       //    break;

       case 4:

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

       //    break;

       case 5:

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

       //    break;

       case 6:

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

       //    break;

       case 7:

           printf("天地无极\n");

       //    break;

       default:

           printf("error\n");

        //   break;

    }

输入1之后的输出结果:

玉米炒葡萄

月饼炒辣椒

爆炒妙脆角

番茄炒卤蛋

南瓜炒猪肝

苹果炒西瓜

天地无极

error

 

# switch-使用注意事项

##1.switch条件类型

- 表达式的类型(case语句后的值)必须是整型或可以转变为整型的值 (byte、short、char和int类型)。

 switch (10.10){ // 报错

       case 1:

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

           break;

       default:

           printf("error\n");

           break;

    }

##2.case值的规定

- case的值必须是是整型或可以转变为整型的值

 switch (10){

       case 1:

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

           break;

       case 'a': // 字符可以转换为整型

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

           break;

       case 10.8: // 报错

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

           break;

       default:

           printf("error\n");

           break;

    }

- case的值1、值2...值n只能为常数或常量,不能为变量。

 intnum = 5;

 switch (10){

       case num: // 变量报错

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

           break;

       default:

           printf("error\n");

           break;

    }

- 如果在case后面定义的变量必须加上大括号

 switch (10){

       case num:{

           int num = 5;

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

           break;

       }

       default:

           printf("error\n");

           break;

    }

- switch中case后面的表达式的值不能相同

 switch (10){

       case 1:

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

           break;

       case 1: // 和上面相同报错

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

           break;

       default:

           printf("error\n");

           break;

    }

- case语句可以有任意多句,可以不用加括号“{}”

switch (10){

       case 1:

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

           printf("玉米炒葡萄2\n");

           break;

       default:

           printf("error\n");

           break;

    }

`##3.default的位置问题

- default可以省略

 switch (10){

       case 1:

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

           break;

    }

- default语句可以写在switch语句中的任意位置

 switch (10){

       default:

           printf("error\n");

           break;

       case 1:

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

           break;

    }

+ 执行流程:在执行的过程中,如果遇到break语句,则跳出switch语句。如果没有遇到break语句,则一直执行到switch语句的结束。

 

# if语句和switch语句转换

##1.if语句和switch语句转换

- 利用if实现

    要求用户输入一个分数,根据输入的分数输出对应的等级

    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

//   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;

    }

##2.if语句和switch语句选择

- 分支比较多且无法穷尽或进行大量列举时最好用if

- 如果分支数量不是很多,但是使用if代码代码量比较大的时候,可以选用switch

- 判断用户输入的数是否大于100:

    +if实现

   int a = -1;

   scanf("%d", &a);

   if (a > 100) {

       printf("大于\n");

    }

+ switch实现

//不好实现,但也可以实现

#include <stdio.h>

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

    int a ;

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

    scanf("%d",&a);

    switch (a/10) {

        case 0:

        case 1:

        case 2:

        case 3:

        case 4:

        case 5:

        case 6:

        case 7:

        case 8:

        case 9:

            printf("小于100\n");

            break;

        default:

            printf("大于100\n");

            break;

    }

    return 0;

}

# zz循环基本概念

##1.循环结构概述

- 循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段, 直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。

- 循环结构简单来说就是:循环是一次又一次的执行相同的代码块

- 显示生活中的循环

- C语言提供了多种循环语句,可以组成各种不同形式的循环结构:

    + goto语句和if语句构成循环;

    + while语句;

    + do-while语句;

    + for语句;

##构成循环结构的几个条件

- 一般来说一个循环需要以下几部分构成:

    + 循环控制条件

        * 循环退出的主要依据,来控制循环到底什么时候退出

    + 循环体

        * 循环的过程中重复执行的代码段

    + 能够让循环结束的语句(递增、递减、真、假等)

        * 能够让循环条件为假的依据,否则退出循环

# while循环注意点

##1.while循环的陷阱

- 任何数值都有真假性

    while (1) {//死循环

        printf("123\n");

    }

    printf("123\n"); // 永远执行不到

- 当一个变量与一个常量进行==或 != 的时候,通常把常量写在前面

    int num = 3;

    while (3 == num) {

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

        num++;

    }

- while 后如果只有一条语句它可以省略大括号

    + 空语句它也是一条语句

    + while小括号后面不可以直接写分号

    // while省略大括号的时候条件满足就会执行while后面的第一条语句

    while (0)

       printf("123\n");

    printf("456\n");

- 作用域问题

    while (1) {

        int a = 10;

    }

    printf("a = %d\n", a); // 访问不到

    while (0)

        int a = 10; // 作用域混乱

     printf("a = %d\n", a);//出错

- 分号问题

    while (1);//空语句

    {

        printf("123\n");

    }

- 最简单的死循环

    while (1);

# while练习

##1.提示用户输入一个正整数n, 计算1 + 2 + 3 + ...n的和

分析:  每次都是用上一次的和 加上一个递增的数

     1 +2 + 3 + 4 + 5

 ( 0 + 1)1 + 2

      (1 + 2)3 + 3

     (1 + 2 + 3) 6 + 4

     (1 + 2 + 3 + 4) 10 + 5

  //   1.定义变量保存上一次的和

    int sum = 0;

//    2.定义变量保存递增的数

    int number = 0;

    while (number <= 5) {

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

       sum = sum + number;

       number++;

    }

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

实现步骤:

//    1.提示用户输入一个正整数

//    2.定义变量保存用户输入的正整数

//    3.接收用户输入的正整数

//    4.判断用户输入是否合法

//    5.计算结果

//    5.1.定义变量保存上一次的结果

//    5.2.定义变量保存递增的数

//    5.3.利用循环重复执行求和加上递增数

//    6.输出最后的结果

- 累加思想

    + 原理:通过循环的形式进行累加操作,定义变量记录每次变化后的结果

##2.获取1~100之间 7的倍数的个数并打印,并统计个数

分析:

要获取1~100之间7的倍数,应该取出1~100之间的每一个值进行判断,满足就输出并统计

实现:

    int count = 1;

    int nubmer = 0;

    while (count <= 100) {

        if (count % 7 == 0) {

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

            nubmer++;//计数器

        }

        count++;

    }

    printf("number = %d\n", nubmer);

- 计数器:

    + 原理:通过循环的形式进行计数操作,通过变量记录每次变化的值

    + 应用场景:当以后要求在什么什么中里面有多少个什么的时候,立刻想到计数器思想

# for循环基本概念

##1.for循环语法格式

- C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。

for(初始化表达式;循环条件表达式;循环后的操作表达式)

{

         执行语句;

}

##2.for循环执行流程

-  for循环开始时,会先执行初始化表达式,而且在整个循环过程中只执行一次初始化表达式

- 接着判断循环条件表达式,如果条件成立,就会执行循环体中的语句(“循环体”就是for后面大括号{}中的内容)

- 循环体执行完毕后,接下来会执行循环后的操作表达式,然后再次判断条件,重复上述过程,直到条件不成立就结束for循环

 

# for循环的其他形式

##1.for循环的其他形式

- 表达式省略(三个表达式都可以省略)

    + 如:for(; ;) 语句相当于while(1)语句,即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。无终止地执行循环体。

- 循环控制无关的任意表达式

    + 表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。

for(sum=0,i=1;i<=100;i++)sum=sum+i;

for(i=0,j=100;i<=j;i++,j--)k=i+j;

// 表达式1和表达式3都是逗号表达式,各包含两个赋值表达式,即同时设两个初值,使两个变量增值.

在逗号表达式内按从左至右顺序求解,整个逗号表达 式的值为其中最右边的表达式的值

for(i=1;i<=100;i++,i++)sum=sum+i;

相当于

for(i=1;i<=100;i=i+2)sum=sum+i;

##2.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

- 一般情况下while和for可以互换, 但是如果循环执行完毕之后就不需要使用用于控制循环的增量, 那么用for更好

 

# break关键字

##1.break关键字

- 使用场合:

    + switch

    + 循环结构

- 注意:

    + **break离开应用范围,存在是没有意义的。**

if(1)

{

    break; // 没有意义

}

    + **在多层循环中,一个break语句只向外跳一层**

while(1)

{

    while(2)

    {

        break;// 只对while2有效, 不会影响while1

    }

}

>+ 在1990年,AT&T(美国电话电报公司)的电话系统的很长一段瘫痪了,造成60,000人,不能打电话也不能接电话,原因是什么呢?一个使用C语言的程序员,试图使用break来跳出if语句,但是break不是跳出if语句而是跳出整个循环;解决这个bug,让7千万次通话收到干扰,花费超过9个小时。

    + break下面不可以有语句,因为执行不到。

while(2)

{

    break;

    printf("打我啊!");// 执行不到

}

 

# continue关键字

##1.continue关键字

- continue语句的作用是跳过循环体中剩余的语句而继续下一次

- 使用场合:

    + 循环结构

- 练习: 把100~200之间的不能被3整除的数输出

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

{

    if(i %3 == 0) continue;

    printf("i = %d", i);

}

# dowhile循环基本概念

##1.do-while循环语法格式

do {

     语句1;

     语句2;

    ....

 }while ( 条件 );

##2.do-while循环执行流程

- do-while语句语义:

    +当执行到do-while循环时,首先会执行一遍循环体中的语句(“循环体”就是do后面大括号{}中的内容)。接着判断while中的条件,如果条件成立,就执行循环体中的语句。然后再次判断条件,重复上述过程,直到条件不成立就结束while循环

- while循环特点:

    +**do-while循环的特点:不管while中的条件是否成立,循环体中的语句至少会被执行一遍**

- 使用场景

+ 口令校验

 

# do-while和while对比

##1.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

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值