学习C语言第三天 :分支语句(if - else if - else)

news2024/12/23 17:31:05

1.C语言语句结构

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

        我们可以使用 if、switch 实现分支结构,使用 for 、while 、do while 实现循环结构。

2.if 语句

        2.1.if 语句的语法形式如下:

if (表达式)
    语句

        if 语句成立:表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。

        在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果是不是0,则语句执行。

        接下来写个例子:

// 输⼊⼀个整数,判断是否为奇数
int main()
{
	int i = 0; // 初始化
	scanf("%d", &i); // 输入值

	if (i % 2 == 1) // 表达式
	{
		printf("是奇数!"); // 语句
	}

	return 0;
}

执行结果:

 流程图:

        2.2.else 语句的语法形式如下:

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

        接下来写个例子:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>


// 输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
int main()
{
	int i = 0; // 初始化
	scanf("%d", &i); // 输入整数

	if (i % 2 == 1) // 如果 i 模 2 等于 1的 就是奇数
	{
		printf("%d是奇数!", i); 
	}
	else // 如果不是等于 1的,就是偶数
	{
		printf("%d 是偶数!", i);
	}

	return 0;
}

        运行结果:

      2.3. 分支中包含多条语句

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

# include <stdio.h>

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

    if(age >= 18)
        printf("成年了!\n");
        printf("可以谈恋爱了!\n");
    
    return 0;
}

  

         上面的代码,你会发现输⼊的值不管是>=18 还是小于18,"可以谈恋爱了" 都会打印在屏幕上。

        这是因为 if 语句只能控制一条语句,就是 printf("成年了\n");,if语句为真,则打印成年了if语句为假,则不打印,对于 printf("可以谈恋爱了\n");是独立存在的,不管if语句的条件的真假,都会被执行。那如果我们要if语句同时控制2条语句。

怎么办呢? 那就要使用将代码括起来else 后也可以跟上大括号。如下:

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

    if (age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
    {
        printf("成年了!\n");
        printf("可以谈恋爱了!\n");
    }
    else // else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
    {
        printf("未成年!\n");
        printf("不可以早恋哦!\n");
    }
        

    return 0;
}

         2.4.嵌套if

                在 if else语句中,else 可以与另一个 if语句连用,构成多重判断。

                例子:要求输入一个整数,判断输入的整数是0,还是正数或者负数。

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

	if (i == 0)
	{
		printf("%d是零\n", i);
	}
	else if (i > 0)
	{
		printf("%d是正数\n", i);
	}
	else
	{
		printf("%d是负数\n", i);
	}

	return 0;
}

 

        2.5.悬空else问题

               如果有多个 if 和 else,i可以记住这样一条规则,else 总是跟最接近的 if 匹配

               看下面的代码:

#include <stdio.h>

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

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

	return 0;
}

        这段代码输出什么呢?

        其实什么都没有输出,初学者其实会犯的错误,上来就判断 a是0,不等于1,那就执行else子句,打印 haha,但是当你去运行的时候会发现,啥都没有。

         为什么呢?

        因为这就是悬空else的问题了,如果有多个 if 和 else,可以记住这样一条规则,else总是跟最接近的 if 匹配。

        上面的代码排版,让 else 和第一个 if 语句对齐了,让我们以为 else是和第一个 if匹配的, 当 if 语句不成立的时候,自然想到的就是执行 else 子句,打印 haha ,但实际上 else 是和第二个 if 进行匹配的,这样后边的 if...else 语句是嵌套在第一个 if 语中的,如果第一个 if 语句就不成立,嵌套 if 和 ese 就没机会执行了,最终啥都不打印。

        那来改进一下,如下:

#include <stdio.h>

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

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

	return 0;
}

        如果希望 else 和第一个 if 匹配,可以改成这样,如下:

#include <stdio.h>

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

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

	return 0;
}

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

        注:再写代码的时候,排版是很重要的,方便自己以后看得懂,也方便进了公司,在同事来阅读你的代码的时候能顺利,而且要养成自己写代码的风格。

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

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

相关文章

python爬虫 获取简单的get请求

打印结果&#xff1a; 原博主写的很厉害额&#xff0c;写的比较全面&#xff0c;大家可以去学习看看 参考原文&#xff1a; Python调用get或post请求外部接口_python调用post接口_纯洁的小魔鬼的博客-CSDN博客

封装动态SQL的插件

最近根据公司的业务需要封装了一个简单的动态SQL的插件&#xff0c;要求是允许用户在页面添加SQL的where条件&#xff0c;然后开发者只需要给某个接口写查询对应的表&#xff0c;参数全部由插件进行拼接完成。下面是最终实现&#xff1a; 开发人员只需要在接口写上下面的查询SQ…

从零构建深度学习推理框架-3 手写算子relu

Relu介绍&#xff1a; relu是一个非线性激活函数&#xff0c;可以避免梯度消失&#xff0c;过拟合等情况。我们一般将thresh设为0。 operator类&#xff1a; #ifndef KUIPER_COURSE_INCLUDE_OPS_OP_HPP_ #define KUIPER_COURSE_INCLUDE_OPS_OP_HPP_ namespace kuiper_infer {…

websocket服务端大报文发送连接自动断开分析

概述 当前springboot版本&#xff1a;2.7.4 使用依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>现象概述&#xff1a; 客户端和服务端已经有心跳…

拿捏--->杨辉三角

文章目录 题目描述算法思路代码示例精简版优化版 题目描述 在屏幕上面打印杨辉三角。 算法思路 杨辉三角&#xff0c;是二项式系数在三角形中的一种几何排列。在欧洲&#xff0c;这个表叫做帕斯卡三角形。帕斯卡&#xff08;1623----1662&#xff09;是在1654年发现这一规律…

