【C语言入门教程】3.3 条件控制语句
在程序的 3 种基本结构中,第二种是选择结构,选择结构是根据程序运行时获得的条件,决定程序执行情况。条件控制语句可用来实现这种结构,C 语言提供了 if 语句和 switch 语句两种条件控制语句,if 语句用于二选一的情况,而 switch 语句用于多选一的情况。
3.3.1 if 语句
if 语句通过表达式的值判读是否执行与其关联的代码,当表达式结果为 0 时,不执行关联的代码,当表达式结果为非 0 时,则执行关联的代码。使用 if 语句的格式为:
if (表达式) { 语句 }
如下例所示:
int a, b; // 声明两个整型变量
printf("请输入数值,格式为:a,b\n"); // 提示数据输入的格式
scanf("%d,%d", &a, &b); // 输入两个数值,存入变量 a 和 b 中
if (a > b) // 判读变量 a 是否大于 b
{
printf("数值 a 大于数值 b"); // 当变量 a 大于变量 b 时,执行此输出语句
} if (a <= b) // 判读变量 a 是否不大于 b
{
printf("数值 a 不大于数值 b");
}
该代码的作用是比较输入的两个变量的大小,其中使用了两组 if 语句实现,将问题分解为两种不同的条件。在这种情况下,可加入 else 语句简化代码,else 的作用是在前面的 if 条件表达式为 非0 的情况下,执行其后一组关联的代码。如下例所示:
if (a > b)
{
printf("数值 a 大于数值 b");
}
else
{
printf("数值 a 不大于数值 b");
}
if 语句也可以实现多选一的条件判读。在比较两个数值的大小时,如果需要考虑两个数值相等的情况,则可以使用 else if 语句实现。如下例所示:
if (a > b)
{
printf("数值 a 大于数值 b");
}
else if (a == b)
{
printf("数值 a 等于数值 b");
}
else
{
printf("数值 a 小于数值 b");
}
if 语句可多层嵌套,即在关联代码中,包含另外的 if 语句。需要注意的是,没组 if 语句要与同一层次的 else if 语句 和 else 语句条件相对应,否则会出现程序逻辑错误。前面的数值比较问题没有判读输入数值是否合法,可加入一组 if 语句解决此问题,如下例代码所示:
if (scanf("%d,%d", &a, &b) != 2) // 根据 scanf()函数的返回值,检查输入是否为 2 个数值
{
printf("输入的数值格式不合法");
}
else
{
if (a > b)
{
printf("数值 a 大于 数值 b");
}
else if (a == b)
{
printf("数值 a 等于数值 b");
}
else
{
printf("数值 a 小于数值 b");
}
}
上例利用了 scanf() 函数的返回值判读输入的数据是否合法,scanf() 函数会返回有效取得数值的个数。在第一组的 if 语句内,嵌套了比较两个变量大小的 if 语句。
注意:被嵌套的代码可增加每行前的空格缩进,这种书写习惯能提高代码的可读性,避免混淆了不同层次的条件语句。
3.3.2 switch 语句
当需要使用多选一的选择结构时,可使用 switch 语句实现相当于 if 语句与多个 else if 语句的组合,并且能实现将多个满足条件的分支执行。switch 语句的基本结构如下:
switch (表达式)
{
case 常量表达式 1 :
关联代码 1;
<break 终止命令>
case 常量表达式 2 :
关联代码 2;
<break 终止命令>
.
.
.
case 常量表达式 n :
关联代码 n;
<break 终止命令>
default : 关联代码 n+1;
}
switch 语句的表达式与 case 子语句的常量表达式进行比较。如果结果相等,则执行 case 子语句内相关联的代码。switch 语句会依次执行每个满足条件的 case 子语句,当一个 case 子语句条件满足后,如果希望终止 switch 语句的执行,可加入 break 命令。break 命令执行后,其后的 case 子语句 和 default 子语句 和 default 子子语句都被跳过。default 子语句是默认执行条件,如果没有 case 子语句满足条件,或者 执行的case 子语句没有使用 break 命令终止 switch 语句执行,则 default相关联的代码被执行。如下例所示:
int c;
printf("请输入五分制成绩:");
scanf("%d", &c);
switch (c)
{
case 5 :
printf("\n成绩为 优秀");
break;
case 4 :
printf("\n成绩为 良好");
break;
case 3 :
printf("\n成绩为 及格");
break;
default :
printf("\n成绩为 不及格");
}
switch 语句可嵌套使用,与 if 语句一样需要注意没组语句的对应关系。另外,case 子语句必须用常量表达式作为条件,否则会造成语法错误。
【C语言入门教程】3.3 条件控制语句的更多相关文章
- 《Ruby语言入门教程v1.0》学习笔记-01
<Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...
- 《JavaScript语言入门教程》记录整理:入门和数据类型
目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...
- 《JavaScript语言入门教程》记录整理:运算符、语法和标准库
目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...
- C语言入门教程-(5)格式化输入输出
1.输入和输出 在程序的使用中,我们经常可以看的这么一个场景:用户需要输入数据,经过程序运算,得到结果后输出.在C语言中,输入数据和输出数据都是由库函数完成的,通过语句来输入/输出. 2.格式化输出— ...
- Go语言入门教程(十)之函数
Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...
- c语言该怎么入门?C语言入门教程(非常详细)
C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...
- 《JavaScript语言入门教程》记录整理:面向对象
目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...
- Go 语言入门教程,共32讲,6小时(已完结)
Go语言入门教程,共32讲,6小时(完结) 在B站:https://www.bilibili.com/video/BV1fD4y1m7TD/
- 【C语言入门教程】3.4 循环控制语句
循环结构又称重复结构,是程序的 种基本结构之一.它反复执行循环体内的代码,解决需要大量重复处理的问题.循环结构由循环控制语句实现,其中内建有条件控制语句,用来判读是否继续执行循环操作.C 语言提供了 ...
随机推荐
- [JavaEE]理解ThreadLocal
转http://www.iteye.com/topic/103804 首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中 ...
- [转]如何启用Ubuntu的休眠模式
大家都知道 Windows 有休眠模式,其实 Ubuntu 也有.休眠模式简单来说,就是可以在用户暂时离开时将内存中的所有内容都写入到硬盘当中,当用户下次开机时,就可以直接启动到上次保存的时间状态. ...
- 【Alpha版本】冲刺-Day7
队伍:606notconnected 会议时间:11月15日 会议总结 张斯巍(433) 今天安排:上传界面设计 完成度:95% 明天计划:回收站界面设计 遇到的问题:无 感想:从一开始界面风格就要确 ...
- Mysql初始化root密码和允许远程访问
mysql默认root用户没有密码,输入mysql –u root 进入mysql 1.初始化root密码 进入mysql数据库 1 mysql>update user set password ...
- linux认识第一面
一.领域问题: 在客户端领域,windows始终占据了优势地位.而在服务器领域,全球98%的都是在用linux.因为linux作为服务器的载体,便宜又安全. 二.linux是基于内核的编写工具,在li ...
- webstorm9.3 安装less 编译css教程
第一步:安装node.js webstrom9.3汉化下载:http://pan.baidu.com/s/1ntGNNiL 密码:1fbh node.js 下载地址:https://nodejs ...
- sudo 出现unable to resolve host 解决方法
inux 环境, 假设这台机器名字叫dev(机器的hostname), 每次执行sudo 就出现这个警告讯息:sudo: unable to resolve host dev虽然sudo 还是可以正常 ...
- UIProgressView(进度条控件)
UIProgressView *pr=[[UIProgressView alloc]init]; pr.frame=CGRectMake(150.0, 190.0, 130.0, 30.0);//进度 ...
- C# JIT & AOT
http://msdn.microsoft.com/library/z1zx9t92 http://msdn.microsoft.com/en-us/library/ht8ecch6(v=vs.90) ...
- 最好用的placeholder插件,jQuery插件EnPlaceholder
EnPlaceholder插件支持密码框哦!实际对比同类的placeholder插件在ie等浏览器下效果做好! 插件效果预览:http://www.wufangbo.com/demo/jquery/3 ...