📄 c语言基础(12-选择结构).htm
字号:
<p align="left"><P>ANSI C语言标准将C语言的语句分为以下几种:<BR> 1、选择语句 /*if、 switch*/<BR> 2、循环语句 /*while、 do...while*/<BR> 3、转移语句 /*break、 continue、 return、 goto*/<BR> 4、标号语句 /*case、 default*/<BR> 5、表达式语句 /*表达式*/<BR> 6、块语句 /*语句块*/<BR><BR> <FONT color=#0000ff>顺序结构</FONT>--顺序结构的程序是最简单的程序。在顺序结构的程序中,程序是一条语句接一条语句顺序地往下执行。实际上这样的简单程序几乎不会单独存在,一些很简单的小程序都少不了分支和循环结构。所以这里只解释一下,不作多的讲解。在循环或分支结构里也包含了大量的顺序结构程序。<BR> <FONT color=#0000ff>选择结构</FONT>--用if语句或switch构成的语句块就是选择结构的程序。<BR> <FONT color=#0000ff>if语句</FONT>--“if“这个单词在英文里是“如果“的意思,即对某件事进行逻辑判断。“如果某某怎样结果就怎样“。<BR>if语句的一般形式--if(表达式) 语句;<BR>例: if(i>30) printf("%d",i); /*如果变量i的值大于30就输出i的值*/<BR>在上面的程序中,括号里的i>30是一个关系表达式,printf("%d",i);是一个语句。这条语句只有当i>30的逻辑值为真时才执行。如果i的值小于30,则不执行printf("%d",i);这条语句。<BR><BR>思考一下,在下面的程序中,如果a的值为0 ,输出变量b的值是多少。如果a不为0时输出多少:<BR>#include<stdio.h><BR>void main()<BR>{<BR> int a,b=30,c=10;<BR> scanf("%d"&a);<BR> if(a)<BR> b=b-c;<BR> printf("%d",b);<BR>}<BR>从这个程序可以看到,当变量a的取值不同,程序所执行的语句是不同的,这就是根据条件有选择地执行,所以叫作“选择结构“。<BR><BR>例:一个猜随机数的程序<BR>#include<stdio.h><BR>#include<stdlib.h> /*在程序中用到了产生随机数的库函数rand(),所以要包含stdlib.h*/<BR><BR>void main()<BR>{<BR> int magic; /*存放产生的随机数*/<BR> int guess; /*存放从键盘输入的数*/<BR> magic=rand(); /*产生一个随机数*/<BR> printf("输入一个数:");<BR> scnaf("%d",&guess); /*从键盘输入的数*/<BR> if(guess==magic) /*输入的数与产生的随机数比较*/<BR> printf("你猜对了!"); /*如果二个数相等,输出这条信息*/<BR> return 0;<BR>}<BR><BR>上面的二个程序例子是最简单的if选择语句,当表达式的逻辑值为真时执行if后面的语句,但是没有“当表达式的逻辑值为假“时是怎样执行的。<BR><BR><FONT color=#0000ff>有else语句的if选择语句</FONT>--else就是“否则“的意思。<BR>if...else选择语句的一般形式<BR><FONT style="BACKGROUND-COLOR: #faebd7">if(表达式)<BR> 语句块1;<BR>else<BR> 语句块2;<BR></FONT><BR><FONT color=#000000>例:把上面的猜随机数程序改写一下,使用else语句,使得在猜错了数字时,也能够输出一个信息。<BR>#include<stdio.h><BR>#include<stdlib.h><BR><BR>void main()<BR>{<BR> int magic;<BR> int guess;<BR> magic=rand();<BR> printf("输入一个数");<BR> scanf("%d",&guess);<BR> if(guess==magic)<BR> printf("你猜对了!"); /*语句块1,也是选择1*/<BR> else /*否则*/<BR> printf("你猜错了!"); /*语句块2,也是选择2*/<BR>}</FONT></P>
<P><FONT color=#0000ff>有多个选择分支的if语句</FONT>--这里讲的if选择语句的形式可以对多个选择条件进行逻辑判断,实现多选择。<BR>一般形式:<BR><FONT style="BACKGROUND-COLOR: #faebd7">if(表达式1)<BR> 语句块1;<BR>else if(表达式2)<BR> 语句块2;<BR>else if(表达式3)<BR> 语句块3;<BR>......<BR>......<BR>else if(表达式n)<BR> 语句块n;<BR></FONT></P>
<P><FONT color=#000000>由以上多选择if语句的形式可以看到,每一个else后面都有一个if选择语句,用于对表达式中的条件进行判断。<BR>还是以猜随机数的程序为例,改为if...else if的形式:<BR>#include<stdio.h><BR>#include<stdlib.h><BR>void main()<BR>{<BR> int magic;<BR> int guess;<BR> magic=rand();<BR> printf("输入一个数");<BR> scanf("%d",&guess);<BR> if(guess==magic)<BR> {<BR> printf("你猜对了!");<BR> printf("%d 这个随机数是:",magic);<BR> }<BR> else if(guess>magic)<BR> printf("猜的随机数太大了。");<BR> else printf("猜的随机数太小了。");<BR>}<BR><BR><FONT color=#0000ff>if 语句的嵌套</FONT><BR> 在if语句后面的语句块中如果还有if语句,称为嵌套if语句,格式如下:<BR>if(i)<BR>{<BR> if(j) statement 1;<BR> if(k) statement 2;<BR> else statement 3;<BR>}<BR>else statement 4;<BR>ANSI标准规定,编译程序至少要支持15层嵌套,而实际上往往比这要多。<BR>下面用嵌套的if语句把猜随机数的程序重写一下:<BR>#include<stdio.h><BR>#include<stdlib.h><BR>void main(void)<BR>{<BR> int magic;<BR> int gues;<BR> magic=rand();<BR> printf("guess the magic number:");<BR> scanf("%d",&guess);<BR> if(guess==magic)<BR> {<BR> printf("你猜对了!");<BR> printf("%d is the magic number\n",magic);<BR> }<BR> else<BR> {<BR> printf(" 猜错了!");<BR> if(guess>magic) /*这里就是嵌套的if语句*/<BR> printf("猜的数太大。");<BR> else printf("猜的数太小.");<BR> }<BR>return 0;<BR>}<BR>可以看出,上面讲过的if...else if...else if 的形式实际上也是嵌套的if语句。</FONT></P>
<P><FONT color=#000000>注意:在有多个if...else语句的结构中,else总是与最近的if配对的,如:<BR>if(...)<BR> statement;<BR>if(...)<BR> statement;<BR>else statement;<BR>这三个语句中,第二个if与下面的else配对,而不是第一个if与下面的else配对。在实际的编程中很容易犯这样的配对错误。</FONT></P>
<P><FONT color=#000000>下面给出一个使用if语句的实例,通过这个实例提出一个问题,在对这个问题有了认识后就会更进一步掌握if语句的用法。这个程序是一个数制转换应用程序,可以进行如下的数制转换:<BR>十进制转换为十六进制<BR>十六进制转换为十进制<BR>十进制转换为八进制<BR>八进制转换为十进制</FONT></P>
<P><FONT color=#000000>首先在菜单中选择一个要转换的类型,然后提示输入被转换的数据,最后显示该数据转换后的结果。访程序中转换谅 关键在于二个特殊的printf()和scanf格式指令:%x和%o。当在printf()调用中使用%x格式指令,可以将一个整数以十六进制显示。如果在scanf调用中使用%x格式指令,将scanf()函数输入一个十六进制的整数。同样,%o格式指令将printf()函数输出一个八进制的整数,scanf函数输入一个八进制形式的整数。<BR>#include<stdio.h><BR>void main(void)<BR>{<BR> int chioce;<BR> int value;<BR> printf("convert:\n");<BR> printf(" 1:decimal to hexadecimal\n");<BR> printf(" 2:hexdecimal to decimal\n");<BR> printf(" 3:decimal to octal\n");<BR> printf(" 4:octal to decimal\n");<BR> printf(enter your chioce:");<BR> scanf("%d",&chioce);<BR> if(chioce==1)<BR> {<BR> printf("enter decimal value:");<BR> scanf("%d",&value);<BR> printf("%d in hexdecimal is :%xd",value,value);<BR> }<BR> if(chioce==2)<BR> {<BR> printf("enter hexdecimal value:");<BR> scanf("%x",&value);<BR> printf("%x in decimal is :%d",value,value);<BR> }<BR> if(chioce==3)<BR> {<BR> printf("enter decimal value:");<BR> scanf("%d",&value);<BR> printf("%d in hexdecimal is :%o",value,value);<BR> }<BR> if(chioce==4)<BR> {<BR> printf("enter octal value:");<BR> scanf("%o",&value);<BR> printf("%o in hexdecimal is :%d",value,value);<BR> }<BR>}</FONT></P>
<P><FONT color=#000000>把这个程序编译并运行,如果没有输入错误,它可以按我们的要求工作得很好。但是应该发现一点问题,假设我们选择的是2,比较好的情况应该是进行if(chioce==2)判断并执行这里的语句块,然后结束。但是实际情况不是这样,在执行了这部分语句后,它还要继续进行后面的判断,如if(chioce==3); if(choice==4)这样的几步就是多余的了。<BR> 产生这样的问题是因为在使用if语句时,如果判断多个条件中的一个,应该使用if...else if语句,而不应if...if...if这样重复使用。修改后的程序如下:<BR>#include<stdio.h><BR>void main(void)<BR>{<BR> int chioce;<BR> int value;<BR> printf("convert:\n");<BR> printf(" 1:decimal to hexadecimal\n");<BR> printf(" 2:hexdecimal to decimal\n");<BR> printf(" 3:decimal to octal\n");<BR> printf(" 4:octal to decimal\n");<BR> printf(enter your chioce:");<BR> scanf("%d",&chioce);<BR> if(chioce==1)<BR> {<BR> printf("enter decimal value:");<BR> scanf("%d",&value);<BR> printf("%d in hexdecimal is :%xd",value,value);<BR> }<BR> else if(chioce==2)<BR> {<BR> printf("enter hexdecimal value:");<BR> scanf("%x",&value);<BR> printf("%x in decimal is :%d",value,value);<BR> }<BR> else if(chioce==3)<BR> {<BR> printf("enter decimal value:");<BR> scanf("%d",&value);<BR> printf("%d in hexdecimal is :%o",value,value);<BR> }<BR> else if(chioce==4)<BR> {<BR> printf("enter octal value:");<BR> scanf("%o",&value);<BR> printf("%o in hexdecimal is :%d",value,value);<BR> }<BR>}<BR>这样当我们输入2,它只进行if(choice==1)、if(choice==2)判断,在执行了if(choice==2)后面的语句之后就退出,不再进行其它的if语句判断。所以这样的if语句结构才是合理的。</FONT></P>
<P><FONT color=#000000><FONT color=#0000ff>用?操作符替代if...else语句<BR> </FONT><FONT color=#000000>看下面的if语句结构:<BR>if(Expression1)<BR> Expression2;<BR></FONT>else<BR> Expression3;<BR><BR>写一个具体的例子:<BR>if(a==5)<BR> a=3;<BR>else <BR> a=10;<BR><BR>注意:在这样结构的if语句中,expression是一个单一的表达式。(注意“单一”的含义)。如下面的if语句就不含单一的expression:<BR>if(a==5)<BR>{ a=3;b=12;}<BR>else<BR>{a=10;b=20;}<BR><BR>理解了上面所说的if语句的组成结构后,下面就可以看一下怎样用?操作符来替代if语句:<BR>Expression1? Expression2: Expression3<BR>上面这个语句称为“ ?号表达式 ”。这样的?号表达式其作用与上面的if语句是一样的。<BR>解释一下这个问号表达式的含义就是 “如果Expression1为真,则表达式的值为EXpression2,否则为Expression3”。<BR>也可以如下这样的叙述:<BR>先计算表达式Expression1的值,如果为真,就计算表达式Expression2的值,表达式Expression2的值就是整个问号表达式的值;如果表达式Expression1的值为假,就计算表达式3的值,表达式Expression3的值就是整个问号表达式的值。<BR>例:<BR>x=10;<BR>y=x>9? 100: 200<BR>在这个例子中,y被赋值100,如果小于9,那么取值200。若使用if...else语句,则程序为:<BR>x=10;<BR>if(x>9)y=100;<BR>else y=200;<BR>可见在这样的情况下,用?表达式写程序要简单得多。<BR><BR>下面的程序中,使用操作符?对键入的数做平方运算,但整数的符号仍保持不变。例如10的平方是100,-10的平方为-100。<BR>#include<stdio.h><BR>void main(void)<BR>{<BR> int isqrd;<BR> printf("Enter a number:");<BR> scanf("%d",&i);<BR> isqrd=i>0? i*i: -(i*i);<BR> printf("%d squared is %d",isqrd);<BR> return 0;<BR>}<BR><BR>下面是一个在?表达式里调用函数的情形,请把这个程序仔细地分析一下:<BR>#include<stdio.h><BR>int f1(int n);<BR>int f2(void);<BR><BR>void main(void)<BR>{<BR> int t;<BR> printf("Enter a number:");<BR> scanf("%d",&t);<BR> t? f1(t)+f2(): printf("zero Entered");<BR> return 0;<BR>}<BR><BR>f1(int n)<BR>{<BR> printf("%d\n");<BR> return t*t;<BR>}<BR><BR>f2(void)<BR>{<BR> printf("Entered");<BR> return t;<BR>}</FONT></P> </td>
</tr>
</table>
</div>
</td>
</tr>
<tr>
<td width=758 bgColor=#b1bde0>
<P align=right>教程录入:Sunpeople 责任编辑:Sunpeople </P></td>
</tr>
<tr>
<td height=16>
<form method="POST" action="--WEBBOT-SELF--">
<!--webbot bot="SaveResults" U-File="fpweb:///_private/form_results.csv" S-Format="TEXT/CSV" S-Label-Fields="TRUE" -->
<p align="left"> <li>上一个教程: <a class='LinkPrevArticle' href='/c/ShowArticle.asp?ArticleID=29' title='文章标题:C语言基础(11-数据类型转换)
作 者:dd
更新时间:2006-6-6 18:07:13'>C语言基础(11-数据类型转换)</a></li><BR> <li>下一个教程: <a class='LinkNextArticle' href='/c/ShowArticle.asp?ArticleID=31' title='文章标题:C语言基础(13-选择结构(续)
作 者:dd
更新时间:2006-6-6 18:08:05'>C语言基础(13-选择结构(续)</a></li></p>
</form>
</td>
</tr>
<tr>
<td width=758 bgColor=#adb9dd>##相关推荐:</td>
</tr>
<tr>
<td width=758>
<div align=right>
<table cellSpacing=0 cellPadding=0 width="99%">
<!-- MSTableType="layout" -->
<tr>
<td vAlign=top height=118><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1422' title='文章标题:06.9全国计算机等级考试二级C语言上机题
作 者:未知
更新时间:2006-11-4 17:32:49' target="_self">06.9全国计算机等级考试二级…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1421' title='文章标题:06.9全国计算机等级考试二级C语言上机题
作 者:未知
更新时间:2006-11-4 17:32:04' target="_self">06.9全国计算机等级考试二级…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1420' title='文章标题:06.9全国计算机等级考试二级C语言上机题
作 者:未知
更新时间:2006-11-4 17:31:17' target="_self">06.9全国计算机等级考试二级…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1419' title='文章标题:06.9全国计算机等级考试二级C语言上机题
作 者:未知
更新时间:2006-11-4 17:30:27' target="_self">06.9全国计算机等级考试二级…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1418' title='文章标题:06.9全国计算机等级考试二级C语言上机题
作 者:未知
更新时间:2006-11-4 17:21:25' target="_self">06.9全国计算机等级考试二级…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1417' title='文章标题:2006年9月23日计算机等级考试二级C上机试题
作 者:未知
更新时间:2006-11-4 17:19:24' target="_self">2006年9月23日计算机等级考试…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1416' title='文章标题:全国计算机等级考试二级C语言上机题2
作 者:未知
更新时间:2006-11-4 17:16:40' target="_self">全国计算机等级考试二级C语言…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1415' title='文章标题:全国计算机等级考试二级C语言上机题1
作 者:未知
更新时间:2006-11-4 16:58:55' target="_self">全国计算机等级考试二级C语言…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1192' title='文章标题:C语言教程第二章: 数据类型、运算符、表达式
作 者:佚名
更新时间:2006-9-29 17:26:28' target="_self">C语言教程第二章: 数据类型、…</a><br><a class='LinkArticleCorrelative' href='/c/ShowArticle.asp?ArticleID=1191' title='文章标题:C语言教程第二章: 数据类型、运算符、表达式
作 者:佚名
更新时间:2006-9-29 17:25:13' target="_self">C语言教程第二章: 数据类型、…</a><br></td>
</tr>
</table>
</div></td>
</tr>
</table>
<table height=164 cellSpacing=0 cellPadding=0 width=760 border=0>
<tr>
<td width=760 background=/images1/index_32.gif height=26>
<P align=center>| <A class=Bottom onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://lsjs.gsau.edu.cn');" href="#">设为首页</A> | <A class=Bottom href="javascript:window.external.addFavorite('http://lsjs.gsau.edu.cn','蓝色极速');">加入收藏</A> | <A class=Bottom href="mailto:wxw404@gmail.com">联系站长</A> | <A class=Bottom href="/FriendSite/Index.asp" target=_blank>友情链接</A> | <A class=Bottom href="/Copyright.asp" target=_blank>版权申明</A> | </P></td>
</tr>
<tr>
<td width=760 background=/images1/index_33.gif height=138>
<P align=center>Copyright (C) 蓝色极速 All Rights Reserved<BR>建议使用:1024*768分辨率,16位以上颜色、Netscape6.0<BR>IE5.0以上版本浏览器和中文大字符集</P></td>
</tr>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -