【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.rhkb.cn/news/319317.html

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

相关文章

深入理解网络原理3----TCP核心特性介绍(上)【面试高频考点】

文章目录 前言TCP协议段格式一、确认应答【保证可靠性传输的机制】二、超时重传【保证可靠性传输的机制】三、连接管理机制【保证可靠性传输的机制】3.1建立连接&#xff08;TCP三次握手&#xff09;---经典面试题3.2断开连接&#xff08;四次挥手&#xff09;3.3TCP状态转换 四…

「 网络安全常用术语解读 」通用漏洞报告框架CVRF详解

1. 背景 ICASI在推进多供应商协调漏洞披露方面处于领先地位&#xff0c;引入了通用漏洞报告框架&#xff08;Common Vulnerability Reporting Format&#xff0c;CVRF&#xff09;标准&#xff0c;制定了统一安全事件响应计划&#xff08;USIRP&#xff09;的原则&#xff0c;…

JSP与JavaBean

目录 一、JavaBean是什么 二、创建JavaBean 三、在JSP中使用JavaBean 1、按照Java语法直接使用 2、<jsp:useBean>动作 Bean的加载原理 scope属性的不同取值 3、<jsp:setProperty>动作 设置为一个表达式的值或字符序列 通过表单的参数的值来设置Bean的相应…

Find My无人机|苹果Find My技术与无人机结合,智能防丢,全球定位

无人机是利用无线电遥控设备和自备的程序控制装置操纵的不载人飞机&#xff0c;或者由车载计算机完全地或间歇地自主地操作。无人机按应用领域&#xff0c;可分为军用与民用。军用方面&#xff0c;无人机分为侦察机和靶机。民用方面&#xff0c;无人机行业应用&#xff0c;是无…

43 单例模式

目录 1.什么是单例模式 2.什么是设计模式 3.特点 4.饿汉和懒汉 5.峨汉实现单例 6.懒汉实现单例 7.懒汉实现单例&#xff08;线程安全&#xff09; 8.STL容器是否线程安全 9.智能指针是否线程安全 10.其他常见的锁 11.读者写者问题 1. 什么是单例模式 单例模式是一种经典的&a…

多多搜索推广计划怎么设置

拼多多推广可以使用3an推客。3an推客&#xff08;CPS模式&#xff09;给商家提供的营销工具&#xff0c;由商家自主设置佣金比例&#xff0c;激励推广者去帮助商家推广商品链接&#xff0c;按最终有效交易金额支付佣金&#xff0c;不成交不扣费。是商家破零、积累基础销量的重要…

自动化机器学习——网格搜索法:寻找最佳超参数组合

自动化机器学习——网格搜索法&#xff1a;寻找最佳超参数组合 在机器学习中&#xff0c;选择合适的超参数是模型调优的关键步骤之一。然而&#xff0c;由于超参数的组合空间通常非常庞大&#xff0c;手动调整超参数往往是一项耗时且困难的任务。为了解决这个问题&#xff0c;…

连接HiveMQ代理器实现MQTT协议传输

先下载MQTTX: MQTTX: Your All-in-one MQTT Client Toolbox 使用线上免费的MQTTX BROKER:The Free Global Public MQTT Broker | Try Now | EMQ 打开MQTTX&#xff0c;创建连接&#xff0c;点击NEW SUBSCRIPTION,创建一个主题&#xff0c;这里使用test/topic,在下面Json中填写…

使用 ORPO 微调 Llama 3

原文地址&#xff1a;https://towardsdatascience.com/fine-tune-llama-3-with-orpo-56cfab2f9ada 更便宜、更快的统一微调技术 2024 年 4 月 19 日 ORPO 是一种新的令人兴奋的微调技术&#xff0c;它将传统的监督微调和偏好校准阶段合并为一个过程。这减少了训练所需的计算…

Java零基础入门到精通_Day 8

