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

news2024/11/17 15:54:37

【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");
	else
		printf("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");
	    else
		printf("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.coloradmin.cn/o/1642881.html

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

相关文章

从零开始学AI绘画,万字Stable Diffusion终极教程(五)

【第5期】ControlNet 欢迎来到SD的终极教程&#xff0c;这是我们的第五节课 这套课程分为六节课&#xff0c;会系统性的介绍sd的全部功能&#xff0c;让你打下坚实牢靠的基础 1.SD入门 2.关键词 3.Lora模型 4.图生图 5.controlnet 6.知识补充 在SD里面&#xff0c;想要…

Mysql复习笔记: 基础概念(待补充)

一. 基础概念 通用概念: 网络连接必须得分配给一个线程去进行处理&#xff0c;由一个线程来监听请求以及读取请求数据&#xff0c;比如从网络连接中读取和解析出来一条我们的系统发送过去的SQL语句 在数据库中&#xff0c;哪怕执行一条SQL语句&#xff0c;其实也可以是一个独立…

FLIR LEPTON3.5 热像仪wifi 科研实验测温采集仪

点击查看详情!点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情 1、描述 这是一款桌面科研实验测温热成像多功能热像记录仪&#xff0c;小巧轻便…

【C/C++】

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

## 01深度学习介绍与安装PyTorch

文章目录 深度学习的发展历史和基本概念早期历史兴起与发展基本概念 如何安装和设置PyTorch环境系统要求安装步骤验证安装 结语 深度学习的发展历史和基本概念 深度学习&#xff0c;一种通过使用具有多层结构的神经网络来学习数据的复杂模型的机器学习技术&#xff0c;近年来已…

Scikit是什么?

目录 一、Scikit是什么&#xff1f; 二、用Scikit做一个简单房价预测例子 三、sklearn知识点 一、Scikit是什么&#xff1f; Scikit就是scikit-learn&#xff0c;是一个免费软件机器学习库。 https://scikit-learn.org/stable/https://scikit-learn.org/stable/ 用于预测数…

ubuntu20配置深度学习环境

目录 系统环境安装anaconda文件的安装anaconda环境配置anaconda换中科大源常用的anaconda命令 安装显卡驱动安装CUDA下载cudnn安装pytorch更换conda源选择对应的pytorch版本进行安装 系统环境 ubuntu20&#xff0c;安装了ros noetic。 参考博客主要有&#xff1a; https://g…

【Spring】JdbcTemplate

JdbcTemplate 是 Spring 提供的一个 JDBC 模板类&#xff0c;是对 JDBC 的封装&#xff0c;简化 JDBC 代码 也可以让 Spring 集成其它的 ORM 框架&#xff0c;例如&#xff1a;MyBatis、Hibernate 等 使用 JdbcTemplate 完成增删改查 一、环境准备 数据库&#xff1a; 准备…

C++相关概念和易错语法(11)(npos、string的基本使用)

本文主要是分享一些基础的用法和接口&#xff0c;不会涉及迭代器版本&#xff0c;也没有底层概念&#xff0c;主要是保证简单入门和使用。 1.npos string本质上是一个类&#xff0c;里面包含了上百个成员函数&#xff0c;在调用这个头文件后&#xff0c;我们要知道整个类都被…

OpenCV 为轮廓创建边界框和圆(62)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV检测凸包(61) 下一篇 :OpenCV如何为等值线创建边界旋转框和椭圆(62) ​ 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 cv::boundingRect使用 OpenCV 函数 cv::mi…

foobar2000 for Mac:卓越音乐播放器

当您在寻找一款音质卓越、功能丰富的音频播放器时&#xff0c;foobar2000 for Mac无疑是您的首选。它拥有简洁明了的界面设计&#xff0c;易于上手&#xff0c;同时支持多种音频格式&#xff0c;让您无需担心兼容性问题。 foobar2000 for Mac v2.6.4免激活版下载 foobar2000 fo…

P6周人脸识别

一、前期准备 1.设置GPU import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import transforms, datasets import os,PIL,pathlib,warningswarnings.filterwarnings("ignore") #忽…

SQL:NOT IN与NOT EXISTS不等价

在对SQL语句进行性能优化时&#xff0c;经常用到一个技巧是将IN改写成EXISTS&#xff0c;这是等价改写&#xff0c;并没有什么问题。问题在于&#xff0c;将NOT IN改写成NOT EXISTS时&#xff0c;结果未必一样。 目录 一、举例验证二、三值逻辑简述三、附录&#xff1a;用到的S…

SpringBoot自定义定时任务

通常&#xff0c;在我们的项目中需要定时给前台发送一些提示性消息或者我们想要的定时信息&#xff0c;这个时候就需要使用定时任务来实现这一功能&#xff0c;实现也很简单&#xff0c;接下来具体来看看吧~ 简单定时任务 首先&#xff0c;你需要在你的启动类上加上开启定时任…

【人工智能Ⅱ】实验5:自然语言处理实践(情感分类)

实验5&#xff1a;自然语言处理实践&#xff08;情感分类&#xff09; 一&#xff1a;实验目的与要求 1&#xff1a;掌握RNN、LSTM、GRU的原理。 2&#xff1a;学习用RNN、LSTM、GRU网络建立训练模型&#xff0c;并对模型进行评估。 3&#xff1a;学习用RNN、LSTM、GRU网络做…

Photoshop中图像编辑的基本操作

Photoshop中图像编辑的基本操作 Photoshop中调整图像窗口大小Photoshop中辅助工具的使用网格的使用标尺的使用注释工具的使用 Photoshop中置入嵌入式对象Photoshop中图像与画布的调整画布大小的修改画布的旋转图像尺寸的修改 Photoshop中撤销与还原采用快捷键进行撤销与还原采用…

基于MQTT通信开发的失物招领小程序

项目架构设计 这个项目采用前后端分离的方式&#xff0c;重新设计了两条链路来支撑程序的信息获取和传递 前端的小程序页面再启动页面渲染时&#xff0c;直接通过DBAPI从后端数据库获取信息&#xff0c;直接渲染在小程序中项目中给DBAPI的定位是快速从后端获取信息&#xff0…

信息系统项目管理师0087:组织系统(6项目管理概论—6.2项目基本要素—6.2.6组织系统)

点击查看专栏目录 文章目录 6.2.6组织系统1.治理框架2.管理要素3.组织结构类型6.2.6组织系统 项目运行时会受到项目所在的组织结构和治理框架的影响与制约。为有效且高效地开展项目,项目经理需要了解组织内的组织机构及职责分配情况,帮助自己有效地利用其权力、影响力、能力、…

5分钟速通大语言模型(LLM)的发展与基础知识

✍️ 作者&#xff1a;哈哥撩编程&#xff08;视频号同名&#xff09; 博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 &#x1f3c6; 推荐专栏&#xff1a; &#x1f3c5; 程序员&#xff1a;职场关键角色通识宝…

【编程题-错题集】chika 和蜜柑(排序 / topK)

牛客对于题目链接&#xff1a;chika和蜜柑 (nowcoder.com) 一、分析题目 排序 &#xff1a;将每个橘⼦按照甜度由高到低排序&#xff0c;相同甜度的橘子按照酸度由低到高排序&#xff0c; 然后提取排序后的前 k 个橘子就好了。 二、代码 1、看题解之前AC的代码 #include <…