没有合适的资源?快使用搜索试试~ 我知道了~
C语言程序设计要点 2017-10-101
需积分: 0 0 下载量 99 浏览量
2022-08-03
17:04:23
上传
评论
收藏 826KB PDF 举报
温馨提示
试读
11页
第四章 控制结构—选择结构选择选择结构是程序设计结构中的另一种重要结构,也是现实生活中经常遇到的情况之一。C 语言提供了两类处理方法:一是使用 if 语句,二是
资源详情
资源评论
资源推荐
1
第四章 控制结构—选择结构
选择选择结构是程序设计结构中的另一种重要结构,也是现实生活中经常遇到的情况之一。C 语言提
供了两类处理方法:一是使用 if 语句,二是使用 switch 语句。本章将详细介绍这几类选择语句的用法。
4.2 选择结构概述
选择结构(selection)是高级语言三大控制结构之一,用于需要
选择判断的场合。
选择结构程序中,程序员根据实际需求,设置一个选择判断条件,
并对选择的每一种可能情况(称为分支)编码以处理不同的流程。这些
流程在编码时是平行的,没有哪一种处于主导地位。而程序在执行的时
候,会根据选择条件的不同而执行不同的分支,从而导致结果的不同。
图 4-1 是选择结构的流程图。
多数情况下,选择结构的不同分支不会全部都执行,而是根据条件
是否成立,只执行众多流程当中的一个,以完成不同的功能。例外主要
发生在使用多路选择 switch 语句的情况下(4.4.2)。
4.3 if 语句
C 语言提供的 if 语句有两个变种:单 /双路选择 if…else 和多路选择 if…else if,以适应不同的场
合。
4.3.1 单/双路选择 if 语句
单路选择 if 语句的语法为:
if (表达式) 语句 1
[else 语句 2]
其功能是:如果表达式的值为真(非 0 值),则执行语句 1;否则,如果存在 else 子句则执行其后的
语句 2。如果没有 else 子句,则结束该 if 语句。该 if 语句执行完后,就接着执行紧跟在该 if 语句后
面的一条语句。if 语句的流程图如图 4-1 所示。
例如:
x = 3;
if (x == 3)
++x;
else
--x;
printf(“%d”, x);
使用 if 语句要注意以下几点:
(1) if 语句的选择条件必须用一对圆括
号括起来;
(2) 从原则上讲,圆括号中的表达式应该是一个关系或者逻辑表达式,其值是一个逻辑类型(真或假)。
但由于 C 语言没有提供表示逻辑真假的类型(C99 提供了_Bool 类型),因此这个表达式可以是
任何类型表达式,如关系表达式、逻辑表达式以及算术表达式(其类型甚至可以是浮点型!)等。
在这种情况下,任何非 0 值都被认为是逻辑真,0 值则被认为是逻辑假;
(3) 在判断相等的时候,请一定要注意使用关系运算符“==”,而不是赋值运算符“=”。例如,有 int
表达式?
语句
真
假
表达式?
语句1
假
语句2
真
a) 没有else子句 b) 有else子句
图4-2 if语句的流程图
选择?
语句1
假
语句2
真
图4-1 选择结构
2
a = 1, b = 2,那么判断 a、b 是否相等的有逻辑错误的语句 if (a = b)是能够被编译器接受
的,但结果却与初衷相悖:很明显的,a 和 b 不相等,因此该 if 之后的选择是不会被执行的;但
在==误写成=之后,赋值表达式 a=b 将会得到结果 2,而所有非 0 值都被认为是逻辑真。这是初
学者常犯的错误之一,而且很不容易察觉;
(4) 如果各子句中的语句多于一条时,必须使用复合语句,即用{}将这些语句括起来。
【例 4-1】输入两个整数 a 和 b,若 a<b,交换两个数,并输出交换后 a、b 的值。
【解题思路】题目中出现了这样一种要求,就是当满足一定条件后就要执行相应的操作,如果不满足
则不需要有任何动作。根据题目的特点,应该选择使用没有 else 子句的 if 语句。
//4-1.c
#include <stdio.h>
int main()
{
int a, b, x; //x 作为交换的中间变量
scanf("%d,%d", &a, &b);
if (a < b)
{
x = a;
a = b;
b = x;
printf("交换后 a=%d,b=%d\n", a, b);
}
return 0;
}
程序运行结果如下:
12,16↙
交换后 a=16,b=12
【例 4-2】任意输入一个整数,判断其奇偶性。
【解题思路】偶数的定义是:能被 2 整除的数。而判断一个数 a 是否能被 b 整除所用的方法就是看看
二者相除的余数是否为 0。C 语言恰好提供了一个求两数余数的运算符符:模运算符%。所以,如果 a % 2
== 0,那么 a 一定是偶数;否则一定是奇数。根据这个特点,应该选择使用有 else 子句的 if 语句。
//4-2.c
#include <stdio.h>
int main()
{
int data;
scanf("%d", &data);
if (data % 2 == 0) //判断 data 能否被 2 整除
printf("%d 是偶数\n", data);
else
printf("%d 是奇数\n", data);
3
return 0;
}
程序运行结果如下:
24↙
24 是偶数
如果 if 语句分支中的语句比较简单,那么 if…else 语句可以用条件表达式实现。如例 4-2 中的 if
语句可以改为:
printf(“%d 是%s\n”, data, data%2 == 0 ? ”是偶数” : ” 是奇数”); //条件表达式
程序的结果不变,但在表达上更加简洁和高效。
初学者在使用 if…else 语句时,常犯一些错误。
1. 存在多余的分号,例如:
if (data % 2 == 0); //logical error
printf("%d 是偶数\n", data);
else; //error
printf("%d 是奇数\n", data);
if 后多余的分号并没有使其存在语法错误。编译器认为那是一条空语句,从而将其后的 printf()排除在
该 if 语句之外,即使程序员采用了缩进的形式也无济于事。此外,另一个多余的分号使 else 成为“无主”的子
句。同样地,else 后面的分号也会将其后的 printf()排除在整条 if 之外。
2. 在 else 子句后加上多余的条件判断,例如:
if (data % 2 == 0) …
else (data % 2 != 0) … //error
实际情况是:else 子句隐含的条件就是 if 的否条件,因此其后的条件完全是多余的,并且是语法错误的。
4.3.2 多路选择 if...else if 语句
当我们面临被选方案多于两个的场合时,可以使用多路选择 if…else if 语句,其语法如下:
if (表达式 1) 语句 1
else if (表达式 2) 语句 2
else if (表达式 3) 语句 3
┇
else if (表达式 n) 语句 n
[else 语句 n+1]
该语句的功能是:首先计算表达式 1,如果其结果为真,则执行语句 1;否则依次往下计算各表达式
的值,直到某个表达式 i 的值为真,并且执行相应的语句 i。如果所有表达式的值都为假,则执行最后的
else 子句后的语句 n+1(如果存在这种无条件的 else 子句)。整个 if 语句的流程图如下所示(n=4):
剩余10页未读,继续阅读
城北伯庸
- 粉丝: 27
- 资源: 315
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0