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

【C语言】分支和循环 C语言是结构化的程序设计结构,这里的结构是指。我们可以使用实现分支结构,使用实现循环结构。 阅读详情


前言

C语言是结构化的程序设计语言,这里的结构指的是顺序结构、分支结构、循环结构,C语言是能够实现这三种结构的,其实我们如果仔细分析,我们日常所常的事情都可以拆分为这三种结构或者这三种结构的组合。
我们可以使用 if 、 switch 实现分支结构,使用 for 、 while 、 do while 实现循环结构。
顺序结构是最简单的一种结构,程序按照代码书写的顺序依次执行语句,没有分支和循环。每条语句执行一次且仅执行一次。所以本期内容不会赘述,我们着重给大家介绍分支结构,下一期将介绍循环结构


一、if语句

1.if与else

if语法形式:

if ( 表达式 )
 语句

表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行
在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果是不是0,则语句执行。
else语法形式:

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

其实这也很容易理解,英语中if:如果,else:其他的
流程图如下:
在这里插入图片描述

2.默认控制一条语句

练习:输入一个年龄,>= 18岁就输出:成年,否则就输出:未成年

#include <stdio.h>
int main()
{
 	int age = 0;
 	scanf("%d", &age);
 	if(age>=18)
 		printf("成年\n");
 	else
 		printf("未成年\n");
 	return 0;
}

默认在 if 和 else 语句中默认都只控制一条语句,比如:

#include <stdio.h>
int main()
{
 	int age = 0;
 	scanf("%d", &age);
 	if(age>=18)
 		printf("成年\n");
 		printf("可以考驾照辣!\n");
 	else
 		printf("未成年\n");
 	return 0;
}

输入年龄16岁,打印的信息如下:

可以考驾照辣!
未成年

这是为什么呢?因为默认控制一条语句,所以我们要用括号括起来

#include <stdio.h>
int main()
{
 	int age = 0;
 	scanf("%d", &age);
 	if(age>=18)
 	{
 		printf("成年\n");
 		printf("可以考驾照辣!\n");
 	}
 	else
 		printf("未成年\n");
 	return 0;
}

这样问题就解决了。
另外,if还可以嵌套,就像这样

if (...){
	if ()
	{
		//...
	}
	else
	{
		//...
	}
}
else(...) {
	if () 
	{
		//...
	}
	else()
	{
		//...
	}
}

举个例子,

      if (age < 18) {
            printf("你是儿童或青少年。\n");
            if (age < 13) {
                printf("并且,你是儿童。\n");
            } else {
                printf("并且,你是青少年。\n");
            }
        } else {
            printf("你是成年人。\n");
            if (age < 60) {
                printf("并且,你是青年或中年人。\n");
            } else {
                printf("并且,你是老年人。\n");
            }
        }

但是,这样看起来较为繁琐,因此我们可以简洁地写为

	if (age < 18) {
		printf("你是儿童或青少年。\n");
		if (age < 13) {
			printf("并且,你是儿童。\n");
		}
		else {
			printf("并且,你是青少年。\n");
		}
	}
	else if (age < 60) {
		printf("你是成年人。\n");
		printf("并且,你是青年或中年人。\n");
	}
	else {
		printf("并且,你是老年人。\n");
	}

