【C语言】分支和循环(上)

【C语言】分支和循环(上)

    • 1、if语句
      • 1.2 else
      • 1.3分支中包含多条语句
      • 1.4嵌套if
      • 1.5悬空else问题
    • 2、关系操作符
    • 3、条件操作符
    • 4、逻辑操作符:与、或、非(取反)(&&,||,!)
      • 4.1逻辑取反运算符
      • 4.2逻辑 与 运算符
      • 4.3逻辑或操作符

前言:C语言是一种结构化的设计语言,这里所指的结果包括:顺序结构选择结构循环结构
在这里插入图片描述
接下来将介绍分支和循环结构,我们可以使用if、switch来实现分支结构,使用for、while、do while实现循环结构

1、if语句

if语句的语法形式如下代码所示:

if( 表达式 )语句

表达式如果为真,则下面的语句执行,如果为假,则语句不执行。

在C语言中,0为假(不成立),语句不执行;**非0表示真(成立)**时,语句执行。

eg:输入一个整数,判断是的为奇数:
在这里插入图片描述
if语句原理图如下:
在这里插入图片描述

1.2 else

接上面例子所述,如果一个数不是奇数,那么就是偶数,如果任意一个整数,要怎么判断是奇数还是偶数呢?

这里就可以在if语句后面加上else,构成if…else语句,语法形式如下:

if( 表达式 )语句1
else语句2

eg1:输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数:
在这里插入图片描述
eg2:输入一个年龄,≥18就输出:成年,否则输出:未成年:
在这里插入图片描述

1.3分支中包含多条语句

默认在if和else语句都只控制一条语句:
在这里插入图片描述
在这里插入图片描述
从上述示例中可以看出,不管是成年(age>=18)或者未成年(age<18),都会打印出“可以赚钱养家糊口了”。说明if语句只能控制一条语句,即:printf(“成年\n”);

这是因为if语句只能控制一条语句,如果if语句为真,则打印成年,if语句为假,则不打印;对于printf(“可以赚钱养家糊口了\n”);是独立于if存在的,不管if语句的条件是真还是假。如果if语句需要同时控制两条语句该怎么实现呢?就需要使用{}将代码括起来,else后也可以跟上大括号。如下代码所示:

在这里插入图片描述
在这里插入图片描述

1.4嵌套if

在if else语句中,else可以与另一个if语句连用,构成多重判断。
eg:要求输入一个整数,判断输入的整数是0,还是正数或者负数。请看代码演示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的if相当于嵌套在else语句中,形成了嵌套结构

eg:输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数。请看下列代码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上就是嵌套if语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。

练习:
输⼊⼀个⼈的年龄
如果年龄<18岁,打印"少年"
如果年龄在18岁⾄44岁打印"⻘年"
如果年龄在45岁⾄59岁打印"中⽼年"
如果年龄在60岁⾄89岁打印"⽼年"
如果90岁及以上打印"⽼寿星"

在这里插入图片描述

1.5悬空else问题

如果有多个if和else的时候,else总是跟最接近的if匹配
下面以代码举例:

#include <stdio.h>
int main()
{int a = 0;int b = 5;if (a == 1)if (b == 5)printf("hello world.\n");elseprintf("good afternoon.\n");return 0;
}

观察上述代码,思考它输出的是什么呢?
我们在初学的时候,会有这样的思路:if先判断a是否等于1,代码中a不等于1,那么就执行else语句,最后得出的结果是:good afternoon.

那我们看看运行代码起来会得到什么结果呢?
在这里插入图片描述
结果得到的是什么也不输出。这是为什么呢?
这就是本小节介绍的悬空else问题。如果有多个if和else,可以记住这样一条规则:else总是跟最接近的if匹配。

代码解析:上述代码让else和第一个if语句对齐,让我们以为else是和第一个if匹配。当第一个if不成立的时候,自然想到的就是执行else语句,打印good afternoon,但实际上else是和第二个if进行匹配的,这样后边的if…else语句是嵌套在第一个if语句中的,如果第一个if语句不成立,那么嵌套的if和else就没有机会执行,最终什么也打印不出来。

这个时候如果加上大括号{ }就会使得代码更加清楚易于理解:

#include <stdio.h>
int main()
{int a = 0;int b = 5;if (a == 1){if (b == 5)printf("hello world.\n");elseprintf("good afternoon.\n");}return 0;
}

如果我们希望else确实和第一个if匹配,可以修改成如下代码:

#include <stdio.h>
int main()
{int a = 0;int b = 5;if (a == 1){if (b == 5)printf("hello world.\n");}else{printf("good afternoon.\n");}return 0;
}

只要带上适当的大括号,代码的逻辑就会更加清晰,所以写代码的时候可以注意大括号的使用,使得代码可读性更高

2、关系操作符

C语言用于比较的表达式,称为关系表达式,使用的运算符就称为关系操作符
下面介绍6个基本常用的操作符:

> 大于运算符
< 小于运算符
>= 大于等于运算符
<= 小于等于运算符
== 相等运算符
!= 不相等运算符

下面举例理解:

  • m=n
  • m!=n
  • m<n
  • m>n
  • m<=n
  • m>=n

关系表达式通常返回0或1,表示真或者假

C语言中,0表示假,所有非0值表示真(关系表达式中用1表示真)。eg:27>25返回1,19>20返回0。

关系表达式中常常用于if和while结构来判断真假进行循环

