C语言——选择结构

article/2025/4/23 3:09:59

选择结构和条件判断

(一)if语句——实现两个分支

if 语句可以写成不同形式

  1. if (表达式) 语句1——可以没有else语句
  2. if (表达式)
    语句 1
    else
    语句 2
    ——————————有else语句
  3. if (表达式 1) 语句 1
    else if (表达式 2) 语句 2
    else if (表达式3) 语句 3
    … …
    ———————————可以使用嵌套
    注意:
    (1)如果语句 1,语句 2,,,是复合语句,应该使用花括号括起来。即写成一个代码块。
    (2)内嵌语句可以是 if 语句 ,如果不使用花括号的话, else与最近的 if 相匹配。最好写成代码块形式。
    举例如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{int a = 0;int b = 1;if (1 == a)if (b == 1)printf("bbbbbb");elseprintf("aaaaaa");                  //主观感觉输出应该为aaaaaa,//实际上else与最近的if相匹配,所以什么也不输出system("pause");return 0;
}

运行结果如下:
在这里插入图片描述
(3)if语句后的表达式如果是判断表达式中的等于的话,最好将用于比较的值放在左边,防止写成赋值表达式。这样的话写错的话容易报错。
如:

 int main()
{int a = 0;if (0 == a)                //如 此处如果写 a == 0的话就容易写成 a = 0printf("%d", a);system("pause");return 0;
}

(4)C语言中0表示假,非0表示真。
所以if 后面的表达式可以是一个变量。
(5)if语句的书写规范

  • bool值和0比较
    bool表示真假,只有 true 和 false
    在C语言中bool值的语义是 0为假,非0为真,true和false这些标识符在C中一定会被定义为一个固定值。
    flag是个整数,可以被赋值为非0整数表示真。
    在表达式中不能写成 if(flag == true)
    原因是:如果flag本身是5,非0,表示真,true为3的话,flag == true为假,则表达式假。
    错误代码如下:
 int flag;if (flag == TRUE);{printf("TRUE");}if (flag == FALSE){prirntf("FALSE");}

正确 形式应该为

 if (flag);{printf("TRUE");}if (!flag){prirntf("FALSE");}
  • 整型变量和0比较
    如果一个变量就是整型,(不表示真假)则这个数不能和0比较
int num = 0;
//正确写法
if(0 == num)//错误写法
if(num)      //如果num本身是0的话,则该语句判断为假,就不能执行if语句



(5)if(表达式1)语句 1 else 语句 2
等价于
表达式1 ? 表达式 2 : 表达式3


举例代码如下:

 int main()
{int max = 0;int a = 1;int b = 2;if (a > b){max = a;}else{max = b;}system("pause");return 0;
}

该代码等价于以下代码

 int main()
{int max;int a = 1;int b = 2;max = (a > b) ? a: b;system("pause");return 0;
}

(二)switch语句——实现多分支

switch语句的一般形式
switch(表达式)
{
case 常量1:语句 1
case 常量2:语句 2
case 常量3:语句 3

default : 语句n
}


· switch 后面的表达式为整数类型,包括字符型,不能为字符串。

· case 后面可以跟一个常量或常量表达式,用来标志一个位置。
执行switch语句时,先计算表达式的值,然后将该值与case后的标号比较,如果相同,则转到该case后的语句,如果不相同,则与后一个case判断,如果没有相匹配的case,则执行default标号后的语句。
·可以没有default语句,如果没有相匹配的case,则执行switch后的下一个语句。
· 各case标号与default标号顺序没有影响。
· 每一个case常量必须不相同,不能出现一个表达式的值有两种及以上执行方案。
· 一般,每个case子句后,应该用一个break语句跳出switch结构。
否则会一直执行下去。


举例如下

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{int n = 0;scanf("%d", &n);switch (n){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:break;}system("pause");return 0;
}

运行结果如下
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{int n = 0;scanf("%d", &n);switch (n){case 1:printf("今天是星期一\n");case 2:printf("今天是星期二\n");case 3:printf("今天是星期三\n");case 4:printf("今天是星期四\n");case 5:printf("今天是星期五\n");case 6:printf("今天是星期六\n");case 7:printf("今天是星期天\n");default:;}system("pause");return 0;
}

运行结果如下
在这里插入图片描述

· 多个case标号可以公用一个执行语句

举例如下

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{int n = 0;scanf("%d", &n);switch (n){case 1:case 2:case 3:case 4:case 5:printf("今天是工作日\n");break;case 6:case 7:printf("今天是休息日\n");break;default:break;}system("pause");return 0;
}

运行结果如下
在这里插入图片描述


http://chatgpt.dhexx.cn/article/VoLUcOrs.shtml

相关文章

c语言 选择结构例题

目录 1、if 语句的例题 2、switch 语句例题 前面我有一篇讲选择结构的文章&#xff0c;同学们可以先看一下&#xff0c;温习温习。 应该就在前面几篇&#xff0c;我复制不了链接了&#xff0c;尴尬了。 1、if 语句的例题 先来一张图&#xff0c;将if 语句步骤简单的走一下…

python选择结构

1.选择结构 1.1单分支结构 1.1.1 语法&#xff1a; if 表达式:语句块 1.1.2. 流程图 1.1.3 例&#xff1a;输入2个数&#xff0c;输出最大值&#xff1a; aint(input()) bint(input()) maxa if a<b:maxb print(max) 1.1.4.注意&#xff1a; 表达式&#xff1a;一般表…

C语言的选择结构

选择结构 C语言有两种选择语句:(1)if语句:用来实现两个分支的选择结构 (2)switch语句:用来实现多分支条件的选择结构 例子:计算ax^2 + bx + c = 0的方程的根。 流程图: 代码: #include<stdio.h>#include<math.h>//计算ax^2 + bx + c = 0的方程的根。…

二、选择结构

目录 1.JavaScript的组成 1.三大核心 2.window对象的常用方法 2.if选择结构 3.多重if选择结构 4.嵌套if选择结构 5.switch选择结构 6.三元表达式 1.JavaScript的组成 1.三大核心 ESMAScript 核心语法&#xff08;标准规范&#xff09;-> ES6BOM 浏览器对象模式&am…

选择结构的使用

一、掌握if结构语句 二、掌握switch分支结构 三、两种结构语句的比较 学习结构之前首先要明白为什么要学习结构&#xff0c;结构有什么作用&#xff0c;有哪些结构&#xff0c; 首先我们要明白java代码中&#xff0c;程序运行的原理是从上到下一行一行运行的&#xff0c;如果…

C语言-选择结构

目录 选择结构 一、if-else语句 1.单选择 2.双选择 3.多选择 二.switch语句 选择结构 选择结构用于判断给定的条件&#xff0c;根据判断的结果判断某些条件&#xff0c;根据判断的结果来控制程序的流程 一、if-else语句 1.单选择 单选择通过if语句就可以实现&#xff0c…

Insert keyframe giving keying set failed to insert any key frames问题(已解决)

Blender 2.81 beta 问题描述 骨骼动画&#xff0c;进入姿态模式以后&#xff0c;调整了姿势然后按I键尝试插入关键帧&#xff0c;但是报错&#xff0c;报错信息很费解 “插入关键帧的帧位置” 于是切换到英文版显示 “Insert keyframe giving keying set failed to insert any…

论文阅读笔记:(2015, ijrr) Keyframe-based visual–inertial odometry using nonlinear optimization

算是基于滑窗的VIO的必读文章吧&#xff0c;很详细地说了边缘化~ paper: http://in.ruc.edu.cn/wp-content/uploads/2021/01/Keyframe-Based-Visual-Inertial-Odometry-Using-Nonlinear-Optimization.pdfhttp://in.ruc.edu.cn/wp-content/uploads/2021/01/Keyframe-Based-Vis…

ORB-SLAM2源码笔记(4)——帧Frame和关键帧KeyFrame

Frame类中的相机参数为static类型&#xff0c;表示所有Frame对象共享一份相机参数 特征点提取ExtractORB 在Frame类构造函数中调用成员变量mpORBextractorLeft和mpORBextractorRight的()运算符进行特征点提取. 畸变矫正前的左目特征点是mvKeys[i]. 畸变矫正后的左目特征点是m…

《UnityAPI.Keyframe关键帧》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Keyframe+inTangent+outTangent+立钻哥哥++OK++)