1.API 应用程序接口 Java API:指的就是JDK 中提供的各种功能的Java类这些类将底层的实现封装了起来&#xff0c;我们不需要关心这些类是如何实现的&#xff0c;只需要学习这些类如何使用即可&#xff0c;我们可以通过帮助文档来学习这些API如何使用。 2. String String 类…

【副本向】Lua副本逻辑

副本生命周期 OnCopySceneTick() 子线程每次心跳调用 --副本心跳 function x3323_OnCopySceneTick(elapse)if x3323_g_IsPlayerEnter 0 thenreturn; -- 如果没人进入&#xff0c;则函数直接返回endif x3323_g_GameOver 1 thenif x3323_g_EndTick > 0 thenx3323_CountDown…

循环神经网络完整实现(Pytorch 13)

一 循环神经网络的从零开始实现 从头开始基于循环神经网络实现字符级语言模型。 %matplotlib inline import math import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2lbatch_size, num_steps 32, 35 train_iter, vocab …

分布式websocket IM即时通讯聊天开源项目如何启动

前言 自己之前分享了分布式websocket的视频有同学去fork项目了&#xff0c;自己启动一下更方便理解项目嘛。然后把项目启动需要的东西全部梳理出来。支持群聊单聊,表情包以及发送图片。 支持消息可靠&#xff0c;消息防重&#xff0c;消息有序。同时基础架构有分布式权限&…

OneFlow深度学习框原理、用法、案例和注意事项

本文将基于OneFlow深度学习框架&#xff0c;详细介绍其原理、用法、案例和注意事项。OneFlow是由中科院计算所自动化研究所推出的深度学习框架&#xff0c;专注于高效、易用和扩展性强。它提供了一种类似于深度学习库的接口&#xff0c;可以用于构建神经网络模型&#xff0c;并…

Android4.4真机移植过程笔记(三)

如果文章字体看得不是很清楚&#xff0c;大家可以下载pdf文档查看&#xff0c;文档已上传&#xff5e;oo&#xff5e; 7、安装加密APK 需要修改文件如下&#xff1a; 相对Android4.2改动还是蛮大的&#xff0c;有些文件连路径都变了: //Android4.2 1、frameworks/native/libs…

STL速查

容器 (Containers) 图解容器 支持随机访问 stringarrayvectordeque支持支持支持支持 string 类 构造函数 string(); ------创建一个空的字符串 例如: string str;string(const char* s); ------使用字符串s初始化string(const string& str); ------拷贝构造 赋值操作…

C++学习--点滴记录011

11函数提高 11.1 函数默认参数 在C中&#xff0c;函数的形参列表中的形参可以有默认值 语法&#xff1a; 返回值类型 函数名 &#xff08;参数 默认值&#xff09;{} 示例&#xff1a; #include <iostream> using namespace std;int func(int a, int b 10, int c …

网络基础-网络设备介绍

本系列文章主要介绍思科、华为、华三三大厂商的网络设备 网络设备 网络设备是指用于构建和管理计算机网络的各种硬件设备和设备组件。以下是常见的网络设备类型&#xff1a; 路由器&#xff08;Router&#xff09;&#xff1a;用于连接不同网络并在它们之间转发数据包的设备…

wpf线程中更新UI的4种方式

在wpf中&#xff0c;更新UI上面的数据&#xff0c;那是必经之路&#xff0c;搞不好&#xff0c;就是死锁&#xff0c;或者没反应&#xff0c;很多时候&#xff0c;都是嵌套的非常深导致的。但是更新UI的方式&#xff0c;有很多的种&#xff0c;不同的方式&#xff0c;表示的意思…

国内各种免费AI聊天机器人(ChatGPT)推荐(中)

作者主页&#xff1a;点击&#xff01; 国内免费AI推荐(ChatGPT)专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月29日15点20分 随着人工智能技术的不断发展&#xff0c;AI聊天机器人已经逐渐融入我们的日常生活。它们可以提供各种服务&#xff0c;例如聊天、…