您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C程序设计教程第4章_选择
第四章本章要点关系运算符和关系表达式逻辑运算符和逻辑表达式用if语句实现选择结构用switch语句实现多分支选择结构主要内容4.1关于算法4.2条件判断4.3用if语句实现选择结构4.4利用switch语句实现多分支选择结构4.5程序举例4C程序设计(第三版)【教学目的与要求】【教学重点与难点】掌握两种分支语句的语法规则和功能,学会用分支方法进行简单分支程序设计,能使用分支语句编写程序。关系运算符与逻辑运算符及其组成的具有逻辑值的表达式、两种分支语句的格式及基本应用。5C程序设计(第三版)一个程序应包括两个方面的内容:•对数据的描述:数据结构(datastructure)•对操作的描述:算法(algorithm)著名计算机科学家沃思提出一个公式:数据结构+算法=程序数据结构+算法+程序设计方法+语言工具完整的程序设计应该是:•4.1关于算法•4.1.1算法的概念6C程序设计(第三版)广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。•方法1:1+2,+3,+4,一直加到100加99次•方法2:100+(1+99)+(2+98)+…+(49+51)+50=100+49×100+50加51次对同一个问题,可有不同的解题方法和步骤例:求1001nn7C程序设计(第三版)怎样表示算法可以用不同的方法表示算法,常用的有:–自然语言–传统流程图–结构化流程图–伪代码8C程序设计(第三版)用自然语言表示算法自然语言就是人们日常使用的语言,可以是汉语或英语或其它语言。用自然语言表示通俗易懂,但文字冗长,容易出现“歧义性”。自然语言表示的含义往往不大严格,要根据上下文才能判断其正确含义,描述包含分支和循环的算法时也不很方便。因此,除了那些很简单的问题外,一般不用自然语言描述算法。9C程序设计(第三版)(AmericanNationalStandardInstitute)规定了一些常用的流程图符号:起止框判断框处理框输入/输出框注释框流程线连接点10C程序设计(第三版)流程图表示算法既然用基本结构的顺序组合可以表示任何复杂的算法结构,那么,基本结构之间的流程线就属多余的了。1973年美国学者I.Nassi和B.Shneiderman提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其它的从属于它的框,或者说,由一些基本的框组成一个大的框。这种流程图又称N--S结构化流程图。11C程序设计(第三版)流程图用以下的流程图符号:(1)顺序结构(2)选择结构(3)循环结构12C程序设计(第三版)用伪代码表示算法•概念:伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。•特点:它如同一篇文章一样,自上而下地写下来。每一行(或几行)表示一个基本操作。它不用图形符号,因此书写方便、格式紧凑,也比较好懂,也便于向计算机语言算法(即程序)过渡。•用处:适用于设计过程中需要反复修改时的流程描述。13C程序设计(第三版)也可以用汉字伪代码表示:若x为正打印x打印-x也可以中英文混用,如:IFxprintxELSEprint-x例:“打印x的绝对值”的算法可以用伪代码表示为:14C程序设计(第三版)关系运算符和关系表达式•关系运算符–种类:====!=–结合方向:自左向右–优先级别:====!=优先级6(高)优先级7(低)例ca+b//c(a+b)ab!=c//(ab)!=ca==bc//a==(bc)a=bc//a=(bc)关系表达式:用关系运算符将两个表达式连接起来的式子。关系表达式的值:是逻辑值“真”或“假”,用1和0表示例inta=3,b=2,c=1,d,f;ab(ab)==cb+cad=abf=abc//表达式值1//表达式值1//表达式值0//d=1//f=0!(非)(高)算术运算符关系运算符&&和||赋值运算符(低)15C程序设计(第三版)–关系运算注意:例注意区分“=”与“==”inta=0,b=1;if(a=b)if(a==b)printf(“aequaltob”);elseprintf(“anotequaltob”);例应避免对实数作相等或不等的判断如1.0/3.0*3.0==1.0结果为可改写为:fabs(1.0/3.0*3.0-1.0)1e-6016C程序设计(第三版)!a!ba&&ba||b真假真假假假真真4.2.2逻辑运算符和表达式•逻辑运算符–种类:!&&||–逻辑运算真值表C语言中,运算量:0表示“假”,非0表示“真”运算结果:0表示“假”,1表示“真”,真假假假假假真真假假真真真假真真17C程序设计(第三版)=x&&x=bab&&xya==b||x==y!a||ab优先级:结合方向:!:从右向左&&:从左向右||:从左向右//(ab)&&(xy)//(a=x)&&(x=b)!(2)&&(11)||(12)高//(a==b)||(x==y)//(!a)||(ab)18C程序设计(第三版)=4;b=5;!aa&&ba||b!a||b4&&0||253&&2||84-!0‘c’&&‘d’值为1值为0值为1值为1值为1值为1//(53)&&2||(8(4-(!0)))值为119C程序设计(第三版)短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。例a&&b&&c//只在a为真时,才判别b的值;只在a、b都为真时,才判别c的值例a||b||c//只在a为假时,才判别b的值;只在a、b都为假时,才判别c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=ab)&&(n=cd)//结果m=0,n=120C程序设计(第三版)语句的三种基本形式(1)if(表达式)语句例:if(xy)printf(“%d”,x);表达式语句真(非0)假(0)21C程序设计(第三版)(2)if(表达式)语句1else语句2例:if(xy)printf(“%d”,x);elseprintf(“%d”,y);表达式语句1语句2YN22C程序设计(第三版)(3)if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3……elseif(表达式m)语句melse语句n23C程序设计(第三版)例:if(number500)cost=0.15;elseif(number300)cost=0.10;elseif(number100)cost=0.075;elseif(number50)cost=0.05;elsecost=0;24C程序设计(第三版)几点说明:(1)3种形式的if语句中在if后面都有表达式,一般为逻辑表达式或关系表达式。例如:if(a==b&&x==y)printf(“a=b,x=y”);在执行if语句时先对表达式求解,若表达式的值为0,按“假”处理,若表达式的值为非0,按“真”处理,执行指定的语句,假如有以下if语句:if(3)printf(“O.K.”);由此可见,表达式的类型不限于逻辑表达式,可以是任意的数值类型(包括整型、实型、字符型、指针型数据)。例如:下面的if语句也是合法的:if(‘a’)printf(“%d”,‘a’);25C程序设计(第三版)(2)第二、第三种形式的if语句中,在每个else前面有一分号,整个语句结束处有一分号,例如:if(xy)printf(“%d”,x);elseprintf(“%d”,y);不要误认为上面是两个语句(if语句和else语句)。它们都属于同一个if语句,else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。26C程序设计(第三版)•(3)在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句,例如:if(a+bc&&b+ca&&c+ab){s=0.5*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“area=%6.2f”,area);}elseprintf(“itisnotatrilateral”);27C程序设计(第三版)输入两个实数,按代数值由小到大的顺序输出这两个数。#includestdio.hvoidmain(){floata,b,t;scanf(″%f,%f″,&a,&b);if(ab){t=a;a=b;b=t;}printf(″%5.2f,%5.2f\n″,a,b);}ynabt=aa=bb=t28C程序设计(第三版)要求按由小到大的顺序输出。ifab将a和b对换ifac将a和c对换ifbc将b和c对换abacbca和b交换a和c交换c和b交换yyynn29C程序设计(第三版)(){floata,b,c,t;scanf(″%f,%f,%f″,&a,&b,&c);if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}printf(%5.2f,%5.2f,%5.2f\n,a,b,c);}30C程序设计(第三版)语句的嵌套。形式:if()if()语句1else语句2elseif()语句3else语句4内嵌if31C程序设计(第三版)匹配规则:else总是与它上面的、最近的,统一复合语句中的、未配对的if语句配对。例:if()if()语句1elseif()语句2else语句3例:if(){if()语句1}else语句2当if和else数目不同时,
本文标题:C程序设计教程第4章_选择
链接地址:https://www.777doc.com/doc-3174817 .html