【黄色手套22】3话:选择分支与循环

目录

if语句

switch语句

循环结构

for循环

while循环

do__while循环

循环的嵌套

跳转语句

补充


选择结构:if语句和switch语句

if语句的三种形式

cpp 复制代码
if(表达式)语句1;        // 单独的一个if语句
cpp 复制代码
if(表达式1)语句1;

else 语句2;        // if 和else组合
cpp 复制代码
if(表达式1)语句1;

else if(表达式2)语句2;

else if (表达式3)语句3;

....

else 语句n;        // if和else嵌套

■. if和else默认只控制在它之后离它最近的一条语句

如果一个if或者else要控制多条语句,那么这些多条语句需要复合语句 {} 括起来,整体作为一条语句来控制。

■. else总是与在它之前第一个没有配对的if配对,并且一个else只能和一个if配对。

else不能单独存在。

switch语句

一般形式:

cpp 复制代码
switch(判断条件)
{
        case 常量1:语句1;
        case 常量2:语句2;
        case 常量3;语句3;
        ......
        case 常量n:语句n;
        default: 语句n+1;
}        //switch......case 多分支结构

■. 判断switch之后括号中表达式的值,

如果等于哪个case之后的值就执行那个case之后的语句(包括default语句)。

default语句可与case语句交换位置也就是改变他们的先后位置,只是可能会影响操作结果而已

■. case之后的条件(括号里的)只能是整型常量表达式,不能是小数、变量,也不能造成重复。

■. break跳转语句,用于跳出switch结构或者循环结构

例如

cpp 复制代码
case 常量3 :语句3;
         break;

■. 语句可以为空

例如

cpp 复制代码
 case10:
 case 9:printf("A\n");        //"合并",即两个case共用语句
     break;

■. dafault语句可以省略,不影响switch结构操作运行。


循环结构

for循环

while循环

do__whlie循环

for循环

cpp 复制代码
for(表达式1; 表达式2 ; 表达式3)
{
         循环体
}

■. 表达式1:条件初始化

表达式2:循环继续的条件

表达式3:改变循环条件里的变量值

■. 分号必不可少,有且只有两个。

■. for(;;)

类似这样的可以进行无数次循环的,称为死循环或无限循环

3个表达式相互独立,可各自为空

例如

cpp 复制代码
for (int i=0;;i++)
{
     printf("%d\n", i++);
}        //输出0、2、4、6、8、10.....................

while循环

cpp 复制代码
while(表达式)
{
        循环体
}                ​​​​​​​//不需要分号

■. while之后的括号里必须给定条件,不能为空。

■. 表达式非0为真,为死循环

例一

cpp 复制代码
int i=0;
while(1)
{
    printf("%d\n",i++);
}

例二

cpp 复制代码
int i = 0;
for (;;)
{
    printf("%d\n", i++);
    if (i >= 10)             //    if判断条件执行break跳出循环
        break;
}

■. 例如:给学生成绩打相应的等级

cpp 复制代码
int score = 0;
int j = 0;
while (j <5) //重复判断5个同学的成绩等级                        
{
    scanf("%d", &score);
if (score<0 || score>100)
{
    printf("请重新输入正确数据\n");
    continue;
}
switch (score / 10)
{
    case 10:
    case 9:
        printf("A\n");
        break;
    case 8:
        printf("B\n");
        break;
     case 7:
     case 6:
        printf("C\n");
        break;
    default:
        printf("D\n");
    }
    j++;
}

do__while循环

cpp 复制代码
do
{
    循环体;
}while(表达式);

■. while(表达式)

分号是结构的一部分,不可少。

■. do__while循环:先执行循环体,在判断条件。(至少会执行一次循环体)

for循环和while循环:先判断条件,若为真则进入循环,不然不执行循环。


循环的嵌套

循环中有循环(套娃)

执行规则:外层循环执行一轮,

内层循环需要整个循环完毕,

如此循环下去直至满足特定条件退出循环。

例如:

输出下面的图案

******

****** // 用for的嵌套循环结构

******

cpp 复制代码
for (int i=0;i<3;i++)          //   外层循环决定输出多少行
{
      for(int j=0;j<6;j++)  //   内层循环决定每一行输出多少个*号
      {
             printf("*");
      }
      printf("\n");            // 内层循环整个执行完毕后换行  
}

跳转语句

break语句

continue语句

goto语句

■. **break语句:**只适用于switch结构和循环结构

跳出并结束整个循环,循环不再继续

跳出一个离它最近的循环或switch结构。

若if_else条件判断结构包含在上述结构的循环体中,则可以在if_else循环体内加入break语句进行使用

例如:

输出一下图案:

******

******

cpp 复制代码
for (int i = 0; i<3; i++)
{
    for (int j = 0; j < 6;j++)
    {
        if (i == 1)
            break;   // 这里若用continue,在此循环结构中的输出效果相同
            else
            printf("*");
    }
    printf("\n");
}

■. **continue语句:**只适用于循环语句

跳出本次循环,继续执行下次循环。

即不再执行本次循环中continue语句后的语句

continue语句在if__else条件判断结构和switch多分支结构中也可以使用

前提是两者都在循环结构的循环体内

■. goto语句:跳转到指定的位置​​​​​​​

cpp 复制代码
标记:

.......

goto 标记;       //执行goto语句后,会跳转到标记的指定位置

cpp 复制代码
goto 标记;    //先后顺序不同,程序运行时操作效果会不同

......

标记:

■. goto语句可以方便有效的跳出多层循环

例一

cpp 复制代码
for (int i = 0;; i++)
{
    printf("%d\n", i++);
    if (i >= 10)goto end;    //跳出该程序所存在的一层循环
}
end:                         //输出0、2、4、6、8、10

例二

cpp 复制代码
for (int i = 0; i<3; i++)
{
    for (int j = 0; j < 6; j++)
    {
        if (i == 1)
            goto end;          //跳出两层循环
         else
            printf("*");
    }
    printf("\n");
 }
 end:                         //输出一行******图案

例三

cpp 复制代码
int i = 0;
for (;;)
{
    while (1)
    {
        do
        {
            printf("%d\n", i++);
            if (i >= 10)goto end;       //可以方便有效的跳出多层死循环
        } while (1);
    }
}
end:                          //输出结果 0、1、2、3、4、5、6、7、8、9

■. goto语句一般用于多层嵌套循环结构的跳出


3.1补充:

■. 空循环

for循环后面直接加分号(不使用大括号)

例如:

for(int i=0;i<=500000000;i++);

系统内部运行5亿次循环然后执行下一条语句。(让程序"发呆"一下)

■. 单独if语句里可以用return 0;语句来实现相应的功能(退出)。

相关推荐
陌小呆^O^几秒前
Cmakelist.txt之win-c-udp-server
c语言·开发语言·udp
时光の尘22 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
-一杯为品-31 分钟前
【51单片机】程序实验5&6.独立按键-矩阵按键
c语言·笔记·学习·51单片机·硬件工程
爱摸鱼的孔乙己1 小时前
【数据结构】链表(leetcode)
c语言·数据结构·c++·链表·csdn
Dola_Pan1 小时前
C语言:数组转换指针的时机
c语言·开发语言·算法
IU宝2 小时前
C/C++内存管理
java·c语言·c++
qq_459730032 小时前
C 语言面向对象
c语言·开发语言
陌小呆^O^3 小时前
Cmakelist.txt之win-c-udp-client
c语言·开发语言·udp
qystca6 小时前
洛谷 B3637 最长上升子序列 C语言 记忆化搜索->‘正序‘dp
c语言·开发语言·算法
网易独家音乐人Mike Zhou11 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot