首页 > 其他分享 >三、 分支和循环

三、 分支和循环

时间:2024-04-09 17:58:05浏览次数:18  
标签:语句 迭代 代码 break while 循环 分支

目录

1. if 语句

2. 关系操作符

3. 条件操作符

4. 逻辑操作符

5. switch 语句

6. while 循环

7. for 循环

8. do-while 循环

9. break和continue语句

10. 循环的嵌套

11. goto语句

1. if 语句

在C语言中,"if"语句的基本结构也是类似的,但是没有像Python那样的缩进来表示代码块的范围,而是使用花括号 {} 来标记代码块。

基本的C语言中的"if"语句结构如下:

if (condition) {
    // 如果条件为真,则执行这里的代码块
} else {
    // 如果条件为假,则执行这里的代码块
}

在这个结构中,condition 是一个条件表达式,如果它为真,则执行花括号内的第一个代码块;否则,执行**else**语句后面的花括号内的代码块。

2. 关系操作符

关系操作符(Relational Operators)是编程中用于比较两个值之间关系的运算符。这些操作符通常用于条件语句(如"if"语句)或表达式中,以确定是否满足特定条件。

在大多数编程语言中,常见的关系操作符包括:

  1. 等于(Equal to):
    • 表示为 ==,用于检查两个值是否相等。
  2. 不等于(Not equal to):
    • 表示为 !=,用于检查两个值是否不相等。
  3. 大于(Greater than):
    • 表示为 >,用于检查一个值是否大于另一个值。
  4. 小于(Less than):
    • 表示为 <,用于检查一个值是否小于另一个值。
  5. 大于等于(Greater than or equal to):
    • 表示为 >=,用于检查一个值是否大于或等于另一个值。
  6. 小于等于(Less than or equal to):
    • 表示为 <=,用于检查一个值是否小于或等于另一个值。

这些关系操作符通常用于比较数值类型(如整数、浮点数)或字符类型的数据。它们返回的结果通常是布尔值(真或假),用于控制程序的流程或决定表达式的结果。

3. 条件操作符

条件操作符(Conditional Operator),也称为三元运算符,是一种在大多数编程语言中可用的简洁的条件表达式。它允许在单行代码中根据条件选择两个不同的值。

条件操作符的基本语法如下:

condition ? value_if_true : value_if_false

在这个结构中,condition 是一个布尔表达式,如果它为真,则返回 value_if_true;否则返回 value_if_false

4. 逻辑操作符

逻辑操作符(Logical Operators)用于组合和改变布尔值的逻辑关系。常见的逻辑操作符包括:

  1. 与(AND):
    • 表示为 &&,当且仅当两个操作数都为真时结果为真,否则为假。
  2. 或(OR):
    • 表示为 ||,当至少一个操作数为真时结果为真,如果两个操作数都为假,则结果为假。
  3. 非(NOT):
    • 表示为 !,用于取反操作数的值,即如果操作数为真,则结果为假;如果操作数为假,则结果为真。

这些逻辑操作符通常用于布尔表达式中,以便在程序中执行条件化的逻辑操作。

举例来说,在C语言中,你可以使用逻辑操作符来组合布尔表达式:

#include <stdio.h>int main() {
    int x = 5, y = 10, z = 15;

    // 如果 x 大于 0 并且 y 大于 0,则输出 "x 和 y 都是正数"
    if (x > 0 && y > 0) {
        printf("x 和 y 都是正数\\n");
    }

    // 如果 x 大于 0 或者 z 大于 0,则输出 "x 或者 z 至少有一个是正数"
    if (x > 0 || z > 0) {
        printf("x 或者 z 至少有一个是正数\\n");
    }

    // 如果 y 不等于 0,则输出 "y 不是零"
    if (! (y == 0)) {
        printf("y 不是零\\n");
    }

    return 0;
}

这段代码会输出:

x 和 y 都是正数
x 或者 z 至少有一个是正数
y 不是零