#include <stdio.h>
int main()
{int num = 0;scanf("%d",&num);if(num % 5 == 0)//关系表达式运用在if语句中printf("%d是5的倍数\n",num);return 0;

注意:相等运算符 ==与赋值运算符 = 是两个不一样的运算符,不要混淆。有时候,可能会不小心将相等运算符写成赋值运算符=,虽然可以运行,但得不到我们想要的效果。


if(x =5)

上述示例中,我们原本是想判断x是否与5相等,但是不小心写成了x=5.这个时候式子表示对变量x赋值为5,它的返回值为5(为真),所以if判断总是为真。

为了防止这种错误出现,我们可以将变量写在等号的右边。

if(5 =x)

如果把==写成了=的时候编译器就会报错。

在关系操作表达式中,多个关系运算符不宜连用

eg:错误示范

a>b>c

解析上面的示范:
在这里插入图片描述

eg:输入一个年龄,如果年龄在18-36岁之间,我们称为青年。

在这里插入图片描述

3、条件操作符

条件操作符也叫三目操作符,需要接受三个操作数的,形式如下:

exp1?exp2:exp3

条件操作符的计算逻辑是:如果exp1为真,则计算exp2,计算的结果就是整个表达式的结果。如果exp1为假,则计算exp3,计算的结果就是整个表达式的结果。

eg:使用条件操作符表示下列代码的逻辑:
在这里插入图片描述

参考解答:
在这里插入图片描述

eg2:使用条件表达式实现找两个数中的较大值:

在这里插入图片描述

4、逻辑操作符:与、或、非(取反)(&&,||,!)

逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符:

  • !:逻辑取反运算符(改变单个表达式的真假)
  • &&:逻辑与运算符,表示并且的意思(全真为真,其余全假)
  • ||:逻辑或运算符,就是或者的意思(两侧至少有一个为真,则整个为真)

注意:C语言中,非0表示真,0表示假

4.1逻辑取反运算符

在这里插入图片描述
eg:有一个变量flag,如果flag为假(0),要做什么事情,可以写如下代码:
在这里插入图片描述
在这里插入图片描述
如果flag为真,!flag为假,相反flag为假,!flag为真。
所以上述flag为假,取反后为真,执行if语句的代码。

4.2逻辑 与 运算符

在这里插入图片描述

&&就是与运算符,也是并且的意思,&&是一个双目操作符,使用的方式是a&&b,&&两边的表达式都是真的时候,整个表达式为真,只要有一个是假,则为假。

如果我们要表示6-8月是夏天,代码如何实现呢?
在这里插入图片描述

这里的month既要大于等于6,又要小于等于8,且同时必须满足。

4.3逻辑或操作符

在这里插入图片描述
||就是或运算符,也就是或者的意思,||也是一个双目操作符,使用的方式是a||b,||两边的表达式只要有一个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。

比如:我们说一年中月份是12月或者1月或者2月是冬天,那么我们怎么使用代码体现呢?
在这里插入图片描述

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

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

相关文章

小猪APP分发平台 – 掌握移动应用的推广新途径

在移动互联网高速发展的背景下小猪APP分发平台 – 掌握移动应用的推广新途径&#xff0c;app分发已成为开发者和企业关注的重点。小猪APP分发平台作为行业内的新星小猪APP分发平台 – 掌握移动应用的推广新途径&#xff0c;提供了一个创新且高效的方式帮助开发者推广他们的应用…

attr 与prop 的区别

在前端开发中&#xff0c;attr 和 prop 是两个常用的方法&#xff0c;用于操作 HTML 元素的属性和属性值。 它们之间的区别主要在于针对不同类型的属性操作。 attr&#xff08;&#xff09;&#xff1a; attr() 是 jQuery 中用来获取或设置 HTML 元素的属性的方法。它可以用于获…

ZOC8 for Mac v8.08.1激活版:卓越性能的SSH客户端

在远程连接和管理的世界中&#xff0c;ZOC8 for Mac以其卓越的性能和丰富的功能&#xff0c;成为了众多专业人士的首选SSH客户端。它支持SSH1、SSH2、Telnet、Rlogin、Serial等多种协议&#xff0c;让您轻松连接到远程服务器。ZOC8拥有简洁直观的界面和强大的功能设置&#xff…

SQL 基础 | JOIN 操作介绍

在SQL中&#xff0c;JOIN是一种强大的功能&#xff0c;用于将两个或多个表中的行结合起来&#xff0c;基于相关的列之间的关系。 JOIN操作通常用在SELECT语句中&#xff0c;以便从多个表中检索数据。 以下是几种基本的JOIN类型以及它们的用法&#xff1a; INNER JOIN&#xff1…

STM32 串口IDLE接收空闲中断+DMA

参考 http://t.csdnimg.cn/fAV38 1.基础知识 STM32 IDLE 接收空闲中断 功能&#xff1a; 在使用串口接受字符串时&#xff0c;可以使用空闲中断&#xff08;IDLEIE置1&#xff0c;即可使能空闲中断&#xff09;&#xff0c;这样在接收完一个字符串&#xff0c;进入空闲状态时&…

力扣39(组合总和)

解题思路&#xff1a;没有什么特殊的&#xff0c;按照递归三部曲确定返回值与参数&#xff0c;确定终止条件&#xff0c;确定单层循环的逻辑就可以解出来 代码实现&#xff1a; class Solution { public: vector<vector<int>>result; vector<int>path; vo…

(三)Appdesigner-界面转换及数据导入和保存

提示&#xff1a;文章为系列文章&#xff0c;可以在对应学习专栏里面进行学习。对应资源已上传 目录 前言 一、Appdesigner是什么&#xff1f; 二、界面切换 三、数据导入及保存 &#xff08;一&#xff09;数据导入 &#xff08;二&#xff09;数据保存 总结 前言 Appd…

ubuntu搭建kms服务器

1.下载kms开源包(如果提示找不到wget命令的话:apt install wget): wget https://github.com/Wind4/vlmcsd/releases/download/svn1111/binaries.tar.gz2.解压: tar -xzvf binaries.tar.gz接着cd 进入 Linux/intel/static/ 文件夹下: 3.选择对应的文件&#xff0c;这里我们选…

C++:继承-继承权限

在C中&#xff0c;类的权限分为公有、私有和保护三种。这些权限控制了类的成员&#xff08;数据成员和成员函数&#xff09;对外部代码的可见性和访问性。 公有&#xff08;public&#xff09;权限&#xff1a; 在公有权限下声明的成员可以被类的外部代码直接访问&#xff1b;公…

第十篇:深入文件夹:Python中的文件管理和自动化技术

深入文件夹&#xff1a;Python中的文件管理和自动化技术 1 文件系统基础操作 在今天的技术博客中&#xff0c;我们将深入探讨Python中的文件系统基础操作。文件系统对于任何操作系统都是不可或缺的组成部分&#xff0c;它管理着数据的存储、检索以及维护。Python通过其标准库中…

【Linux 进程】 自定义shell

目录 关于shell 1.打印提示符&&获取用户命令字符​编辑 2.分割字符串 3.检查是否为内建命令 cd命令 export命令 echo命令 1.输出最后一个执行的命令的状态退出码&#xff08;返回码&#xff09; 2.输出指定环境变量 4.执行外部命令 关于shell Shell 是计算机操…

QGraphicsView实现简易地图8『缓存视口周边瓦片』

前文链接&#xff1a;QGraphicsView实现简易地图7『异步加载-多瓦片-无底图』 前7篇的地图加载&#xff0c;都采用最少瓦片数量的算法&#xff0c;即用最少数量的瓦片覆盖视口&#xff0c;以获得最快的加载速度。但是这样会带来一个问题&#xff0c;那就是每当移动地图时&#…

代理ip的用途及是否可以降低延迟

代理IP具有广泛的应用领域&#xff0c;包括但不限于以下方面&#xff1a; 1. 匿名浏览和隐私保护 通过使用代理IP&#xff0c;您可以隐藏自己的真实IP地址&#xff0c;从而在网络上保持匿名。这对于维护个人隐私和保护个人身份非常重要。 2. 访问限制网站 代理IP可以绕过地理位…

免费开源,无需 GPU,本地化部署大语言模型的对话系统

免费开源&#xff0c;无需 GPU&#xff0c;本地化部署大语言模型的对话系统 分类 编程技术 项目名: FreeAskInternet -- 本地化部署大语言模型的对话系统 Github 开源地址&#xff1a; https://github.com/nashsu/FreeAskInternet FreeAskInternet 是一个免费开源的工具&am…

【小菜鸟之---Linux网络配置】

文章目录 1【子网和网关】2【网络连接模式】3【ifconfig-查看网络接口信息】3.1 查询网络接口信息3.2 ifconfig——设置网络接口参数【**设置网络参数的方式**】【**临时设置**】**【永久设置】** 4【hostname-主机信息】4.1 查看主机名4.2 主机名修改4.3 查看本机ip 5【route-…

Kotlin: Expecting a ‘>‘

数组值为任意类型&#xff0c;声明报错: Kotlin: Expecting a > var anyArr1: Array<Any?> arrayOf("a", "b", "c", true, 34)原因是&#xff1a; // var anyArr1: Array<Any?> arrayOf("a", "b", "c…

发电厂智能巡检机器人:让发电厂更安全、更高效

在发电厂的众多应用场景中&#xff0c;升压站、化学车间、空冷塔、输煤皮带、综合管廊等&#xff0c;一直以来都是人工巡检的主战场。然而&#xff0c;这些场所环境极为复杂&#xff0c;人工巡检面临着诸多难题&#xff0c;强度大、频率低、间隔长等问题突出。这使得设备在运行…

c++多线程基础

简介 c多线程基础需要掌握这三个标准库&#xff1a;std::thread, std::mutex, and std::async。 1. Hello, world #include <iostream> #include <thread>void hello() { std::cout << "Hello Concurrent World!\n"; }int main() {std::thread…

[NSSCTF]prize_p2

题目 打开是一段js代码 // 导入所需的模块 const { randomBytes } require(crypto); // 导入 crypto 模块&#xff0c;用于生成随机字节 const express require(express); // 导入 Express.js 模块&#xff0c;用于构建 Web 应用程序 const fs require(fs); // 导入文件系…

论文笔记:(Security 22) 关于“二进制函数相似性检测”的调研

个人博客链接 注&#xff1a;部分内容参考自GPT生成的内容 [Security 22] 关于”二进制函数相似性检测“的调研&#xff08;个人阅读笔记&#xff09; 论文&#xff1a;《How Machine Learning Is Solving the Binary Function Similarity Problem》&#xff08;Usenix Securi…