ImageVerifierCode 换一换
你正在下载:

c语言.docx

[预览]
格式:DOCX , 页数:46 ,大小:100.15KB ,
资源ID:10198346      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10198346.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c语言.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

c语言.docx

1、c语言;第4章 分支结构数学中,往往根据判别式来求解一元二次方程ax2+bx+c=0(a0)。当判别式大于等于零时,方程有实根,否则,方程有复根(虚根)。生活中,如果外面正在下雨,那么出门的时候需要带雨伞。日常生活中类似这样的问题还有很多,它们的特点是需要对给定的条件进行分析、比较和判断,并根据判断结果采取不同的操作。计算科学中用来描述这种选择现象的重要手段是分支结构,也称选择结构。这种结构根据判断的条件,决定程序的不同走向。在C语言中,实现分支结构的语句有:if语句和switch语句。4.1 逻辑判断下节将要讨论的if语句和第5章的while等语句中使用的表达式通常是由关系表达式或逻辑表达式

2、组成,这些语句检查表达式为真或是假。因此首先先了解一下逻辑判断:关系表达式和逻辑表达式。4.1.1 关系运算符与关系表达式关系运算,即比较运算。表4.1给出了C语言中使用的关系运算符,并给出了含义相当的数学符号。表4.1 C语言中的关系运算符关系运算符含义相当于数学符号例子结果优先级结合性大于4+691优先级相同 (高)自左向右小于8=大于或等于6=51=小于或等于8=90。关系表达式为真时值为1,为假时值为0。因此,如果score=95,则score=90为真,其值为1;如果score=60,则score=90为假,其值为0。关系运算符除了进行数值比较运算以外,还可以用于字符间的比较,进行比

3、较时使用的是字符的ASCII值。如:Aa值为0。这是因为大写A的ASCII值为65,小写a的值为97,显然6597为假。但字符串之间的比较不能使用关系运算符,如判断字符串”ABC”和”aBC”是否相等,不能写成:”ABC”=”aBC”。如何进行字符串比较会在数组章节进行介绍。不要将等号”= =”和赋值运算符”=”混淆使用,这两个运算符差别很大。前者检查左边和右边是否相等,后者把右边的值赋给左边。例如:a=5 /如果a和5相等,该关系表达式值为1,否则,为0a=5 /赋值表达式,实现将数字5赋值给变量a4.1.2 逻辑运算符和逻辑表达式在实际问题中,有时做出判断往往需要多个条件同时为真时,才做出

4、某个决策,或者是只要满足众多条件中一个时,就执行一个动作。例如,要判别某一年是否闰年。闰年的条件是符合下面二者之一:1. 能被4整除,但不能被100整除;2. 能被4整除,又能被400整除。要表达这样一种条件,利用前面介绍的关系表达式就会遇到困难。因此,在高级语言中,需要引进逻辑运算符和逻辑表达式的概念,以表达复杂的条件。C语言提供了三种逻辑运算符:1. 逻辑非(!):对表达式结果的否定,即“真”成“假”,“假”成“真”。 2. 逻辑与(&):当该运算符两边的表达式均为“真”时,结果为“真”。 3. 逻辑或 (|):当该运算符两边的表达式中有一边为“真”,结果为真。 &和|是双目(元)运算符,

5、它要求有两个运算量(操作数),如(ab)&(xy),(ab)|(xy)。!是单目(元)运算符,只要求有一个运算量,如!(ab)。逻辑运算的规则如表4.2所示。x和y表示两逻辑值,T表示真,F表示假,表中内容为当x和y的值为不同组合时,各种逻辑运算所得到的值。表4.2 逻辑运算规则xy!x!yx & yx | yTTFFTTTFFTFTFTTFFTFFTTFF用逻辑运算符连接的式子称为逻辑表达式。例如:用逻辑表达式表示判别闰年的条件,则可以很方便地表示为:(year % 4=0 & year % 100!=0) | year % 400=0又如用逻辑表达式表达下述数学式:1. 0x10 2. x

6、803. 10x 30,或50 x 90则相应的逻辑表达式分别为:1. 0x & x102. x80 (或!(x=60 & x=10 & x=50 & x=90) printf(“Congratuations!n”); /语句块由一条语句组成printf(“Your score is %dn”,score);当score的值大于等于90时(假设为95),程序显示两个结果:Congratuations!Your score is 95当score的值小于90时(假设为65),程序显示一个结果:Your score is 65 显然,printf(“Congratuations!n”);语句的执行

7、与否由if后面的表达式来决定。而printf(“Your score is %dn”,score);语句不是if语句块的一部分,它是一条独立的语句,程序在if语句执行后,紧接就执行它。if语句后面的语句块实质就是一条语句,形式可以是单条语句,也可以是复合语句。计算机将复合语句看作一条语句。因此当if语句下面要控制一系列语句时,应用一对花括号将他们群聚成一组,即复合语句。如:if(score=90) printf(Congratuations!n); printf(Your score is %dn,score); 当满足条件score=90时,则执行复合语句,产生两个输出,否则不执行复合语句,

8、即没有任何的输出结果。 注意,即使if语句中使用了复合语句,整个if结构仍被看成一个简单语句。 通常,在if语句中的表达式是个关系表达式或逻辑表达式,像表达式xy 和 x3&x0。如果该表达式为1(真),说明x是个大于零的正数。同理,判断x是否是负数,只需判断其是否小于0。利用关系表达式表示:x0。如果该表达式值为1(真),说明x是小于零的负数。因此,可用两个不含有else的if语句分别表示上述两种情况。2.源程序代码(demo4_1.c)#include main() int x; printf(请输入一个非零整数n ); scanf(%d,&x); if (x0) printf(正数);

9、if(x=0决定。如果x=0成立,则执行该条语句,否则不执行。同样,语句printf(负数);也是如此。 4.程序运行结果(1)运行结果1:请输入一个非零整数5正数(2)运行结果2:请输入一个非零整数-12负数说明:表示Enter键。【例4.2】商店售货,按购买货物款的多少分别给予不同的优惠折扣,编程计算实际应付货款。购货不足250元,没有折扣;购货250元(含250元,下同),不足500元,减价5%;购货500元,不足1000元,减价7.5%;购货1000元,不足2000元,减价10%;购货2000元及以上,减价15%;1.算法分析 设购物款为m,折扣率为d,则d可表示为:根据m的取值范围确

10、定d的值,可用if语句实现。当d的值确定后,使用公式t=m*(1-d)计算实际应付款。2.数据结构 根据题意,程序中应分配3个变量分别存储数据购物款、折扣率和应付款。由于购物款、折扣率等一般都为小数,所以变量应定义为float类型。3.源程序代码(demo4_2.c)#includemain() float m,d,t; printf(请输入购物款:); /输出提示信息 scanf(%f,&m); /输入购物款,存储于变量m中 if (m=250 & m=500 & m=1000 & m=2000) d=0.15; t=m*(1-d), /计算应付款,存储于变量t中 printf(实际应付款:

11、%5.2f,t); /输出实际应付款,结果保留2位小数4.程序说明程序中的5条if语句是并行关系。计算机对于每条if语句都要判断一次,但不一定都执行,只有当判断的表达式为真,才认为if语句执行了,否则认为if语句没有执行。如:假设m的值为150, 第1条if语句执行了,其后面的其它4条if语句计算机都判断,但都没有执行,因为判断的表达式的值为假。5.程序运行结果(1)运行结果1:请输入购物款:249实际应付款:249.00 (2)运行结果2:请输入购物款::500实际应付款:462.50说明:表示Enter键。4.2.2 含有else的if语句不含else的if语句使程序能够选择是否执行某个动

12、作,而含else的if使程序能够在两个动作之间进行选择。 语句的一般使用形式: if (表达式) 语句块1 else 语句块2如果表达式为真(非零),则执行if后面的语句块1(亦称if子句);如果表达式为假(零),则执行else后面的语句块2(亦称else子句)。显然,语句块1和语句块2不能同时执行。执行流程见图4.2。可用ifelse语句来修改例4.1程序:if (x0) printf(正数);if(x0成立时,x0) printf(正数);else printf(负数);如果x0则输出正数,否则一定是小于零的情况,则输出负数。这里程序仅仅只做了一次判断。如果if和else之间有多条语句,则

13、必须用花括号将其括起来。下面的形式是错误的:if(x60) printf(“pass”); n+;else printf(“no pass”);编译器认为if和else之间只有一条语句(单条或复合)。遇到上述形式的程序段,编译器会报错,因为它认为printf(“pass”);是if的一部分,而n+被看作是独立的一部分,不属于if语句,接着就会认为else没有if与其匹配。应该使用下面的形式:if(x60) /复合语句printf(“pass”); n+;else printf(“no pass”); 同样,如果else后面的语句块2(即else子句)是由多条语句组成,也应用花括号括起来形成复合

14、语句。如:示例1:if(score=60) printf(“passn”);else printf(“no passn”); printf(“endn”);示例2:if(score=60) printf(“passn”);else printf(“no passn”); printf(“endn”);从缩排格式看,容易错误的将示例1等同于示例2。但从4.2的运行结果对照来看,显然,else后面的两条语句加花括号和不加花括号对程序的执行结果是有本质不同的。实际上示例1中只有printf(“no passn”)是else的子句。而printf(“endn”);是区别于ifelse语句的其它语句。表

15、4.2 示例1和示例2的运行结果对比表达式程序的输出结果示例1示例2score=60为真时passendpass为假时no passend不管是哪一种形式的if语句,编译器在识别else子句所遵循的规则是:将关键字else后面紧靠它的第一条语句视为else子句(语句块)。对于识别if子句(语句块1)也是如此。计算机把复合语句看作一条语句。【例4.3】编写程序,计算如下的分段函数: x+1 x0 y= 2x+5 x01.算法分析根据题意:如果x大于等于0,选择表达式x+1计算y值,反之,选择表达式2x+5计算y值。可利用ifelse语句实现。代数表达式要写成标准的算术表达式:2x+5 = 2*x

16、+52.源程序代码(demo4_3.c)#includemain()int x;printf(请输入1个整数n);scanf(%d, &x);if(x=0) y=x+1;else y=2*x+5;printf(结果为:%dn,y);3. 程序运行结果(1)运行结果1:请输入1个整数5结果为:6(2)运行结果2:请输入1个整数-3结果为:-1说明:表示Enter键。【例4.4】求解任意的一元二次方程ax2+bx+c=0(a0)的根,a、b、c的值由键盘输入。 1.算法分析当a0时,一元二次方程式的根有两种形式:(1)当判别式 b2-4ac0 有两个实根,求根公式为(2)当判别式 b2-4ac 0

17、有两个共轭复根,求根公式为2.数据结构分析由于问题简单,只需用到一些单精度实数。方程系数a,b,c采用单精度变量,3.伪代码输入方程系数 a,b,c 计算判别式 d=b*b-4*a*cif (判别式 0) 计算两个实根 打印结果 else 计算实部和虚部 打印结果4. 源程序代码(demo4_4.c)#include #includemain( ) float a,b,d,c,x1,x2,p,q; printf( 输入方程系数a,b,c: ); scanf(%f,%f,%f,&a,&b,&c); d=b*b-4.0*a*c; if (d=0) x1=(-b+sqrt(d)/(2.0*a); x

18、2=(-b-sqrt(d)/(2.0*a); printf( x1=%5.2f,x2=%5.2fn,x1,x2); else p=-b/(2.0*a); q=sqrt(-d)/(2.0*a); printf(实部为:%5.2fn,p); printf(虚部为:%5.2fn,q); 5. 程序运行结果(1)第1次运行程序 输入方程系数a,b,c:2,5,3 x1=-1.00,x2=-1.50(2)第2次运行程序 输入方程系数a,b,c:2,3,4 实部为:-0.75 虚部为:1.20说明:表示Enter键上述的例4.3和例4.4是比较简单的分支情况,除了用ifelse语句实现,还可用C语言中提供

19、的条件运算符来处理。条件运算符是由“?”和“:”组成的运算符。通常使用它将三个表达式连接成一个新的表达式,称之为条件表达式:表达式1?表达式2:表达式3若表达式1的值非零(真),则条件表达式的值为表达式2的值。若表达式1的值为零(假),则条件表达式的值为表达式3的值。如:x=0? 2+3 : 16 假设x=6,那么此条件表达式的值为5。条件运算符优先于赋值运算符,低于关系运算符。其结合方向为“自右至左”。例如: ab?a:cd?c:d /*等价于ab?a:(cd?c:d)*/因此,例4.4中ifelse结构可用条件运算表达式表示:y=(x=0 ? x+1 : 2*x+5);尽管条件运算符也可用

20、于复杂的分支,但一般情况下,只有简单的分支才用条件运算符。4.2.3 含else if的if语句 含else if的if语句提供多种选择,并从中选择一个满足条件的情况操作,即多选一。语句的一般形式:if (表达式1) 语句块1else if (表达式2) 语句块2 else if (表达式n) 语句块nelse 语句块n+1程序依次判断if圆括号中表达式的真假,直到某个表达式i为真,则选择其后的语句块i执行,并完成if语句的执行,否则继续判断下一个表达式;如果所有if后面的表达式值都为假,则执行else后面的语句块n+1。最后执行if后面的其他语句。流程图如图4.3所示。看下面的例子:int

21、a=70;if(a50) printf(%d,a+1);else if(a40) printf(%d,a+2);else if (a30) printf(%d,a+3); 计算机是按照顺序依次判断括号内的条件表达式的值,当程序判断到第1个表达式a50为真时,选择其后的printf(%d,a+1);语句执行,紧接的else 意义为上面情况之外(即a50) printf(%d ,a+1);if(a40) printf(%d ,a+2);if (a30) printf(%d ,a+3); 即3条并行的不含else的if语句组成。计算机在执行时,对于每条if语句都要判断其表达式。判断过程中,如果表达式

22、为真,则执行其后的printf语句,否则接着判断下一条if语句。因此该程序段的输出结果是:51 52 53。【例4.5】从键盘输入一个整数,根据判断是正、负或是零分别输出字符“正数”、“负数”或“零”。1.算法分析一个整数,不可能既是零,又同时是正数且又是负数,这是矛盾的。只能是其中的一种情况。即三选一。可利用if.else if语句实现。判断的本质条件是整数与零进行比较运算,可利用关系表达式表示。2. 源程序代码(demo4_5.c)#includemain() int x; printf(请输入一个整数n); scanf(%d,&x); if (x0) printf(x是正数n); els

23、e if (x0为假时,继续判断x0是否为真,如果x0也为假,那说明x的情况只能是为零,别无其它选择。因此在ifelse if语句中,不需要再另外加else if(x=0)这个分支判断。else部分已足以说明问题。4. 程序运行结果(1)运行结果1 请输入一个整数:-3 x是负数(2)运行结果2 请输入一个整数: :0 x是零说明:表示Enter键【例4.6】用else if语句改写例4.2的购物折扣程序。1. 源程序代码(demo4_6.c)#includemain() float m,d,t; printf(请输入购物款n ); scanf(%f,&m); if (m=250 & m=50

24、0 & m=1000 & m=0时,执行虚线里面的ifelse语句,否则执行语句printf(“Error”);。这是在if子句(语句块1)中嵌套if的情况,当然也可以在else子句(语句块2)中嵌套if语句,这里就不再举例。if语句有3种形式,当几种形式的if语句混合嵌套时,就涉及计算机如何判断哪个if对应哪个else的问题。如下面的示例1:if(x=0) if(x0) printf(“you”);else printf(“me”);从缩排的格式上看,else好像是和第1个if配对。如果按这种方式理解,当x大于0时,输出结果you;当x等于0时,没有输出;当x小于0时,输出结果me。但这是错误的,因为编译器不是根据缩排格式识别if结构的。其正确识别if语句的规则是:else与它上面最接近的if匹配,且这个if没有被花括号或其它的else匹配掉。因此,在示例1中,正确的是else应与第2个if配对。通过缩排方式来表现即下面书写格式:if(x=0) if(x0) printf(“you”); else printf(“me”);当x大于0时输出结果是you;x等于0时,输出结果为

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1