第2章结构化程序设计基础和C语言的控制结构.ppt
《第2章结构化程序设计基础和C语言的控制结构.ppt》由会员分享,可在线阅读,更多相关《第2章结构化程序设计基础和C语言的控制结构.ppt(89页珍藏版)》请在三一办公上搜索。
1、程序设计技术,C语言数据描述和C程序设计初步 结构化程序设计基础和C语言的控制结构数组及其应用 函数与C程序结构 指针与函数 指针与数组 字符串及其应用结构体类型和联合体类型 C语言的文件处理及其应用 位运算与枚举类型,C程序的控制结构,C程序的控制结构概述C语言中的关系运算和逻辑运算分支结构及其应用循环结构及其应用其他简单控制结构C语言控制结构应用举例,结构化程序设计概述,结构化程序设计是进行程序设计的方法和原则。按照结构化程序设计的基本观点,任何程序都可以通过三种基本程序结构的组合实现。这三种基本结构是:顺序结构:按语句出现的顺序依次执行的程序结构。选择结构:根据给定的条件是否成立,以决定
2、程序流程转向的程序结构。循环结构:在某种条件成立的情况下,反复执行某一公共程序段,直到条件不成立时,终止循环的程序结构。,结构化程序的优点:具有结构清晰、可读性好、易于修改。,C程序的控制结构,C程序的控制结构概述C语言中的关系运算和逻辑运算分支结构及其应用循环结构及其应用其他简单控制结构C语言控制结构应用举例,C语言中的关系运算和逻辑运算,对于分支结构和循环结构都涉及到两个方面的基本问题:1)如何表示控制结构中的条件;2)对于控制结构中的条件如何判断成立与否;,程序设计语言中,用关系运算和逻辑运算来实现对程序控制结构中条件的描述和处理。,C语言中的关系运算,1)关系运算符和关系表达式 关系运
3、算符用于比较两个运算对象,用关系运算符将两个表达式连接起来的式子称为关系表达式。2)关系运算符及其优先级=(同级)=!=(同级)关系运算符的优先级低于算术运算符。关系运算符的结合性为左结合性。例如:ca+b 等价于 c(a+b),高优先级,C语言中的关系运算,例2-1 关系运算示例。,3)关系运算的结果表示:在C程序设计语言中没有逻辑数据类型,所以在进行关系运算时:用数值“1”表示逻辑概念上的“真”,用数值“0”表示逻辑概念上的“假”;例如:5=5/*结果为1*/10=10/*结果为1*/5!=5/*结果为0*/53/*结果为1*/35/*结果为0*/,C语言中的关系运算,该程序运行执行语句c
4、=5-1=a+2=a+2=和=结合,即先计算表达式5-1=a+2得到结果0,然后计算表达式0=b-21的结果也为0,最后将该0值赋值给变量c。所以,该程序运行的输出结果为:c=0,C语言中的逻辑运算,1)逻辑运算的作用:作用体现在对条件的组合和处理上。当确定程序执行的方向需要多个条件来决定时,用逻辑表达式描述条件。用逻辑运算符将算术表达式、关系表达式或逻辑量连接起来的式子称为逻辑表达式。,2)逻辑运算符:&(逻辑与)、|(逻辑或)、!(逻辑非)注意:符号的输入方法 各个逻辑运算符的作用,C语言中的逻辑运算,3)逻辑运算的结果:数值“1”表示逻辑“真”,用数值“0”表示逻辑“假”。,判断一个数据
5、对象的真假时:若数据对象为数值“0”,则判定为假;若数据对象为数值非“0”,则判定为真;,例如,设有定义int a=8,b=0;,则:a|b/*结果为1*/a&b/*结果为0*/!a/*结果为0*/!b/*结果为1*/,C语言中的逻辑运算,两个逻辑对象a和b之间的逻辑运算真值表如表所示:,C语言中的逻辑运算,C语言中,两条原则:,对逻辑表达式从左到右扫描求解;在逻辑表达式的求解过程中,任何时候只要逻辑 表达式的值已经可以确定,则求解过程不再进行。,例如有定义:int a=1,b=2,c=0;,则逻辑表达式a+|b+&c+的计算过程得到结论为:逻辑表达式的值为1、变量a的值为2、变量b的值为2(
6、原值)、变量c的值为0(原值)。,C语言中的关系运算和逻辑运算,例2-3 关系表达式运算和逻辑表达式运算示例。,例2-2 逻辑表达式运算示例。,如果条件不变,将计算的逻辑表达式改为:a+&b+|c+,则相应的计算结论为:逻辑表达式的值为1、变量a的值为2、变量b的值为3、变量c的值为0(原值)。,C程序的控制结构,C程序的控制结构概述C语言中的关系运算和逻辑运算分支结构及其应用循环结构及其应用其他简单控制结构C语言控制结构应用举例,C程序的分支结构及其应用,分支结构可以解决的问题:确定某件事情做,还是不做;确定在两件相关事情中选择哪一件来做;确定在若干件相关事情中选择哪一件来做;,分支结构的概
7、念:在程序运行中根据所给条件对程序的走向进行选择,以便决定执行哪一种操作的程序结构就是分支结构(也称为选择结构)。即,通过对条件的判断,从两种或两种以上的可能中确定问题的解。,2.2 分支程序结构,单分支结构及其应用,2.2.1 使用if语句实现单分支结构,1)单分支if语句的结构形式 if(expression)sentence;,expression:条件表达式,sentence:执行的语句,注意:if后面没有分号。sentenct后面有分号,只能有一条语句。,单分支结构及其应用,2)if语句的执行过程:,首先计算作为条件的表达式的值;然后对计算出的表达式值进行逻辑判断:若表达式的值为逻辑
8、真(表达式的值不 为0),则执行结构中的语句(sentence)后执行if结构的后续语句;若表达式的值为逻辑假(表达式的值为 0),则跳过语句(sentence)部分直接 执行if结构的后续语句。,单分支结构及其应用,3)使用if语句实现单分支结构程序时应注意的两点:,作为条件的表达式一般来说应该是关系表达式或逻辑表达式,但由于C99标准之前中并没有逻辑类型的量,所以,表达式也可以是任何可以求出0值,或非0值的表达式。,if结构后的语句部分可以是C语言的任何合法语句(如复合语句等)。,例2-4 编程序实现功能:从键盘上输入一个整数,若该输入数据是奇数则将其输出。,单分支结构及其应用,将例2.4
9、中的单分支if语句改为下面的形式而程序的功能不变:if(x%2!=0)printf(%d is odd number.n,x);,复合语句及其应用,2.2.2 复合语句及其在程序中的使用,在C应用程序设计中,可能涉及到在某种条件下不能仅用一条简单语句描述的功能。为了满足这种在语法结构上只能有一条语句,而功能的实现又需要多条语句的要求,在C语言中提供了称为复合语句的语句块对这种要求进行支持。复合语句在语法上作为一条语句考虑,但可含多条简单语句,从而实现较复杂功能的描述。,复合语句及其应用,在C语言中,复合语句是用一对花括号“”将若干条C语句括起来形成的语句序列。复合语句的基本形式如下所示:sen
10、tence1;sentencei;sentencen;,注意:C语言的复合语句右括号“”后不需要用用分号“;”结尾,如果在程序中有如下形式的语句格式出现,则应认为是复合语句后面跟了一个空语句:语句序列;/*最后的分号是空语句*/,复合语句及其应用,例2-5 从键盘上输入三角形的三边的边长,若它们能构成一个三角形,则输出其面积。,根据数学知识,若三直边a、b、c构成三角形,则必须满足条件:任意两边的之和大于第三边(即:a+bc 且 a+cb 且 b+ca)。计算三角形的面积的公式为:,复合语句及其应用,上面程序中,if结构的语句部分是复合语句:s=(a+b+c)/2;area=sqrt(s*(s
11、-a)*(s-b)*(s-c);printf(%fn,area);在C程序的设计过程中,需要使用复合语句的地方必须使用复合语句的形式,否则程序在语法上可能检查不出任何错误,但程序运行的结果与程序设计者的期望会相去甚远。例如,如果将例2.5相关程序段描述为如下形式:if(a+bc,双分支结构及其应用,双分支结构的形式:,if(expression)sentence1;else sentence2;,2.2.3 if_else语句与程序的双分支结构,注意:作为条件的表达式可以是任何可以求出0值或非0值的表达式。if结构或else结构后语句部分都可以是C语言的任何合法语句。,双分支结构及其应用,语句
12、的执行过程:先判断表达式的值,若表达式的值为真(表达式的值不为0),则执行语句1,然后执行if结构的后续语句;否则,执行语句2,然后执行if结构的后续语句。,双分支结构及其应用,例2-6 求任意输入的3个整数中的最大数。,条件运算符与条件表达式及其应用,2.2.4 条件运算符与条件表达式,C语言中,若ifelse语句结构中的语句部分满足下列两个条件:无论表示条件的表达式取何值(真或假),语句部分都是一句简单的赋值语句。两条赋值语句都是为同一个变量赋值。则,可以使用C语言中提供的条件运算符代替这种ifelse结构。,条件运算符与条件表达式及其应用,条件运算符是C语言中惟一的一个三元运算符,使用条
13、件运算符构成的表达式称为条件表达式。,exp1?exp2:exp3,1)条件表达式一般形式如下:,2)条件表达式的执行过程:,首先计算表达式exp1的值,若exp1的值为非0(真),则计算出表达式exp2的值作为整个条件表达式的值;若exp1的值为0(假),则计算出表达式exp3的值作为整个条件表达式的值。,条件运算符与条件表达式及其应用,条件运算符的优先级别高于赋值运算符,但低于关系运算符和算术运算符。,条件运算符的结合方向为右结合性,例如有如下形式的条件表达式:ab?a:cd?c:d,可以看出,在数据对象cd(关系表达式)的两边具有同级的条件运算符(?:),由于条件运算符的结合性为右结合,
14、数据对象cd先与其右边的的条件运算符结合,即先计算cd?c:d,所以整个条件表达式的计算过程与表达式ab?a:(cd?c:d)的计算过程相同。,条件运算符与条件表达式及其应用,例2-7 从键盘上输入一个英文字母,若其是大写字母则转换为小写字母输出;否则转换为大写字母输出。,在上面程序中,表达式ch=A,多分支结构及其应用,2.2.5 if语句的嵌套与程序的多分支结构,if结构或者else结构的语句部分又是一个另外一个if结构,称为if语句的嵌套。在C程序设计中,if语句的嵌套结构用于解决在若干种相关情况中选择一种进行处理的问题。,例如,在一个二分支if语句的两个语句部分分别嵌入了一个二分支if
15、语句的形式为:,if(exp1)if(exp2)sentence1;elsesentence2;else if(exp3)sentence3;elsesentence4;,多分支结构及其应用,例2-8 公司按照销售人员收到的订单金额数量评定等级,订单总金额超过一万的为A等,50009999为B等,25004999为C等,2500以下为D等。编制程序对输入的订单总金额数判定等级。,多分支结构及其应用,当被嵌套的if结构均被嵌套在else的语句部分时,形成了一种称为else_if的多分支选择结构,这是if_else多重嵌套的变形。其一般形式为:,if(exp1)sentence1;else if(
16、exp2)sentence2;else if(exp3)sentence3;else if(expN)sentenceN;else sentenceN+1;,多分支结构及其应用,注意:在这种特殊的elseif结构中,表示条件的表达式是相互排斥的,执行该结构时控制流程从exp1开始判断,一旦有一个表达式的值为非0(真)时,就执行与之匹配的语句,然后退出整个选择结构;如果所有表示条件的表达式值均为0(假),则在执行语句sentenceN+1后退出整个选择结构;如果当所有的条件均为假时不需要进行任何操作,则最后的一个else和语句sentenceN+1可以缺省。嵌套的elseif结构执行流程如图2.
17、6所示。,多分支结构及其应用,例2-9 编写程序求如下所示多分支方程的解。,在程序中,变量x的取值区间为:(DBL_MIN,1)、1,10)、10,DBL_MAX),其中DBL_MIN和DBL_MAX分别表示双精度实型数据所能取得的最小值和最大值。,多分支结构及其应用,在包含了if语句嵌套结构的程序中,else子句与if的配对原则是非常重要的,按不同的方法配对则得到不同的程序结构。C语言中规定:程序中的else子句与在它前面距它最近的且尚未匹配的if配对。无论将程序书写为何种形式,系统总是按照上面的规定来解释程序的结构。请看如下两个用于比较的程序段:,多分支结构及其应用,例2.10和例2.11
18、描述了两种情况下程序的执行情况。其中:例2.10程序执行的结果为:a=-1,b=10,例2.11程序执行的结果为:a=-1,b=11。,例2-10 else与if配对原则示例。,例2-11 else与if配对原则示例(使用复合语句改变程序结构),switch语句与多分支结构及其应用,2.2.6 switch语句与程序的多分支结构,C语言中可以使用switch语句结构实现对多分支选择结构情况的直接处理。1)switch语句结构的一般形式如下:,switch(expession)case constand1:sentences1;break;case constand2:sentences2;br
19、eak;case constandN:sentencesN;break;default:sentencesN+1,switch语句与多分支结构及其应用,2)执行过程:,首先,对作为条件的表达式(expression)求值;然后,在语句结构的花括号内从上至下查找所有的case分支,当找到与条件表达式值相匹配的case时,将其作为控制流程执行的入口,并从此处开始执行相应的语句段,直到遇到break语句或者是switch语句结构的右花括号“”为止。,switch(number)case 1:statement1;case 2:statement2;case 3:statement3;default:
20、statement4;statement5;,2,switch语句与多分支结构及其应用,switch语句与多分支结构及其应用,作为条件的表达式expression的值必须是有序型的,即只能是整型、字符型、枚举型三者之一。语句段sentences可以是单条语句,也可以是多条语句,但这多条语句并不是复合语句,不需要使用花括号。语句段sentences中的语句可以使任意合法的C语句。结构中的常数值应与表示条件的表达式值对应一致,且各常数的值不能相同。结构中的break语句和default可选项可根据需要确定是否选用。,3)使用switch语句结构时应注意的问题:,switch语句与多分支结构及其应用
21、,例2-12 从键盘上输入一个字符,判断它是数字、空格还是其它键;若是数字,还要求显示出是哪一个数字。,在语句段中包含了switch语句,称为switch语句的嵌套。对于内嵌的switch结构处理方法与单层switch结构处理方法相同,需要注意的是:当从内嵌的switch结构中退出(执行中遇到了内嵌swithc结构中的break语句或执行到了内嵌switch语句体的右边花括号)时,只是退出内嵌的switch结构,而不是退出整个switch结构,例2.13程序展示了这种情况。,例2-13 swithc结构的嵌套示例。,switch语句与多分支结构及其应用,4)if和switch的比较,多分支结构
22、程序设计中:if语句结构的嵌套可以解决任何条件下的多分支问题;对于switch语句结构,则要求条件是在某个范围内的一些离散的等值点(描述为:与什么相匹配,就做什么)。,在实际的程序设计过程中,可以使用switch语句结构解决的问题,一定也可以用if语句结构的嵌套来解决;但用if语句结构的嵌套可以解决得问题,使用switch语句结构就不一定能够解决。,C程序的控制结构,C程序的控制结构概述C语言中的关系运算和逻辑运算分支结构及其应用循环结构及其应用其他简单控制结构C语言控制结构应用举例,C语言的循环结构及其应用,2.3 循环程序结构,在实际问题中经常会遇到许多具有规律性的重复计算处理问题,在处理
23、此类问题的程序中就需要将某些语句或语句组重复执行多次。程序设计中,一组被重复执行的语句称之为循环体,每一次执行完循环体后都必须根据某种条件的判断决定是继续循环,还是停止循环;决定所依据的条件称之为循环条件。这种由重复执行的语句或语句组,以及循环条件的判断所构成的程序结构就称为循环结构。循环结构是结构化程序设计的三种基本结构之一,是构成各种复杂程序的基本构造单元。在C语言中提供了三种用以实现程序循环结构的语句,它们是:while语句、do_while语句和for语句。,while型循环结构及其应用,2.3.1 while型循环结构,1)while型循环控制结构的一般形式为:,while(exp)
24、Loop-Body,2)while型循环结构的执行过程:,首先计算作为判断条件的表达式exp的值;对表达式exp的值进行判断,若条件表达式的值为非0(真),则执行一次循环体Loop-Body;然后再一次计算条件表达式exp的值,若计算结果仍为非0(真),再一次执行循环体。重复上述过程,直到某次计算出的条件表达式值为0(假)时,则退出循环结构;控制流程转到该循环结构之后的语句。while循环控制结构的执行过程如图2-4所示。,while型循环结构及其应用,3)使用while循环结构时需要注意以下几点:,由于整个结构的执行过程是先判断、后执行,因而循环体有可能一次都不执行。在循环结构的控制部分中,
25、如果表示条件的表达式是一个非0值常量表达式,则构成了死循环。例如:while(1)Loop-Body C程序设计中,如果不是有意造成死循环,则在while循环结构的循环体内必须有能够改变循环控制条件的语句存在。循环结构的循环体可以是一条语句、一个复合语句、空语句等任意合法的C语句。,例2-14 使用while循环控制结构求 的值。,while型循环结构及其应用,在例2.14程序中,循环控制变量n从初值1开始,在循环结构的执行过程中通过循环体中的表达式语句n+;修改循环控制变量,使其逐渐趋近于100。循环结构中的循环体是由两条C语句组成的,所以需要使用复合语句的形式。当然也可以通过语句的组合使得
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 程序设计 基础 语言 控制
链接地址:https://www.31ppt.com/p-5906787.html