像这样地多分支条件语句,可以写成这样

	if(条件1){//...}
	else if(条件2){//...}
	else {//...}

3.悬空else

最后一个知识点就是悬空else问题,先看代码

#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;
}

结果是什么呢?
这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住这样一条规则, else 总是跟最接近 的 if 匹配。
上面的代码排版,让 else 和第一个 if 语句对齐,让我们以为 else 是和第一个if匹配的,当 if
语句不成立的时候,自然想到的就是执行 else 子句,打印 haha ,但实际上 else 是和第二个 if
进行匹配的,这样后边的 if…else 语句是嵌套在第一个 if 语句中的,如果第一个 if 语句就不
成立,嵌套 if 和 else 就没机会执行了,最终啥都不打印。


二、常用操作符

关于操作符,在后面的更新中,我会详细的讲解。
本文只介绍几种与分支结构相关的操作符。

1.关系操作符

C 语言用于比较的表达式,称为 “关系表达式”(relational expression),里面使用的运算符就称为“关系运算符”(relational operator),主要有下面6个。
• > :大于运算符
• < :小于运算符
• >= :大于等于运算符
• <= :小于等于运算符
• == :相等运算符
• != :不相等运算符
着重看一下后面两个,别混淆相等运算符==和赋值运算符=,!表示非的意思,!=就是不等于
关系运算符通常返回1/0,表示真假。

1>3//返回0,表示假

所以常用于if和while中

if (x == 3) {
 printf("x is 3.\n");
}

2.条件操作符

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

1 exp1 ? exp2 : exp3

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

int main()
{
 int a = 0;
 int b = 0;
 scanf("%d %d", &a, &b);
 b = a>5 ? 3:-3;
 printf("%d\n", b);
 return 0;
}

b等于多少呢?
因为a等于0,a>5为假,所以表达式结果是-3,b就等于-3
练习:使用条件表达式实现找两个数中较大值

#include <stdio.h>
int main()
{
 int a = 0;
 int b = 0;
 scanf("%d %d", &a, &b);
 int m = a>b ? a : b;
 printf("%d\n", m);
 
 return 0;
}

3.逻辑运算符

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
• ! :逻辑取反运算符(改变单个表达式的真假)。
• && :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
• || :或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。

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

!:逻辑取反运算符
如果变量 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真
&&:与运算符
&& 就是与运算符,也是并且的意思, && 是一个双目操作符,使用的方式是 a&&b , && 两边的表达式都是真的时候,整个表达式才为真,只要有一个是假,则整个表达式为假。
||:或运算符
两边的表达式只要有一个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
注意点:
C语言逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执行。
所以, || 操作符的左操作数的结果不为0时,就无需执行右操作数。
练习:

int main()
{
 int i = 0,a=0,b=2,c =3,d=4;
 i = a++ && ++b && d++;
 printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
 return 0;
}

解析:

这里的++符号是自增符号:
当++放在变量之前时(如++var),这被称为前置自增运算符(先增后用)
1.先将变量的值加1。
2.然后返回加1之后的新值
而当++放在变量之后时(如var++),这被称为后置自增运算符(先用后增)
1.先返回变量当前的值。
2.然后再将变量的值加1。
【后期会详细讲解】

那让我们看这道例题,a++,后置++,先用后加,因为a原值是0,并且是&&,那么后面不在计算,a++ && ++b && d++表达式返回值为0(假),即i = 0,后面a会自增,a = 0 + 1
输出结果:

a = 1
b = 2
c = 3
d = 4

将代码改为这样呢?

int main()
{
 int i = 0,a=0,b=2,c =3,d=4;
 i = a++||++b||d++;
 printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
 return 0;
}

||的话就是左边为真后面就不会执行了
输出结果:

a = 1
b = 3
c = 3
d = 4

三、switch语句

1.介绍

除了 if 语句外,C语言还提供了 switch 语句来实现分支结构。
switch 语句是一种特殊形式的 if…else 结构,用于判断条件有多个结果的情况。它把多重
的 else if 改成更易用、可读性更好的形式。

switch (expression) {
 case value1: statement
 case value2: statement
 default: statement
}

上⾯代码中,根据表达式 expression 不同的值,执行相应的 case 分支。如果找不到对应的值,
就执行 default 分支。

  • switch 后的 expression 必须是整型表达式(任何能够产生整数值的表达式)

  • case 后的值,必须是整形常量表达式(包含整型常量(如10、-20、42U等)、字符常量(如’X’)、枚举常量以及用算术运算符(+、-、*、/、%)连接这些常量的表达式)

  • case与value之间必须有一个空格

  • default 只能放在最后吗?其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满足实际需求的就可以。不过我们通常是把 default 子句放在最后处理的。

2.switch中的break

在此之前,我们先做一个练习

输入一个1~7的数字,打印对应的星期几
输入:1 输出:星期一
输入:2 输出:星期二
输入:3 输出:星期三
输入:4 输出:星期四
输入:5 输出:星期五
输入:6 输出:星期六
输入:7 输出:星期天

代码:

int main()
{
 int day = 0;
 scanf("%d", &day);
 switch(day)
 {
 case 1:
 	printf("星期⼀\n");
 case 2:
 	printf("星期⼆\n");
 case 3:
 	printf("星期三\n");
 case 4:
 	printf("星期四\n");
 case 5:
 	printf("星期五\n");
 case 6:
 	printf("星期六\n");
 case 7:
 	printf("星期天\n"); 
 }
 	return 0;
}

我们输入数字5,发现结果不尽人意:

星期五
星期六
星期日

为什么会打印三个呢,观察代码我们猜测因为5对应case 5,打印星期五,但是没有暂停,继续打印后面的内容。
其实,原因就是如此。
如何解决这个问题呢,需要break(暂停,打断),正如意思所说,break可以“打断”程序,遇到break会直接退出switch分支。
现在我们修改代码,可达到预期的结果。如下:

int main()
{
 int day = 0;
 scanf("%d", &day);
 switch(day)
 {
 case 1:
 printf("星期⼀\n");
 break;
 case 2:
 printf("星期⼆\n");
 break;
 case 3:
 printf("星期三\n");
 break; 
 case 4:
 printf("星期四\n");
 break; 
 case 5:
 printf("星期五\n");
 break;
 case 6:
 printf("星期六\n");
 break;
 case 7:
 printf("星期天\n"); 
 break;
 }
 return 0;
}

3.switch中的default

在使用 switch 语句的时候,我们经常可能遇到⼀种情况,比如 switch 后的表达式中的值无法匹
配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加入default 子句。
比如,在上面的例子中,如果输入不是1~7的数字的话,就输出“输入错误”,怎么做呢?使用default。如下:

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;
 }
 return 0;
}