因为 xy 都是正数,x 或者 z 至少有一个是正数,以及 y 不是零。

5. switch 语句

**switch语句是一种流程控制语句,用于根据一个表达式的值在多个可能的情况中选择执行不同的代码块。它是一种比多个嵌套的if**语句更简洁的方法,特别适用于需要对同一个变量进行多重比较的情况。

**switch**语句通常的结构如下:

switch (expression) {
    case constant1:
        // 如果 expression 等于 constant1,则执行这里的代码
        break;
    case constant2:
        // 如果 expression 等于 constant2,则执行这里的代码
        break;
    // 可以有更多的 case 分支
    default:
        // 如果 expression 与任何 case 都不匹配,则执行这里的代码
}

在这个结构中,expression 是一个表达式,它的值会被逐个与**case后面的常量进行比较。如果expression的值等于某个case后面的常量值,则执行对应的代码块。break语句用于终止switch语句的执行,如果省略了break,则会继续执行下一个case中的代码块。default是可选的,用于指定当expression的值与任何case**都不匹配时要执行的代码块。

以下是一个示例,展示了如何使用**switch**语句根据星期几打印相应的名称:

#include <stdio.h>int main() {
    int day = 4;

    switch (day) {
        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("错误的日期\\n");
    }

    return 0;
}

在这个示例中,**day**的值是4,所以程序会输出"星期四"。

6. while 循环

**while循环是一种常见的迭代控制结构,它会重复执行一个代码块,直到给定的条件不再满足为止。while**循环在进入循环体之前会首先检查条件,如果条件为真,则执行循环体内的代码块;否则,退出循环。

**while**循环的基本语法如下:

while (condition) {
    // 循环体内的代码
    // 这部分代码会在每次循环迭代时执行
}

在这个结构中,condition 是一个布尔表达式,它决定了是否继续循环。只要**condition为真,循环体内的代码就会被执行,直到condition**为假时,循环结束。

以下是一个示例,展示了如何使用**while**循环来计算从1到10的整数之和:

#include <stdio.h>int main() {
    int sum = 0;
    int i = 1;

    while (i <= 10) {
        sum += i;
        i++;
    }

    printf("从1到10的整数之和为:%d\\n", sum);

    return 0;
}

在这个示例中,循环从**i的值为1开始,每次迭代将i加到sum中,然后递增i的值。循环继续进行,直到i**的值大于10时,循环结束。最终,程序会输出从1到10的整数之和。

7. for 循环

**for循环是一种常用的迭代控制结构,它允许你在一个有限的范围内重复执行代码块。for**循环通常用于遍历数组或执行已知次数的迭代操作。

**for**循环的基本语法如下:

for (initialization; condition; update) {
    // 循环体内的代码
    // 这部分代码会在每次循环迭代时执行
}

在这个结构中:

  • initialization 用于初始化循环控制变量,通常是一个赋值表达式,它只在循环开始时执行一次。
  • condition 是循环继续执行的条件,只要条件为真,循环就会继续执行;一旦条件为假,循环就会结束。
  • update 用于更新循环控制变量的值,在每次循环迭代结束时执行,通常是一个递增或递减操作。

以下是一个示例,展示了如何使用**for**循环来计算从1到10的整数之和:

#include <stdio.h>int main() {
    int sum = 0;

    // 循环从 i = 1 开始,每次循环递增 i,直到 i = 10 为止
    for (int i = 1; i <= 10; i++) {
        sum += i;
    }

    printf("从1到10的整数之和为:%d\\n", sum);

    return 0;
}

在这个示例中,**for循环在i的值从1逐渐增加到10的过程中,重复执行循环体内的代码块,将每个i的值加到sum**中。最终,程序会输出从1到10的整数之和。

8. do-while 循环

**do-while循环是一种迭代控制结构,类似于while循环,不同之处在于do-while**循环保证循环体至少执行一次,然后在每次迭代之前检查条件是否为真。

**do-while**循环的基本语法如下:

do {
    // 循环体内的代码
    // 这部分代码会在每次循环迭代时执行
} while (condition);

在这个结构中:

  • 循环体内的代码会在条件被检查之前至少执行一次。
  • condition 是一个布尔表达式,用于判断是否继续循环。如果条件为真,循环将继续执行;如果条件为假,则循环结束。

以下是一个示例,展示了如何使用**do-while**循环来提示用户输入密码,直到输入正确为止:

#include <stdio.h>#include <string.h>int main() {
    char password[] = "password123";
    char input[20];

    do {
        printf("请输入密码:");
        scanf("%s", input);
    } while (strcmp(password, input) != 0);

    printf("密码正确,登录成功!\\n");

    return 0;
}

在这个示例中,循环首先执行一次循环体,然后检查用户输入的密码是否正确。如果密码不正确,循环将继续提示用户输入密码,直到输入正确为止。

9. break和continue语句

breakcontinue是两种用于控制循环执行流程的关键字,通常用于forwhile、**do-while**等循环语句中。

  1. break语句:

    • **break语句用于跳出当前所在的循环,无论循环条件是否为真。一旦执行到break**语句,程序将立即跳出当前循环,并执行循环后面的代码。
    for (int i = 0; i < 10; i++) {
        if (i == 5) {
            break; // 当 i 等于 5 时跳出循环
        }
        printf("%d\\n", i);
    }
    

    在这个例子中,当**i的值等于5时,break**语句被执行,循环立即终止,不再继续执行后续的迭代。

  2. continue语句:

    • **continue语句用于跳过当前迭代中剩余的代码,立即开始下一次迭代。执行continue**语句后,循环条件会被重新检查。
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue; // 当 i 是偶数时跳过当前迭代
        }
        printf("%d\\n", i);
    }
    

    在这个例子中,如果**i是偶数,continue语句会导致程序跳过printf**语句,直接进行下一次迭代。因此,只有奇数会被打印出来。

**breakcontinue**语句通常与条件语句一起使用,以在循环中实现更灵活的控制流程。

10. 循环的嵌套

循环的嵌套是指在一个循环内部包含另一个或多个循环的情况。通过循环的嵌套,可以实现更复杂的迭代和控制流程。

循环的嵌套可以是任意级别的,也就是说,你可以在一个循环内部放置另一个循环,而内部的循环又可以包含其他循环,依此类推。

下面是一个简单的示例,展示了使用嵌套循环来打印一个九九乘法表:

#include <stdio.h>int main() {
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            printf("%d * %d = %d\\t", j, i, i * j);
        }
        printf("\\n");
    }
    return 0;
}

在这个示例中,外部的**for循环用于控制九九乘法表的行数,内部的for**循环用于控制每行中的列数。内部循环的迭代次数随着外部循环的迭代而增加,以形成九九乘法表的规律排列。

循环的嵌套可以让你处理更复杂的情况,例如在二维数组中进行搜索、处理图形或执行其他需要多层迭代的操作。但需要注意,过多的循环嵌套可能会使代码变得难以理解和维护,因此在设计时需要谨慎考虑。

11. goto语句

goto语句是一种在程序中实现无条件跳转的控制语句。使用goto语句,你可以直接跳转到程序中的指定标签(label)处执行代码。

goto语句的基本语法如下:

goto label;

label:
    // 这里是标签处的代码

在这个结构中,label是一个标签,它是一个标识符,后面紧跟着一个冒号 :goto语句会跳转到指定标签处执行代码。当程序执行到goto语句时,会直接跳转到对应的标签处执行代码,继续执行标签处的代码,直到遇到程序结束或另一个goto语句。

下面是一个简单的示例,展示了如何使用goto语句实现循环:

#include <stdio.h>
int main() {
    int i = 0;

loop:
    if (i < 5) {
        printf("%d ", i);
        i++;
        goto loop;
    }

    return 0;
}

在这个示例中,程序从标签loop处开始执行,如果i小于5,则输出i的值并递增i,然后跳转回标签loop处继续执行。这样就实现了一个简单的循环。

虽然goto语句在某些情况下可以提供便利,但它也容易导致代码变得难以理解和维护,因此应该避免滥用goto语句,尽量使用更结构化的控制语句来实现相同的功能。

标签:语句,迭代,代码,break,while,循环,分支
From: https://blog.csdn.net/weixin_69457878/article/details/137550219

相关文章

  • Spring深度学习:循环依赖及源码解析
    文章目录Spring深度学习:循环依赖及源码解析一、序言二、问题原因三、解决方案1.普通Bean对象循环依赖解决2.AOP代理场景下循环依赖解决3.AOP代理场景下多依赖解决四、源码分析:流程①:实例化对象A后,将对象A的工厂对象放入三级缓存流程②:对象A依赖对象B,在缓存中查找对象B流......
  • 【Shell】循环语句基础
    Shell循环循环语句Shell循环循环的定义for循环for循环的C语言格式while循环until循环循环的定义循环在编程中通常指循环结构。循环结构是编程中的一种控制结构,它允许代码在满足特定条件时重复执行一段特定的指令集合,这部分重复执行的代码被称为循环体。循环......
  • Linux架构28 ansible流程控制, 条件判断(主机,是否安装,系统版本), 循环语句(安装启动
    Ansible流程控制一、playbook条件语句不管是shell还是各大变成语言中,流程控制,条件判断这些都是必不可少的,在我们使用Ansible的过程中,条件判断的使用频率极其高。例如:1.我们使用不同的系统的时候,可以通过判断系统来对软件包进行安装。2.在nfs和rsync安装过程中,客户端服务器......
  • 【蓝桥·算法双周赛 第 4 场 小白入门赛】自助餐【算法赛】题解(分支+字符串)
    思路首先定义一个整型变量n和一个长整型变量ans,其中n用于存放输入的字符串个数,ans则用于累计所有字符串对应的价格。在接收到n之后,进入一个循环,在循环中,每次接收一个字符串s,并根据s的首字母判断该字符串对应的餐盘种类,并将其价格累加到ans中。具体来说,如果......
  • webrtc分支切换到m94 下载报错 FileNotFoundError: [Errno 2] No such file or direct
    FileNotFoundError:[Errno2]Nosuchfileordirectory:'vpython' 此问题翻遍整个网络,没有解决方案,希望能帮忙到需要的人 描述:      正常下载代码后,基于master(默认)编译通过,现需要切到m94分支(参考 Linux/Ubuntu编译WebRTC&libmediasoupclient_linuxg++......
  • 实验2_C语言分支与循环基础应用编程
    实验任务11#include<stdio.h>2#include<stdlib.h>3#include<time.h>45#defineN567intmain()8{9intnumber;10inti;1112srand(time(0));1314for(i=0;i<N;++i){15number=rand()%65+1;......
  • 实验2 C语言分支与循环基础应用编程
    task1.c问题一:生成1~65中的随机数问题二:随机生成5个本班学号task2.c1#include<stdio.h>2intmain()3{4charcolour;5printf("请输入交通信号灯的颜色:");6while((colour=getchar())!=EOF)7{8switch(colour)9......
  • GIT分支重命名
    主页个人微信公众号:密码应用技术实战个人博客园首页:https://www.cnblogs.com/informatics/引言你是否在用GIT管理代码或文档分支时,碰到以下问题:创建分支时,分支名搞错,本来分支分支名想用release-v0.1,结果打成了releasev0.。维护老项目时,发现一些重要但是奇奇怪怪的分支......
  • c语言分支结构
    正⽂开始C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。我们可以使⽤if、switch实现分⽀结构,使⽤for、while、dowh......
  • 真人怎么玩分支结构
    顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构。Java有两种分支结构:if 语句switch 语句if语句一个if语句真人怎么玩必赢77778.ME包含一个布尔表达式和一条或多条语句。语法if语句的用语法如下:if(布尔表达式){   //如果布尔表达式为true将......