C语言王国——选择与循环(1)

目录

一、引言

二、选择结构

1,if语句

1.1,if...else...语句

1.2,多分支语句

1.3悬空else的问题

2,switch语句

2.1,switch

2.2,break

2.3,default


一、引言

       写了几个C语言代码我发现C语言程序和我们做事一样,按照顺序做事,选择做某事或者重复做某事。那我们继续对C语言深入认知:

C语言是结构化的程序设计语言,这⾥的结构指的是顺序结构、选择结构、循环结构,C语言是能够实 现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种 结构的组合。

 顺序结构:就如我们人做事一样一样的进行。

选择结构:就是对多个分支选择一个进行。用if、swich语句来实现。

循环语句:对同一件事反复进行。用for、while、do while语句来实现。

        那接下来就让我们了解这些结构:

二、选择结构

*顺序结构大家已经耳熟能详了,C语言中也没有对顺序结构有特殊的语句所以不再做详细叙述。

1,if语句

1.1,if...else...语句

if语句的语法表达式如下:

if (//表达式)
{//语句1
}
else//语句2

*若语句只为一句,大括号可以不加。

这个代码执行的逻辑就是,表达式成立则执行语句1,反之则执行语句2。

那C语言怎么判断表达式成立的呢?

在C语言中有一个特别的数0,0则代表假,非0则代表真。

举一个例子方便大家理解:

输出a和b中大的数字

if (a>b)
{printf("%d",a);
}
elseprintf("%d",b);

正如代码上显示的表达式为a>b,若成立则而1即为真,则打印a;若不成立则为0,即为假。则打印b,

1.2,多分支语句

       有细心的人就会发现只有if和else那只能分成两种情况啊,那如果多种情况我们该如何编写呢?其实大家不用担心,C语言在设计的时候已经考虑到了这个问题,那就是在if..else...语句中,else可以与另外一个if语句连用,构成多重判断。

举个例子:

判断整数的正负性

#include<srdio.h>int main()
{int num = 0;scanf("%d",&num);if(num > 0)printf("你输入的数字为正数");else if(num < 0)printf("你输入的数字为负数")elseprintf("你输入的数字为0");return 0;
}

这个例子中就很好的利用到了else if,最后再加上一个else把没有讨论到的0也加上去。

*else if的使用其实就是构成了嵌套的if语句。

*if语句也可以在if语句中使用也属于if语句的嵌套。

1.3悬空else的问题

       在写代码中常常会遇到else写着写着位置跑丢了,不知道跟谁匹配了。那接下来姜糖就跟大家聊一聊这个问题。

        大家如果遇到有多个if和else,可以记住这样的一条规则,else总是跟最接近的if匹配。那大家就来看看下面这个代码:

#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1)if(b == 2)printf("hehe\n");elseprintf("haha\n");return 0;
}

 大家那想一想输出结果是什么呢?

输出结果为啥也没有输出,嘿嘿嘿,想到了吗?

没想到也没有问题,接下来我们一起来分析一下:

       可能有些人会想else跟第一个if对齐的所以a=0不=1所以输出haha。但我上面不是跟大家说过吗,else总是跟最接近的if匹配所以else是和第二个if相匹配,而大家所认为的对齐和排版是不绝对这个的,大家可以试试你把代码放一行也是可以运行的。排版只是方便程序员的理解。

比如我改一下这个代码:

#include <stdio.h>
int main()
{int a = 0;int b = 2;if (a == 1)if (b == 2)printf("hehe\n");elseprintf("haha\n");return 0;
}

这样子,大家是不是更好理解了。

        或许有的人希望让这个else与第一个if匹配那有什么办法了。 豁,还真有办法,数学中你想让什么在一起计算加括号就行了,那我这边也是不是可以加括号呢?是的,只不过加的是大括号。这样我们就可以这样修改这个代码:

#include <stdio.h>
int main()
{int a = 0;int b = 2;if (a == 1){if (b == 2)printf("hehe\n");}else{printf("haha\n");}return 0;
}

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

2,switch语句

2.1,switch

在C语言中的选择结构中除了if语句外,C语言还提供了switch语句来实现分支结构。

switch 语句是⼀种特殊形式的if...else 结构,用于判断条件有多个结果的情况。它把多重 的 else if 改成更易用、可读性更好的形式。

代码定义如下:

switch(条件语句)
{case 条件1: 语句1case 条件2: 语句2default: 语句3
}

 switch语言中是根据条件语句中不同的值,执行相对应的case分支。如果没有对应的值则执行default分支。

注:

*switch中的条件语句必须是整形表达式

*case后的值,必须是整形常量表达式

