【C语言初阶(1)】分支语句

news2024/12/24 20:28:12

文章目录

  • 前言
  • 1. if 语句
    • 1.1 if 语法结构
    • 1.2 悬空 else
    • 1.3 “ = ” 号引发的错误
    • 1.4 if 语句练习题
  • 2. switch 语句
    • 2.1 switch 语法结构
    • 2.2 在switch语句中的 break
    • 2.3 default 子句
    • 2.4 switch 语句练习题

前言

  • C语言是一门结构化的程序设计语言;
  • 它分为:顺序结构、选择结构、循环结构。

顺序结构

  • [X]从头走到尾,一条道走到黑,中间没有进行选择之类的拐弯抹角。

选择结构

  • 分支语句也叫做选择语句
  • 生活中处处充满了选择,如果(if)你好好学习,等毕业了就能拿一个好 offer,否则(else)就回家卖番薯,这就是选择!

循环结构

  • 生活中可能需要把一件事反复的去做,这种情况就称之为循环。

在这里插入图片描述

总结

  • 生活中的所有事情都可以抽象成这三种结构的某一种,或者这三种结构的组合来描述清楚生活中所有的事情。
  • C语言中就提供了能够描述这几种结构的能力:
    • 顺序结构:实在没啥好说的,就一条道走到黑就完了;
    • 选择结构:if、switch 语句;
    • 循环结构:for、while、do while 语句。

1. if 语句

1.1 if 语法结构

单分支结构

if(表达式)
{
    语句;//若表达式结果如果为真,则执行语句内容,反之不执行
}
if(表达式)//若表达式结果为真,则执行语句 1,反之执行语句 2
{
    语句1;
}    
else
{
    语句2;
}    

在这里插入图片描述

多分支结构

if(表达式1)
{
    语句1;
}
else if(表达式2)
{
    语句2;
}
else
{
    语句3;
}    
  • 有的时候需要做的选择可能不止两种;
  • 假设有 3 4 5 …更多种选项,简单的 if else 就不能够满足了,此时就需要使用到多分支。
  • 注:当只有一条语句时,可以不用大括号。
#include <stdio.h>
//当有多个选择时,就要加上 else if 来实现多分支结构
int main()
{
	int age;
	scanf("%d", &age);

	if (age < 18)
		printf("青少年\n");
		
	else if (18 <= age && age < 28)
		printf("青年\n");
	
	else if (age >= 28 && age < 40)
		printf("壮年\n");
		
	else if (age >= 40 && age < 60)
		printf("中年\n");
		
	else if (age >= 60 && age <= 100)
		printf("老年\n");
		
	else
		printf("老寿星\n");

	return 0;
}

正确使用大括号

  • 条件成立时,如果有多条语句,就必须要用大括号将语句内容框柱。
#include <stdio.h>

int main()
{
	int age;
	scanf("%d", &age);

	if (age < 18)
		printf("青少年\n");//只有这一条语句,可以不用加大括号
		
	else if (18 <= age && age < 28)
	{
		//条件成立时,如果有多条语句时,就必须要用大括号将语句内容框柱
		printf("青年\n");
		printf("不香翅捞饭就遵纪守法")
	}	
	
	return 0;
}
  • 这里的一对 { } 就是一个代码块。

1.2 悬空 else

else的匹配

  • else 是和它离的最近的 if 匹配的。

举个栗子

  • 下列代码的结果是什么?
#include <stdio.h>

int main()
{
	int a = 0, b = 2;

	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	else
		printf("haha\n");

	return 0;
}

啥也不会发生
在这里插入图片描述

  • 之前也说过,else 只会和离它最近的 if 进行匹配,当我们把这段代码拷进 VS 底下时 else 的位置其实是这样的:

在这里插入图片描述

改进

  • 适当的使用 { } 可以使代码的逻辑更加清楚。
  • 代码风格很重要,写出漂亮的代码不仅仅只是为了方便阅读,同时也能有效的减少 BUG 的产生。
