C语言03--控制流

news2024/9/27 9:28:44

1.二路分支

  • 逻辑:程序中某段代码需要在满足某个条件时才能运行
  • 形式:
    1. if 语句:表达一种 如果-则 的条件执行关系
    2. if-else 语句:表达一种 如果-否则 的互斥分支关系

语法:

if ( 判断表达式 )
{    
     // 代码块    
}

解析:

如果判断表达式的值为真(非零) ,那么代码块中的代码将会被执行,相反如果判断表达式为假则代码块不会被执行。

if( 判断表达式 )
{
    // 代码块  1
}
else
{
    // 代码块  2
}

解析:

如果判断表达式为真则执行代码块1 , 否则执行代码块2 。 因此两个代码块只会二选一执行一个。

if( 判断表达式1 )
{
    // 代码块  1
}
else if ( 判断表达式2 )
{
    // 代码块  2
}
else if( 判断表达式3 )
{
    // 代码块 3
}
.....
.....
else if ( 判断表达式 N )
{
    // 代码块N
}
else  // 表示以上的所有条件都不满足
{
    
}

解析:

以上代码框架可以在N个代码块中根据实际条件来选择执行其中的某一个代码块。

注意在使用if或if-else 语句的时候可以省略大括号,但是需要注意,当省略掉大括号后,if 语句或if-else 语句中只能出现一个逻辑语句,如果有多个逻辑语句则会打断if-else 语句的连招。

如下 第三行代码会打破if-else-if 的连续性,编译器会直接报错。

if (Num < 100 ) 
    printf("Num小于100\n");
    printf("恭喜你找到了正确的学习方法...\n"); 
else if (Num > 100 )
    printf("Num大于100\n");
else
    printf("Num等于100\n");
  • 注意:
    1. if 语句可以单独使用,else 语句不可以,else 语句必须跟if语句配套使用
    2. 不管是 if 语句还是 else 语句,代码块都必须使用大括号{}括起来,否则只有首个逻辑语句有效

2.多路分支

  • 逻辑:根据不同的条件执行不同的代码片段
  • 语法:
switch ( 整型表达式 )
{
    case 预估值1 :
        // 代码块1 
        break;

    case 预估值2 :
        // 代码块2 
        break;

    case 预估值3 :
        // 代码块3 
        break;
    
    case 预估值N :
        // 代码块N 
        break;
    
    default :
        // 代码块N + 1
        break ;
}
switch(n)
{
case 1:
    printf("one\n");
    break;

case 2:
    printf("two\n");
    break;
  
case 3:
    printf("three\n");
    break;
  
default:
    printf("其他数字\n");
}
  • 要点解析:
  1. switch(n) 语句中的 n 必须是一个整型表达式,即 switch 判断的数据必须是整型
  2. case 语句只能带整型常量,包括普通整型或字符,不包括 const 型数据。
  3. break 语句的作用是跳出整个 swtich 结构,没有 break 程序会略过下一个case的判断往下执行,直到遇到break为止
  4. default 语句不是必须的,一般放在最后面(因此不需要 break)
  5. if-else 语句与switch 语句有很多相似的地方,但是有一个最大的不同,if-else 的每一个判断表达式之间可以没有任何联系,但是switch-case 语句中中所有的case都用于判断是否等于switch语句中的整型值。

3.const

  • 逻辑:使一个变量不可修改(常量)
  • 作用:
    • 修饰普通变量,使之不可修改 (并不常见)
    • 修饰指针变量,使之不可修改或者使其指向的目标不可修改 (非常常见一般用于保护内存不被意外修改)
  • 示例:
int const a = 100; // 定义了一个不可修改的变量a
const int b = 200; // 定义了一个不可修改的变量b

a = 101; // 错误
b = 202; // 错误

4.while与 do…while循环

  • 逻辑:使得程序中某一段代码可以重复循环地运行
  • 形式:
    • while 循环:先判断,再循环
    • do-while 循环:先循环,再判断

语法:

// while 只要布尔表达式的值为真,则会不停地循环执行代码块的内容 :
while ( 布尔表达式 ) 
{
    // 代码块
}

