getchar();
return0;
}
//---------------------------------------------------------------------------
9.3 ?
:
表达式
?
:
表达式我们称为问号冒号表达式。
用if...else...和if...语句,已经可以很好地实现所有条件分支的代码。
不过C是一门追求简捷高效的语言,它提供的?
:
表达式来在某种情况下代替if...else...,起来让代码更简捷的作用。
来看看if...else...语句在什么情况下可以简化。
首先来看原型:
if(条件)
{
分支一
}
else
{
分支二
}
我们知道,分支一或分支二一般都是一组(多行)语句,用来分别实现条件是否成立时的动作。
由于是一组(多行)语句,所以我们有一对{}括在外面,用于形成复合语句。
不过,有时候,分支中的语句比较简单,用一句话就可以实现。
比如我们所举的例子:
if(a>b)
{
c=1;
}
else
{
c=0;
}
在这个例子中,分支一、二都分别只有一条语句。
对于只有一条语句的情况,我们可以省略{}(除了在特殊的上下文中外,其它情况下都可以省略。
以后我们学习的其它流程控制也一样),如:
if(a>b)
c=1;
else
c=0;
看,没有花括号的代码,感觉多紧凑。
不过,对于上面的代码,我们还可以继续简化,那就是使用?
:
语句。
c=(a>b)?
1:
0;
就一行话,多简捷!
语句中的问号问的是什么?
问的是a是否大于b?
如果是,则得到值1,否则,得到值0。
?
:
表达式格式语法:
(条件)?
值1:
值2
举一例子:
设有int变量a,b,二者均已初始化。
请得到二者中的较大值。
方法是:
intc=(a >b)?
a:
b;
是的,就这么简单,执行上面代码,c将得到a和b中的较大值。
我们称(a>b)?
a:
b为一个表达式,而不称它为完整的一个语句(尽管它的确也可以作一个单独的语句存在)。
一般地,?
:
表达式拿来作为等号的右值,用于通过条件判断确定一个值后,该值被赋予等号的左值。
因此,并不是所有的if..else...语句都可以用:
?
来代替,只有那些两个分支都只是用来计算一个同一类型的值,然后赋予同一变量的条件分支语句,才适合。
上机题目三:
两数取大
新建一个控制台空白工程。
然后在代码中输入以下黑体部分:
//---------------------------------------------------------------------------
#include
#pragmahdrstop
//---------------------------------------------------------------------------
#pragmaargsused
intmain(intargc,char*argv[])
{
inta,b,c;
cout<<"请输入两个整数(用空格分开):
";
cin>>a>>b;
c=(a>b)?
a:
b;
cout<
getchar();
return0;
}
//---------------------------------------------------------------------------
下面是屏幕输出的结果。
我输入的两个数是102 和134。
9.4 多级if...else...语句
不要害怕为什么一个条件分支就有这么多种语句。
多级if..else..语句——只是我这么叫它,其实它完全是由if..else..语句组成,就好像楼梯,一个阶的楼梯是楼梯,100个阶的楼梯也是楼梯。
多级if..else...语法格式:
if(条件1)
{
分支一
}
elseif(条件2)
{
分支二
}
elseif(条件3)
{
分支三
}
else
{
分支四
}
格式中举出四个分支,实际可以只有三个,两个,也可以有更多个。
请看下在这个例子。
让我们想像这么一幕情景剧——
时间:
XXXX年2月14日;地点:
某校园内小公园;
人物:
女生一,男生一。
(男生送给女生一束环瑰)
女生(高兴地):
多美啊——多少钱买的!
男生:
猜。
女生(心里想:
如果多于100元我就亲他一口):
超过100元吗?
男生:
NO。
女生:
(心里想:
如果多于50元我就许他亲我一口):
那,不低于50元吧?
男生:
NO。
女生:
(心里想:
如果多于10元就跟他说声谢谢吧):
那是不低于10元了?
男生:
NO。
女生:
(不再有任何想法,一把丢掉鲜花):
呸!
看明白了吗?
“看明白了……”一个小男生眼泪汪汪地站起来,回答:
“我是看明白了,现在的女生没一个是好东西!
”#·$&*%!
@啊?
?
我是说,大家看出其中的多级条件分支了吗?
写成程序,便是:
intprice=玫瑰花价钱;
if(price>100)
{
小女生要亲小男生一口;
}
elseif(price>50)
{
小女生准备让小男生亲一口;
}
elseif(price>10)
{
小女生对小男生说声“谢谢”;
}
else
{
小女生扔掉花,说:
“呸!
”;
}
如果花价大于100元,那么女生亲男生一口;否则呢?
否则就再判断花价是否大于50元,如果还是不大,那不再来判断花价是否大于10元,如果还是不大,最后无条件地执行“小女生扔掉花……”这一句。
看一下多级if...else...语句的流程图:
上机题目四:
送花待遇,要求根据上面的情景剧,写一程序,用户输入花价后,程序根据不同的花价输出相应的待遇。
新建一控制台工程。
//---------------------------------------------------------------------------
#include
#pragmahdrstop
//---------------------------------------------------------------------------
#pragmaargsused
intmain(intargc,char*argv[])
{
intflowerPrice;
cout<<"公元2002年2月14日,一小男生向一小女生赠送一束玫瑰……"< cout<<"女生:
请输入这束花的价钱。
"< cout<<"男生:
";
cin >>flowerPrice;
if(flowerPrice>100)
cout<<"女生:
哇!
我太喜欢这花了,让我亲你一口以示谢意!
"< elseif(flowerPrice>50)
cout<<"女生:
哈!
花美人更美,你不想亲我一口吗?
"< elseif(flowerPrice>10)
cout<<"女生:
谢谢!
"< else
cout<<"女生:
什么破花,大头鬼才会喜欢。
"<
getchar();
return0;
}
//---------------------------------------------------------------------------
以下是运行结果的一种,我实在买不起100元以上的花:
9.5switch语句
多级if...else...显然是为了那些可能需要进行多级判断才能做出选择的情况。
如前面的花价。
如果正好是大于100元,那么只需判断一次,女生就可以做出决定,但如果是7元钱,那就必须经过“是否大于100?
是否大于50?
是否大于10?
”三次判断。
C为了简化这种多级判断,又提供了switch语句。
switch语句的格式:
switch(整型或字符型变量)
{
case变量可能值1:
分支一;
break;
case变量可能值2:
分支二;
break;
case变量可能值3:
分支三;
break;
...
default:
最后分支;
}
在switch的语法里,我们要学到4个关键字:
switch、case、break、default。
在 switch(变量) 这一行里,变量只能是整型或字符型。
程序先读出这个变量的值,然后在各个"case"里查找哪个值和这个变量相等,如果相等,就算条件成立,程序执行相应的分支,直到碰上break或者switch语句结束。
说起来有点抽象。
我们结合一个实例看看。
实例模拟一个网上调查。
它要求网友输入数字以选择自已是如何到达当前网页。
然后,程序根据网友这一输入,打出不同的结果。
上机题目五:
模拟网络调查,要求输出不同的选项,供网友选择(通过简单地输入数字),程序根据网友的选择,输出相应不同的结果。
请新建一控制台空白工程,然后在代码里输入以下黑体部分。
//---------------------------------------------------------------------------
#include
#pragmahdrstop
//---------------------------------------------------------------------------
#pragmaargsused
intmain(intargc,char*argv[])
{
intfromWay;
cout<<"请通过输入序号,选择您如何来到本网站。
"< cout<<"1)----通过搜索引擎"< cout<<"2)----通过朋友介绍"< cout<<"3)----通过报刊杂志"< cout<<"4)----通过其它方法"<
cin>>fromWay;
switch(fromWay)
{
case1:
cout<<"您是通过搜索引擎来到本网站的。
"< break;
case2:
cout<<"您是通过朋友介绍来到本网站的。
"< break;
case3:
cout<<"您是通过报刊杂志来到本网站的。
"< break;
case4:
cout<<"您是通过其它方法来到本网站的。
"< break;
default:
cout<<"错误的选择!
请输入1~4的数字做出选择。
"< }
getchar();
return0;
}
以下是我运行的一个结果,我输入的是2。
对照输入结果,我们讲一讲这段代码,其中主要目的是要弄明白switch语句的用法。
首先,intfromWay 定义了一个整型变量,准备用来存储用户输入的选择。
cout<<"请通过输入序号,选择您如何来到本网站。
"<cout<<"1)----通过搜索引擎"<cout<<"2)----通过朋友介绍"<cout<<"3)----通过报刊杂志"<cout<<"4)----通过其它方法"<
这些语句输出提示和选择项,结果如上图。
cin>>fromWay; 这一句则负责等待用户输入,并且将用户的输入存储到fromWay。
接下来程序遇上了switch 语句:
switch(fromWay)
程序将根据 fromWay 值,在下面的各个case中找到匹配的值。
本例中switch带有四个case,值分别是1、2、3、4。
在结果图中,由于我输入的是2,所以程序进入下面这个case:
case2:
cout<<"您是通过朋友介绍来到本网站的。
"< break;
程序打出"您是通过朋友介绍来到本网站的。
"这行内容。
最后遇上break;于是跳出整个switch语句。
同样的道理,如果用户输入的是其它的数,如1或3,则会进入相应的case1或 case3 分支。
但如果用户输入的数在所有的case里都找不到时,会怎么样?
比如,用户输入5。
这种情况下,default分支将起作用,所有case里的值都不匹配时,switch进入default分支。
如果连default也没有,那么程序在switch语句里什么也不做,直接完成switch语句。
我们来看一下如果用户不按所列的情况输入,而造成的结果:
了解一下switch,case,break,default的意思,对理解前面的一切也会有帮助,它们分别是:
开关,情况,中断,默认(值)。
那么用一句话套起来的说法就是:
根据开关值的不同,执行不同的情况