#include <stdio.h>
//改成这样就能更好的进行阅读了
int main()
{
	int a = 0,b=2;

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

1.3 “ = ” 号引发的错误

  • 在C语言中,如果只有一个 = 号是赋值的意思,有两个 == 号才是判断是否相等;
  • 如果在 if 语句的表达式中,不小心采用的是赋值符号,则表达式结果永远为真,并且这种情况编译器还不会报错;

在这里插入图片描述

  • 解决方法:判断变量和某个数是否相等时,应该将变量置于表达式的右边,这样就不需要担心会一不小心少敲一个 = 了;
    • 因为在 C 语言中,是绝对不会允许给一个常量赋一个变量的。

在这里插入图片描述

在这里插入图片描述

1.4 if 语句练习题

1. 判断一个数是否为奇数

  • 用这个数模上一个 2,余数为 1 的是奇数。
#include <stdio.h>

int main()
{
	int num = 0;
	scanf("%d", &num);

	//奇数除于的余数为1
	if (1 == num % 2)
	{
		printf("%d 是奇数\n",num);
	}
	else
	{
		printf("%d 不是奇数\n", num);
	}

	return 0;
}

输出1-100之间的奇数

  • 找出 1-100 中所有 % 2 的结果为 1 的数。
#include <stdio.h>

int main()
{
	int num = 1;

	while (num <= 100)
	{
		if (1 == num % 2)
		{
			printf("%d ", num);
		}
		num++;
	}
	printf("\n");
}

2. switch 语句

  • switch语句也是一种分支语句,常常用于多分支的情况。

举个栗子

输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
  • 这种情况下,写成 if…else if …else if 的形式太复杂,那我们就得有不一样的语法形式。
  • 这就是 switch 语句。

2.1 switch 语法结构

switch(整型表达式)
{
    语句项;
}

语句项

  • switch 语句的语句项是一些 case 语句
case 整形常量表达式:
    语句;

举个栗子

#include <stdio.h>

int main()
{
	int day;
	scanf("%d", &day);

	switch (day) //根据day的值来判断
	{
	case 1:printf("星期一\n");//day的值是1的话执行这条语句,下同理
	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;
}

在这里插入图片描述

  • 这和俺们想要得到的结果貌似不太一样啊;
  • switch 语句中得 case 只是决定了入口,但没说哪里是出口,没有出口只好把 switch 语句的中得内容全部执行完一遍才能结束了;
  • 此时就需用到 break 来决定 switch 语句的出口在哪了。

2.2 在switch语句中的 break

  • 在 switch 语句中,我们没办法直接实现分支,搭配 break 使用才能实现真正的分支。

举个栗子

#include <stdio.h>
int main()
{
	int day;
	scanf("%d", &day);

	switch (day) //根据day的值来判断
	{
	case 1:printf("星期一\n"); break;
		//当 day 的值是1时打印星期一,然后结束整个switch语句,下同理
	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;
}

在这里插入图片描述

有时候我们的需求变了

  1. 输入1-5,输出的是“weekday”;
  2. 输入6-7,输出“weekend”
#include <stdio.h>
//使用break来决定分支
int main()
{
	int day ;
	scanf("%d", &day);

	switch (day)
	{
	case 1://case 后面不加 break 的话是会照顺序往后走的
	case 2:
	case 3:
	case 4:
	case 5:printf("weekday\n");break;
	case 6:
	case 7:printf("weekend\n");break;
	}
	return 0;
}
  • break 语句的实际效果是把语句列表划分为不同的分支部分。

编程好习惯

  • 在最后一个 case 语句的后面加上一条 break语句。
    • 之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。

2.3 default 子句

  • 如果表达的值与所有的case标签的值都不匹配怎么办?
    • 在上述代码中,如果有人输入了个 8、10、500 怎么办?
    • 此时就需要使用 default 子句来提示输入错误了。

default

  • 输入的所有不能与 case 匹配的值都走到 default 这来。
  • 所以,每个 switch 语句中只能出现一条 default 子句。

在这里插入图片描述

2.4 switch 语句练习题

  • 下面代码的结果是什么?
#include <stdio.h>

int main()
{
	int n = 1,m=2;

	switch (n)
	{
	case 1:m++;
	case 2:n++;
	case 3:
		switch (n)//switch允许嵌套使用
		{
		case 1:n++;
		case 2:m++;n++;break;
		}
	case 4:m++;break;

	default:break;
	}
	printf("m = %d, n = %d\n", m, n);
	
	return 0;
}
  • 答案是 m = 5,n = 3

题目解析

#include <stdio.h>

int main()
{
	int n = 1,m=2;

	switch (n)//n = 1,执行 case 1 的内容
	{
	case 1:m++;//m = 3,没有 break 继续往下执行
	case 2:n++;//n = 2,没有 break 继续往下执行
	case 3:
		switch (n)//n = 2,执行 case 2 的内容
		{
		case 1:n++;
		case 2:m++;n++;break;//m = 4,n = 3
		//有 break,跳出这个 case 2 所在的 switch语句
		}
	case 4:m++;break;//m = 5,有 break 跳出这个 switch

	default:break;
	}
	printf("m = %d, n = %d\n", m, n);//m = 5,n = 3
	return 0;
}

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

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

相关文章

【MySQL】不就是多表查询综合练习

前言 嗨咯大家好&#xff01;我们学习完毕了多表查询&#xff0c;今天我们就要对我们所学的成果进行测验&#xff0c;本期主要是对多表查询相关内容的练习课程。可以先试着自己敲&#xff0c;遇到不会可以查看查考代码。 目录 前言 目录 练习题 1.查询员工的姓名、年龄、职位…

生物制药厂洁净区环境监测超限的标准是多少?

对于一些生物制药企业来说&#xff0c;质量管理部门应加深对环境监测的质量认识&#xff0c;掌握环境监测的技术手段&#xff0c;定期评估环境监测程序的有效性和完整性&#xff0c;并且对环境监测数据进行趋势分析以寻找可以更好控制的区域&#xff0c;以保证企业的生产符合GM…

网络安全合规-网络安全工程师(一)

网络安全工程师的工作种类很多&#xff0c;当前这个图片说明了具体的工程师的工作种类有哪些&#xff0c;列举了一下。 互联网时代网络及科技迅速发展&#xff0c;随之而来的首要问题就是网络安全&#xff0c;因为已经出现的网络问题带来了巨大的经济损失&#xff0c;甚至各种…

ModaHub魔搭社区:安装、启动 Milvus 服务(CPU版)教程

目录 安装、启动 Milvus 服务 安装前提 操作系统 硬件 软件 确认 Docker 状态 拉取 Milvus 镜像 下载配置文件 启动 Milvus Docker 容器 常见问题 接下来你可以 安装、启动 Milvus 服务 CPU 版 MilvusGPU 版 Milvus 安装前提 操作系统 操作系统 版本 CentOS 7…

node 单线程、多线程和多进程模型

文章目录 node 启动过程单线程多线程node 启动过程相关线程node 多线程特点创建多线程 多进程创建多进程cluster进程守护 node 启动过程 C 层引导&#xff1a;Node.js 启动时&#xff0c;会初始化 C 层的结构和依赖项&#xff0c;如 V8 引擎、Libuv 事件循环、核心模块等。此外…

TCP/IP 协议详解

文章目录 简介应用层传输层网络层网络接口层数据包发送过程TCP 三次握手四次挥手三次握手为什么是三次握手四次挥手为什么是四次挥手 简介 TCP/IP传输协议&#xff0c;即传输控制/网络协议&#xff0c;也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。 TCP/IP传输…

【Nginx基础与应用】

文章目录 Nginx基础与应用1 Nginx 概述1.1 介绍1.2 下载与安装1.3 目录结构 2 Nginx 命令3 Nginx 配置文件结构4 Nginx 具体应用4.1 部署静态资源4.2 反向代理4.3 负载均衡(基于反向代理实现) Nginx基础与应用 1 Nginx 概述 1.1 介绍 Nginx是一款轻量级的web服务器/反向代理…

如何在 Linux 中安装、设置和使用 SNMP?

概要 SNMP&#xff08;Simple Network Management Protocol&#xff09;是一种用于管理和监控网络设备的协议。它允许网络管理员通过远程方式收集设备的运行状态、性能数据和错误信息&#xff0c;以便进行故障排除和网络优化。在Linux系统中&#xff0c;我们可以安装、设置和使…

vue3-element-admin 项目说明文档

vue3-element-admin官方文档 | 在线预览 项目介绍 vue3-element-admin 是基于 Vue3 Vite4 TypeScript5 Element-Plus Pinia 等最新主流技术栈构建的后台管理前端模板&#xff08;配套后端源码&#xff09;。 项目有以下特性&#xff1a; 基于 vue-element-admin 升级到…

共建信创安全生态|安全狗正式加入麒麟软件安全生态联盟

5月25日&#xff0c;麒麟软件安全生态联盟第二次工作会议顺利举办。 作为国内云原生安全领导厂商&#xff0c;安全狗以安全生态联盟成员单位应邀参会并发表重要观点。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;成立于2013年&#xff0c;致力于…

无向图G的邻接矩阵法和邻接表法以及遍历输出无向图G包括两种存储的FirstNeighbor和NextNeighbor两种基本操作

一.邻接矩阵法 将下列图G用邻接矩阵法进行存储 圆圈中的字符&#xff1a;是顶点的值 圆圈旁边的数字&#xff1a;是顶点的序号 边线上的值&#xff1a;是两个顶点之间的权值 1.结构体 #define MaxVertexNum 10 typedef char VerTexType;//顶点的数据类型 typedef int Edg…

prometheus + grafana + node_exporter + alertmanager 的安装部署与邮件报警

背景介绍 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发&#xff0c;是Google BorgMon监控系统的开源版本。 Prometheus的特点 多维度数据模型。 灵活的查询语言。 不依赖分布式存储&#xff0c;单个服务器节点是自主的。 通…

二值化的mask生成yolov5-7.0的实例分割训练标签

背景&#xff1a;要用yolov5-7.0训练分割&#xff0c;这里使用自己的数据&#xff0c;mask是二值化的数据&#xff0c;要先转换成COCO格式&#xff0c;这里用imantics实现。 详见&#xff1a;https://zhuanlan.zhihu.com/p/427096258 截取部分代码如下图&#xff0c;读取image图…

C++之引用、指针引用、常引用

引用 引用的概念引用的定义引用的使用引用的应用引用的本质&#xff08;就是C内部的一个常指针(type * const 名)&#xff09;指针引用&#xff08;其类型还是指针type *&#xff09;常引用&#xff08;采用const修饰的引用&#xff09; 引用的概念 1、通常我们说的引用指的是…

和鲸社区数据分析每周挑战【第九十五期:奈飞股价预测分析】

和鲸社区数据分析每周挑战【第九十五期&#xff1a;奈飞股价预测分析】 文章目录 和鲸社区数据分析每周挑战【第九十五期&#xff1a;奈飞股价预测分析】一、前言1、背景描述2、数据说明3、数据集预览 二、数据读取和数据预处理三、历史股价数据可视化四、利用sklearn中LinearR…

Linux 系统下的df、du、fdisk、lsblk指令

文章目录 1 查看磁盘与目录容量&#xff08;df、du&#xff09;2 查看磁盘分区&#xff08;fdisk、lsblk&#xff09;3 df、du、fdisk、lsblk的区别 1 查看磁盘与目录容量&#xff08;df、du&#xff09; df -h //列出文件系统的整体磁盘使用量在显示的结果中要特别留意根目录…

安洵杯2023 部分pwn复现

1. harde_pwn 漏洞点&#xff1a; 覆盖printf的返回地址 from pwn import * from LibcSearcher import LibcSearcher from sys import argv from Crypto.Util.number import bytes_to_long import os def ret2libc(leak, func, path):if path :libc LibcSearcher(func, leak…

二级Python考试环境安装教程

二级Python考试环境 Python3.5.3至Python3.9.10版。为方便考生学习与考点备考&#xff0c;现提供二级Python应用软件的网络下载&#xff0c;广大考生和考点管理员可以下载使用 软件包下载&#xff08;62.18 MB&#xff09; https://www.123pan.com/s/y4HrVv-0S0lA.html 安装…

在windows11环境下安装CUDA11.6+Anaconda3+pyToach1.13搭建炼丹炉

0.电脑环境 系统&#xff1a;win11 显卡&#xff1a;NVIDIA GTX1650 还有一个pyCharm&#xff0c;其他也用不到了&#xff0c;需要的文章中会进行说明 1.安装CUDA11.6 目前2023.03出来的pyToach2.0是用不到了&#xff0c;因为最低版本支持CUDA11.7。我的显卡是1650&#xff0c…

leetcode数据库题第八弹(免费题刷完了)

leetcode数据库题第八弹&#xff08;免费题刷完了&#xff09; 1757. 可回收且低脂的产品1789. 员工的直属部门1795. 每个产品在不同商店的价格1873. 计算特殊奖金1890. 2020年最后一次登录1907. 按分类统计薪水1934. 确认率1965. 丢失信息的雇员1978. 上级经理已离职的公司员工…