《金融数据保护治理白皮书》发布(137页)

温馨提示&#xff1a;文末附完整PDF下载链接 导读 目前业界已出台数据保护方面的治理模型&#xff0c;但围绕金融数据保护治理的实践指导等尚不成熟&#xff0c;本课题围绕数据保护治理的金融实践、发展现状&#xff0c;探索和标准化相关能力要求&#xff0c;归纳总结相关建…

AI算法图形化编程加持|OPT(奥普特)智能相机轻松适应各类检测任务

OPT&#xff08;奥普特&#xff09;基于SciVision视觉开发包&#xff0c;全新推出多功能一体化智能相机&#xff0c;采用图形化编程设计&#xff0c;操作简单、易用&#xff1b;不仅有上百种视觉检测算法加持&#xff0c;还支持深度学习功能&#xff0c;能轻松应对计数、定位、…

电压放大器工作在什么状态

电压放大器是一种广泛应用于电子电路中的基本电路元件&#xff0c;其主要功能是将输入信号的电压放大到所需的输出电压幅值&#xff0c;并且保持信号的形状不变。在实际电路设计中&#xff0c;电压放大器的工作状态会受到多种因素的影响&#xff0c;比如输入信号的频率、放大倍…

em3288 linux_4.19 sd卡调试

默认配置&#xff0c;根据实际配置即可。

深度学习——常见注意力机制

1.SENet SENet属于通道注意力机制。2017年提出&#xff0c;是imageNet最后的冠军 SENet采用的方法是对于特征层赋予权值。 重点在于如何赋权 1.将输入信息的所有通道平均池化。 2.平均池化后进行两次全连接&#xff0c;第一次全连接链接的神经元较少&#xff0c;第二次全连…

基于图像形态学处理的停车位检测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 图像预处理 4.2. 车辆定位 4.3. 停车位检测 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ......................................…

python中for..in语法的原理?

今天发现了python中一个比较有意思的小设计。 如果要通过中括号[]访问元素&#xff0c;需要重写__get__item()函数&#xff0c;这个应该没什么疑问&#xff0c;测试代码如下&#xff1a; class Classroom:def __init__(self, students):self.students studentsdef __getitem…

为什么程序员每到一家新公司干了两三年,都有一种干不下去的感觉?

行业内有句话叫&#xff1a;“程序员跳一次等于干三年”。但是程序员这个岗位怎么说呢&#xff1f; 小伙伴都知道的&#xff0c;工作强度完全看运气&#xff0c;有的公司忙到头都秃了&#xff0c;也有的公司闲到抠脚。 而收入呢?在一家公司待着&#xff0c;基本上是万年不涨的…

【C语言初阶(19)】实用的 VS 调试技巧

文章目录 Ⅰ 调试的介绍Ⅱ 常用调试快捷键Ⅲ 调试的时候查看程序当前信息⒈查看临时变量的值⒉查看内存信息⒊查看调用堆栈⒋查看汇编信息⒌查看寄存器信息 Ⅳ 观察形参指针指向的数组Ⅴ 易于调试的代码该如何编写⒈const 修饰指针变量⒉良好代码示范 Ⅵ 编程中常见的错误 Ⅰ 调…

Mr. Cappuccino的第54杯咖啡——Mybatis运行原理

Mybatis运行原理 Mybatis运行的三个阶段Mybatis运行原理图 Mybatis运行的三个阶段 初始化阶段&#xff1a;读取并解析XML配置文件和注解中的配置信息&#xff0c;创建配置对象&#xff0c;并完成各个模块的初始化工作&#xff0c;底层采用建造者模式&#xff1b;代理封装阶段&…

Qt、C/C++环境中内嵌LUA脚本、实现LUA函数的调用执行

Qt、C/C环境中内嵌LUA脚本、实现LUA函数的调用执行 Chapter1. Qt、C/C环境中内嵌LUA脚本、实现LUA函数的调用执行1、LUA简介2、LUA脚本的解释器和编译器3、C环境中内嵌LUA执行LUA函数调用4、Qt内嵌LUA执行LUA函数调用5、运行结果6、内嵌LUA脚本在实际项目中的案例应用 Chapter1…

元宇宙是概念炒作?

关键字&#xff1a;万界星空、万界星空科技、工业元宇宙、AR数字孪生、工业数字孪生、汽车数字孪生、机械加工数字孪生 引言 近两年被“元宇宙”席卷了&#xff0c;好多人问也好多人在各大媒体讨论过&#xff1a;“元宇宙到底是个啥&#xff1f;” 想必你也一定有所耳闻&…

世界少棒经典赛·棒球1号位

世界少棒经典赛 1. 世界少棒经典赛的起源 详细描述世界少棒经典赛的历史起源。 世界少棒经典赛的历史起源可以追溯到1985年&#xff0c;那个夏天&#xff0c;它首次在美国新泽西州举行&#xff0c;那时只有来自美国的12支球队参赛&#xff0c;这些球队在当地的特伦顿市体育中…

meanshift算法通俗讲解【meanshift实例展示】

meanshift算法原理 meanshift算法的原理很简单。假设你有一堆点集&#xff0c;还有一个小的窗口&#xff0c;这个窗口可能是圆形的&#xff0c;现在你可能要移动这个窗口到点集密度最大的区域当中。 如下图&#xff1a; 最开始的窗口是蓝色圆环的区域&#xff0c;命名为C1。蓝…

【Linux命令200例】split将一个大文件拆分成多个小文件

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主✌&#xff0c;2023年6月csdn上海赛道top4✌。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加…