四:C语言-选择结构

四:选择结构

C语言是结构化的程序设计语言,这里的结构指的是顺序结构选择结构循环结构

我们可以使用ifswitch实现分支结构;使用forwhiledo while实现循环结构

一:if...else...语句

1.if语句:

语法格式:

if(表达式)代码块;

若表达式成立(为真),则代码块执行;表达式不成立(为假),则代码块不执行

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

示例:输入一个整数,判断是否为奇数

#include <stdio.h>
int main()
{int num = 0; //初始化scanf("%d",&num);if(num % 2 == 1)printf("%d 是奇数\n",num);return 0;
}

注意: 变量在创建的时候最好给其一个值(初始化),防止报错

2.else

语法格式:

if(表达式)代码块1;
else代码块2;

如果if语句成立,则执行代码块1;如果if不成立,则执行else语句中的代码块2

注意: else后面不可以加判断条件;但可以加if

示例1:输入一个整数,判断是否为奇偶数

#include <stdio.h>
int main()
{int num = 0; //初始化scanf("%d",&num);if(num % 2 == 1)printf("%d 是奇数\n",num);elseprintf("%d 是偶数\n",num);return 0;
}

示例2:输入一个年龄,如果大于或等于18就输出成年;否则就输出未成年

#include <stdio.h>
int main()
{int age = 0;scanf("%d",&age);if(age >= 18)printf("成年\n");elseprintf("未成年\n");return 0;
}
3.分支中包含多条语句:

在C语言中,if或者else只能包含一条语句,每一条语句都是独立存在的。如果想要包含多条语句,则需要把想要包含的语句包裹在{}

#include <stdio.h>
int main()
{int age = 0;scanf("%d",&age);if(age >= 18){printf("成年\n");printf("可以谈恋爱了\n");}else{printf("未成年\n");printf("最好不要谈恋爱\n");}return 0;
}

像这样,被{}包裹的代码叫做代码块也叫程序块,或者复合语句

4.嵌套if

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

示例1:输入一个整数,判断输入的整数是0,还是正负数

#include <stdio.h>
int main()
{int num = 0;scanf("%d",&num);if(num == 0)printf("输入的数字是0\n");else if(num > 0) // 这里的if相当于嵌套在else语句中,形成了嵌套结构printf("输入的数字是正数\n");elseprintf("输入的数字是负数\n");return 0;        
}

示例1:嵌套if语句的第二种写法:

#include <stdio.h>
int main()
{int num = 0;scanf("%d",&num);if(num == 0)printf("输入的数字是0\n");else {if(num > 0) printf("输入的数字是正数\n");elseprintf("输入的数字是负数\n");}return 0;        
}

示例2:输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数,则输出不是正数

#include <stdio.h>
int main()
{int num = 0;scanf("%d",&num);if(num>0){if(num % 2 == 0)printf("此数是偶数\n");elseprintf("此数是奇数\n");}elseprintf("此数不是正数\n");return 0;
}

示例3:输入一个人的年龄,如果该年龄小于等于18岁,打印“少年”;如果年龄在1844岁之间,打印“青年”;如果年龄在4559岁之间,打印“中年”;如果年龄在60~89岁之间,打印“老年”;如果年龄在90及90岁以上,打印“神仙”

#include <stdio.h>
int main()
{int age = 0;scanf("%d",&age);if(age <= 18)printf("少年\n");else if(age < 45)printf("青年\n");else if(age < 60)printf("中年\n");else if(age < 90)printf("老年\n");else if(age > 90)printf("神仙\n");return 0;
}
5.悬空else问题:

如果有多个ifelseelse总是跟最接近的if匹配 —— 就近原则

#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1)if(b == 2)printf("chang\n");elseprintf("xin\n");return 0;
}

上述代码准确来说应该是这样的结构:

#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1)if(b == 2)printf("chang\n");elseprintf("xin\n");return 0;
}
#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1){if(b == 2)printf("chang\n");elseprintf("xin\n");}return 0;
}

注意: 此时不会输出任何东西。所以代码一定要注意缩进问题;或者适当的带上大括号,代码的逻辑就会更加的清晰


二:switch语句

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

语法格式:

switch(整型表达式)
{case1:代码块1;case2:代码块2;default:代码块3;
}

上述语法格式中,根据表达式不同的值,执行相应的case分支;如果找不到对应的值,就执行default分支

注意:

  • switch后的表达式必须是整型表达式
  • case后的值,必须是整型常量表达式
1.if语句和switch语句:

输入任意一个整数值,计算除以3后的余数:

示例1 – if语句实现:

#include <stdio.h>
int main()
{int a = 0;printf("输入一个数:");scanf("%d",&a);if(a % 3 == 0)printf("整数且余数为0\n");else{if(a % 3 == 1)printf("余数为1\n");elseprintf("余数为2\n");}return 0;
}

示例2 – switch语句实现:

#include <stdio.h>
int main()
{int a = 0;printf("输入一个数:");scanf("%d",&a);switch(a % 3){case 0:printf("整数且余数为0\n");break;case 1:printf("余数为1\n");break;case 2:printf("余数为2\n");break;}return 0;
}

注意:

  • switch语句中的case语句只决定了程序的入口,并没有决定出口,它会继续执行下一个case语句
  • 想要在switch语句中实现分支结构必须要有break
  • 当表达式的结果能够明确的计算出一个值的时候,才会用到switch语句
2.练习:

示例1 – 输入一个1~7的数字,打印对应的星期:

#include <stdio.h>
int main()
{int day = 0;printf("请输入日期:");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;
}

示例2 – 输入1~5,输出的是工作日;输入6、7,输出的是休息日:

#include <stdio.h>
int main()
{int day = 0;printf("请输入日期:");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;}return 0;
}

注意: 根据实际需求,决定是否使用break

3.default子句:

switch语句中,如果switch后面表达式中的值匹配不到任何case语句的时候,就需要我们在switch语句中加入default子句以维持程序的正常执行

#include <stdio.h>
int main()
{int day = 0;printf("请输入日期:");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;
}

注意:

switch语句中case语句和default语句是没有顺序要求的,只要顺序满足实际的需求就可以

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

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

相关文章

Atcoder ABC338 F - Negative Traveling Salesman

Negative Traveling Salesman&#xff08;消极的旅行推销员&#xff09; 时间限制&#xff1a;6s 内存限制&#xff1a;1024MB 【原题地址】 所有图片源自Atcoder&#xff0c;题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】…

计算机网络——08应用层原理

应用层原理 创建一个新的网络 编程 在不同的端系统上运行通过网络基础设施提供的服务&#xff0c;应用进程批次通信如Web Web服务器软件与浏览器软件通信 网络核心中没有应用层软件 网络核心没有应用层功能网络应用只能在端系统上存在 快速网络应用开发和部署 网络应用…

lv15 平台总线框架及案例 2

一、总线、设备、驱动 硬编码式的驱动开发带来的问题&#xff1a; 垃圾代码太多 结构不清晰 一些统一设备功能难以支持 开发效率低下 1.1 初期解决思路&#xff1a;设备和驱动分离 struct device来表示一个具体设备&#xff0c;主要提供具体设备相关的资源&#xff08;如…

Python爬虫之文件存储#5

爬虫专栏&#xff1a;http://t.csdnimg.cn/WfCSx 文件存储形式多种多样&#xff0c;比如可以保存成 TXT 纯文本形式&#xff0c;也可以保存为 JSON 格式、CSV 格式等&#xff0c;本节就来了解一下文本文件的存储方式。 TXT 文本存储 将数据保存到 TXT 文本的操作非常简单&am…

Python基于大数据的电影预测分析系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

多尺度神经网络新一代创新!精度与速度完美平衡,实现多领域应用落地

多尺度神经网络的设计通常基于对频率原则的理解&#xff0c;目的是为了解决高频成分学习慢的问题。这些网络通过特殊设计&#xff0c;比如给高频成分加更多的权重或者将高频成分平移到低频&#xff0c;来提高学习效率。 为了满足在不同层次上理解和处理数据的需求&#xff0c;…

【Java程序设计】【C00254】基于Springboot的java学习平台(有论文)

基于Springboot的java学习平台&#xff08;有论文&#xff09;&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的学习平台 本系统分为系统功能模块、管理员功能模块、教师功能模块以及学生功能模块。 系统功能模块&#xff1a;在平台…

洛谷 P1102 A-B 数对 (Java)

洛谷 P1102 A-B 数对 (Java) 传送门&#xff1a;P1102 A-B 数对 题目&#xff1a; A-B 数对 题目背景 出题是一件痛苦的事情&#xff01; 相同的题目看多了也会有审美疲劳&#xff0c;于是我舍弃了大家所熟悉的 AB Problem&#xff0c;改用 A-B 了哈哈&#xff01; 题目描…

使用反汇编强力破解单机游戏外挂

逆向反汇编外挂&#xff1a;由于可执行程序都要先变成汇编代码再转换成cpu能识别的二进制机器码&#xff0c;在这个基础上可以根据该cpu对应的指令集反过来将二进制翻译成汇编代码。 反汇编找基地址过程&#xff1a;因为要修改的变量地址老是会发生变化&#xff0c;这样每次进游…

linux系统zabbix监控服务端部署

zabbix服务端部署 zabbix服务端部署安装mysql创建初始数据库为Zabbix server配置数据库为Zabbix前端配置PHP启动Zabbix server和agent进程浏览器访问ipConfigure DB connection页面Zabbix server details页面登录账户名密码 zabbix 官网www.zabbix.com服务端部署 rpm -Uvh ht…

GEE:梯度提升树(Gradient Boosting Tree)回归教程(样本点、特征添加、训练、精度、参数优化)

作者:CSDN @ _养乐多_ 对于分类问题,这个输出通常是一个类别标签 ,而对于回归问题,输出通常是一个连续的数值。回归可以应用于多种场景,包括预测土壤PH值、土壤有机碳、土壤水分、碳密度、生物量、气温、海冰厚度、不透水面积百分比、植被覆盖度等。 本文将介绍在Google…

【ETOJ P1057】小e的菜篮子 题解(优先队列)

题目描述 你有一个菜篮子。 接下来会有 Q Q Q 次操作&#xff0c;每次操作如下&#xff1a; “1 x”&#xff0c;将一个重量为 x x x 的菜放入到菜篮子中。“2”&#xff0c;将菜篮子中重量最大的菜丢掉&#xff08;如果菜篮子为空&#xff0c;则跳过&#xff09;。 问 …

如何实现深度学习模型的离线训练

1.1 如何实现深度学习模型的离线训练 如何实现服务器离线训练模型&#xff0c;后台执行 主要有两种方法&#xff1a;tmux命令 和 nohup命令&#xff0c;主要讲解tmux的命令的使用&#xff1a; 1.1.1 tmux的命令 原理描述&#xff1a;通过tmux创建一个会话&#xff0c;这个会…

【Linux学习】线程互斥与同步

目录 二十.线程互斥 20.1 什么是线程互斥&#xff1f; 20.2 为什么需要线程互斥? 20.3 互斥锁mutex 20.4 互斥量的接口 20.4.1 互斥量初始 20.4.2 互斥量销毁 20.4.3 互斥量加锁 20.4.4 互斥量解锁 20.4.5 互斥量的基本原理 20.4.6 带上互斥锁后的抢票程序 20.5 死锁问题 死锁…

React18原理: 核心包结构与两大工作循环

React核心包结构 1 ) react react基础包&#xff0c;只提供定义 react组件(ReactElement)的必要函数一般来说需要和渲染器(react-dom,react-native)一同使用在编写react应用的代码时, 大部分都是调用此包的api比如, 我们定义组件的时候&#xff0c;就是它提供的class Demo ext…

[VulnHub靶机渗透] Nyx

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

2月3日作业

1.编程实现单向循环链表的头插&#xff0c;头删、尾插、尾删 尾插/头插&#xff0c;头删&#xff0c;尾删&#xff1a; 头文件&#xff1a; #ifndef __HEAD_H_ #define __HEAD_H_#include<stdio.h> #include<string.h> #include<stdlib.h>enum {FALSE-1,SU…

Spring Cloud Gateway 网关路由

一、路由断言 路由断言就是判断路由转发的规则 二、路由过滤器 1. 路由过滤器可以实现对网关请求的处理&#xff0c;可以使用 Gateway 提供的&#xff0c;也可以自定义过滤器 2. 路由过滤器 GatewayFilter&#xff08;默认不生效&#xff0c;只有配置到路由后才会生效&#x…

浅谈进制的转换

本文创作灵感来自CSDN咸鱼WCY 的 咸鱼小白学嵌入式之C语言&#xff08;2.进制&#xff09; 博主更完就没更了&#xff0c;决定书接上回&#xff08;喜 进制是个啥 要理解进制&#xff0c;首先哈&#xff0c;咱得知道不同进制的含义 说到底&#xff0c;各个进制其实有点像在…

学生公寓|基于Springboot的学生公寓管理系统设计与实现(源码+数据库+文档)

学生公寓管理系统目录 目录 基于Springboot的学生公寓管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、宿舍列表 2、宿舍公告信息管理 3、宿舍公告类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八…