版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计根本知识点解答第五章选择构造程序设计Q116?如何进展选择构造的程序设计?选择构造A116?”选择构造也可以叫做“分支构造。在一个合理的“选择构造中,总是先进展某个条件的判断,然后根据判断的结果选择执行预先设定的操作。其流程图如下:可见,要想实现“选择构造,需要2个条件:能表达条件判断的运算符:即关系运算符和逻辑运算符能实现判断并选择的控制语句:即if和switch语句Q117?什么是关系运算符?关系运算符A117?关系运算符也叫“比较运算符,用于对两个数据进展比较判断的。C语言中一共有6种关系运算符,分别是<小于、<二小于等于、>大于、>=大于等于、=等
2、于、!=不等于。用这6种运算符按规定把运算量连接起来构成的式子就是关系表达式。其中,参与关系运算的数据可以是常量、变量或任何合法的表达式。比方:a*a<=100、NowIndex=Maxindex。所有6种关系运算符的优先级都比算术运算符低,而二=等于、!=不等于两个运算符的优先级又比其它四个关系运算符低。所有6种关系运算符的结合性都是从左向右。Q118?C语百中如何表小一个关系表达式的值?关系表达式A118?关系表达式进展的是关系运算,也就是“比较运算。比较的结果只可能有两个:“真或“假。对应于实际生活中,就是“成立还是“不成立,“正确还是“不正确,“对还是“不对这样一些比较和判断的结
3、果。可见,关系运算的结果的特点是:只有两种可能的结果;任何时候答案只可能是其中的一个;两种可能是互相对立不可能同时出现的。这样的特点正对应于数学上的“逻辑值:“真或”假。所以最终的结论就是:关系表达式的值是“逻辑值,即“真或"假。C语言中分别以“1和”0来代表。就是说,假设关系表达式的值为“真,那么得到整数1;假设值为“假,那么得到整数00比方关系表达式3>5的值就等于0,而关系表达式5>3的值就等于1。有了这样的处理,一个关系表达式就可以作为其它表达式的一部分从而构成更复杂的表达式了。比方:(3>5)+(3!=5)、x=(y=z)等等。Q119?当a=3,b=2,
4、c=1时,为什么关系表达式a>b>c的值却是“假的?关系表达式A119?计算机语言中的表达式并不是数学表达式。假设是一个数学式子a>b>c,它表示b同时大于c和小于a,确实是对的。但是在C语言中,这个关系表达式实际上等价于(a>b)>c。这样计算一下:(a>b)是“真,值为1;1>c当然是“假。Q120?什么是逻辑运算符?逻辑运算符A120?逻辑运算实际上是复合的关系运算,即要判断一个大命题的成立与否,不仅要判断其中的各个小命题是否成立,还取决于每个小命题的成立与否是如何影响大命题的成立的。C语言有3种逻辑运算符,分别是&&逻辑与
5、(双目)、|逻辑或(双目)、!逻辑非(单目)。Q121?逻辑运算符的运算规那么是什么?逻辑运算符A121?逻辑运算是关系比较运算结果之间进展的运算,所以参与逻辑运算的运算量必须是逻辑量(即值为“真或”假的量),而逻辑运算的结果也必然是逻辑值(“真或“假,以下分别用“True”或"False代表)。&姚辑与的运算规那么是:全部运算量都为“T,逻辑与运算才为“T;只要有一个运算量为“F,逻辑与运算即为“F比方想判断x的绝对值是否小于5,那么对应的逻辑表达式是:x>-5&&x<5。|逻辑或的运算规那么是:全部运算量都为“F,逻辑或运算才为“F;只要有一个
6、运算量为“T,逻辑或运算即为“T比方想判断x的绝对值是否大于5,那么对应的逻辑表达式是:x<-5|x>5。!逻辑非的运算规那么是:运算量为“T,逻辑非运算那么为“F;运算量为“F,逻辑非运算那么为“T比方关系表达式x>0,实际上和逻辑表达式!(x<=0)是等价的。总结一下,逻辑运算的规那么就如下表所示:ab!a!ba&&ba|bTTFFTTTFFTFTFTTFFTFFTTFF其中:a、b代表逻辑量。T代表“真值,F代表”假值Q122?既然前面说“参与逻辑运算的运算量必须是逻辑量,那为什么C语言中还有诸如5&&3这样的逻辑表达式?逻辑表达式
7、A122?这是因为在C语言中,除了可以求解到关系表达式本身就是逻辑值的值,还可以求解出任何合法的表达式的“逻辑值。这是基于这样的一个规定和处理方式:当需要求解任何一个表达式的逻辑值是“真是“假时,认为该表达式的值为非整数0时是“逻辑真,而等于整数0时是“逻辑假。按照这样的规定,上述逻辑运算规那么表在C语言中就可以扩展为下表了:ab!a!ba&&ba|b非0非00011非0001010非01001001100其中a、b代表任何类型的数据(可以是常量、变量或表达式)。所以,有5&&3这样的逻辑表达式也就不奇怪了。按照上表,5和3都是“逻辑真,那么5&&
8、;3仍然是“真,所以这个表达式的值等于1。Q123?=运算符与=运算符有什么区别?赋值运算符等于运算符A123?=运算符与=运算符有本质上的区别,千万不要混淆或误用=与=运算符。=是“赋值运算符。赋值表达式中,赋值运算符的左边只能是变量。=是“等于关系运算符。关系表达式中,等于运算符的两边可以是常量、变量或任何合法的表达式。由于上述的本质区别,所以假设误用或混用,那么会产生严重的后果。比方:(a=1)=(b=2)是一个合法的等于关系表达式,而假设少写一个=号,那么变成了(a=1)=(b=2),这却是一个非法的赋值表达式了,编译的时候就会给出错误信息。又比方:假设a=1,那么判断a是否和100相
9、等的表达式应该是a=100的关系表达式,它的值也应该是“逻辑假的,即等于00但是假设一旦少写一个=号,那么变成了a=100的赋值表达式,这个表达式的值等于100,是“逻辑真的,显然和正确的结果产生了误差。更严重的是变量a的值还在求解赋值表达式的过程中被改变了。更更严重的是,这样的错误不会在编译时容易地发现,它隐藏的很深,非常不容易排除。Q124?if语句有哪些语法形式?ifA124? if语句有两种语法形式: 只使用单独的if o其形式为 比方 if (x > 0) sign = 1;其执行过程如右图所示if ( 表达式)语句;使用成对的if和else 其形式为if (表达式)语句1;e
10、lse 语句2;比方:if (x > 0) sign = 1;else sign = -1;其执行过程如左图所示其中的“语句、”语句1、“语句2称之为if或else的内嵌语句。注意:C语言规定,if或else的内嵌语句只能是一个语句,不能超过一个语句。Q125?什么叫if嵌套语句?if嵌套A125?在if或else的内嵌语句中又包含一个或多个if语句时,称为if语句的嵌套。常用于多重条件,多个分支的选择判断控制。比方:if(x!=0)if(x>0)y=1;elsey=-1;elsey=0;其执行流程图如以下图:Q126?else能否单独使用构成选择构造?else嵌套A126?绝对不
11、能。else必须和if在一起构成选择构造语句。也就是说,有一个else就必须有个if和它配对。其实道理很简单,没有“假设哪有“否那么呢?Q127?什么是if嵌套语句中if和else的配对问题?if嵌套A127?正如上个问题所言,else是不能单独出现的,而if却可以单独构成一个语句,那么,在if嵌套语句中就存在else和if如何配对的问题。即是说,当if和else的数目不相等时,到底嵌套语句的最里层的else开始向外,依次将else而假设是如下语句:if (x != 0)if (x > 0) y = 1;else y = 0;那么配对结果是: if (x != 0) if (x >
12、 0) y = 1; else y = 0;每个else和哪个if在一起组成一个语句的问题在C语言中,if与else的配对原那么是:从if与在它前面的离它最近的还未配对的if配对。比方:if(x!=0)if(x>0)y=1;elsey=-1;elsey=0;其配对结果是:if(x!=0)if(x>0)y=1;elsey=-1;elsey=0;假设不注意上述配对原那么,那么就很有可能出现这样的情况:编译系统的理解和程序员的本意发生偏向,使程序运行结果出错。这样的错误也是很难发现的。ifQ128?那么,如何防止在if嵌套语句中出现实际的配对和所设计的配对发生误差的情况?嵌套A128?仔
13、细分析一下就会发现,在if嵌套语句中之所以会发生配对误差,根本的原因在于if可能单独出现。实际效果就是if的数目大于else的数目。针对问题出现的原因,有以下解决方法:只把要嵌套的语句放在else后面,这样由于每个else前面只有一个if,所以不会出错。而if(x < 0) y = -1;elseif(x > 0) y = 1;else y = 0;不易出错。比方:y=0;if(x>=0)if(x>0)y=1;elsey=-1;容易出错,假设嵌套语句必须放在if后面,就把它用大括号括起来,或给每个if语句都加上else。y = 0;if(x >= 0)if(x &
14、gt; 0) y = 1; else ;else y = -1;都不易出错。比方:y=0;if(x>=0)if(x>0)y=1;elsey=-1;Q129?什么是switch语句?switchA129?switch语句是多条件多分支选择语句,类似于if语句的第三种形式,即if嵌套语句。switch、case、default 和 break。其语法构成如下:switch语句中会使用4个C关键字:switch(表达式)casecase常量表达式1 :常量表达式2 :语句语句1;2;break;break;casedefault :常量表达式n :语句n+1;语句n;break;其中,粗
15、体部分是必不可少的switch语句的执行流程图如下:开始表达式的具体值T语句1T语句2TT语句nF=常量表达式1的值?FF三常量表达式2的值?YbreakNYbreakNYbreakNYbreakN语句n+1结束从流程图可见,关键字break的作用是完毕它所在的switch语句的执行。Q130?switch语句使用中有何本卷须知?switchA130?switch的语法相比照拟复杂,使用中需注意以下几点:(1)switch语句中,switch后的表达式可以是任何类型的表达式,系统求解它的详细值而不是逻辑值。这一点是和if语句不一样的。对于if语句,系统求解其后的表达式的逻辑值。每一个case后
16、面的表达式只能是常量表达式,即能求解出详细值的表达式,而绝不能是变量或表示范围判断的关系表达式或逻辑表达式。通常其类型是和switch后的表达式相对应的。同时,每一个常量表达式的值必须互不一样,否那么会出现互相矛盾的现象。下面就是一个正确的switch语句:chargrade;switch(grade)case'E':printf("Excellentn");break;case'G':printf("Good'n");break;case'B':printf("Bad'n&quo
17、t;);break;default:printf("Godknowsn");break;而下面这个就是一个错误的switch语句:intscore;switch(score)case>89:grade='E'break;case>79:grade='G'break;case<60:grade='B'break;default:printf("Godknowsn");break;假设switch语句中在每个case和default分支后均加上break语句,那么每个case和default分
18、支的出现顺序并不影响程序的流程和执行结果。比方switch(grade)case'E':printf("Excellentn");break;case'G':printf("Good'n");break;case'B':printf("Bad'n");break;default:printf("Godknowsn");break;和switch(grade)case'B':printf("Bad'n");br
19、eak;case'G':printf("Good'n");break;case'E':printf("Excellentn");break;default:printf("Godknowsn");break;和switch(grade)default:printf("Godknowsn");break;case'B':printf("Bad'n");break;case'G':printf("Good
20、9;n");break;case'E':printf("Excellentn");break;的执行结果是完全一样的。Q131?如何进展选择构造的程序设计?A131?要想正确进展选择构造的程序设计,有三点很重要:要深化理解C语言关于求解表达式的逻辑值的规定;要能根据详细问题写出正确的判断表达式。在大多数情况下,判断表达式都是关系表达式或逻辑表达式;要掌握if语句和switch语句的执行流程,从而在已经形成的判断表达式根底上,用它们去正确实现详细问题中的流程。详细的例子请参考课本中相关的例题第六章循环构造程序设计Q132?什么叫循环构造?循环构造A1
21、32?循环构造是指重复执行某部分固定的代码。有两种循环构造:有限循环和无限循环。有限循环是指在某个条件满足时重复执行,不满足时完毕;而无限循环是指无条件的重复执行或循环完毕条件永远不满足的情况。我们编写程序时应该写有限循环。通常一个循环构造包含以下四个组成要素,即:循环初始化、循环变量或循环计数器、循环继续条件循环终止条件、循环体重复执行的代码。不管用哪个控制语句实现循环构造,总能找到这四个部分。Q133?C语言中如何实现循环构造?循环构造A133?C语言中一共有四种方式来实现循环构造,它们分别是:if语句+goto语句while语句do.while语句for语句注意:后面3种是专门的循环控制
22、语句。任何一个问题,假设需要循环构造,那么用上述四种方式中的任何一种均可以实现。只不过对于不同的问题,用不同的方式实现起来效率和代码简洁明晰程度不一样而已。而其中第一种实现方式实际上就是构成循环构造的本质。Q134?goto语句是什么作用?gotoA134?goto语句称为“无条件跳转语句,即不判断任何条件就实行程序流程的直接跳转。而if语句不一样,if语句称为“条件跳转语句,总要根据一个条件的真假来决定流程的转向。goto语句的用法很简单:goto语句标号;其作用就是使程序流程直接转到语句标号所指的地方去执行。比方下面这段代码:#include<stdio.h>voidmain(
23、)intnum,n;ReInput:printf("Pleaseinputainteger:");scanf("%d”,&num);if(num<0)printf("Dataerror.Pleasereinput.n");gotoReInput;其中的ReInput就是一个语句标号。语句标号就好比给语句起了一个名字,用来标志一个语句。它的命名规定和变量名是一样的。语句标号除了出如今goto语句的后面,还将在程序中某个语句的前面出现,这是它的出现方式是后面带上一个冒号:,已示和其它标志符的区别。由于goto语句恶作用,上述程序的执行
24、流程如以下图所示:有流程图上很容易看出,由于goto语句的无条件跳转,使得处于goto语句和goto语句跳转去的语句标号之间的代码被重复执行了,这就构成了一个循环构造。Q135?if语句和goto语句如何构成循环构造?ifgoto循环构造A135?实际上这个问题从上面的流程图很容易得到答案。别忘了,一个程序的整体执行过程总是从上到下依次顺序执行的,而循环是重复执行其中的部分代码。那么如何才能让这些代码被重复执行呢?答案就是goto语句。利用goto语句的无条件跳转,就可以使处于goto语句和goto语句跳转去的语句标号之间的代码被重复执行,这就构成了一个循环构造。第一步解决了,第二个问题是假设
25、只是单独用goto语句构成循环构造,那么一定是“无限循环构造,因为goto语句是无条件跳转,到goto就重复,无法完毕重复的过程。这个问题如何解决呢?答案是if语句。虽然goto语句不判断条件,但是if语句要判断条件,只要把goto语句作为if的内嵌语句就行了。因此,if+goto就是循环构造的构本钱质。Q136?请举例说明用if语句和goto语句构成循环?ifgoto循环构造A136?例如:编程计算1X2X3XiXn,n=10为什么可以用循环?因为数据有规律的递增且都是乘法运算。循环的是什么?每次产生一个新数据并把它乘到上次的结果中。什么时候完毕循环?当新产生的数据大于10的时候就停顿上述循
26、环过程。怎样实现循环控制?goto语句可以无条件跳转,用于跳到循环开始的地方;if语句是条件分支语句,用于判断循环完毕条件是否满足。假设满足,那么循环完毕并输出计算结果;假设不满足,那么利用goto语句返回继续循环。根据以上分析,拟定出以下算法:S1:prod=1S2:n=1S3:prod=prodxnS4:n=n+1S5:假设n<10,那么返回到S3;否那么,完毕按照该算法编写程序如下:#include<stdio.h>voidmain()longintprod=1;intn=1;Loop:if(n<=10)prod=prod*n;n+;gotoLoop;printf
27、("1*2*3*%d=%ldn",n-1,prod);其执行流程图如下:n<=10n=1FTprod=prod*nn +Q137?上面程序中如何确定循环构造的四个要素?循环构造A137?如以下图:#include <stdio.h>void main()循环初始化一一long int prod = 1; int n = 1;循环变量n初值=1终值=10printf("1*2*3*%d = %ldn", n -1, prod);Q138?while语句如何构成循环?whileA138?while语句的用法是:while(表达式)循环体语句
28、;此处的循环体语句也称为while语句的内嵌语句,即不是单独存在而是属于while一部分的语句前面已经说过,循环构造的本质是if+goto,那么while如何构成循环的呢?这是因为这个关键字本身所构成语句的执行过程中就已经隐含了if+goto。下面是while语句的执行流程图:从流程图中可以清楚地看到,在while语句的执行过程中隐含了用if判断条件,用goto直接跳转的流程。如今用while语句来实现计算1x2X3xiXn,n=10,代码如下:#include<stdio.h>n=1prod=prod*nn +voidmain()longintprod=1;intn=1;whil
29、e(n<=10)prod=prod*n;n+;printf("1*2*3*-*%d=%ldn",n-1,prod);其执行流程如以下图,可见与用if和goto语句实现的结果是完全一样的Q139?while语句的语法是while(表达式)循环体语句;其中的循环体语句中并没有出现,为什么在上面程序中while后出现了呢?whilewhile(n<=10)prod=prod*n;n+;A139?前面已经讲过,while后面的循环体语句也叫做while的内嵌语句,而C语言的编译器规定任何时候内嵌语句都只能是一个语句,即编译器只把while后面的第一个语句当作时while
30、的循环体语句。而实际程序当中,往往要循环执行的语句不止一个语句,那么如何解决这个问题呢?答案就是复合语句。所谓复合语句是指用一对大括弧把假设干个本来独立别离的语句括起来,成为一个复合语句。如:inta=1;a+;printf("a=%dn",a);。而复合语句在语法上只是一个语句,因此可以放在while后面,既满足了实际问题要重复执行多个语句的需要,又符合内嵌语句只能是一个语句语法要求。Q140?假设不把要重复执行的多个语句形成复合语句,结果会是怎样?whileA140?后果是不可意料的。既有可能是程序运行结果不正确,更严重的可能会是程序陷入无限循环当中。比方对于下面这个w
31、hile语句,正确的应该把循环体用大括号括起来while(n<=10)prod=prod*n;n+;假设不括起来,就变成了如下的语句:while(n<=10)prod=prod*n;n+;本来只有一个while语句,却变成了两个语句,即while(n<=10)prod=prod*n;和n+;即是说,只有prod=prod*n;被编译器认为是循环体,这显然和原意不符。更严重的是,这个while语句是一个无限循环语句,因为循环变量n在循环过程中从不发生变化,所以循环继续条件n<=10会永远为真。Q141?为什么下面这个while语句变成了无限循环语句?whilewhile(
32、n<=10);prod=prod*n;n+;A141?看到(n<=10)后面的分号没有,问题就在这儿。根据while语句的语法,在while中,while后面是圆括号括起来的一个表达式,在这对括号后面就应该是循环体的语句。上面出问题的这个while语句中,在括号后面的是一个分号,那么。这个分号所代表的一个空语句就被编译器认为是循环体语句,而本来的循环体却变成了while执行完毕后才能执行的语句。不幸的是,这个while语句永远都不会完毕,因为n<=10永远都是真的。所以一定要注意,在while语句中,在圆括号后面是不应该有分号的。Q142?for语句如何构成循环?forA142?for语句的用法是:for(表达式1;表达式2;表达式3)循环体语句;此处的循环体语句也称为for语句的内嵌语句,即不是单独存在而是属于for一部分的语句。同while语句一样,尽管for语句中没有if和goto,但是这个关键字本身所构成语句的执行过程中就已经隐含了if+goto。下面是for语句的执行流程图:从流程图上可以看出,表达式1只在开始循环之前被求解了一次,因此表达式1通常都用于进展循环的初始化;表达式2用于描绘循环继续条件;表达式3用于循环变量的增减,从而使循环继续条件越来越不满足。如今用for语句来实现计算1X2X3X-Xn,n=10,代码如下:#incl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业日常办公用品管理制度
- 锅炉给煤系统故障与应急处理办法
- 酒店内保工作的数字化管理应用探讨
- 进度管控安全第一-进度管理安全教育培训
- 青少年近视的预防与矫正方法
- 企业数字化营销的绩效评估研究
- 三星SSD鉴定报告
- 家庭教育中培养孩子独立思考能力的途径
- 金融行业求职与面试全攻略
- 企业培训计划在早班会的部署
- DB5301∕T 58-2021 机械式停车场(库)建设管理技术规范
- 场景造型基础知识培训课件
- 数控加工程序管理办法
- 2025年6月浙江省高考选考信息技术试卷真题(含答案详解)
- CJ/T 295-2015餐饮废水隔油器
- TCWEA6-2019水利水电工程施工期度汛方案编制导则
- 胫骨平台骨折 课件
- 对口升学考试全真模拟试卷计算机专业(第2版)答案解析
- 中石化安全管理手册
- 应急物资储备方案76803
- GB/T 21666-2025失禁用尿便吸收辅助器具评价的一般指南
评论
0/150
提交评论