【C语言入门】分支和循环

news2024/11/15 19:45:40

 ✨✨欢迎大家来到Celia的博客✨✨

🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉

所属专栏:C语言

个人主页:Celia's blog~

目录

引言

1. if语句

1.1 if

 1.2 else

1.3 if的嵌套 

2. 操作符

2.1 关系操作符

2.2 条件操作符 

2.3 逻辑操作符

2.3.1 逻辑取反运算符 !

2.3.2 逻辑或运算符 | |​编辑

2.3.3 逻辑与运算符 &&

3. switch语句

4. 循环

4.1 while循环

4.2 for循环

4.3 do while循环

5. break 与continue语句

6.循环的嵌套

7.goto语句


引言

  在C语言中,有三种结构,分别是顺序结构,选择结构,循环结构,这篇文章将会简单介绍选择结构和循环结构。

1. if语句

1.1 if

  if语句的语法如下:

if(表达式)
{
    语句
}

在C语言中,0为假,非0为真, 如果表达式里的结果为真,就执行下面的语句,反之不执行。 

 举例:

#include<stdio.h>
int main()
{
	int a = 3;
	if(a==3)
	{
		printf("%d", a);
	}
	return 0;
}

这个程序会判断a是否等于3,如果是则输出a的值。结果如下:

 

注意: 如果if后只有一条语句,是可以不加花括号的,如果if后有多条语句,就必须加上花括号。

 1.2 else

  如果一个数不是偶数,那么这个数一定是奇数,我们用if else语句来实现判断一个数是奇数还是偶数,代码如下:

#include<stdio.h>
int main()
{
	int a ;
	scanf("%d", &a);
	if (a % 2 == 0)
	{
		printf("偶数\n");
	}
	else
		printf("奇数\n");
	return 0;
}

 

 

注意

1.else的后面是不能加“ ()”的。在这里,如果a可以被2整除,就执行if后的语句,除这种情况外,都会执行else后的语句。

2.else总是和最近的if进行匹配。

1.3 if的嵌套 

  在if else语句中,else后的语句中可以包含if,形成多重判断。举一个简单的例子。

输入一个人的成绩 grade

  • 90<grade<=100,输出A
  • 80<grade<=90,输出B
  • 59<grade<=80,输出C
  • 0<grade<=59,输出D
#include<stdio.h>
int main()
{
	int grade ;
	scanf("%d", &grade);
	if (grade>90 && grade<=100)
	{
		printf("A");
	}
	else
	{
		if (grade > 80 && grade <= 90)
		{
			printf("B");
		}
		else
		{
			if (grade > 59 && grade <= 80)
			{
				printf("C");
			}
			else
			{
				if (grade > 0 && grade <= 59)
				{
					printf("D");
				}
			}
		}
	}
	return 0;
}

我们也可以简化一下代码:

#include<stdio.h>
int main()
{
	int grade ;
	scanf("%d", &grade);
	if (grade>90 && grade<=100)
	{
		printf("A");
	}
	else if (grade > 80 && grade <= 90)
		{
			printf("B");
		}
	else if (grade > 59 && grade <= 80)
			{
				printf("C");
			}
	else if (grade > 0 && grade <= 59)
			{
				printf("D");
			}
	return 0;
}

2. 操作符

2.1 关系操作符

  • >:大于运算符
  • <:小于运算符
  • >=:大于等于运算符
  • <=:小于等于运算符
  • ==:等于运算符
  • !=:不等于运算符

例如:

a>b
a<b
a>=b
a<=b
a==b
a!=b

 关系表达式通常返回 0 或 1 ,表示真假。

注意:多个关系运算符不宜连用,比如a>b>c,实际上运算的形式为:

(a>b)>c

在上面的式子中,(a>b)会返回0或1与c进行比较。

正确的写法为:

a>b && b>c

2.2 条件操作符 

  条件操作符也叫三目操作符,形式如下:

exp1 ? exp2 :exp3

它的意思是,判断 exp1的真假,如果为真,exp2计算,计算的结果就是整个表达式的结果,如果为假,exp3计算,计算的结果就是整个表达式的结果。

比如下表面这段代码:

#include<stdio.h>
int main()
{
	int a, b;
	scanf("%d", &a);
	if (a > 5)
		b = 3;
	else
		b = 6;
	printf("%d", b);
	return 0;
}

我们可以将它改造成:

#include<stdio.h>
int main()
{
	int a, b;

	scanf("%d", &a);
	b = a > 5 ? 3 : 6;
	printf("%d", b);

	return 0;
}

2.3 逻辑操作符

  • &&:逻辑与运算符(两侧表达式都为真,则为真,否则为假)
  • | |:逻辑或运算符(两侧表达式有一个为真,则为真)
  • !:逻辑取反运算符(改变表达式的真假)

2.3.1 逻辑取反运算符 !

#include<stdio.h>
int main()
{
	int a=0, b=10;

	if(!a)
	 printf("%d", b);

	return 0;
}

如果a为真,!a就为假,如果a为假,!a就为真。 

 

2.3.2 逻辑或运算符 | |

#include<stdio.h>
int main()
{
	int a=0, b=10;

	if(a==0||b==5)
	 printf("%d", b);

	return 0;
}

 a==0 与 b==5 这两个条件满足其中一个即为真。

2.3.3 逻辑与运算符 &&

#include<stdio.h>
int main()
{
	int a=0, b=10;

	if(a==0 && b==5)
	 printf("%d", b);

	return 0;
}

 a==0 与 b==5 这两个条件必须同时满足才为真。 

如上所示,什么都没有输出。 

3. switch语句

  除if语句外,switch语句也是一种分支结构,它是一种特殊形式的if else语句,用于判断条件有多个结果的情况。

#include<stdio.h>
int main()
{
	int a;
	scanf("%d", &a);
	switch(a)
	{
	case 1 :
		printf("A\n");
		break;
	case 2 :
		printf("B\n");
        break;
	default:
	    printf("C\n");
	}

	return 0;
}

  这段代码会判断a的值,如果a的值为1,则执行case 1后的语句,如果a的值为2,则执行case 2后的语句,除了这两种情况之外,执行default后的语句。

  当switch语句进入case后,会一直执行下去直到遇到break。如果删掉break,那么执行结果是这样的:

#include<stdio.h>
int main()
{
	int a;
	scanf("%d", &a);
	switch(a)
	{
	case 1 :
		printf("A\n");
	case 2 :
		printf("B\n");
	default:
		printf("C\n");
	}

	return 0;
}

 所以一定不要忘了在每个case和default后加上break。

注意:

1.switch后括号内的值必须是整型表达式(字符会转换成ASC码)。

2.case后的值,必须是整形常量表达式(字符会转换成ASC码)。

3.case和default没有先后的位置限制。

4. 循环

4.1 while循环

  while循环的结构如下:

  while(条件)

{

        循环体;

}

  当程序执行到while循环时,会先判断条件是否为真,如果为真,则执行一次循环体,然后再次进行条件判断。如果循环体执行了n次,那么条件语句则执行了n+1次。

4.2 for循环

  for循环的结构如下:

for(表达式1;条件 ; 表达式3)

{

        循环体;

}

  当程序执行到for循环时 ,会先执行表达式1,之后进行条件判断,如果为真,则执行一次循环体,最后执行表达式3,再进行条件判断。如果循环体执行了n次,那么条件语句则执行了n+1次。

4.3 do while循环

do while循环的结构如下:

do

{

        循环体;

}while(条件);

  当程序执行到do while循环时,会先执行一次循环体,然后进行条件判断,如果为真,则执行一次循环体,再进行条件判断。如果循环体执行了n次,那么条件语句则执行了n次。 注意do while循环的while后需要加上一个分号。

5. break 与continue语句

  跳出循环的方法除了不满足循环条件外,还可以用break和continue语句来对循环进行控制。

  • break:跳出整个循环体。
  • continue:跳出当前循环,进行下一轮循环。

来举一个简单的例子:

 

在这段代码中,当 i 等于1 的时候,跳出循环,只打印了2个c。

在这段代码中,当i等于1的时候,执行continue语句,跳出当前一轮循环,并进行下一轮循环。故当i等于1的时候没有打印c,总共只打印了4个c。

6.循环的嵌套

  

这段代码中, 在for循环里嵌套了一个for循环。外层循环会执行4次,每次外层循环会执行一次内层循环,每次内层循环会打印4个 * ,之后在每次外层循环最后进行换行,就可以打印出上图所示的图案。当然,while循环,do while循环,for循环都是可以互相嵌套的,需要视不同情况进行选择。

7.goto语句

goto语句的结构如下:

again:

        代码段

goto again;//again可以替换成其他的字符,仅仅作为标识使用。

  goto语句可以使程序跳转到任意代码段,如下图所示:

在这段代码中,当执行到if语句时,判断条件为真,使程序跳转到了对应的代码段,这就使得c被打印了2次。goto语句虽然方便,但是在日常代码的书写时不推荐使用,因为不当的使用goto语句会使程序逻辑被破坏,造成不可预想的后果。

以上就是分支与循环的全部内容啦~

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

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

相关文章

python 正则表达式学习(1)

正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 1. 特殊符号 1.1 符号含义 模式描述^匹配字符串的开头$匹配字符串的末尾.匹配任意字符&#xff0c;除了换行符&#xff0c;当re.DOTALL标记被指定时&#xff0c;则可以匹配包…

计算机设计大赛 协同过滤电影推荐系统

文章目录 1 简介1 设计概要2 课题背景和目的3 协同过滤算法原理3.1 基于用户的协同过滤推荐算法实现原理3.1.1 步骤13.1.2 步骤23.1.3 步骤33.1.4 步骤4 4 系统实现4.1 开发环境4.2 系统功能描述4.3 系统数据流程4.3.1 用户端数据流程4.3.2 管理员端数据流程 4.4 系统功能设计 …

工厂HVAC暖通系统如何实现优化?

在工厂运营中&#xff0c;HVAC暖通系统是维持良好生产环境的关键组成部分。然而&#xff0c;由于能效低下&#xff0c;这些系统可能导致昂贵的能源开支&#xff0c;同时对环境造成负担。本文将深入研究工厂HVAC系统的能效低下原因&#xff0c;介绍HVAC系统优化的关键步骤&#…

老照片模糊不清怎么修复?教你几个修复模糊照片的方法

老照片&#xff0c;如同历史的见证者&#xff0c;承载着家族的记忆与故事。它们无声地诉说着我们的成长轨迹&#xff0c;将那些温馨而美好的瞬间永恒定格。然而&#xff0c;岁月无情&#xff0c;这些老照片逐渐变得模糊不清&#xff0c;甚至布满了岁月的痕迹&#xff0c;令我们…

【第六课课后作业】大模型评测

大模型评测 大模型评测安装环境安装数据准备查看支持的数据集和模型 启动测评评测结果 大模型评测 安装 环境安装 conda create --name opencompass --clone/root/share/conda_envs/internlm-base source activate opencompass git clone https://github.com/open-compass/ope…

防火墙安全策略以及NAT简易拓扑

实验需求 拓扑如下 前期的配置如二层交换机和防火墙的配置就不再赘述 感兴趣的童鞋可以看上一篇博客 防火墙路由模式简易拓扑-CSDN博客 这里主要讲一讲安全策略&#xff0c;用户认证以及NAT策略的配置 配置实现 安全策略 1.生产区在工作时间内可以访问DMZ区&#xff0c;仅…

Python requests网络库源码分析(第三篇:通过学习异常模块,了解http协议)

前言 作者在requests包下&#xff0c;定义了exceptions模块&#xff0c;该模块中定义执行http请求过程中常见的错误&#xff0c;熟悉这些错误有助于我们写出健壮的业务程序&#xff0c;同时还能温习http的知识点&#xff0c;本文基于的requests版本为2.27.1 exceptions模块&…

qt学习:tcp区分保存多个客户端

在前面文掌的tcp客服端服务端进行更改 qt学习&#xff1a;Network网络类tcp客户端tcp服务端-CSDN博客https://blog.csdn.net/weixin_59669309/article/details/135842933?spm1001.2014.3001.5501前面的服务端每次有新的客户端连接&#xff0c;就会覆盖掉原来的指针&#xff0…

Termux结合内网穿透实现无公网ip远程SFTP传输文件

目录 前言 1. 安装openSSH 2. 安装cpolar 3. 远程SFTP连接配置 4. 远程SFTP访问 4. 配置固定远程连接地址 结语 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊Termux结合内网穿透实现无公网ip远程SFTP传输文件&#xff0c;希望大家能…

CentOS7自动备份数据库到git

虽然数据库没什么数据&#xff0c;但是有就是珍贵的啦&#xff0c;为了服务器什么的无了&#xff0c;所以还是要自动备份一下比较好。 Open备忘第一页 步骤 在Gitee&#xff08;github&#xff09;上创建一个私有仓库Gitee&#xff08;github&#xff09;配置好服务器的ssh在服…

DAY10_SpringBoot—SpringMVC重定向和转发RestFul风格JSON格式SSM框架整合

目录 1 SpringMVC1.1 重定向和转发1.1.1 转发1.1.2 重定向1.1.3 转发练习1.1.4 重定向练习1.1.5 重定向/转发特点1.1.6 重定向/转发意义 1.2 RestFul风格1.2.1 RestFul入门案例1.2.2 简化业务调用 1.3 JSON1.3.1 JSON介绍1.3.2 JSON格式1.3.2.1 Object格式1.3.2.2 Array格式1.3…

mysql 多版本并发控制mvcc

行级锁的一个变种避免了加锁&#xff0c;开销低非阻塞读操作&#xff0c;写操作是行级原理&#xff1a;使用数据在某个时间点的快照实现&#xff0c;不同事务在同一个时间可以看到同一个表中的不同数据。分类&#xff1a;乐观&#xff0c;悲观在一行中存储更多数据&#xff0c;…

芯片查询工具:道合顺电子网助您轻松实现芯片查询、分析与调试

在电子领域&#xff0c;对芯片进行准确的查询、分析和调试是确保设备正常运行和故障排查的关键步骤。为了帮助用户轻松实现这一过程&#xff0c;道合顺电子网提供了一系列高效的芯片查询工具&#xff0c;助您快速获取所需信息、分析数据以及进行灵活的调试操作。 为什么选择道…

SpringMVC-HttpMessageConverter 报文信息转化器

文章目录 HttpMessageConverter一、概念二、RequestBody三、RequestEntity四、 ResponseBody1.返回JSON格式的字符串 五、RestController六、ResponseEntity HttpMessageConverter 一、概念 报文信息转化器&#xff0c;将请求报文转化为Java对象&#xff0c;或将Java对象转化…

使用云手机运营TikTok,实现更多可能性

在数字化时代&#xff0c;社交媒体平台的崛起改变了商业推广和品牌建设的方式。TikTok&#xff0c;作为一款风靡全球的短视频应用&#xff0c;吸引了数以亿计的用户。对于跨境电商和品牌推广而言&#xff0c;使用云手机运营TikTok可以实现多种功能&#xff0c;让运营变得更加灵…

idea中使用带provide修饰的依赖,导致ClassNotFound

1、provide修饰的依赖作用&#xff1a; 编译时起作用&#xff0c;而运行及打包时不起作用。程序打包到Linux上运行时&#xff0c;若Linux上也有这些依赖&#xff0c;为了在Linux上运行时避免依赖冲突&#xff0c;可以使用provide修饰&#xff0c;使依赖不打包进入jar中 2、可能…

再获权威认可!亚信安全实力占据CCSIP 2023全景图75个领域

近日&#xff0c;FreeBuf咨询正式发布《CCSIP&#xff08;China Cyber Security Industry Panorama&#xff09;2023中国网络安全行业全景册&#xff08;第六版&#xff09;》。本次全景册面向广大国内安全厂商&#xff0c;由厂商自主申报并填写信息征集表&#xff0c;经FreeBu…

js中的内置对象、数学对象、日期对象、数组对象、字符串对象

js中的对象&#xff08;三种&#xff09;&#xff1a; 自定义对象 car、computer DOM对象 div、p BOM对象 window、console 内置对象 数学对象 Math &#xff08;object类型&#xff09; 1、圆周率 Math.PI 2、向下取整(返回值) Math.floor() 3、向上取整(返回值) M…

【Node-RED】node-red-contrib-opcua-server模块使用(1)

node-red-contrib-opcua-server模块使用 前言node-red-contrib-opcua-server模块使用1.1.1版本报错场景1.1.0版本报错场景0.4.1版本正常场景之前版本的卸载下载0.4.1版本openssl 1.1.0下载pem文件的调试生成导入server-with-context.json示例 前言 在Node-RED中&#xff0c;如…

小红书如何做混部?

作者&#xff1a;宋泽辉&#xff08;小红书&#xff09;、张佐玮&#xff08;阿里云&#xff09; 编者按&#xff1a; Koordinator 是一个开源项目&#xff0c;是基于阿里巴巴内部多年容器调度、混部实践经验孵化诞生&#xff0c;是行业首个生产可用、面向大规模场景的开源混…