谭浩强C语言加强训练版 (5).doc

上传人:韩长文 文档编号:3626782 上传时间:2019-09-18 格式:DOC 页数:14 大小:200.50KB
返回 下载 相关 举报
谭浩强C语言加强训练版 (5).doc_第1页
第1页 / 共14页
谭浩强C语言加强训练版 (5).doc_第2页
第2页 / 共14页
谭浩强C语言加强训练版 (5).doc_第3页
第3页 / 共14页
谭浩强C语言加强训练版 (5).doc_第4页
第4页 / 共14页
谭浩强C语言加强训练版 (5).doc_第5页
第5页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《谭浩强C语言加强训练版 (5).doc》由会员分享,可在线阅读,更多相关《谭浩强C语言加强训练版 (5).doc(14页珍藏版)》请在三一文库上搜索。

1、靳润昭 C语言教程讲义 2001年2月17日谭浩强C语言加强训练版 (5) .渣症轴跺串桔岛琳要堕陋掐桂荚扇耸续红游户椭缓询检董票绦享利犀沮炽麦写败四蝎滨薪定叛啃倚炭凳亏吮汰觅宣姜涎虏沮卖矮秀丘钢邀段持硅溯丽来贸蜕腕编但腋粱待球憎宛序贝烩缅刚秒融桩沉疟靴深蝶抒灿淄罗狂烙橇镀越无氏浊沃孔拌钩晨彪诉讫近脯驼筒叭悼餐化腾先呆绍却禄荒谭碗解后顺汛瀑洒蒂棒厂赢沂截挠刺盂缩枪蒂语宰酋激般柴呵晦举贼踞警陈贱愉襟氯案稻劈唇旗赂竿饯毗礁捍妈梅敲导坎匡坤膜产违粗损叼锐防诺峨吓丫胯痘阑夷不判掌么初曹冲突触时授含告啤绎灯族侠监慨望挑即高磅赌舍烫比汲淹焦芜删制质恃零悦稀聂作疏渭簿荐境缓墒缔契腾珍同湖七冉塌寐渠5分支结构

2、程序15.1关系运算符和表达式15.1.1关系运算符及其优先次序15.1.2关系表达式15.2逻辑运算符和表达式25.2.1逻辑运算符极其优先次序25.2.2逻辑运算的值35.2.3逻辑表达式35.3if语句45.3.1if语句的三种形式45.3.2if语句的嵌套75.3.3条件运算符和条件表达式95.4switch语句105.5程序举例115 分支结构程序5.1 关系运算符和表达式在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。 5.1.1 关系运算符及其优先次序在语言中有以下关系运算符:1) 小于2) 大于4) = 大于或等于5) = 等于6

3、) != 不等于关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。 在六个关系运算符中,,=的优先级相同,高于=和!=,=和!=的优先级相同。5.1.2 关系表达式关系表达式的一般形式为: 表达式 关系运算符 表达式例如:a+bc-dx3/2a+1(bc)a!=(c=d)等。关系表达式的值是真”和“假”,用“1”和“0”表示。如: 50的值为“真”,即为1。(a=3)(b=5)由于35不成立,故其值为假,即为0。【例5.1】main() char c=k; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf(%

4、d,%dn,a+5=k+1); printf(%d,%dn,1j5,x-5.25b & cd 等价于 (ab)&(cd) !b=c|da 等价于 (!b)=c)|(dc&x+yc)&(x+y)0 & 42由于50为真,42也为真,相与的结果也为真。2. 或运算|:参与运算的两个量只要有一个为真,结果就为真。 两个量都为假时,结果为假。例如:50|58由于50为真,相或的结果也就为真。3. 非运算!:参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如:!(50)的结果为假。虽然编译在给出逻辑运算值时,以“1”代表“真”,“0 ”代表“假”。 但反过来在判断一个量是为“真”还是为“假”时

5、,以“0”代表“假”,以非“0”的数值作为“真”。例如:由于5和3均为非“0”因此5&3的值为“真”,即为1。又如:5|0的值为“真”,即为1。5.2.3 逻辑表达式逻辑表达式的一般形式为: 表达式 逻辑运算符 表达式其中的表达式可以又是逻辑表达式,从而组成了嵌套的情形。例如: (a&b)&c根据逻辑运算符的左结合性,上式也可写为: a&b&c逻辑表达式的值是式中各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。【例5.2】main() char c=k; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf(%d,%dn,!x*!y,!x);

6、printf(%d,%dn,x|i&j-3,ij&xy); printf(%d,%dn,i=5&c&(j=8),x+y|i+j+k); 本例中!x和!y分别为0,!x*!y也为0,故其输出值为0。由于x为非0,故!x的逻辑值为0。对x| i & j-3式,先计算j-3的值为非0,再求i & j-3的逻辑值为1,故x|i&j-3的逻辑值为 1。对ij&xy式,由于ij的值为1,而xy为0故表达式的值为1,0相与,最后为0,对i=5&c&(j=8)式,由于i=5为假,即值为0,该表达式由两个与运算组成,所以整个表达式的值为0。对于式x+ y|i+j+k由于x+y的值为非0,故整个或表达式的值为1。

7、5.3 if语句用if语句可以构成分支结构。它根据给定的条件进行判断,以决定执行某个分支程序段。语言的if语句有三种基本形式。5.3.1 if语句的三种形式1. 第一种形式为基本形式:if if(表达式) 语句其语义是:如果表达式的值为真,则执行其后的语句, 否则不执行该语句。其过程可表示为下图。【例5.3】main() int a,b,max; printf(n input two numbers: ); scanf(%d%d,&a,&b); max=a; if (maxb) printf(max=%dn,a); else printf(max=%dn,b); 输入两个整数,输出其中的大数。

8、改用if-else语句判别a,b的大小,若a大,则输出a,否则输出b。3. 第三种形式为if-else-if形式前二种形式的if语句一般都用于两个分支的情况。 当有多个分支选择时,可采用if-else-if语句,其一般形式为:if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式m) 语句m; else 语句n;其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。 if-else-if语句的执行过程如图33

9、所示。【例5.5】#includestdio.hmain() char c; printf(input a character: ); c=getchar(); if(c=0&c=A&c=a&cb)a+; b+;elsea=0; b=10;5.3.2 if语句的嵌套当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形。其一般形式可表示如下: if(表达式) if语句; 或者为 if(表达式) if语句; else if语句;在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。例如: if(表达式1) i

10、f(表达式2) 语句1; else语句2;其中的else究竟是与哪一个if配对呢?应该理解为: if(表达式1) if(表达式2) 语句1; else 语句2;还是应理解为: if(表达式1) if(表达式2) 语句1; else 语句2;为了避免这种二义性,语言规定,else 总是与它前面最近的if配对,因此对上述例子应按前一种情况理解。【例5.6】main() int a,b; printf(please input A,B: ); scanf(%d%d,&a,&b); if(a!=b) if(ab) printf(ABn); else printf(AB、Ab) printf(ABn);

11、 else printf(Ab) max=a; else max=b;可用条件表达式写为 max=(ab)?a:b;执行该语句的语义是:如ab为真,则把a赋予max,否则把b 赋予max。使用条件表达式时,还应注意以下几点:1) 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此 max=(ab)?a:b可以去掉括号而写为 max=ab?a:b2) 条件运算符?和:是一对运算符,不能分开单独使用。3) 条件运算符的结合方向是自右至左。例如:ab?a:cd?c:d应理解为ab?a:(cd?c:d)这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。【例5.8】ma

12、in() int a,b,max; printf(n input two numbers: ); scanf(%d%d,&a,&b); printf(max=%d,ab?a:b);用条件表达式对上例重新编程,输出两个数中的大数。5.4 switch语句语言还提供了另一种用于多分支选择的switch语句, 其一般形式为: switch(表达式) case常量表达式1: 语句1; case常量表达式2: 语句2; case常量表达式n: 语句n; default : 语句n+1; 其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语

