首页 > 其他分享 >循环语句与条件语句的细节与思想 --进阶C语言

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

时间:2024-09-15 10:04:56浏览次数:9  
标签:语句 case 进阶 -- break switch 循环 判定

目录

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:下标映射时,思维清晰,不容易混乱

标签:语句,case,进阶,--,break,switch,循环,判定
From: https://www.cnblogs.com/DSCL-ing/p/18414571

相关文章

  • 食物链题解
    双倍经验:P2024[NOI2001]食物链当问题要求维护一些对立的关系时(朋友、敌人),就可以用种类并查集实现。因为有三种关系所以并查集的数组要开三倍空间,第一倍空间存同类关系,第二倍存捕食关系,第三倍存被捕食关系。注意:一的猎物的猎物就是一的天敌,其他就可以直接并查集维护即可。注......
  • 通过API接口获取数据:高效、灵活的数据交互之道
    在数字化时代,数据已成为企业最宝贵的资产之一。企业和开发者对于数据的获取、处理和分析的需求日益增长。API(应用程序编程接口)接口作为连接不同系统和应用程序的桥梁,提供了一种高效、灵活的方式来获取和交换数据。本文将探讨为什么通过API接口获取数据是现代应用程序开发的关键。......
  • Cesium 比较常用的几个方法
    根据经纬度获取高程/***根据经纬度获取高程*@param{mars3d.Map}map*@param{number}lng*@param{number}lat*/asyncfunctiongetHeightByLngLat(map,lng,lat){if(!lng||!lat)returnundefined;letpositions=[Cesium.Carto......
  • 学校食堂厨师帽厨师服佩戴识别系统
    学校食堂厨师帽厨师服佩戴识别系统对学校食堂餐厅监控画面开展实时检测,对厨师没有戴厨师帽厨师服口罩或者在厨房抽烟玩手机等行为,学校食堂厨师帽厨师服佩戴识别系统马上警报,并把警报截屏和视频保存下来发送给监控后台,并同步到相关人员的手机上。为应对经常出现的食品安全事件,管......
  • 工地渣土车清洗识别检测系统
    工地渣土车清洗识别检测系统集成边缘+Ai视频分析技术、机器视觉、深度学习等技术,利用工地现场的监控摄像头对将要驶离施工工地的渣土车进行实时监管清洗识别,如果渣土车没有清洗,系统就警报。工地渣土车清洗识别检测系统由前端摄像头与后管理系统构成。前端摄像头对现场进出口的车辆......
  • 工地车辆未冲洗识别抓拍系统
    工地车辆未冲洗识别抓拍系统主要是对施工工地的出入的车辆进行冲洗监管、冲洗识别、未冲洗告警。工地车辆未冲洗识别抓拍系统由现场监控摄像头与后台系统构成。利用前端摄像头(不分品牌)正对施工工地进出口对来往车辆实时分析识别清洗情况,将违规未清洗车辆,抓拍报警,并上传到系统后台......
  • 面相2
    参考https://www.bilibili.com/video/BV1Lx4y187sz/?spm_id_from=333.337.search-card.all.click&vd_source=e9350dcb8f8ce540f675f37bddfce9351.年龄段划分 2.年龄细分看看哪个位置出现了好与不好的标志纹,痣,疤,残,干瘪,暗淡3. 4.卧蚕代表好生育,代表情欲和桃花5.鼻......
  • 秸秆焚烧视频监控系统
    秸秆焚烧视频监控系统借助现场已经安装的视频监控摄像头,运用边缘+Ai视觉、深度学习、视频ai分析技术,对监控地区的秸秆燃烧行为进行7*24小时不间断识别监控。秸秆焚烧视频监控系统自动识别现场出现烟火时,自动生成预警信息发送到监控后台中心提醒工作人员及时确认,并能够及时自动语音......
  • 校园食堂明厨亮灶智能视频监控
    校园食堂明厨亮灶智能视频监控对餐厅摄像头拍照视频监控画面进行实时分析,校园食堂明厨亮灶智能视频监控针对厨师不穿厨师服、不戴厨师帽口罩、陌生人员进入后厨、厨师工作时间玩手机打电话、后厨出现猫狗老鼠等异常行为现象,系统会自动识别抓拍报警,进而实现食品卫生安全日常监管智......
  • .NET 的 Native AOT 现在是什么样的?
    今天要写的这篇文章源自昨天在朋友圈发的文章《UWP通过.NET9和NativeAOT的支持实现UWP应用的现代化》[1],一位小伙伴的对话让我想全面梳理下NativeAOT的现在的进展。.NET9的NativeAOT(Ahead-of-TimeCompilation)是微软在.NET9版本中重点发展的一项技术,旨在提升应用程......