四、总结

读到这里,相信你已经对C语言分支结构有一定的收获和理解。如果你觉得这篇博文对你有所帮助,请给我点个赞吧😁,感激不尽!
如果你愿意和我一起学习,请关注我吧ε=ε=ε=( ̄▽ ̄)🎉


完

C语言之《分支和循环语句》 我们知道一个原则,else总是和最接近的if相匹配,当a=0,if表达式是a=1时,if表达式则不成立,if不成立,那么就走else,但这段代码中有两个if,而else和最接近的if相匹配,else和第二个if相匹配,而if表达式又不成立,但else是和第二个if相匹配的,所以也走不了else,最终的结果就是什么都不输出。分支语句就像一条岔路口,你选择走了A,就走不了B,if和else是一样的,当一起出现了if和else,要么走if,要么走else,编译器运行代码绝对不会走了if又走else。 阅读详情

相关推荐

阿里云学生机2核4G,30分钟搞定DNF台服联机(CentOS 7.6保姆级教程)

本文提供阿里云学生机2核4G搭建DNF台服联机的详细教程,涵盖服务器选购、网络配置、服务端部署及客户端联机设置。通过CentOS 7.6系统优化和端口配置,30分钟内即可完成搭建,适合学生和技术爱好者低成本实现游戏联机体验。

weixin_42537919的博客 358

【C语言复习】分支和循环

对C语言分支(if 、switch)和循环(for 、while、 do while)进行详细讲解介绍

ChiaWei_Lee的博客 1337

Altium Designer操作技巧(4)——如何利用嘉立创EDA来输出3D封装到AD封装库?

本文介绍了利用嘉立创EDA和FreeCAD软件为PCB元件添加3D模型的方法。首先在嘉立创EDA中搜索元件编号并导出3D模型,然后使用FreeCAD删除3D模型中的PCB基板部分,最后将处理后的3D模型导入PCB封装库并更新到PCB设计中。文章详细讲解了每个步骤的操作流程,包括模型导出、基板删除、位置调整等关键环节,并提供了解决常见问题的方法。通过这种方法,电子工程师可以快速获得元器件的3D模型,提高PCB设计的准确性。

u012526819的博客 2582

C语言中的分支和循环

C语言作为一种功能强大且灵活的编程语言之一,其中分支与循环语句是控制其程序流程的核心部分。通过分支语句可以实现条件判断和多路径的选择,而循环语句则用于重复执行其中的某段代码。ifif-else二、C语言中的循环语句forwhiledo-whilebreakcontinue。

wbx99的博客 1285

【完美解决】Anaconda3安装后缺失大量文件,没有scripts、Library等目录

Anaconda3是官网下载的:https://www.anaconda.com/distribution/#download-section 我选择的是64位python 3.7的版本。 问题出现及现象: 我自己选择了一个D盘的目录D:\Tools\Anaconda3进行安装,装完后发现conda list命令无法执行,首先都到的是配置环境变量,然后发现安装目录下缺失大量文件(如下图)...

android之行 3万+

载波同步技术(一):BPSK的Costas Loop 载波同步

Author:McCrocodile 2010/11/04          载波的提取在相干解调中往往比较重要,根据信号中是否包含载频分量,载波同步一般也可以分为两种方法。包含载频分量的可以采用窄带滤波或者基本的锁相环环路来实现,不包含的则比较麻烦需要采用特殊的环路实现载波的同步。这里介绍的BPSK的载波恢复就属于后面一种。 对于不包含载频分量的信号载波同步一般有:同相-正交环(就是常说的Costas环)、判决反馈环(几乎可以适用所有调制方式)、同相-正交环衍生环(QPSK松尾环、N相同相-正交环)。

McCrocodile Blog 1万+

C语言的分支与循环

详细介绍C语言的分支与循环(适合初学者哦)

2501_91427877的博客 818

【C++】小猫钓鱼纸牌游戏--C++实现

小猫钓鱼问题: 描述:初始,两个人各有n张牌(牌面0-10),顺序固定,只能按顺序出牌。然后,两个人轮流在桌面上以接龙的方式出牌,当某个人放置的牌在桌面上已经出现时,他收起相同牌面及其中间的牌作为自己的筹码,同时需要再放一张牌到桌面。某人手上的牌出完后,另一个人继续出,直到两人手上都没牌为止,输出结束时两个人手上的筹码数。 #include<iostream> using namespace std; struct queue { int head; //队列首 int tail; //

qq_41344430的博客 3202

c语言分支和循环

主要讲解了c语言中分支与循环的内容

dragonroar 1486

YOLOv改进 | YOLOv11添加WTConv小波卷积,能够更有效地捕捉局部和全局特征

在计算机视觉目标检测领域,YOLO(You Only Look Once)系列算法凭借“单阶段检测”的高效性(一次前向传播同时完成目标定位与分类),已成为工业界与学术界的主流选择。从YOLOv1到YOLOv11,算法持续迭代优化,在速度与精度之间寻求平衡,广泛应用于自动驾驶、智能安防、工业质检等场景。为解决上述问题,本文提出一种基于,将输入特征图分解为不同频率的子带(低频全局信息与高频局部细节),并分别通过卷积操作提取局部与全局特征,最后融合多尺度特征,从而更有效地捕捉目标的局部细节与全局结构。

走向CTO的路上... 1247

Python爬虫实战:高德地图POI信息爬取(餐馆/加油站等),附选址分析技巧

高德API配置AMAP_KEY = "你的高德API Key" # 替换成自己的Key# 爬取参数CITY = "成都" # 城市DISTRICTS = ["锦江区"] # 区域,可添加多个(比如["锦江区", "武侯区"])KEYWORDS_LIST = ["川菜馆", "加油站"] # 要爬取的POI类型TYPES = {"川菜馆": "050101", # 餐饮服务→中餐→川菜馆(高德POI分类编码)"加油站": "110100" # 交通设施→加油站。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2467

关于C语言中的分支和循环

编程解决问题实际上是建立一个模型用于描述实际问题,并将解决问题的方法转化成一个个基本步骤并用程序来执行的过程,而分支就是用于描述基本步骤中选择这一种步骤的。顾名思义,分支就像是岔路口,有不同的方向,通过执行分支语句来选择其中一种。通俗地说,分支语句是在对不同情况做选择。什么是循环?循环就是反复,重复执行某个类似的过程。对于许多实际问题,我们都可以通过循环,反复执行某一个步骤来求解或进行某些操作从而解决它。由于计算机擅长计算,因此用编程解决问题时可以充分利用这一优点。

Elysia_loveforev的博客 830

深入理解SQL注入中的union select 1,2,3....

UNION 用于合并两个查询的结果集

渗透之路,攻防之间皆学问 2万+

