第四天学习笔记

来源:互联网 发布:天刀女性明星捏脸数据 编辑:程序博客网 时间:2024/04/30 20:31

选择结构-Switch基本概念

计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表 达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

格式

switch(表达式)
{
case 常量表达式1:
语句1;
break;
case 常量表达式2:
语句2; …
break;
case 常量表达式n:
语句n;
break;
default:
语句n+1;
break;
}

Switch注意点

1.case的穿透问题

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

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

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

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

2.switch条件类型

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

 switch (10.10){ // 报错        case 1:            printf("12345\n");            break;        default:            printf("error\n");            break;    }

3.case值的规定

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

 switch (10){        case 1:            printf("12345\n");            break;        case 'a': // 字符可以转换为整型            printf("12345\n");            break;        case 10.8: // 报错            printf("12345\n");            break;        default:            printf("error\n");            break;    }

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

 int num = 5; switch (10){        case num: // 变量报错            printf("12345\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("12345\n");            break;        case 1: // 和上面相同报错            printf("12345\n");            break;        default:            printf("error\n");            break;    }

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

 switch (10){        case 1:            printf("123\n");            printf("123\n");            break;        default:            printf("error\n");            break;    }

4.default的位置问题

default可以省略

 switch (10){        case 1:            printf("123\n");            break;    }

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

 switch (10){        default:            printf("error\n");            break;        case 1:            printf("123\n");            break;    }

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

if语句和switch语句选择

分支比较多且无法穷尽或进行大量列举 时最好用if, Switch对遇见判断非常不利

如果数据量不是很大, 并且数据是固定的可以用Switch

理论上Switch的效率比if高


循环结构概述

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

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

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

goto语句和if语句构成循环;
while语句;
do-while语句;
for语句;

构成循环结构的几个条件

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

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

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

能够让循环结束的语句(递增、递减、真、假等):能够让循环条件为假的依据,否则退出循环

1.while循环语法格式

while ( 条件 ) {     语句1;     语句2;     .... }

2.while循环执行流程

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

while循环特点:
如果while中的条件一开始就不成立,那么循环体中的语句永远不会被执行


while循环注意点

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

注意点

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

1.do-while循环语法格式

 do {     语句1;     语句2;     .... } while ( 条件 );

2.do-while循环执行流程

do-while语句语义:

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

while循环特点:

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

使用场景
+ 口令校验

1.for循环语法格式

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

for(初始化表达式;循环条件表达式;循环后的操作表达式){    执行语句;}

2.for循环执行流程

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

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

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

for循环的其他形式

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

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

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

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

什么情况下用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更好

for循环的嵌套

循环语句的循环体中存在其他的循环语句就是循环嵌套,称之为循环嵌套

注意: 一般循环嵌套不超过三层

外循环执行的次数 * 内循环执行的次数就是总共执行的次数

  • 格式:
while(条件表达式) {    while((条件表达式)     {        语句;        ...     } }
for (;;) {     for (;;)     {         for (;;)         {             for (;;)             {             }         }     } }
for (;;) {     while((条件表达式)     {         语句;         ...     } }
    while((条件表达式)     {        for (;;)        {            语句;            ...        }    }
0 0