《C语言程序设计》基本知识点解答(三)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C语言程序设计基本知识点解答(三)第五章选择结构程序设计Q116如何进行选择结构的程序设计?(选择结构)A116“选择结构”也可以叫做“分支结构”。在一个合理的“选择结构”中,总是先进行某个条件的判断,然后根据判断的结果选择执行预先设定的操作。其流程图如下:可见,要想实现“选择结构”,需要2个条件:①能表达条件判断的运算符:即关系运算符和逻辑运算符②能实现判断并选择的控制语句:即if和switch语句Q117什么是关系运算符?(关系运算符)A117关系运算符也叫“比较运算符”,用于对两个数据进行比较判断的。C语言中一共有6种关系运算符,分别是小于、=小于等于、大于、=大于等于、==等于、!=不等于。用这6种运算符按规定把运算量连接起来构成的式子就是关系表达式。其中,参与关系运算的数据可以是常量、变量或任何合法的表达式。比如:a*a=100、NowIndex==MaxIndex。所有6种关系运算符的优先级都比算术运算符低,而==等于、!=不等于两个运算符的优先级又比其它四个关系运算符低。所有6种关系运算符的结合性都是从左向右。Q118C语言中如何表示一个关系表达式的值?(关系表达式)A118关系表达式进行的是关系运算,也就是“比较运算”。比较的结果只可能有两个:“真”或“假”。对应于实际生活中,就是“成立”还是“不成立”,“正确”还是“不正确”,“对”还是“不对”这样一些比较和判断的结果。可见,关系运算的结果的特点是:只有两种可能的结果;任何时候答案只可能是其中的一个;两种可能是相互对立不可能同时出现的。这样的特点正对应于数学上的“逻辑值”:“真”或“假”。所以最终的结论就是:关系表达式的值是“逻辑值”,即“真”或“假”。C语言中分别以“1”和“0”来代表。就是说,如果关系表达式的值为“真”,则得到整数1;如果值为“假”,则得到整数0。比如关系表达式35的值就等于0,而关系表达式53的值就等于1。有了这样的处理,一个关系表达式就可以作为其它表达式的一部分从而构成更复杂的表达式了。比如:(35)+(3!=5)、x=(y==z)等等。Q119当a=3,b=2,c=1时,为什么关系表达式abc的值却是“假”的?(关系表达式)A119计算机语言中的表达式并不是数学表达式。如果是一个数学式子abc,它表示b同时大于c和小于a,的确是对的。但是在C语言中,这个关系表达式实际上等价于(ab)c。这样计算一下:(ab)是“真”,值为1;1c当然是“假”。Q120什么是逻辑运算符?(逻辑运算符)A120逻辑运算实际上是复合的关系运算,即要判断一个大命题的成立与否,不仅要判断其中的AB?YesNoabAB?YesNoab各个小命题是否成立,还取决于每个小命题的成立与否是如何影响大命题的成立的。C语言有3种逻辑运算符,分别是&&逻辑与(双目)、||逻辑或(双目)、!逻辑非(单目)。Q121逻辑运算符的运算规则是什么?(逻辑运算符)A121逻辑运算是关系比较运算结果之间进行的运算,所以参与逻辑运算的运算量必须是逻辑量(即值为“真”或“假”的量),而逻辑运算的结果也必然是逻辑值(“真”或“假”,以下分别用“True”或“False”代表)。&&逻辑与的运算规则是:全部运算量都为“T”,逻辑与运算才为“T”;只要有一个运算量为“F”,逻辑与运算即为“F”比如想判断x的绝对值是否小于5,那么对应的逻辑表达式是:x-5&&x5。||逻辑或的运算规则是:全部运算量都为“F”,逻辑或运算才为“F”;只要有一个运算量为“T”,逻辑或运算即为“T”比如想判断x的绝对值是否大于5,那么对应的逻辑表达式是:x-5||x5。!逻辑非的运算规则是:运算量为“T”,逻辑非运算则为“F”;运算量为“F”,逻辑非运算则为“T”比如关系表达式x0,实际上和逻辑表达式!(x=0)是等价的。总结一下,逻辑运算的规则就如下表所示:TFTFFTTTF!aTFF!bTTTTFFa&&bFTa||bTFFFbaTFTFFTTTF!aTFF!bTTTTFFa&&bFTa||bTFFFba其中:a、b代表逻辑量。T代表“真”值,F代表“假”值。Q122既然前面说“参与逻辑运算的运算量必须是逻辑量”,那为什么C语言中还有诸如5&&3这样的逻辑表达式?(逻辑表达式)A122这是因为在C语言中,除了可以求解到关系表达式本身就是逻辑值的值,还可以求解出任何合法的表达式的“逻辑值”。这是基于这样的一个规定和处理方式:当需要求解任何一个表达式的逻辑值是“真”是“假”时,认为该表达式的值为非整数0时是“逻辑真”,而等于整数0时是“逻辑假”。按照这样的规定,上述逻辑运算规则表在C语言中就可以扩展为下表了:10100非0110!a100!b11非0非000a&&b01a||b非0000ba10100非0110!a100!b11非0非000a&&b01a||b非0000ba其中a、b代表任何类型的数据(可以是常量、变量或表达式)。所以,有5&&3这样的逻辑表达式也就不奇怪了。按照上表,5和3都是“逻辑真”,则5&&3仍然是“真”,所以这个表达式的值等于1。Q123=运算符与==运算符有什么区别?(赋值运算符)(等于运算符)A123=运算符与==运算符有本质上的区别,千万不要混淆或误用=与==运算符。=是“赋值运算符”。赋值表达式中,赋值运算符的左边只能是变量。==是“等于关系运算符”。关系表达式中,等于运算符的两边可以是常量、变量或任何合法的表达式。由于上述的本质区别,所以如果误用或混用,则会产生严重的后果。比如:(a=1)==(b=2)是一个合法的等于关系表达式,而如果少写一个=号,则变成了(a=1)=(b=2),这却是一个非法的赋值表达式了,编译的时候就会给出错误信息。又比如:假设a=1,则判断a是否和100相等的表达式应该是a==100的关系表达式,它的值也应该是“逻辑假”的,即等于0。但是如果一旦少写一个=号,则变成了a=100的赋值表达式,这个表达式的值等于100,是“逻辑真”的,显然和正确的结果产生了误差。更严重的是变量a的值还在求解赋值表达式的过程中被改变了。更更严重的是,这样的错误不会在编译时容易地发现,它隐藏的很深,非常不容易排除。Q124if语句有哪些语法形式?(if)A124if语句有两种语法形式:①只使用单独的if。其形式为if(表达式)语句;比如if(x0)sign=1;其执行过程如右图所示②使用成对的if和else。其形式为if(表达式)语句1;else语句2;比如:if(x0)sign=1;elsesign=-1;其执行过程如左图所示其中的“语句”、“语句1”、“语句2”称之为if或else的内嵌语句。注意:C语言规定,if或else的内嵌语句只能是一个语句,不能超过一个语句。Q125什么叫if嵌套语句?(if)(嵌套)A125在if或else的内嵌语句中又包含一个或多个if语句时,称为if语句的嵌套。常用于多重条件,多个分支的选择判断控制。比如:if(x!=0)if(x0)y=1;elsey=-1;elsey=0;其执行流程图如图所示:语句表达式TF语句表达式TF语句1表达式TF语句2语句1表达式TF语句2x!=0TFy=0y=1x0TFy=-1x!=0TFy=0y=1x0TFy=-1Q126else能否单独使用构成选择结构?(else)(嵌套)A126绝对不能。else必须和if在一起构成选择结构语句。也就是说,有一个else就必须有一个if和它配对。其实道理很简单,没有“如果”哪有“否则”呢?Q127什么是if嵌套语句中if和else的配对问题?(if)(嵌套)A127正如上个问题所言,else是不能单独出现的,而if却可以单独构成一个语句,那么,在if嵌套语句中就存在else和if如何配对的问题。即是说,当if和else的数目不相等时,到底每个else和哪个if在一起组成一个语句的问题。在C语言中,if与else的配对原则是:从if嵌套语句的最里层的else开始向外,依次将else与在它前面的离它最近的还未配对的if配对。比如:if(x!=0)if(x0)y=1;elsey=-1;elsey=0;其配对结果是:①if(x!=0)②if(x0)y=1;②elsey=-1;①elsey=0;而如果是如下语句:if(x!=0)if(x0)y=1;elsey=0;则配对结果是:①if(x!=0)②if(x0)y=1;②elsey=0;如果不注意上述配对原则,那么就很有可能出现这样的情况:编译系统的理解和程序员的本意发生偏差,使程序运行结果出错。这样的错误也是很难发现的。Q128那么,如何避免在if嵌套语句中出现实际的配对和所设计的配对发生误差的情况?(if)(嵌套)A128仔细分析一下就会发现,在if嵌套语句中之所以会发生配对误差,根本的原因在于if可能单独出现。实际效果就是if的数目大于else的数目。针对问题出现的原因,有以下解决办法:①只把要嵌套的语句放在else后面,这样由于每个else前面只有一个if,所以不会出错。比如:y=0;if(x=0)if(x0)y=1;elsey=-1;容易出错,而if(x0)y=-1;elseif(x0)y=1;elsey=0;不易出错。②如果嵌套语句必须放在if后面,就把它用大括号括起来,或给每个if语句都加上else。比如:y=0;if(x=0){if(x0)y=1;}elsey=-1;y=0;if(x=0)if(x0)y=1;else;elsey=-1;都不易出错。Q129什么是switch语句?(switch)A129switch语句是多条件多分支选择语句,类似于if语句的第三种形式,即if嵌套语句。switch语句中会使用4个C关键字:switch、case、default和break。其语法构成如下:switch(表达式){case常量表达式1:语句1;break;case常量表达式2:语句2;break;......case常量表达式n:语句n;break;default:语句n+1;}其中,粗体部分是必不可少的。switch语句的执行流程图如下:语句1表达式的具体值F语句2……语句n语句n+1=常量表达式1的值?=常量表达式2的值?……=常量表达式n的值?TTTTFFF有breakYN有breakN有breakN有breakNYYY开始结束语句1表达式的具体值F语句2……语句n语句n+1=常量表达式1的值?=常量表达式2的值?……=常量表达式n的值?TTTTFFF有breakYN有breakN有breakN有breakNYYY开始结束从流程图可见,关键字break的作用是结束它所在的switch语句的执行。Q130switch语句使用中有何注意事项?(switch)A130switch的语法相对比较复杂,使用中需注意以下几点:(1)switch语句中,switch后的表达式可以是任何类型的表达式,系统求解它的具体值而不是逻辑值。这一点是和if语句不一样的。对于if语句,系统求解其后的表达式的逻辑值。(2)每一个case后面的表达式只能是常量表达式,即能求解出具体值的表达式,而绝不能是变量或表示范围判断的关系表达式或逻辑表达式。通常其类型是和switch后的表达式相对应的。同时,每一个常量表达式的值必须互不相同,否则会出现互相矛盾的现象。下面就是一个正确的switch语句:chargrade;switch(grade){case'E':printf(Excellent\n);break;case'G':printf(Good\n);break;case'B':printf(Bad\n);break;default:printf(Godknows\n);break;}而下面这个就是一个错误的switch语句:intscore;switch(score){case89:gra

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功