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

上传人:go****ng 文档编号:137900580 上传时间:2022-08-19 格式:DOC 页数:14 大小:182.01KB
收藏 版权申诉 举报 下载
《C语言程序设计》基本知识点解答(三)_第1页
第1页 / 共14页
《C语言程序设计》基本知识点解答(三)_第2页
第2页 / 共14页
《C语言程序设计》基本知识点解答(三)_第3页
第3页 / 共14页
资源描述:

《《C语言程序设计》基本知识点解答(三)》由会员分享,可在线阅读,更多相关《《C语言程序设计》基本知识点解答(三)(14页珍藏版)》请在装配图网上搜索。

1、C语言程序设计基本知识点解答(三)第五章 选择结构程序设计Q116如何进行选择结构的程序设计?(选择结构)A116“选择结构”也可以叫做“分支结构”。在一个合理的“选择结构”中,总是先进行某个条件的判断,然后根据判断的结果选择执行预先设定的操作。其流程图如下:可见,要想实现“选择结构”,需要2个条件: 能表达条件判断的运算符:即关系运算符和逻辑运算符 能实现判断并选择的控制语句:即if和switch语句Q117什么是关系运算符?(关系运算符)A117关系运算符也叫“比较运算符”,用于对两个数据进行比较判断的。C语言中一共有6种关系运算符,分别是 小于、 大于、= 大于等于、= 等于、!= 不等

2、于。用这6种运算符按规定把运算量连接起来构成的式子就是关系表达式。其中,参与关系运算的数据可以是常量、变量或任何合法的表达式。比如:a * a 5 的值就等于0,而关系表达式5 3 的值就等于1。有了这样的处理,一个关系表达式就可以作为其它表达式的一部分从而构成更复杂的表达式了。比如:(3 5) + ( 3 != 5)、x = (y = z) 等等。Q119当a=3, b=2, c=1时,为什么关系表达式a b c 的值却是“假”的?(关系表达式)A119计算机语言中的表达式并不是数学表达式。如果是一个数学式子a b c,它表示b同时大于c和小于a,的确是对的。但是在C语言中,这个关系表达式实

3、际上等价于(a b) c。这样计算一下:(a b)是“真”,值为1;1 c 当然是“假”。Q120什么是逻辑运算符?(逻辑运算符)A120逻辑运算实际上是复合的关系运算,即要判断一个大命题的成立与否,不仅要判断其中的各个小命题是否成立,还取决于每个小命题的成立与否是如何影响大命题的成立的。C语言有3种逻辑运算符,分别是 & 逻辑与(双目)、| 逻辑或(双目)、 !逻辑非(单目)。Q121逻辑运算符的运算规则是什么?(逻辑运算符)A121逻辑运算是关系比较运算结果之间进行的运算,所以参与逻辑运算的运算量必须是逻辑量(即值为“真”或“假”的量),而逻辑运算的结果也必然是逻辑值(“真”或“假”,以下

4、分别用“True”或“False”代表)。l &逻辑与的运算规则是:全部运算量都为“T”,逻辑与运算才为“T”;只要有一个运算量为“F”,逻辑与运算即为“F”比如想判断x的绝对值是否小于5,那么对应的逻辑表达式是:x -5 & x 5。l |逻辑或的运算规则是:全部运算量都为“F”,逻辑或运算才为“F”;只要有一个运算量为“T”,逻辑或运算即为“T”比如想判断x的绝对值是否大于5,那么对应的逻辑表达式是:x 5。l !逻辑非的运算规则是:运算量为“T”,逻辑非运算则为“F”;运算量为“F”,逻辑非运算则为“T”比如关系表达式 x 0,实际上和逻辑表达式 ! (x 0) sign = 1;其执行

5、过程如右图所示 使用成对的if和else。其形式为if (表达式) 语句1;else 语句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; else y = -1; else

6、y = 0;其执行流程图如图所示:Q126else能否单独使用构成选择结构?(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嵌

7、套语句的最里层的else开始向外,依次将else与在它前面的离它最近的还未配对的if 配对。比如:if (x != 0) if (x 0) y = 1; else y = -1; else y = 0;其配对结果是:if (x != 0) if (x 0) y = 1; else y = -1; else y = 0;而如果是如下语句:if (x != 0) if (x 0) y = 1;else y = 0;则配对结果是:if (x != 0) if (x 0) y = 1;else y = 0;如果不注意上述配对原则,那么就很有可能出现这样的情况:编译系统的理解和程序员的本意发生偏差,使程

8、序运行结果出错。这样的错误也是很难发现的。Q128那么,如何避免在if嵌套语句中出现实际的配对和所设计的配对发生误差的情况?(if)(嵌套)A128仔细分析一下就会发现,在if嵌套语句中之所以会发生配对误差,根本的原因在于if可能单独出现。实际效果就是if的数目大于else的数目。针对问题出现的原因,有以下解决办法:只把要嵌套的语句放在else后面,这样由于每个else前面只有一个if,所以不会出错。比如:y = 0;if(x = 0) if(x 0) y = 1;else y = -1; 容易出错,而if(x 0) y = 1; else y = 0;不易出错。如果嵌套语句必须放在if 后面

9、,就把它用大括号括起来,或给每个if语句都加上else。比如:y = 0;if(x = 0) if(x 0) y = 1;else y = -1; y = 0;if(x = 0) if(x 0) y = 1; else ;else y = -1; 都不易出错。Q129什么是switch语句?(switch)A129switch语句是多条件多分支选择语句,类似于if 语句的第三种形式,即if嵌套语句。switch语句中会使用4个C关键字:switch、case、default和break。其语法构成如下:switch(表达式) case 常量表达式1 : 语句1; break; case 常量表

10、达式2 : 语句2; break; . case 常量表达式n : 语句n; break; default : 语句n+1;其中,粗体部分是必不可少的。switch语句的执行流程图如下:从流程图可见,关键字 break的作用是结束它所在的switch语句的执行。Q130switch语句使用中有何注意事项?(switch)A130switch的语法相对比较复杂,使用中需注意以下几点:(1)switch语句中,switch后的表达式可以是任何类型的表达式,系统求解它的具体值而不是逻辑值。这一点是和if语句不一样的。对于if语句,系统求解其后的表达式的逻辑值。(2)每一个case后面的表达式只能是常

11、量表达式,即能求解出具体值的表达式,而绝不能是变量或表示范围判断的关系表达式或逻辑表达式。通常其类型是和switch后的表达式相对应的。同时,每一个常量表达式的值必须互不相同,否则会出现互相矛盾的现象。下面就是一个正确的switch语句:char grade;switch (grade) case E:printf(Excellentn); break; case G: printf(Goodn); break; case B: printf(Badn); break; default :printf(God knowsn); break;而下面这个就是一个错误的switch语句:int sc

12、ore;switch (score) case 89 : grade = E; break; case 79 : grade = G; break; case 60 : grade = B; break; default : printf(God knowsn); break;(3)如果switch语句中在每个case和default分支后均加上break语句,则每个case和default分支的出现顺序并不影响程序的流程和执行结果。比如switch (grade) case E:printf(Excellentn); break; case G: printf(Goodn); break;

13、case B: printf(Badn); break; default :printf(God knowsn); break;和switch (grade) case B: printf(Badn); break; case G: printf(Goodn); break; case E:printf(Excellentn); break; default :printf(God knowsn); break;和switch (grade) default :printf(God knowsn); break; case B: printf(Badn); break; case G: pri

14、ntf(Goodn); break; case E:printf(Excellentn); break;的执行结果是完全相同的。Q131如何进行选择结构的程序设计?A131要想正确进行选择结构的程序设计,有三点很重要: 要深刻理解C语言关于求解表达式的逻辑值的规定; 要能根据具体问题写出正确的判断表达式。在大多数情况下,判断表达式都是关系表达式或逻辑表达式; 要掌握if语句和switch语句的执行流程,从而在已经形成的判断表达式基础上,用它们去正确实现具体问题中的流程。具体的例子请参考课本中相关的例题。第六章 循环结构程序设计Q132什么叫循环结构?(循环结构)A132循环结构是指重复执行某部

15、分固定的代码。有两种循环结构:有限循环和无限循环。有限循环是指在某个条件满足时重复执行,不满足时结束;而无限循环是指无条件的重复执行或循环结束条件永远不满足的情况。我们编写程序时应该写有限循环。通常一个循环结构包含以下四个组成要素,即:循环初始化、循环变量或循环计数器、循环继续条件(循环终止条件)、循环体(重复执行的代码)。不管用哪个控制语句实现循环结构,总能找到这四个部分。Q133C语言中如何实现循环结构?(循环结构)A133C语言中一共有四种方式来实现循环结构,它们分别是:l if语句 + goto 语句l while 语句l do . while 语句l for 语句注意:后面3种是专门

16、的循环控制语句。任何一个问题,如果需要循环结构,那么用上述四种方式中的任何一种均可以实现。只不过对于不同的问题,用不同的方式实现起来效率和代码简洁清晰程度不一样而已。而其中第一种实现方式实际上就是构成循环结构的本质。Q134goto语句是什么作用?(goto)A134goto语句称为“无条件跳转语句”,即不判断任何条件就实行程序流程的直接跳转。而if语句不一样,if语句称为“条件跳转语句”,总要根据一个条件的真假来决定流程的转向。goto语句的用法很简单:goto 语句标号; 其作用就是使程序流程直接转到语句标号所指的地方去执行。比如下面这段代码:#include void main() in

17、t num, n; ReInput: printf(Please input a integer:); scanf(%d, &num); if (num 0) printf(Data error. Please reinput.n); goto ReInput; 其中的ReInput就是一个语句标号。语句标号就好比给语句起了一个名字,用来标志一个语句。它的命名规定和变量名是一样的。语句标号除了出现在goto语句的后面,还将在程序中某个语句的前面出现,这是它的出现方式是后面带上一个冒号(:),已示和其它标志符的区别。由于goto语句恶作用,上述程序的执行流程如下图所示:有流程图上很容易看出,由于

18、goto语句的无条件跳转,使得处于goto语句和goto语句跳转去的语句标号之间的代码被重复执行了,这就构成了一个循环结构。Q135if语句和goto语句如何构成循环结构?(if)(goto)(循环结构)A135实际上这个问题从上面的流程图很容易得到答案。别忘了,一个程序的整体执行过程总是从上到下依次顺序执行的,而循环是重复执行其中的部分代码。那么如何才能让这些代码被重复执行呢?答案就是goto语句。利用goto语句的无条件跳转,就可以使处于goto语句和goto语句跳转去的语句标号之间的代码被重复执行,这就构成了一个循环结构。第一步解决了,第二个问题是如果只是单独用goto语句构成循环结构,

19、那么一定是“无限循环结构”,因为goto语句是无条件跳转,到goto就重复,无法结束重复的过程。这个问题如何解决呢?答案是if语句。虽然goto语句不判断条件,但是if语句要判断条件,只要把goto语句作为if的内嵌语句就行了。因此,if + goto就是循环结构的构成本质。Q136请举例说明用if 语句和goto语句构成循环?(if)(goto)(循环结构)A136例如:编程计算123n ,n=10l 为什么可以用循环?因为数据有规律的递增且都是乘法运算。l 循环的是什么?每次产生一个新数据并把它乘到上次的结果中。l 什么时候结束循环?当新产生的数据大于10的时候就停止上述循环过程。l 怎样

20、实现循环控制?goto 语句可以无条件跳转,用于跳到循环开始的地方;if 语句是条件分支语句,用于判断循环结束条件是否满足。如果满足,则循环结束并输出计算结果;如果不满足,则利用goto 语句返回继续循环。根据以上分析,拟定出以下算法:S1:prod = 1S2:n = 1S3:prod = prod nS4:n = n + 1S5:如果n 10,则返回到S3;否则,结束按照该算法编写程序如下:#include void main( ) long int prod = 1; int n = 1; Loop: if (n = 10) prod = prod * n; n +; goto Loop

21、; printf(1*2*3*%d = %ldn, n1, prod);其执行流程图如下:Q137上面程序中如何确定循环结构的四个要素?(循环结构)A137如图所示:Q138while语句如何构成循环?(while)A138while语句的用法是:while (表达式) 循环体语句;此处的循环体语句也称为while语句的内嵌语句,即不是单独存在而是属于while一部分的语句。前面已经说过,循环结构的本质是if + goto,那么while如何构成循环的呢?这是因为这个关键字本身所构成语句的执行过程中就已经隐含了if + goto。下面是while语句的执行流程图:从流程图中可以清楚地看到,在w

22、hile语句的执行过程中隐含了用if 判断条件,用goto直接跳转的流程。 现在用while语句来实现计算123n ,n=10,代码如下:#include void main( ) long int prod = 1; int n = 1; while (n = 10) prod = prod * n; n +; printf(1*2*3*%d = %ldn, n1, prod);其执行流程如图所示,可见与用if和goto语句实现的结果是完全相同的。Q139while语句的语法是 while (表达式) 循环体语句; 其中的循环体语句中并没有出现 ,为什么在上面程序中while后出现了 呢?(

23、while)while (n = 10) prod = prod * n; n +; A139前面已经讲过,while后面的循环体语句也叫做while的内嵌语句,而C语言的编译器规定任何时候内嵌语句都只能是一个语句,即编译器只把while后面的第一个语句当作时while的循环体语句。而实际程序当中,往往要循环执行的语句不止一个语句,那么如何解决这个问题呢?答案就是复合语句。所谓复合语句是指用一对大括弧 把若干个原本独立分离的语句括起来,成为一个复合语句。如: int a = 1; a +; printf(a = %dn, a); 。而复合语句在语法上只是一个语句,因此可以放在while后面,既

24、满足了实际问题要重复执行多个语句的需要,又符合内嵌语句只能是一个语句语法要求。Q140如果不把要重复执行的多个语句形成复合语句,结果会是怎样?(while)A140后果是不可预料的。既有可能是程序运行结果不正确,更严重的可能会是程序陷入无限循环当中。比如对于下面这个while语句,正确的应该把循环体用大括号括起来while (n = 10) prod = prod * n; n +;如果不括起来,就变成了如下的语句:while (n = 10) prod = prod * n; n +;原本只有一个while语句,却变成了两个语句,即while (n = 10) prod = prod * n

25、;和n +;即是说,只有 prod = prod * n; 被编译器认为是循环体,这显然和原意不符。更严重的是,这个while语句是一个无限循环语句,因为循环变量n在循环过程中从不发生变化,所以循环继续条件n = 10 会永远为真。Q141为什么下面这个while语句变成了无限循环语句?(while)while (n = 10) ; prod = prod * n; n +;A141看到(n = 10)后面的分号没有,问题就在这儿。根据while语句的语法,在while中,while后面是圆括号括起来的一个表达式,在这对括号后面就应该是循环体的语句。上面出问题的这个while语句中,在括号后面

26、的是一个分号,那么。这个分号所代表的一个空语句就被编译器认为是循环体语句,而原本的循环体却变成了while执行结束后才能执行的语句。不幸的是,这个while语句永远都不会结束,因为n = 10永远都是真的。所以一定要注意,在while语句中,在圆括号后面是不应该有分号的。Q142for语句如何构成循环?(for)A142for语句的用法是:for (表达式1; 表达式2; 表达式3) 循环体语句;此处的循环体语句也称为for语句的内嵌语句,即不是单独存在而是属于for一部分的语句。同while语句一样,尽管for语句中没有if和goto,但是这个关键字本身所构成语句的执行过程中就已经隐含了if

