循环语句与条件语句的细节与思想 --进阶C语言

news/2024/11/17 1:04:27/文章来源:https://www.cnblogs.com/DSCL-ing/p/18414571

目录
  • if-else组合
    • if的执行顺序
    • 操作符的执行顺序测试方法
    • C语言的布尔类型
  • switch case组合
    • (补充) 屏蔽警告的方法
      • 在case中执行多条语句,建议case后都带上花括号.
      • 多个case执行同样语句
  • do、while、for
    • 循环的基本结构
    • continue跳转的位置
    • 循环设计的思想推荐
    • 推荐使用for的前闭后开写法
  • null

if-else组合

  • 表达式: 变量与操作符的组合称为表达式
  • 语句: 以分号结尾的表达式称为语句
  • if(0){ //... }注释法,在看到if(0)时,有可能这是一个注释,不推荐这种做法,但是需要认识.

if的执行顺序

  1. 计算功能:先执行完毕if括号()中的表达式or某种函数,得到表达式的真假结果

  2. 判定功能:根据表达式结果进行条件判定

  3. 分支功能:根据判定结果进行分支

    (if有判定和分支两个功能,而switch只有判定而没有分支功能,因此必须使用break)

操作符的执行顺序测试方法

printf("1 ") && printf("2 ");
printf("1 ") || printf("2 ");

C语言的布尔类型

  • C89/C90没有bool类型
  • C99 引入了关键字为_Bool的类型,在新增的头文件stdbool.h中.为了保证C/C++的兼容性,被重新用宏写成了bool.
  • 微软对C语言bool类型也有一套标准,BOOL,FALSE,TRUE. 不推荐使用微软这套标准,不具备可移植性

switch case组合

  • 基本语法结构
//switch只能对整数进行判定,做不了复杂的逻辑计算
switch(整型变量/常量/整型表达式){case 常量1:break;case 常量2:break;case 常量3:break;default:break;
}
推荐使用switch的场景:只能用于整数判定且分支很多的情况下
  • switch case 的功能
    switch本身没有判断和分支能力,switch是拿着结果去找case进行匹配,
    case具有判定能力,但没有分支能力,case是通过break完成分支功能
    break具有分支功能,相当于if的分支能力.
    default相当else,处理异常情况

(补充) 屏蔽警告的方法

error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
方法1:
#pragma warning(disable:4996)
方法2:
#define _CRT_SECURE_NO_WARNINGS //该宏定义必须写在文件的首行(头文件的前面)才有效
(如果宏没有宏值,则只能用在#ifdef等条件编译语句中,即只用于标识)
  • 在case中执行多条语句,建议case后都带上花括号.

    在case中定义变量,直接写会警告,需要带上花括号,但不建议在case中定义变量,如果非要这么做,可以封装成函数来替代.并且
    case

  • 多个case执行同样语句
int main()
{int n = 0 ;scanf("%d",&n);switch (n){case 1: case 2: case 3: case 4: case 5:puts("周内");break;case 6:puts("周六");break;case 7:puts("周日");break;default:break;}return 0;
}
  • default可以在switch中的任意位置,一般习惯放在最后的case后
  • switch中尽量不要单独出现return.一般习惯用break,突然return容易搞混
  • switch中不要使用bool值,不好维护
  • case的值必须是数字常量,不能是const int a = 1;这种
  • 按执行频率排列case语句,频率越高越靠前,能减少匹配次数

do、while、for

循环的基本结构

  • 一般的循环都必须要有3种功能:
    1. 循环条件初始化
    2. 循环条件判定
    3. 循环条件更新

(死循环除外)

int main()
{int count = 10; //1.循环条件初始化while (count > 10) //2.循环条件判定{printf("%d\n", count); //3.业务逻辑count--; //4.循环条件更新}return 0;
}
  • for循环
使用样例:
for(int i = 0; i<10; i++)
{//业务逻辑
}

for的结构更加紧凑,更清晰

for(1.循环条件初始化; 2.循环条件判定; 4.循环条件更新){//3.业务逻辑
}
  • do-while
//1.循环条件初始化
do{//2.业务逻辑//3.循环条件更新
}while(4.循环条件判定);

do while结构需要在while()后加上分号,容易忘记

continue跳转的位置

  • while循环continue后会跳转到循环条件判定的位置,之后执行循环判定
  • for循环会跳转到循环条件更新的位置,之后进行循环条件更新!!!

循环设计的思想推荐

1.尽可能减少循环来回多次的跳转的次数 --- 涉及缓存,局部性原理,CPU命中概率.尽可能让代码执行的更加平滑
2.在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨且循环层的次数.

推荐使用for的前闭后开写法

推荐1:for语句循环的次数的计算方式
1.for(int i = 0; i<=9; i++){} //cnt = 9-0+1 = 10次
2.for(int i = 0; i<10; i++){} //cnt = 10-0 = 10次
3.for(int i = 6; i<=9; i++){} //cnt = 9-6+1 = 4次
4.for(int i = 6; i<10; i++){} //cnt = 10-6 = 4次
从计算角度,前闭后开写法能更加直观,快速推荐2:下标映射时,思维清晰,不容易混乱

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过API接口获取数据:高效、灵活的数据交互之道

在数字化时代,数据已成为企业最宝贵的资产之一。企业和开发者对于数据的获取、处理和分析的需求日益增长。API(应用程序编程接口)接口作为连接不同系统和应用程序的桥梁,提供了一种高效、灵活的方式来获取和交换数据。本文将探讨为什么通过API接口获取数据是现代应用程序开…

【工具使用】【Shell脚本】【gitlab】下拉所有的仓库代码并指定分支推送给客户仓库

1 前言 这不是项目要结束了么,项目验收要交付源代码,客户在阿里云上买了个云效,需要把我们公司的代码同步上去。 首先云效支持各种导入,比如直接贴上你的 gitlab地址,再加个token 他就会自己同步,但我不能这么做,主要是因为我们公司有的别的项目代码也在一块,只是分支…

南沙C++信奥老师解一本通题: 1361:产生数(Produce)

​[题目描述】给出一个整数n(n≤2000)和k个变换规则(k≤15)。规则: ① 1个数字可以变换成另1个数字; ② 规则中,右边的数字不能为零。 例如:n=234,k=2规则为 2 → 5 3 → 6 上面的整数234经过变换后可能产生出的整数为(包括原数)234,534,264,564共4种不同的产生数…

Switch大气层游戏下载服务及实测列表

朗读全文Your browser does not support the audio element. 有什么用/怎么用 更新实测的Switch大气层中安装的游戏列表, 分享安装和测试体验, 列表会不定时更新 已记录实测了的Switch游戏会在本地存储, 方便客户直接从本地快速获取 (请联系博主, 提供线上线下有偿安装服务…

WIFI远程无线中继之K2P刷机Padavan无线桥接功能

WI-FI无线中继, 无线桥接, 扩大WIFI信号覆盖范围/面积朗读全文Your browser does not support the audio element. 有什么用/怎么用 本文仅围绕着有限的硬件投入情况下, 如何扩大WIFI信号覆盖范围/面积. 抛砖引玉, 如果您有更好的方案, 请大方地留言告诉我, 提前感谢 需求…

Switch串流PC让Switch运行PC或Steam大作

游戏串流: 游戏的计算和渲染过程发生在远程服务器上(而不是玩家的本地设备上), 本地设备可以轻松游玩远程游戏(这个远程游戏的概念很广, 可是是PC, Steam游戏, 安卓游戏等等. 本文的讨论范围可以理解为大型游戏被投屏到了Switch主机屏幕上, 并且用Switch的外设可直接操控游戏)朗…

0基础学Pine量化 动态EMA改进

动态EMA改进改进前 源策略是基于唐奇安上下轨,先看看15mink线USDT的2023.7.30-2024.7.30的结果下面是2022-7-30到2023-7-30下面是2021-7-30到2022-7-30改进后 加入动态EMA和止盈止损 15mink线USDT的2023.8.30-2024.8.30的结果下面是2022-7-30到2023-7-30下面是2021-7-30到2022…

决策论——决策模型三要素精解

运筹学中的决策论主要针对不确定环境下的决策问题,提供数学化和系统化的工具,帮助决策者在复杂情境中选择最优方案。相比一般的决策分析,运筹学更注重定量分析,借助模型、损益表等工具,将不确定性和风险因素纳入考虑。决策模式可以分为确定性、风险性和不确定性三种,每种…

Cisco Modeling Labs (CML) 2.7.2 发布下载,新增功能概览

Cisco Modeling Labs (CML) 2.7.2 发布下载,新增功能概览Cisco Modeling Labs (CML) 2.7.2 - 网络仿真工具 思科建模实验室 (CML) 请访问原文链接:https://sysin.org/blog/cisco-modeling-labs-2/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgCisco Modelin…

读构建可扩展分布式系统:方法与实践04应用服务

应用服务1. 应用服务 1.1. 任何系统的核心都在于实现应用需求的特定业务逻辑 1.2. 服务是可扩展软件系统的核心1.2.1. 它们将契约定义为一个API,向客户端声明它们的能力1.3. 应用服务器高度依赖于编程语言,但通常都会提供多线程编程模型,允许服务同时处理许多请求 1.4. 多服…

【极速下载】Vmware17.5.2官方最新版本2024网盘下载

Mware简介VMware 是一款强大的虚拟化软件。它能在一台物理机上同时运行多个操作系统,实现资源高效利用。可用于服务器虚拟化、桌面虚拟化等。提高系统可靠性、可扩展性与安全性,降低成本和管理复杂度。VMware广泛应用于企业数据中心和云计算领域,是 IT 重要工具。 VMware最…