《UnityAPI.Keyframe关键帧》 版本 作者 参与者 完成日期 备注 UnityAPI_Keyframe_V01_1.0 严立钻 2020.06.28 #《UnityAPI.Keyframe关键帧》发布说明&#xff1a; “UnityAPI.Keyframe关键帧”是对UnityAPI中Keyframe关键帧类的剖析和拓展&…

ORB-SLAM2算法10之图像关键帧KeyFrame

文章目录 0 引言1 KeyFrame类1.1 构造函数1.2 成员函数1.3 关键帧之间共视图1.3.1 AddConnection1.3.2 UpdateBestCovisibles1.3.3 UpdateConnections1.3.4 EraseConnection1.3.5 SetBadFlag 1.4 地图点1.5 生成树 2 KeyFrame用途 0 引言 ORB-SLAM2算法7详细了解了System主类和…

CSS3 @keyframe动画的基本用法与常见错误用法

前言 随着CSS3的推出与普及&#xff0c;其各种属性开始被广泛使用。尤其是其动画功能&#xff0c;对于一些简单的动画实现&#xff0c;实在没必要用Javascript去实现&#xff0c;这是keyframes动画就派上了用场。今天来讲一下keyframes的一些基本的用法和常见坑。 【本文志于…

【微信小程序】动画入门keyframe

【微信小程序—动画工坊】动画入门 前情 需要了解的前置知识&#xff1a; 子代选择器基本布局 分析 可以将任务进行一下拆分。 如何让小球跑动起来&#xff1f; 通过keyframe创造动画函数&#xff0c;然后再通过animation绑定创造动画函数 keyframe的百分比代表动画的进度…

ORB-SLAM2 --- KeyFrame::UpdateConnections 函数

目录 一、函数作用 二、函数流程 三、code 四、函数解析 一、函数作用 更新关键帧之间的连接图。 更新变量 mConnectedKeyFrameWeights&#xff1a;当前关键帧的共视信息&#xff0c;记录当前关键帧共视关键帧的信息&#xff08;哪一帧和当前关键帧有共视&#xff0c;共视…

三谈属性动画——Keyframe以及ViewPropertyAnimator

Android动画和Transition系列文章 初识属性动画——使用Animator创建动画再谈属性动画——介绍以及自定义Interpolator插值器三谈属性动画——Keyframe以及ViewPropertyAnimator让View具有减速效果的动画——FlingAnimation让View具有弹性效果的动画——SpringAnimation让View…

ORB-SLAM2 --- KeyFrame::SetBadFlag函数

目录 1.函数作用 2.code 3.函数解析 1.函数作用 真正地执行删除关键帧的操作。 需要删除的是该关键帧和其他所有帧、地图点之间的连接关系。 2.code void KeyFrame::SetBadFlag() { // Step 1 首先处理一下删除不了的特殊情况{unique_lock<mutex> lock(mMutexConn…

【视觉SLAM】Fast Relocalisation and Loop Closing in Keyframe-Based SLAM

See discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/263621033 Article in Proceedings - IEEE International Conference on Robotics and Automation June 2014 DOI: 10.1109/ICRA.2014.6906953 先读Abstrac…

Android属性动画 Keyframe

转载请标明出处&#xff1a;http://blog.csdn.net/zhaoyanjun6/article/details/118963313 本文出自【赵彦军的博客】 文章目录 KeyFrame实战 KeyFrame KeyFrame 主要用于自定义控制动画速率&#xff0c;KeyFrame 直译过来就是关键帧。 而关键帧这个概念是从动画里学来的&…

ORB-SLAM2代码详解05: 关键帧KeyFrame

pdf版本笔记的下载地址: ORB-SLAM2代码详解05_关键帧KeyFrame,排版更美观一点,这个网站的默认排版太丑了&#xff08;访问密码&#xff1a;3834&#xff09; ORB-SLAM2代码详解05: 关键帧KeyFrame 各成员函数/变量共视图: mConnectedKeyFrameWeights基于对地图点的观测重新构造…

@keyframes详解

一、transform 和keyframes动画的区别&#xff1a; keyframes动画是循环的&#xff0c;而transform 只执行一遍. 二、keyframes CSS3中添加的新属性animation是用来为元素实现动画效果的&#xff0c;但是animation无法单独担当起实现动画的效果。承载动画的另一个属性——keyfr…