// do-while  先执行代码块,然后再对表达式进行判断,如果为真则循环执行,否则跳出
do
{
    // 代码块
}while( 布尔表达式 ) ;
  1. 语法点:
    1. while 循环先进行判断,条件为真后才执行循环体,因此循环体可能一遍也不执行。
    2. do-while 循环先执行循环体,再进行判断,因此循环体至少会执行一遍。
    3. do-while 循环中的 while 语句后面有分号; 而 while中需要注意不要随便添加;否则会进入逻辑问题中。

5.for循环

  • 逻辑:与 while 循环类似,但更加紧凑,for 循环将控制循环的变量集中在一行
  • 语法:
for ( 表达式1  ;  表达式2  ; 表达式3  )
{
    // 需要循环的代码块
}

表达式1: 一般用于初始化循环控制的变量 , 比如 int i = 0

只有满足C99 的编译规则才允许在该语句下定义变量,

如果报错则可以:

把定义语句写到for循环外面(前面)

编译命令中指定使用C99编译规则: gcc xx.x -std=c99

表达式2: 一般是判断条件, 用于判断循环控制变量是否在某一个范围 比如 i < 100 ;

表达式3: 一般是循环控制变量的迭代语句 比如 i ++

  • 示例:
// 循环输出一系列整数,直到100为止
int a;
for(a=30; a<=100; a++)
{
    printf("%d\n", a);
}

语法点:

    • 循环头的标准语法是: for(表达式1 ; 表达式2 ; 表达式3)
    • 表达式1一般用来初始化循环控制变量,它只有在第一个进入循环体的时候执行一次。
    • 表达式2一般用来作为循环判定条件,为真则进入循环,为假则跳出循环, 在每一次执行代码块之前执行该语句
    • 表达式3一般用来更新循环控制变量 , 在每一次代码块执行结束之后,下一次判断之前被执行
    • 三个表达式均可以省略,但分号不能省略

6.break与continue

  • 逻辑:
    • break:① 跳出 switch 语句; ② 跳出当层循环体
    • continue:结束当次循环,进入下次循环(while / for )

switch(n)
{
case 1:
    printf("one\n");
    break;  // 跳出 switch 语句
case 2:
    printf("two\n");
    break;        
}

while(1)
{
    int n = scanf("%d", &a);
    if(n == 0)
        break; // 跳出当层 while 循环体
}

for(int i=1; i<=100; i++)
{
    if(i%7 == 0)
        continue; // 跳过所有能被7整除的数
     
    printf("%d\n", i);       
}

7.goto语句

  • 逻辑:无条件跳转
  • 语法:
....
.....
......
标签:
    代码......
    
...
.....

goto 标签;
...
.....
  • 示例:
int main()
{
    printf("%d\n", __LINE__); // 打印第3行 
    
    // 无条件跳转到label处 
    goto label;
    printf("%d\n", __LINE__); // 打印第7行,此处被略过
label:  
    printf("%d\n", __LINE__); // 打印第9行
}
  • 语法:
    • goto语句直接跳转到本代码块中的标签处
    • 标签指的是以冒号结尾的标识符
  • 作用:
    • goto语句的无条件跳转不利于程序的可读性,一般不建议使用
    • goto语句常被用在程序的错误处理中
    int main(void)
    {
        // 初始化蓝牙设别
        if (init == false )
        {
            goto label1 ;    
        }
            
        // 初始化WIFI设备
        if (init == false )
        {
            goto label2 ;    
        }
            
        // 初始化显示器设备
        if (init == false )
        {
            goto label3 ;    
        }
        
        // 初始化空调 
        if (init == false )
        {
            goto label4 ;    
        }   
        
    label4:
        // 卸载、释放空调设别用到的所有资源      
    label3:
        // 卸载、释放显示器设别用到的所有资源         
    label2:
        // 卸载、释放WIFI设别用到的所有资源    
    label1:
        // 卸载、释放蓝牙设别用到的所有资源
        
    }

