📄 教学--第九章 条件分支语句.htm
字号:
<P>#pragma hdrstop
<P>//---------------------------------------------------------------------------
<P>#pragma argsused
<P>int main(int argc, char* argv[])
<P>{
<P><B> char a;</B>
<P><B> cout << "请输入一个字符:" ;</B>
<P><B> cin >> a;</B>
<P><B> if(a >= 'a' && a <= 'z')</B>
<P><B> cout << a << "是一个小写字母。"
<< endl;</B>
<P>
<P><B> getchar();</B>
<P> return 0;
<P>}
<P>//---------------------------------------------------------------------------</SPAN>
<H3><A name=9.3>9.3</A> ? : 表达式</H3><SPAN lang=EN-US>
<P>? : 表达式 我们称为 问号冒号表达式。
<P>
<P>用if...else... 和 if...语句,已经可以很好地实现所有条件分支的代码。不过C是一门追求简捷高效的语言,它提供的 ? : 表达式
来在某种情况下代替if...else...,起来让代码更简捷的作用。
<P>
<P>来看看if...else...语句在什么情况下可以简化。
<P>
<P>首先来看原型:
<P>if (条件)</P>
<P>{</P>
<P> 分支一</P>
<P>}</P>
<P>else</P>
<P>{</P>
<P> 分支二</P>
<P>}</P>
<P>我们知道,分支一或分支二一般都是一组(多行)语句,用来分别实现条件是否成立时的动作。由于是一组(多行)语句,所以我们有一对{}括在外面,用于形成复合语句。不过,有时候,分支中的语句比较简单,用一句话就可以实现。比如我们所举的例子:
<P>if (a > b)</P>
<P>{</P>
<P> c = 1;</P>
<P>}</P>
<P>else</P>
<P>{</P>
<P> c = 0;</P>
<P>}</P>
<P>在这个例子中,分支一、二都分别只有一条语句。<B>对于只有一条语句的情况,我们可以省略{}</B>(除了在特殊的上下文中外,其它情况下都可以省略。以后我们学习的其它流程控制也一样),如:
<P>if (a > b)
<P> c = 1;
<P>else
<P> c = 0;
<P>看,没有花括号的代码,感觉多紧凑。不过,对于上面的代码,我们还可以继续简化,那就是使用 ? : 语句。
<P>
<P>c = (a > b)? 1 : 0;
<P>
<P>就一行话,多简捷!语句中的问号问的是什么?问的是 a 是否大于 b ? 如果是,则得到值1,否则,得到值0。
<P>
<P><B>? : 表达式格式语法:</B>
<P>
<P>(条件) ? 值1 : 值2
<P>
<P>举一例子:
<P>设有int变量 a,b,二者均已初始化。请得到二者中的较大值。
<P>
<P>方法是:
<P>
<P>int c = (a > b) ? a : b;
<P>
<P>是的,就这么简单,执行上面代码,c 将得到a和b中的较大值。
<P>
<P>我们称 (a > b) ? a : b 为一个表达式,而不称它为完整的一个语句(尽管它的确也可以作一个单独的语句存在)。一般地,? :
表达式拿来作为等号的右值,用于通过条件判断确定一个值后,该值被赋予等号的左值。因此,并不是所有的if..else...语句都可以用 : ?
来代替,只有那些两个分支都只是用来计算一个同一类型的值,然后赋予同一变量的条件分支语句,才适合。
<P>
<P><B>上机题目三:</B>两数取大
<P>
<P>新建一个控制台空白工程。然后在代码中输入以下黑体部分:
<P>
<P>//---------------------------------------------------------------------------
<P><B>#include <iostream.h></B>
<P>#pragma hdrstop
<P>//---------------------------------------------------------------------------
<P>#pragma argsused
<P>int main(int argc, char* argv[])
<P>{
<P><B> int a,b,c;</B>
<P><B> cout << "请输入两个整数(用空格分开):" ;</B>
<P><B> cin >> a >> b;</B>
<P> </P>
<P><B> c = (a > b)? a : b;</B></P>
<P> </P>
<P><B> cout << c << "大" << endl;</B></P>
<P>
<P><B> getchar();</B>
<P> return 0;
<P>}
<P>//---------------------------------------------------------------------------<BR>
<P>下面是屏幕输出的结果。我输入的两个数是 102 和 134。
<P><IMG height=127 src="教学--第九章 条件分支语句.files/ls09t7.jpg" width=348
border=0>
<P>
<H3></SPAN><A name=9.4>9.4</A> 多级 if...else...语句</H3><SPAN
lang=EN-US>
<P>
<P>不要害怕为什么一个条件分支就有这么多种语句。多级if..else..语句——只是我这么叫它,其实它完全是由if..else..语句组成,就好像楼梯,一个阶的楼梯是楼梯,100个阶的楼梯也是楼梯。<BR>
<P><B>多级 if..else...语法格式:</B>
<P>
<P>if(条件1)
<P>{<BR> 分支一 <BR> }<BR> else if(条件2)
<P>{<BR> 分支二<BR>
}<BR> else if(条件3)
<P>{<BR> 分支三<BR> }<BR> else
<P>{<BR> 分支四<BR> }
<P>
<P>格式中举出四个分支,实际可以只有三个,两个,也可以有更多个。请看下在这个例子。
<P> </P>
<P>让我们想像这么一幕情景剧——</P>
<P>时间:XXXX年2月14日;地点:某校园内小公园;<BR>
人物:女生一,男生一。<BR> (男生送给女生一束环瑰)<BR>
女生(高兴地):多美啊——多少钱买的!<BR>
男生:猜。<BR>
女生(心里想:如果多于100元我就亲他一口):超过100元吗?<BR>
男生:NO。<BR>
女生:(心里想:如果多于50元我就许他亲我一口):那,不低于50元吧?<BR>
男生:NO。<BR>
女生:(心里想:如果多于10元就跟他说声谢谢吧):那是不低于10元了?<BR>
男生:NO。<BR> 女生:(不再有任何想法,一把丢掉鲜花):呸!</P>
<P>看明白了吗?</P>
<P>“看明白了……”一个小男生眼泪汪汪地站起来,回答:“我是看明白了,现在的女生没一个是好东西!”#·$&*%!@
啊?? 我是说,大家看出其中的多级条件分支了吗?</P>
<P>写成程序,便是:</P>
<P> </P>
<P>int price = 玫瑰花价钱;<BR><BR> if (price > 100)</P>
<P>{<BR>
小女生要亲小男生一口;<BR> }<BR> else if(price > 50)</P>
<P>{<BR>
小女生准备让小男生亲一口;<BR> }<BR> else if (price >
10)</P>
<P>{<BR>
小女生对小男生说声“谢谢”;<BR> }<BR> else</P>
<P>{<BR>
小女生扔掉花,说:“呸!”;<BR> }</P>
<P> </P>
<P>如果花价大于100元,那么女生亲男生一口;否则呢?否则就再判断花价是否大于50元,如果还是不大,那不再来判断花价是否大于10元,如果还是不大,最后无条件地执行“小女生扔掉花……”这一句。</P>
<P> </P>
<P>看一下多级if...else...语句的流程图:</P>
<P> </P>
<P><IMG height=484 src="教学--第九章 条件分支语句.files/ls09t8.gif" width=582
border=0></P>
<P> </P>
<P><B>上机题目四:</B>送花待遇,要求根据上面的情景剧,写一程序,用户输入花价后,程序根据不同的花价输出相应的待遇。
<P>
<P>新建一控制台工程。
<P>
<P>
<P>//---------------------------------------------------------------------------
<P><B>#include <iostream.h></B>
<P>#pragma hdrstop
<P>//---------------------------------------------------------------------------
<P>#pragma argsused
<P>int main(int argc, char* argv[])
<P>{
<P> <B>int flowerPrice;</B>
<P>
<P><B> cout << "公元2002年2月14日,一小男生向一小女生赠送一束玫瑰……" <<
endl;</B>
<P><B> cout << "女生:请输入这束花的价钱。" << endl;</B>
<P><B> cout << "男生:";</B>
<P><B> cin >> flowerPrice;</B>
<P><B> </B>
<P><B> if(flowerPrice > 100)</B>
<P><B> cout << "女生:哇!我太喜欢这花了,让我亲你一口以示谢意!"
<< endl; </B>
<P><B> else if (flowerPrice > 50)</B>
<P><B> cout << "女生:哈!花美人更美,你不想亲我一口吗?"
<< endl;</B>
<P><B> else if (flowerPrice > 10)</B>
<P><B> cout << "女生:谢谢!" << endl;</B>
<P><B> else </B>
<P><B> cout << "女生:什么破花,大头鬼才会喜欢。" <<
endl;</B>
<P>
<P><B> getchar();</B>
<P>
<P> return 0;
<P>}
<P>//---------------------------------------------------------------------------<BR>
<P>以下是运行结果的一种,我实在买不起100元以上的花:
<P><IMG height=80 src="教学--第九章 条件分支语句.files/ls09t1.gif" width=504
border=0>
<P>
<H3><A name=9.5>9.5</A> switch 语句</H3>
<P>
<P>多级
if...else...显然是为了那些可能需要进行多级判断才能做出选择的情况。如前面的花价。如果正好是大于100元,那么只需判断一次,女生就可以做出决定,但如果是7元钱,那就必须经过“是否大于100?是否大于50?是否大于10?”三次判断。
<P>C为了简化这种多级判断,又提供了switch语句。
<P>
<P>switch 语句的格式:
<P>
<P>switch ( 整型或字符型变量 )
<P>{<BR> case 变量可能值1
: <BR>
分支一;<BR> break;
<P> case 变量可能值2 : <BR>
分支二;<BR> break;
<P> case 变量可能值3 : <BR>
分支三;<BR> break;
<P> ...
<P> default :
<P> 最后分支;
<P>}
<P>
<P>在 switch 的语法里,我们要学到4个关键字:switch、case 、break、default。
<P>
<P>在 switch ( 变量
) 这一行里,变量只能是整型或字符型。程序先读出这个变量的值,然后在各个"case"里查找哪个值和这个变量相等,如果相等,就算条件成立,程序执行相应的分支,直到碰上break或者switch语句结束。
<P>
<P>说起来有点抽象。我们结合一个实例看看。
<P>实例模拟一个网上调查。它要求网友输入数字以选择自已是如何到达当前网页。然后,程序根据网友这一输入,打出不同的结果。
<P>
<P><B>上机题目五:</B>模拟网络调查,要求输出不同的选项,供网友选择(通过简单地输入数字),程序根据网友的选择,输出相应不同的结果。
<P>
<P>请新建一控制台空白工程,然后在代码里输入以下黑体部分。
<P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -