分支与循环(上)

ops/2025/3/16 6:54:30/

1.if else语句

1.1:if else语句的三种情况

//第一种
if(判断条件)
{执行代码块1;
}//第二种
if(判断条件)
{执行代码块1;
}
else
{
执行代码块2;
}//第三种
if(判断条件1)
{执行代码块1;
}
else if(判断条件2{
执行代码块2;
}
else if(判断条件3{
执行代码块3;
}
else
{
执行代码块4;
}//第四种:if else语句嵌套
if(判断条件1)
{执行代码块1;
}
else
{if(判断条件2){执行代码块2;}else(判断条件3){执行代码块3;}
}

1.2:if语句与else语句在默认条件下,只控制一条语句,若希望它们控制多条语句,需要用大括号将多条语句括起来。

1.3:else总是与距离最近的if匹配

这段代码的执行结果是什么?

int main()
{int a = 0;int b = 2;if (a == 1)if (b == 2)printf("hehe\n");elseprintf("haha\n");return 0;
}

第一个if表明上看起来是与else匹配,但与else距离最近的是第二个if,因此它俩才是匹配的。if (a == 1)控制了if (b == 2),由于第一个if的判断条件为假,因此不会执行第二个if语句,由于没有判断b是否等于2,else语句也不会执行。综上所述:代码啥也不打印。

2.三类操作符

2.1:关系操作符

在这里插入图片描述

2.1.1:含有关系操作符的表达式称为关系表达式,关系表达式的返回值通常为0(关系表达式为假)或1(关系表达式为真),

在这里插入图片描述

int main()
{int a = (3 == 5);printf("%d\n", a);//0int b = (3 == 3);printf("%d\n", b);//1return 0;
}
2.1.2:多个关系操作符不适合连用

下面这个代码执行的结果是什么?

int main()
{int a = 3, b = 7, c = 4;if (a < b < c){printf("hehe\n");}return 0;
}

a<b<c这个关系表达式并不是比较a、b、c的大小关系,而是先判断a是否小于b,发现a小于b为真,然后返回1,再用1与c比较大小,发现1<c为真,返回1,故if语句的判断条件为真,打印hehe

若希望比较a、b、c的大小关系,应该写成a < b && b < c

2.2:三目操作符(含有3个操作数)

在这里插入图片描述

2.2.1:利用三目操作符,找出两个整数中的较大值
int main()
{int a = 0, b = 0, max = 0;scanf("%d %d", &a, &b);max=(a > b ? a : b);printf("较大值是%d", max);return 0;
}

2.3:逻辑运算符:逻辑与&&、逻辑或||、逻辑取反!

在这里插入图片描述

2.3.1:判断年份是否为闰年

能被4整除但不能被100整除,或者能被400整除的就是闰年

int main()
{int year = 0;scanf("%d", &year);if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 )printf("%d是闰年\n", year);elseprintf("%d不是闰年\n", year);return 0;
}
2.3.2:&&和||的短路现象

在这里插入图片描述
下面两段代码的执行结果是什么

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

先执行a++。a++表达式的值为0,a的值变为1。由于a++表达式的值为0,则括号内整体表达式为假(++b 与c++未执行),返回0,故i=0.
综上所述,a、b、c、i的值依次为1、2、4、0

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

先执行a++,a++表达式的值为0,a的值变为1,接着执行++b,++b表达式的值为3(为真),则整个表达式的值为真(c++未执行),返回1,故i的值为1。综上所述,a、b、c、i的值依次为1、3、4、1

3.switch语句

3.1switch语句的语法格式

 switch(整型表达式或者字符表达式)//字符在内存中存的是Ascll码值,Ascll码值是整数,因此字符也属于整型家族{case 整型常量表达式1或字符常量表达式1 :代码块1;break;case 整型常量表达式2或字符常量表达式2 :代码块2;break;default ://当整型表达式或者字符表达式的值无法与case语句匹配时,就会跳到default语句后的代码块3代码块3;break;}
3.1.1练习题

输入一个整数,若输入的是1 ~ 5则输出工作日,若输入的是6 ~ 7,则输出休息日

#include<stdio.h>
int main()
{int n = 0;printf("请输入一个整数\n");scanf("%d", &n);switch (n){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;
}

3.2:switch语句中case语句与break语句的作用

case语句决定了switch语句的入口,break语句决定了switch的出口

3.3:switch语句中的default语句必须放在case语句的前面吗?

不是,default语句与case语句的顺序不做要求,但通常是先写case语句,最后写default语句

4.while循环

4.1:while循环的执行流程图

4.2:while循环、for循环、do while循环与if语句、else语句一样,默认只控制一条语句,若希望控制多条语句,就用大括号括起来。

int main()
{int i = 1;while (i)printf("hehe\n");printf("haha\n");return 0;
}//死循环的打印hehe,不会打印haha

5.for循环(用的最多)

5.1:for循环的语法格式

for(表达式1;表达式2;表达式3)循环语句;

1.表达式1:循环变量的初始化(只会执行1次)
2.表达式2:循环结束条件的判断
3.表达式3:调整循环变量的值
4.三个表达式之间用英文分号隔开,且三个表达式均可以是空语句

5.2:for循环的执行流程图

在这里插入图片描述

6.do while循环(用的最少)

6.1:do while循环的语法格式

do
{
循环体语句;
}while(判断条件);

6.2:do while循环与while循环、for循环的不同点

for循环与while循环是先进行条件判断,若条件为真就进入循环体,否则就不进入循环体。而while循环是先进入循环体,再进行条件判断,若条件为真就进入循环体,否则就不进入循环体。

6.3:do while循环的执行流程图

在这里插入图片描述

7、三种循环中的break语句与continue语句的作用

1.break语句在三种循环中的作用:永久的终止循环
2.continue语句在while循环与do while循环中的作用:跳过循环体中continue后面的代码,直接来到循环的判断条件进行判断(终止一次循环)
3.==continue语句在for循环中的作用:==跳过循环体中continue后面的代码,来到表达式3调整循环变量的值

int main()
{int i = 1;while (i <= 10){if (i == 3)continue;printf("%d ", i);//打印完1和2后就死循环了i++;}return 0;
}
int main()
{for (int i = 1; i <= 10; i++){if (i == 3)continue;printf("%d ", i);//1 2 4 5 6 7 8 9 10}return 0;
}
int main()
{int i = 1;do{if (i == 3)continue;printf("%d ", i);打印完1和2后就死循环了i++;} while (i<=10);return 0;
}

http://www.ppmy.cn/ops/166146.html

相关文章

CentOS 7 系统上安装 SQLite

1. 检查系统更新 在安装新软件之前&#xff0c;建议先更新系统的软件包列表&#xff0c;以确保使用的是最新的软件源和补丁。打开终端&#xff0c;执行以下命令&#xff1a; sudo yum update -y -y 选项表示在更新过程中自动回答 “yes”&#xff0c;避免手动确认。 2. 安装 …

【Go学习】04-4-Gorm框架-增删改查事务钩子

【Go学习】04-4-Gorm框架-增删改查 增删改查插入数据用指定的字段创建忽略字段批量插入map创建sql表达式使用原生sql语句 更新数据保存数据更新单个列更新多列更新选定的字段表达式子查询更新 删除数据查询数据查询函数whereselectorder分页count分组直接执行sql语句 事务和Hoo…

74.HarmonyOS NEXT ImageItemView组件深度剖析:组件基础结构与核心状态管理(一)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT ImageItemView组件深度剖析&#xff1a;组件基础结构与核心状态管理(一) 文章目录 HarmonyOS NEXT ImageItemView组件深度剖析&…

电路原理(电容 集成电路NE555)

电容 1.特性&#xff1a;充放电&#xff0c;隔直流&#xff0c;通交流 2.电容是通过聚集正负电荷来存储电能的 3.电容充放电过程可等效为导通回路 4.多电容并联可以把容量叠加&#xff0c;但是多电容串联就不会&#xff0c;只会叠加电容的耐压值。 6.电容充放电时相当于通路&a…

二叉树的层序遍历(102)

102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …

《Python实战进阶》No23: 使用 Selenium 自动化浏览器操作

No23: 使用 Selenium 自动化浏览器操作 摘要 Selenium 是自动化浏览器操作的“瑞士军刀”&#xff0c;可模拟人类行为操作网页&#xff0c;适用于爬虫、测试、重复任务自动化等场景。本集通过代码驱动实战&#xff0c;从安装配置到复杂交互&#xff0c;带你掌握 Selenium 的核…

【量化策略】双均线交叉策略

【量化策略】双均线交叉策略 &#x1f680;量化软件开通 &#x1f680;量化实战教程 技术背景与应用场景 双均线交叉策略是一种基于移动平均线的经典量化交易策略&#xff0c;广泛应用于股票、期货、外汇等金融市场。该策略通过计算短期和长期两条移动平均线的交叉点来生成…

软考网络安全专业

随着信息技术的迅猛发展&#xff0c;网络安全问题日益凸显&#xff0c;成为社会各界普遍关注的焦点。在这样的背景下&#xff0c;软考网络安全专业应运而生&#xff0c;为培养高素质的网络安全人才提供了有力支撑。本文将对软考网络安全专业进行深入剖析&#xff0c;探讨其在信…