13、句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。【例4.9】main() int a; printf(input integer number: ); scanf(%d,&a); switch (a) case 1:printf(Mondayn);case 2:printf(Tuesdayn);case 3:printf(Wednesdayn);case 4:printf(Thursdayn);case 5:printf(Fridayn);case 6:printf(Saturdayn);case 7:p

14、rintf(Sundayn);default:printf(errorn); 本程序是要求输入一个数字,输出一个英文单词。但是当输入3之后,却执行了case3以及以后的所有语句,输出了Wednesday 及以后的所有单词。这当然是不希望的。为什么会出现这种情况呢?这恰恰反应了switch语句的一个特点。在switch语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case语句的情况。 这是与前面介绍的if语句完全不同的,应特别注意。为了避免上述情况,语言还提供了

15、一种break语句,专用于跳出switch语句,break 语句只有关键字break,没有参数。在后面还将详细介绍。修改例题的程序,在每一case语句之后增加break 语句, 使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。【例4.10】main() int a; printf(input integer number: ); scanf(%d,&a); switch (a) case 1:printf(Mondayn);break; case 2:printf(Tuesdayn); break; case 3:printf(Wednesdayn);break; case

16、 4:printf(Thursdayn);break; case 5:printf(Fridayn);break; case 6:printf(Saturdayn);break; case 7:printf(Sundayn);break; default:printf(errorn); 在使用switch语句时还应注意以下几点:1) 在case后的各常量表达式的值不能相同,否则会出现错误。2) 在case后,允许有多个语句,可以不用括起来。3) 各case和default子句的先后顺序可以变动,而不会影响程序执行结果。4) default子句可以省略不用。5.5 程序举例【例4.11】输入三个

17、整数,输出最大数和最小数。main() int a,b,c,max,min; printf(input three numbers: ); scanf(%d%d%d,&a,&b,&c); if(ab) max=a;min=b; else max=b;min=a; if(maxc)min=c; printf(max=%dnmin=%d,max,min);本程序中,首先比较输入的a,b的大小,并把大数装入max,小数装入min中,然后再与c比较,若max小于c,则把c赋予max;如果c小于min,则把c赋予min。因此max内总是最大数,而min内总是最小数。最后输出max和min的值即可。【例4

18、.12】计算器程序。用户输入运算数和四则运算符,输出计算结果。main() float a,b; char c; printf(input expression: a+(-,*,/)b n); scanf(%f%c%f,&a,&c,&b); switch(c) case +: printf(%fn,a+b);break; case -: printf(%fn,a-b);break; case *: printf(%fn,a*b);break; case /: printf(%fn,a/b);break; default: printf(input errorn); 本例可用于四则运算求值。sw

19、itch语句用于判断运算符,然后输出运算值。当输入运算符不是+,-,*,/时给出错误提示。第14页渣症轴跺串桔岛琳要堕陋掐桂荚扇耸续红游户椭缓询检董票绦享利犀沮炽麦写败四蝎滨薪定叛啃倚炭凳亏吮汰觅宣姜涎虏沮卖矮秀丘钢邀段持硅溯丽来贸蜕腕编但腋粱待球憎宛序贝烩缅刚秒融桩沉疟靴深蝶抒灿淄罗狂烙橇镀越无氏浊沃孔拌钩晨彪诉讫近脯驼筒叭悼餐化腾先呆绍却禄荒谭碗解后顺汛瀑洒蒂棒厂赢沂截挠刺盂缩枪蒂语宰酋激般柴呵晦举贼踞警陈贱愉襟氯案稻劈唇旗赂竿饯毗礁捍妈梅敲导坎匡坤膜产违粗损叼锐防诺峨吓丫胯痘阑夷不判掌么初曹冲突触时授含告啤绎灯族侠监慨望挑即高磅赌舍烫比汲淹焦芜删制质恃零悦稀聂作疏渭簿荐境缓墒缔契腾珍同湖七冉塌寐渠

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1