8.结语

        在本篇博客中,我们深入探讨了C语言中的控制流语句,包括条件语句(如 if 和 switch)、循环语句(如 forwhile 和 do while)以及跳转语句(如 breakcontinue 和 return)。这些控制流结构为程序的决策和重复执行提供了灵活性,使得开发者能够准确地控制代码的执行流程。

        掌握控制流是学习 C语言的关键,它为实现复杂的逻辑和算法奠定了基础。通过合理使用这些结构,我们可以编写出更高效、更清晰的代码。在编写程序时,注重逻辑结构的设计,能够帮助我们更好地应对各种编程挑战。

        希望读者在今后的学习和实践中,能够灵活运用控制流语句,解决实际问题,提升编程能力。感谢您阅读本博客,如果您有任何疑问或建议,欢迎在下方留言讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2052898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大学生最佳就业城市排行榜出炉!

最佳就业城市 随着秋招陆续开始&#xff0c;不少高校毕业生迎来了人生转折点。 其中一个需要重点考虑的点&#xff0c;是要前往哪座城市作为就业第一站。 不妨参考一下就业蓝皮书的统计数据&#xff1a; 可以发现&#xff0c;一线城市的就业人数正逐步减少&#xff0c;"新…

grid-template-columns: 1.833333rem 1fr;

问: grid-template-columns: 1.833333rem 1fr;这是什么属性? 回答: grid-template-columns: 1.833333rem 1fr; 定义了一个网格布局的列宽&#xff1a; 1.833333rem 表示第一列的宽度是相对于根元素字体大小的固定宽度, 1fr 是一个灵活单位&#xff0c;表示第二列会占据网…

【吊打面试官系列-Memcached面试题】memcached 最大的优势是什么?

大家好&#xff0c;我是锋哥。今天分享关于 【memcached 最大的优势是什么&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; memcached 最大的优势是什么&#xff1f; Memcached 最大的好处就是它带来了极佳的水平可扩展性&#xff0c;特别是在一个巨大的系统中。…

[Python办公]Pandas创建透视表入门2

pivot_table 透视表在 Pandas 中是一个非常强大和灵活的工具&#xff0c;它支持许多高级功能&#xff0c;可以用于复杂的数据分析和报告生成。以下是一些更高级的用法和详细说明 1. 多级索引&#xff08;MultiIndex&#xff09; pivot_table 支持多级索引&#xff0c;这意味着…

iPhone16操作按钮大变样?引入快门拍摄按钮,提前告诉你它要干啥

随着智能手机摄影功能的不断升级&#xff0c;用户对于高质量照片和视频的需求也日益增长。苹果公司一直以来都在引领移动摄影技术的发展方向&#xff0c;而即将到来的iPhone 16系列更是备受瞩目。据多个消息来源透露&#xff0c;iPhone 16将引入一项创新功能——一个专门设计用…

【python实现修改所有可执行程序的图标】

实现效果&#xff1a; 图标在此 替换前&#xff1a; 吐槽&#xff1a;这原版看着也不像原版&#x1f603; 替换后&#xff1a; 代码&#xff1a; 注&#xff1a;必须要.ico图标文件 import winreg import ctypes import sys import os# 使用管理员身份打开程序 ctypes.windll…

3万多育儿宝典育儿网站ACCESS\EXCEL数据库

找了下以前弄到的一些育儿数据&#xff0c;发现小数据的《育儿宝典育儿知识大全ACCESS数据库》《结构漂亮的怀孕手册ACCESS数据库》、《结构漂亮的亲子宝典ACCESS数据库》&#xff0c;大的数据有《3万妈妈说育儿百科知识ACCESS数据库》而今天又弄到了一个3万多的育儿宝典网站&a…

ArcGIS Pro基础:状态栏显示栏的比例尺设置和经纬度位置

上图所示&#xff0c;界面下方最左侧是显示的比例尺&#xff0c;可以进行选择设置&#xff0c;也可以进行自定义设置 上图所示&#xff0c;可以手动录入比例尺&#xff0c;同时也可以对比例尺设置别名&#xff0c;比如【实验1】作为特定比例尺的标记 如上图所示&#xff0c;可以…

火语言RPA流程组件介绍--变量持久化及读取

变量持久化及读取 对于一些常用变量在下次或其他流程需要继续使用时&#xff0c;可以将内存中的变量持久化保存到该组件格式化的特定本地文件中&#xff0c;在下次或其他流程使用时从文件读取数据输出至下一个组件或变量&#xff0c;常用来保存难以初始化或者在流程中进行特定…

解决方案上新了丨趋动科技牵手谐云,联合打造支持算力池化的边缘计算解决方案

得益于近些年发展得如火如荼的云原生技术、尤其是作为云原生技术底座的容器云技术的高速发展和产业化落地&#xff0c;业界发现&#xff0c;将GPU等算力资源容器化、资源池化&#xff0c;可以将算力的管理能力拓展到整个数据中心。 作为国内为数不多掌握底层核心技术的容器云产…

SpringBoot响应式编程(4)Spring Security Reactive

一、概述 1.1应用安全 防止攻击&#xff1a; ○ DDos、CSRF、XSS、SQL注入... 控制权限 ○ 登录的用户能干什么。 ○ 用户登录系统以后要控制住用户的所有行为&#xff0c;防止越权&#xff1b; 传输加密 ○ https ○ X509 认证&#xff1a; ○ OAuth2.0 ○ JW…

【秋招笔试】8.15联想(前端卷)-(第二套)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

微软开源项目 Detours 详细介绍与使用实例分享

目录 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours应用场景 5、Detours兼容性 6、Detours具体使用方法 7、Detours使用实例 - 使用Detours拦截系统库中的UnhandledExceptionFilter接口,实现对程序异常的拦截 C++软件异常排查从入门到精通系列教程…

ant design 的 tree 如何作为角色中的权限选择之二

还是接着上一节来 ant design 的 tree 如何作为角色中的权限选择之一 这里先放一下全部代码&#xff1a; import { useIntl } from umijs/max; import React, { Key, useState } from react; import { ProForm, ProFormText } from ant-design/pro-components; import { Form…

Python爬虫案例一:获取古诗文并按用户输入的作者名进行数据保存

前言&#xff1a; 1、什么是爬虫&#xff1f;也称为网页蜘蛛&#xff08;Web Spider&#xff09;&#xff0c;通俗来说&#xff0c;解放人的双手, 去互联网获取数据, 以数据库, txt, excel, csv, pdf, 压缩文件, image, video, music保存数据。本质: 模拟浏览器, 向服务器发送…

【书生大模型实战】InternVL 微调实践闯关任务

一、关卡任务 基础任务 follow 教学文档和视频使用QLoRA进行微调模型&#xff0c;复现微调效果&#xff0c;并能成功讲出梗图.尝试使用LoRA&#xff0c;或调整xtuner的config&#xff0c;如LoRA rank&#xff0c;学习率。看模型Loss会如何变化&#xff0c;并记录调整后效果(选…

消防隐患在线小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;消防隐患举报管理&#xff0c;消防隐患分类管理&#xff0c;统计分类管理&#xff0c;处理结果管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;我…

vue+elmentui 定义狂拽黑金配色的按钮+消息框

1 修改效果 通过自定义样式的方式可以修改elmentui的配色&#xff0c;例如下面我们修改掉了button的primary配色为黑金色&#xff1a; 修改前&#xff1a; 修改后 修改了elementui 的$message(success类型&#xff09;颜色为黑金色、图标也修改为金色了&#xff1a; 修改前…

WPF 手撸插件 三 插件文件热加载

1、在程序运行的同时将插件文件复制到指定的插件目录下&#xff0c;插件自动被加载。不废话了直接上代码吧。需要的可以帮我贡献点积分&#xff0c;谢谢各位大佬了。 示例文件下载https://download.csdn.net/download/xingchengaiwei/896388912、主要功能代码如下。注意初学者…

阿里云搜索专家实操:如何高效构建企业级 AI 搜索?

作者&#xff1a;来自阿里云搜索产品专家牛俊 本文由阿里云搜索产品专家牛俊在【AI 搜索 TechDay】上的分享【阿里云 AI 搜索 Demo 展示和动手实践】整理而成。 阿里云 AI 搜索的产品能力与业务价值 阿里云 AI 搜索的方案&#xff0c;基于阿里云 Elasticsearch Inference API…