那让我来用switch来举个例子:

输入一个整数输入➗3之后的余数

#include <stdio.h>
int main()
{int n = 0;scanf("%d", &n);switch (n % 3){case 0:printf("整除,余数为0\n");break;case 1:printf("余数是1\n");break;case 2:printf("余数是2\n");break;}return 0;
}

以上的代码有两点值得我们注意:

1,case和后面的数字之间必须有空格。

2,每一个case语句中的代码执行完之后,需加上break,才能跳出这个switch语句。

2.2,break

       细心的人已经发现了我在每一个case语句中的代码执行完之后,加上了break,那如果不加会怎么样呢?

#include <stdio.h>
int main()
{int n = 0;scanf("%d", &n);switch (n % 3){case 0:printf("整除,余数为0\n");case 1:printf("余数是1\n");case 2:printf("余数是2\n");}return 0;
}

我们发现10/3余数为1,结构程序还多打印了一行余数为2。

这是为什么呢?

原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执行,有可能执行其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。就比如上面的代码就执行了 case 2 中的语句。 所以在 switch 语句中 break 语句是非常重要的,能实现真正的分支效果。 当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。

2.3,default

在选择结构的多分支中我们常常不能把情况选完,但可以把他们全都归为一类,所以就诞生了else,和default。他们的用法是相同的,只不过放在不同的语句中。

接下来我就举一个例子让大家更深刻的了解他们(用default):

#include<stdio.h>
int main()
{int day = 0;scanf("%d", &day);switch (day){case 1:case 2:case 3:case 4:case 5:printf("⼯作⽇\n");break;case 6:case 7:printf("休息⽇\n");break;default:printf("输⼊错误\n");break;}}

在一个星期中只有七天,那输入的超过7呢,那就提醒他输入错误。

那default和case在switch语句中有顺序要求吗?答案是没有的,只不过我们通常喜欢把default放在最后方便理解。

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

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

相关文章

华为坤灵交换机S300, S500, S210,S220, S200, S310 如何WEB抓包

通过S系列交换机配置端口镜像实现抓包 1、应用场景 端口镜像是指将经过指定端口(源端口或者镜像端口)的报文复制一份到另一个指定端口(目的端口或者观察端口)。在网络运营与维护的过程中&#xff0c;为了便于业务监测和故障定位&#xff0c;网络管理员时常要获取设备上的业务报…

队列——一种操作受限的线性表

队列 队列&#xff08;Queue&#xff09;简称队&#xff0c;也是一种操作受限的线性表&#xff0c;只允许在表的一端进行插入&#xff0c;而在表的另一端进行删除。向队列中插入元素称为入队或进队&#xff0c;删除元素称为出队或离队。队列中的元素是先进先出&#xff08;Fir…

MySQL学习——选项文件的使用

MySQL 的许多程序都可以从选项文件&#xff08;有时也被称为配置文件&#xff09;中读取启动选项。选项文件提供了一种方便的方式来指定常用的选项&#xff0c;这样你就不必每次运行程序时都在命令行上输入这些选项。 要确定一个程序是否读取选项文件&#xff0c;你可以使用 -…

man命令的作用

man命令是Linux操作系统中一个非常实用的命令&#xff0c;它用于查看命令的手册页面&#xff0c;帮助用户了解特定命令的用法、选项和参数。这不仅对新用户在学习如何使用新命令时很有帮助&#xff0c;也方便了经验丰富的用户快速查找命令的详细信息。以下是具体介绍&#xff1…

[论文精读]Supervised Community Detection with Line Graph Neural Networks

论文网址:[1705.08415] Supervised Community Detection with Line Graph Neural Networks (arxiv.org) 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 ⭐内涵大量可视…

高速模拟信号链的设计学习

目录 概述&#xff1a; 定义&#xff1a; 断开&#xff1a; 链路设计&#xff1a; 结论&#xff1a; 概述&#xff1a; 由于对共模参数及其与设备之间的关联缺乏了解&#xff0c;客户仍然会提出许多技术支持问题。ADC数据表指定了模拟输入的共模电压要求。关于这方面没有太…

jenkins应用2

1.jenkins应用 1.jenkins构建的流程 1.使用git参数化构建&#xff0c;用标签区分版本 2.git 拉取gitlab远程仓库代码 3.maven打包项目 4.sonarqube经行代码质量检测 5.自定义制作镜像发送到远程仓库harbor 6.在远程服务器上拉取代码启动容器 这个是构建的整个过程和步骤…

C# 反射类Assembly 程序集(Assembly)用法

