C语言基础11:分支结构以及if的使用

embedded/2025/2/12 6:45:13/

C语言基础

内容提要

  • 分支结构
    • 条件判断
    • 用if语句实现分支结构

分支结构

问题抛出

我们在程序设计往往会遇到如下问题,比如下面的函数的计算:

y = { 1 / x 当 x ≠ 0 时 10000 当 x = 0 时 y = \begin{cases} 1/x \quad当x\neq0时\\ \\ 10000 \quad当x=0时 \end{cases} y= 1/xx=010000x=0

也就是我们必须要通过一个条件的结果来选择下一步的操作,算法上属于一个分支结构,C语言中实现分支结构主要使用if语句。

条件判断

根据某个条件成立与否,决定是否执行指定的任务(操作)。

在这里插入图片描述

条件判断的结果是逻辑值(布尔类型值,也就是说分支语句的条件可以使用关系表达式和逻辑表达式),在程序中用真(1)和假(0)来表示。

关系运算及其表达式
关系运算符及其优先级次序

关系运算符是用来进行比较的符号,C语言中提供了6种关系运算符:

在这里插入图片描述

关系表达式

关系表达式是指用关系运算符将两个表达式连接起来组成的有意义的式子。

在这里插入图片描述

在C语言中,用1(非0)表示关系表达式的值为真(条件成立),0表示关系表达式的值为假(条件不成立),即关系表达式的值要么为1(条件成立,)要么为0(条件不成立)

问题抛出

有时,只用一个简单的关系表达式无法完整的表达一个条件:

y = { 1 / x + 1 / a 当 x ≠ 0 , a ≠ 0 时 10000 其他 y = \begin{cases} 1/x+1/a \quad当x\neq0,a\neq0时\\ \\ 10000 \quad其他 \end{cases} y= 1/x+1/ax=0,a=010000其他

其中的条件需要用逻辑表达式来表示:x!=0 && a!=0,&&就是一种逻辑运算符。

逻辑运算及其表达式
逻辑运算符及其优先级
  • 逻辑运算符是构成复杂的复合条件的运算符。

C语言中提供了三种逻辑运算符:

符号名称分类说明
&&逻辑与双目运算符两个量都为真时为真(1),否则为假(0)
||逻辑或双目运算符两个量中只要有一个为真即为真(1),只有两个量都为假时才为假(0)
!逻辑非单目运算符运算量真时变为假(0),假时变为真(1)
逻辑表达式
ab!a!ba&&ba||b
非0非000非0非0
非000非00非0
0非0非000非0
00非0非000

用逻辑运算符将关系表达式或逻辑表达式连接起来的构成有意义的式子。

在这里插入图片描述

逻辑表达式中各种运算符的优先级顺序如下:

!(逻辑非)→算术运算符(±*/%)→关系运算符(>、<、>=、<=、==、!=)→&&和||→赋值运算符(=、+=…)

C语言编译系统在表示逻辑运算符结果时:用1表示真,用0表示假。

案例:

假设a = 4,b = 5,则:

!a           --0
a && b       --1
a || b       --1
!a || b      --1
4 && 0 || 2  --1    

小贴士:

实际上,逻辑运算符两侧的运算对象不但可以时0和1,或者时0和非0,而且也可以是字符型、实型和指针型等。系统最终是以0和非0来判定他们的真假的,例如:

‘c’ && 'd’结果为1

用if语句实现分支结构

单分支:if …
  • 语法:

    //语法1:可以舍弃{}
    if(条件表达式)单语句;//语法2:必须保留{}
    if(条件表达式)
    {单语句或者复合语句;
    }
    
  • 流程图

    在这里插入图片描述

  • 功能

    • 若表达式值为真(非0),则执行表达式后面的语句,执行完该语句后继续执行if语句后的代码。
    • 若表达式值为假(0)则不执行表达式后面的语句而直接执行if语句后面的语句。
  • 说明:

    • 如果表达式后面的是复合语句,则要用一对花括号{}括起来,单语句可有可无。
  • 案例:

    • 要求:计算并输出下列分段函数的值:

      y = { − 2 x < 0 2 x ≥ 0 y = \begin{cases} -2 \quad x<0\\ \\ 2 \quad\quad x\geq0 \end{cases} y= 2x<02x0

    • 流程图:

      在这里插入图片描述

    • 代码:

      /*************************************************************************> File Name:    demo01.c> Author:       zk> Description: 单分支案例 > Created Time: 2025年02月11日 星期二 10时42分43秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[])
      {//创建两个变量,用来存储两个操作数double x,y = -2;//从控制台输入xprintf("请输入一个数,作为x的值:\n");scanf("%lf",&x);//校验if(x >= 0) 	 y = 2;printf("x=%lf,y=%lf2\n",x,y);return 0;
      }
    • 运行结果:

      在这里插入图片描述

  • 案例:

    • 需求:有a,b,c三个数,要求从控制台输入,并且求出最大值

    • 分析:

      1.通过控制台输入a,b,c的值

      2.创建一个变量max,用来存放a,b,c中的最大值,默认a是最大值(这样可以减少一次判断)

      3.让b,c和max进行比较,将最大值存入max

    • 代码:

      /*************************************************************************> File Name:    demo02.c> Author:       zk> Description: 单分支案例:有a,b,c三个数,要求从控制台输入,并且求出最大值 > Created Time: 2025年02月11日 星期二 10时58分41秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[])
      {//创建4个变量啊a,b,c,maxint a,b,c,max;//通过键盘输入数据给a,b,cprintf("请输入三个整数:\n");scanf("%d%d%d",&a,&b,&c);//默认a是最大值max = a;//让最大值分别和b和c比较if(max < b)  max = b;if(max < c)  max = c;//a,b中的最大值和c进行比较,得到最大值printf("输入的三个数是%d %d %d,其中最大值是%d\n",a,b,c,max);return 0;
      }
    • 运行结果:

      在这里插入图片描述

      有可能产生的问题:

      ①scanf()同时输入多个变量时,默认使用空格、Tab键、回车键进行区分。

      ②在变量赋值前使用变量,导致运算结果错误(变量未赋值前,系统会给变量分配随机值)


http://www.ppmy.cn/embedded/161533.html

相关文章

【CXX-Qt】1 CXX-Qt入门

与其他Qt-Rust绑定相比&#xff0c;CXX-Qt的目标不仅仅是将Qt功能暴露给Rust&#xff0c;而是完全将Rust集成到Qt生态系统中。我们将通过一个最小示例&#xff0c;展示如何使用CXX-Qt在Rust中创建自己的QObject&#xff0c;并将其与基于QML的小型GUI集成。 一、阅读前准备知识…

CentOS虚机在线扩容系统盘数据盘

最近在制作Openstack下的镜像&#xff0c;用户需要CentOS6以及CentOS7的虚机镜像&#xff0c;遇到了些关于系统盘以及数据盘在线扩容的问题&#xff0c;故此整理一下。 ​ 传统我们想对磁盘在线热扩容&#xff0c;必然会想到LVM逻辑卷。如果没有LVM逻辑卷的情况下&#xff0c;…

【JVM详解三】垃圾回收机制

一、对象是否存活 强引用&#xff1a;Object obj new Object(); 只要强引用还在&#xff0c;垃圾收集器永远不会回收掉被引用的对象。在不用对象的时将引用赋值为 null&#xff0c;能够帮助垃圾回收器回收对象。比如 ArrayList 的 clear() 方法实现。软引用&#xff08;SoftRe…

Hello Robot 推出Stretch 3移动操作机器人,赋能研究与商业应用

Hello Robot公司近日发布了其新一代开源移动操作机器人Stretch 3&#xff0c;这是一款高度灵活的机器人平台&#xff0c;专为机器人研究、教育实验和商业自动化设计。Stretch 3 结合了先进的移动机器人技术、灵巧操作能力和开源软件生态系统&#xff0c;为用户提供了一个功能强…

flink cdc2.2.1同步postgresql表

目录 简要说明maven依赖样例代码 简要说明 在flink1.14.4 和 flink cdc2.2.1下&#xff0c;采用flink sql方式&#xff0c;postgresql同步表数据&#xff0c;本文采用的是上传jar包&#xff0c;利用flink REST api的方式进行sql执行。 maven依赖 <properties><proj…

AWS云设施攻击

AWS云设施攻击 云设施攻击列举AWS云基础设施互联网上云资源的侦擦域和子域侦察服务特定域名 通过云服务提供商的api进行侦察AWS CLI使用云服务认证公共共享资源从S3存储桶获取账户ID在其他账户中枚举IAM账户 初始IAM侦察检查受损害的凭证检查IAM权限 IAM资源枚举枚举IAM资源使用…

利用ETL工具进行数据挖掘

ETL的基本概念 数据抽取&#xff08;Extraction&#xff09;&#xff1a;从不同源头系统中获取所需数据的步骤。比如从mysql中拿取数据就是一种简单的抽取动作&#xff0c;从API接口拿取数据也是。 数据转换&#xff08;Transformation&#xff09;&#xff1a;清洗、整合和转…

如何在Vscode中接入Deepseek

一、获取Deepseek APIKEY 首先&#xff0c;登录Deepseek官网的开放平台&#xff1a;DeepSeek 选择API开放平台&#xff0c;然后登录Deepseek后台。 点击左侧菜单栏“API keys”&#xff0c;并创建API key。 需要注意的是&#xff0c;生成API key复制保存到本地&#xff0c;丢失…