27、 + goto。下面是for语句的执行流程图:从流程图上可以看出,表达式1只在开始循环之前被求解了一次,因此表达式1通常都用于进行循环的初始化;表达式2 用于描述循环继续条件;表达式3 用于循环变量的增减,从而使循环继续条件越来越不满足。现在用for语句来实现计算123n ,n=10,代码如下:#include void main( ) long int prod = 1; int n; for (n = 1; n = 10; n +) prod = prod * n; printf(1*2*3*%d = %ldn, n1, prod);其执行结果与用if和goto语句实现的结果是完全相同的。

28、Q143什么是循环嵌套?(循环嵌套)A143循环嵌套是指在一个循环语句的循环体内又出现另一个循环控制语句。对于循环嵌套的层数不同的系统规定不同。一般来说,实际中最多就用到4层嵌套,而最常用的是双重循环。比如编程求 n! = 1! + 2! + 3! + . + n! 就要用到双重循环。因为题目既要进行累乘(n!)又要进行累加(),具体实现代码和相关解释如下图:Q144break语句用在循环控制语句中是什么作用?(break)A144在C语言中,break语句除了可以用在switch语句中用于终止switch语句的执行外,还可以用在while、do.while、for语句的循环体当中。break

29、语句用在循环体中的作用是结束整个循环语句的执行,也就是说,在执行循环过程中,一旦遇到break语句,这个循环语句就结束了继续执行该循环语句后面的语句。比如用while语句和break来编程计算123n,代码如下:#include void main( ) long int prod = 1; int n = 1; while (1) prod = prod * n; n +;if (n 10) break; printf(1*2*3*%d = %ldn, n1, prod);程序执行流程如图:Q145continue语句用在循环控制语句中是什么作用?(continue)A145在C语言中,continue语句只能用在while、do.while、for语句的循环体当中。continue语句用在循环体中的作用是结束本次循环体的执行,也就是说,在执行循环过程中,一旦遇到continue语句,就跳过循环体中位于continue后面的语句,接着进行下一次是否继续循环的判断。Q146break语句和continue语句有什么区别?(break)(continue)A146如下:

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!