常见的两种程序集&#xff1a; 可执行文件&#xff08;.exe文件&#xff09;和 类库文件&#xff08;.dll文件&#xff09;。 在VS开发环境中&#xff0c;一个解决方案可以包含多个项目&#xff0c;而每个项目就是一个程序集。 他们之间是一种从属关系&#xff0c;也就是说&…

【NLP开发】Python实现聊天机器人(微信机器人)

&#x1f37a;NLP开发系列相关文章编写如下&#x1f37a;&#xff1a;1&#x1f388;【小沐学NLP】Python实现词云图&#x1f388;2&#x1f388;【小沐学NLP】Python实现图片文字识别&#x1f388;3&#x1f388;【小沐学NLP】Python实现中文、英文分词&#x1f388;4&#x1…

转让北京电力施工总承包二级资质变更条件和流程

在电力工程领域&#xff0c;资质等级是企业能否参与竞标、承接工程的重要标志之一。北京电力工程总包二级资质的转让&#xff0c;是指已经取得该资质的企业将其资质转让给需要的企业。这种转让是基于合作与共赢的原则&#xff0c;旨在推动电力工程行业健康、稳定发展&#xff0…

记录使用自定义编辑器做试题识别功能

习惯了将解析写在代码注释&#xff0c;这里就直接上代码啦&#xff0c;里面用到的bxm-ui3组件库是博主基于element-Plus做的&#xff0c;可以通过npm i bxm-ui3自行安装使用 // 识别方法&#xff1a; // dom 当前识别数据所在区域, questionType 当前点击编辑选择的题目类型&a…

Qt | Qt 资源简介(rcc、qmake)

1、资源系统是一种独立于平台的机制,用于在应用程序的可执行文件中存储二进制文件(前面所讨论的数据都存储在外部设备中)。若应用程序始终需要一组特定的文件(比如图标),则非常有用。 2、资源系统基于 qmake,rcc(Qt 的资源编译器,用于把资源转换为 C++代码)和 QFile …

java—MyBatis框架

简介 什么是 MyBatis&#xff1f; MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&…

软件公司为什么必须要使用低代码系统?

在当今软件行业全国比较内卷的大环境下&#xff0c;软件公司面临着前所未有的挑战。为了在这个竞争激烈的市场中生存并脱颖而出&#xff0c;驰骋低代码设计者认为&#xff0c;软件公司必须要使用低代码系统。以下是几个关键的原因&#xff1a; 时代发展的必然选择 低代码系统是…

领导力中的说服艺术

本文主要介绍了亚里士多德修辞三角理论&#xff0c;即演讲者在说服听众时如何运用品格&#xff08;Ethos&#xff09;、情感&#xff08;Pathos&#xff09;和逻辑&#xff08;Logos&#xff09;三种基本的修辞手法。原文: The Art of Persuasion in Leadership 亚里士多德的说…

【自动驾驶技术】自动驾驶汽车AI芯片汇总——地平线篇

0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解及成果&#xff0c;但是内容可能存在不准确的地方。如果发现文中错误&#xff0c;希望批评指正&#xff0c;共同进步。 本篇文章是这个系列的第二篇&#x…

50个常用的Docker命令及如何使用

这里整理了50个常用的Docker命令以及每个命令的使用方法。 docker version:显示Docker版本信息。 示例:docker version docker info:显示Docker系统信息。 示例:docker info docker pull <image>:从Docker Hub下载镜像。 示例:docker pull ubuntu docker run <i…

CMake编译安装、生成可执行程序、生成静态动态库以及静态动态库的链接

1 CMake介绍 CMake是一个开源的、跨平台的构建系统&#xff0c;用于管理软件从源代码到可执行文件的整个构建过程。它最初由Kitware公司为ITK&#xff08;Insight Segmentation and Registration Toolkit&#xff09;和VTK&#xff08;Visualization Toolkit&#xff09;等开源…

在Linux kali下载、安装Perl环境

目录 Perl介绍 下载安装 官网下载 在Windows安装 在Linux和Mac OS安装 Perl介绍 Perl一种功能丰富的计算机程序语言&#xff0c;运行在超过100种计算机平台上&#xff0c;适用广泛&#xff0c;从最初是为文本处理而开发的&#xff0c;现在用于各种任务&#xff0c;包括系统…

面试官:Spring中都应用了哪些设计模式?

设计模式是我们项目中经常会涉及到的项目进行重构、解构时的一种方法。 比如我们常见的单例模式、工厂模式、策略模式、装饰器模式等都是比较常用的&#xff1b;关于 23 种设计模式&#xff0c;大家可以找本书专门去学习一下&#xff0c;在 Java 框架的源码中也不例外&#xf…