【思维导图】C语言—分支与循环

像for循环,while循环,do-while循环,以及各循环的之间使用的区别,在循环里面又涉及break语句,contiune语句,goto语句,最后以我们现有C语言的知识我们还学会了一个关机小程序,这个关机小程序我有详细的一篇博客介绍,同时还有这个思维导图的详细知识博客,都已经贴在下面啦~里面包括 if语句,if-else语句,switch-case语句,语句中同时涉及运算,所以我们又学习了各种操作符,像。上节我们回顾了C语言数据类型与变量,今天我们来回顾。,即分为两大点,分支,循环,

稻草人 2511

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【c语言】分支和循环语句

C语言中的分支与循环语句的用法以及它们之间的区别。

2403_88429866的博客 1459

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C语言——分支与循环

在本章中,我将为大家详细的介绍分支与循环,方便初学者理解在C语言的学习中,我们可以用if语句和switch语句实现分支结构,用for语句、while语句和do-while语句实现循环语句首先介绍的是分支结构。

m151213的博客 1938

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C语言——分支和循环(详解)

C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构。我们可以使用 if 、 switch 实现分支结构,使用 for 、 while 、 do while 实现循环结构。

m0_66687213的博客 1899

C语言——分支和循环

if语句语法形式如下。表达式成立(为真,即为1),则语句1执行;表达式不成立(为假,即为0),则语句2执行。 举一个例子:输入一个整数,判断是否为奇数,如果是奇数就打印奇数,否则打印偶数。 if语句的嵌套:在if else语句中,else可以和另外一个if语句连用,构成多重判断。比如:要求输入一个整数,判断输入的整数是0,还是正数或者负数。 2、关系操作符 关系运算符主要有6个,分别为: 关系表达式通常返回0或1,表示真假。比如1>2为假

Soung_ue的博客 1672

c语言的分支和循环语句

c语言是结构化的程序设计语言,结构是指顺序结构/循环结构/选择结构,我们可以使用if,switch 来实现分支结构,使用for,while,do while来实现循环结构 在C语言中,0为假,非0为真,也就是表达式的结果是0则语句不执行,反之如果表达式结果不为0,则语句执行 例子:输入一个整数,判断是否为偶数 2.else 如果一个数不是偶数那就是奇数了,这个时候我们就可以用if...else...的语句表示了 那我们就接着上个例子继续完善它吧 3.分支中包含多

2402_88631484的博客 1687

【C语言】C语言初步——分支循环语句

本文介绍了C语言中的分支语句和循环语句。分支语句包括if-else和switch语句,if用于条件判断,switch适合多分支情况。循环语句涵盖while、for和do-while三种形式,其中for循环使用最多,do-while至少执行一次循环体。文章还讲解了break和continue关键字的作用:break用于终止循环,continue跳过当前循环。通过打印1-10的代码示例,展示了不同语句的语法特点和使用方法,强调要根据实际需求灵活选择语句结构,培养编程思维。

小年糕的博客 1387

C语言分支循环语句简介

目录1.分支语句和循环语句的基本语法2.分支语句基本用法3.循环语句基本用法4.分支循环语句的嵌套 C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。有了这三种结构我们就可以用C语言来解决许多问题。分支语句一共有两种分别是 if esle 语句和 switch 语句。循环语句有三种分别是 for 循环、while 循环和 do while 循环。 if语句的

YxxxL_striving的博客 1966

C语言分支和循环语句

执行完循环体内的代码后,程序会回到 while 语句处,再次检查 condition 的值,若为真则再次执行循环体中的代码,这个过程会一直重复,直到 condition 的值为假,此时循环终止,程序会继续执行循环之后的下一条语句。🔸此代码最后只打印出10个hehe,这是因为 i 和 j 都省略了初始化部分,尤其是 j 省略了 j=0,这会导致第一次外循环进来的时候,j 的内循环已经循环了三次,j 已经变成10了,当 i 再次增加的时候内循环就进不去了,所以只输出了10个。)结尾,这是C语言中语句的标志;

2301_81591231的博客 1637
上一篇: 【C语言】printf与scanf
下一篇: 【C语言】分支和循环(下)
2023dream
博客等级 码龄3年 160粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2023dream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值