第2章结构化程序设计基础和C语言的控制结构课件

PPT
  • 阅读 31 次
  • 下载 0 次
  • 页数 89 页
  • 大小 783.688 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
第2章结构化程序设计基础和C语言的控制结构课件
可在后台配置第一页与第二页中间广告代码
第2章结构化程序设计基础和C语言的控制结构课件
可在后台配置第二页与第三页中间广告代码
第2章结构化程序设计基础和C语言的控制结构课件
可在后台配置第三页与第四页中间广告代码
第2章结构化程序设计基础和C语言的控制结构课件
第2章结构化程序设计基础和C语言的控制结构课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 89
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】第2章结构化程序设计基础和C语言的控制结构课件.ppt,共(89)页,783.688 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44641.html

以下为本文档部分文字说明:

程序设计技术C语言数据描述和C程序设计初步结构化程序设计基础和C语言的控制结构数组及其应用函数与C程序结构指针与函数指针与数组字符串及其应用结构体类型和联合体类型C语言的文件处理及其应用位运算与枚举类型C

程序的控制结构C程序的控制结构概述C语言中的关系运算和逻辑运算分支结构及其应用循环结构及其应用其他简单控制结构C语言控制结构应用举例结构化程序设计概述结构化程序设计是进行程序设计的方法和原则。按照结构化程序设计的基本观点,任何程序都可以通过三种基

本程序结构的组合实现。这三种基本结构是:顺序结构:按语句出现的顺序依次执行的程序结构。选择结构:根据给定的条件是否成立,以决定程序流程转向的程序结构。循环结构:在某种条件成立的情况下,反复执行某一公共程序段

,直到条件不成立时,终止循环的程序结构。结构化程序的优点:具有结构清晰、可读性好、易于修改。C程序的控制结构C程序的控制结构概述C语言中的关系运算和逻辑运算分支结构及其应用循环结构及其应用其他简单控制结构C语言控制结

构应用举例C语言中的关系运算和逻辑运算对于分支结构和循环结构都涉及到两个方面的基本问题:1)如何表示控制结构中的条件;2)对于控制结构中的条件如何判断成立与否;程序设计语言中,用关系运算和逻辑运算来实现对程序控制结构中条件的描述和处理。C语言中的关系运算1)关系

运算符和关系表达式关系运算符用于比较两个运算对象,用关系运算符将两个表达式连接起来的式子称为关系表达式。2)关系运算符及其优先级>>=<<=(同级)==!=(同级)关系运算符的优先级低于算术运算符。关系运算符的结合性为左结合性。例如:c<a+b等价于c<(a+b)高

优先级C语言中的关系运算例2-1关系运算示例。3)关系运算的结果表示:在C程序设计语言中没有逻辑数据类型,所以在进行关系运算时:用数值“1”表示逻辑概念上的“真”,用数值“0”表示逻辑概念上的“假”;例如:5>

=5/*结果为1*/10==10/*结果为1*/5!=5/*结果为0*/5>3/*结果为1*/3>5/*结果为0*/C语言中的关系运算该程序运行执行语句c=5-1>=a+2<=b-21;时,首先计算其右边的关系表

达式5-1>=a+2<=b-21。关系表达式中数据对象a+2的前后各有一个同优先级的关系运算符>=和<=,它们的结合性为左结合性,所以数据对象a+2先与左边的运算符>=结合,即先计算表达式5-1>=a+2得到结果0,然后计算表达式0<=b-21的结果也为0,最后将该0值赋

值给变量c。所以,该程序运行的输出结果为:c=0C语言中的逻辑运算1)逻辑运算的作用:作用体现在对条件的组合和处理上。当确定程序执行的方向需要多个条件来决定时,用逻辑表达式描述条件。用逻辑运算符将算术表达式、关系表达式或逻辑量连接起来的式子称为逻辑表达式。

2)逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)注意:①符号的输入方法②各个逻辑运算符的作用C语言中的逻辑运算3)逻辑运算的结果:数值“1”表示逻辑“真”,用数值“0”表示逻辑“假”。判断一个数据对象的真假时:若数据对象为数值“0”,则判定为假;若

数据对象为数值非“0”,则判定为真;例如,设有定义inta=8,b=0;,则:a||b/*结果为1*/a&&b/*结果为0*/!a/*结果为0*/!b/*结果为1*/C语言中的逻辑运算两个逻辑对象a和b之间的逻辑运算真值表如表所示:ab!aa&&ba||b001000

11011000111011C语言中的逻辑运算C语言中,两条原则:①对逻辑表达式从左到右扫描求解;②在逻辑表达式的求解过程中,任何时候只要逻辑表达式的值已经可以确定,则求解过程不再进行。例如有定义:inta=1,b

=2,c=0;,则逻辑表达式a++||b++&&c++的计算过程得到结论为:逻辑表达式的值为1、变量a的值为2、变量b的值为2(原值)、变量c的值为0(原值)。C语言中的关系运算和逻辑运算例2-3关系表达式运算和逻辑表达式运算示例。例2-2逻辑表达式运算示例。如果条件不变,将计算的逻辑表达

式改为:a++&&b++||c++,则相应的计算结论为:逻辑表达式的值为1、变量a的值为2、变量b的值为3、变量c的值为0(原值)。C程序的控制结构C程序的控制结构概述C语言中的关系运算和逻辑运算分支结构及其应用循环结构及其应用其他简单控制结构C语言控制结构应用举例C程序的分支结构

及其应用分支结构可以解决的问题:①确定某件事情做,还是不做;②确定在两件相关事情中选择哪一件来做;③确定在若干件相关事情中选择哪一件来做;分支结构的概念:在程序运行中根据所给条件对程序的走向进行选择,以便决定执行哪一种操作的程序

结构就是分支结构(也称为选择结构)。即,通过对条件的判断,从两种或两种以上的可能中确定问题的解。2.2分支程序结构单分支结构及其应用2.2.1使用if语句实现单分支结构1)单分支if语句的结构形式if(expression

)sentence;expression:条件表达式sentence:执行的语句注意:①if后面没有分号。②sentenct后面有分号,只能有一条语句。单分支结构及其应用2)if语句的执行过程:首先计算作为条件的表达式的值;然后对计算出的表达式值进行逻辑判断:若表达式的

值为逻辑真(表达式的值不为0),则执行结构中的语句(sentence)后执行if结构的后续语句;若表达式的值为逻辑假(表达式的值为0),则跳过语句(sentence)部分直接执行if结构的后续语句。SenNExpY单分支结构及其应用3)使用if语句实现单分支结构程序时应注意的两点

:①作为条件的表达式一般来说应该是关系表达式或逻辑表达式,但由于C99标准之前中并没有逻辑类型的量,所以,表达式也可以是任何可以求出0值,或非0值的表达式。②if结构后的语句部分可以是C语言的任何合法语句(如复合语句等)。例2-4编程序实现功能

:从键盘上输入一个整数,若该输入数据是奇数则将其输出。单分支结构及其应用将例2.4中的单分支if语句改为下面的形式而程序的功能不变:if(x%2!=0)printf("%disoddnumber.\n",x);x%2printf10复合语句及其应用2.2.2复合语句及其在程

序中的使用在C应用程序设计中,可能涉及到在某种条件下不能仅用一条简单语句描述的功能。为了满足这种在语法结构上只能有一条语句,而功能的实现又需要多条语句的要求,在C语言中提供了称为复合语句的语句块对这种要求进行支持。复合语句在语法上作为一

条语句考虑,但可含多条简单语句,从而实现较复杂功能的描述。复合语句及其应用在C语言中,复合语句是用一对花括号“{}”将若干条C语句括起来形成的语句序列。复合语句的基本形式如下所示:{sentence1;…sentencei;…sentencen;}注意:C语言的复合语句右括号“}”后不需

要用用分号“;”结尾,如果在程序中有如下形式的语句格式出现,则应认为是复合语句后面跟了一个空语句:{语句序列;};/*最后的分号是空语句*/复合语句及其应用例2-5从键盘上输入三角形的三边的边长,若它们能构成

一个三角形,则输出其面积。根据数学知识,若三直边a、b、c构成三角形,则必须满足条件:任意两边的之和大于第三边(即:a+b>c且a+c>b且b+c>a)。计算三角形的面积的公式为:复合语句及其应用上面程序中,if结构的语句部分是复合语句:{s=(a+b+c)

/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("%f\n",area);}在C程序的设计过程中,需要使用复合语句的地方必须使用复合语句的形式,否则程序在语法上可能检查不出任何错误,但程序运行的结果与程序设计者的期望会相

去甚远。例如,如果将例2.5相关程序段描述为如下形式:if(a+b>c&&a+c>b&&b+c>a)/*满足三角形条件时求其面积*/s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c))

;printf("%f\n",area);双分支结构及其应用双分支结构的形式:if(expression)sentence1;elsesentence2;2.2.3if_else语句与程序的双分支结构注意

:①作为条件的表达式可以是任何可以求出0值或非0值的表达式。②if结构或else结构后语句部分都可以是C语言的任何合法语句。双分支结构及其应用exps1s2yn语句的执行过程:先判断表达式的值,若表达式的值为真(表达式的值不为0),则执行语句1,然后执行if结构的后续语句;否则,执行语句2,然

后执行if结构的后续语句。双分支结构及其应用例2-6求任意输入的3个整数中的最大数。条件运算符与条件表达式及其应用2.2.4条件运算符与条件表达式C语言中,若if—else语句结构中的语句部分满足下列两个条件:①无论表示条件的表达式取何值(真或假),语句部分都是一句简单的赋值语句。②两

条赋值语句都是为同一个变量赋值。则,可以使用C语言中提供的条件运算符代替这种if~else结构。条件运算符与条件表达式及其应用条件运算符是C语言中惟一的一个三元运算符,使用条件运算符构成的表达式称为条件表达式。exp1?exp2:exp31)条

件表达式一般形式如下:2)条件表达式的执行过程:首先计算表达式exp1的值,若exp1的值为非0(真),则计算出表达式exp2的值作为整个条件表达式的值;若exp1的值为0(假),则计算出表达式exp3的值作为整个条件表达式的值。条

件运算符与条件表达式及其应用条件运算符的优先级别高于赋值运算符,但低于关系运算符和算术运算符。条件运算符的结合方向为右结合性,例如有如下形式的条件表达式:a>b?a:c>d?c:d可以看出,在数据对象c>d(

关系表达式)的两边具有同级的条件运算符(?:),由于条件运算符的结合性为右结合,数据对象c>d先与其右边的的条件运算符结合,即先计算c>d?c:d,所以整个条件表达式的计算过程与表达式a>b?a:(c>d?c:d)的计算过程相同。条件运算符与条件表达式及其应用例

2-7从键盘上输入一个英文字母,若其是大写字母则转换为小写字母输出;否则转换为大写字母输出。在上面程序中,表达式ch>=„A‟&&ch<=„Z‟?ch+„a‟-„A‟:ch-(„a‟-„A‟)是一个条件表达式,其中ch>=„A‟&&ch<=„Z‟用于判断字

符变量的值是否在大写字母范围之内,若是大写字母则用ch+„a‟-„A‟的结果修改变量ch的内容,否则用ch-(„a‟-„A‟)修改变量ch的内容。在ASCII码表中,大写字母和小写字母分别是连续排放的,

表达式‘a‟-„A‟表示了大小写字母序列中对应字母的间隔距离。程序中用于转换字母的语句也可以写为:ch=ch>='A'&&ch<='Z'?ch+32:ch-32;多分支结构及其应用2.2.5if语句的嵌套与程序的多分支结构if结构或者else结构的语

句部分又是一个另外一个if结构,称为if语句的嵌套。在C程序设计中,if语句的嵌套结构用于解决在若干种相关情况中选择一种进行处理的问题。例如,在一个二分支if语句的两个语句部分分别嵌入了一个二分支if语句的形式为

:if(exp1)if(exp2)sentence1;elsesentence2;elseif(exp3)sentence3;elsesentence4;多分支结构及其应用例2-8公司按照销售人员收到的订单金额数量评定等级,订单总金额超过一万的为A等,5000~999

9为B等,2500~4999为C等,2500以下为D等。编制程序对输入的订单总金额数判定等级。多分支结构及其应用当被嵌套的if结构均被嵌套在else的语句部分时,形成了一种称为else_if的多分支选择结构,这是if_else多重嵌套的变形。其一般形式为:if(exp1)s

entence1;elseif(exp2)sentence2;elseif(exp3)sentence3;…elseif(expN)sentenceN;elsesentenceN+1;多分支结构及其应用注意:在这种特殊的else—if结构中,表示条件的表达式是相

互排斥的,执行该结构时控制流程从exp1开始判断,一旦有一个表达式的值为非0(真)时,就执行与之匹配的语句,然后退出整个选择结构;如果所有表示条件的表达式值均为0(假),则在执行语句sentenceN+1后退出整个选择结构;如果当所有

的条件均为假时不需要进行任何操作,则最后的一个else和语句sentenceN+1可以缺省。嵌套的else—if结构执行流程如图2.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描述了两种情况下程序的执行情况。其中:例2.10程序执行的结果为:a=-1,b=

10,例2.11程序执行的结果为:a=-1,b=11。例2-10else与if配对原则示例。例2-11else与if配对原则示例(使用复合语句改变程序结构)switch语句与多分支结构及其应用2.2.6switch语句与程序的多分支结

构C语言中可以使用switch语句结构实现对多分支选择结构情况的直接处理。1)switch语句结构的一般形式如下:switch(expession){caseconstand1:sentences1;break;caseconstand2:sentences2;br

eak;…caseconstandN:sentencesN;break;default:sentencesN+1}switch语句与多分支结构及其应用2)执行过程:首先,对作为条件的表达式(expression)求值;然后,在语句结构的花括号内从上至下查找所

有的case分支,当找到与条件表达式值相匹配的case时,将其作为控制流程执行的入口,并从此处开始执行相应的语句段,直到遇到break语句或者是switch语句结构的右花括号“}”为止。switch(number){case1:s

tatement1;case2:statement2;case3:statement3;default:statement4;}statement5;?2switch语句与多分支结构及其应用switch语句与多分支结构及其应用①作为条件的表达式expression的值必须是有序型

的,即只能是整型、字符型、枚举型三者之一。②语句段sentences可以是单条语句,也可以是多条语句,但这多条语句并不是复合语句,不需要使用花括号{}。③语句段sentences中的语句可以使任意合法的C语句。④结构中的常数值应与表示条件的表达式

值对应一致,且各常数的值不能相同。⑤结构中的break语句和default可选项可根据需要确定是否选用。3)使用switch语句结构时应注意的问题:switch语句与多分支结构及其应用例2-12从键盘上输入一个字符,判断它是数字、空格还是其它键;若是数字,还要求

显示出是哪一个数字。在语句段中包含了switch语句,称为switch语句的嵌套。对于内嵌的switch结构处理方法与单层switch结构处理方法相同,需要注意的是:当从内嵌的switch结构中退出(执行中遇到了内嵌swithc结构中的break语

句或执行到了内嵌switch语句体的右边花括号)时,只是退出内嵌的switch结构,而不是退出整个switch结构,例2.13程序展示了这种情况。例2-13swithc结构的嵌套示例。switch语句与多分支结构及其应用4)if和swit

ch的比较多分支结构程序设计中:if语句结构的嵌套可以解决任何条件下的多分支问题;对于switch语句结构,则要求条件是在某个范围内的一些离散的等值点(描述为:与什么相匹配,就做什么)。在实际的程序设计过程中,可以使用switch语句结构解决的

问题,一定也可以用if语句结构的嵌套来解决;但用if语句结构的嵌套可以解决得问题,使用switch语句结构就不一定能够解决。C程序的控制结构C程序的控制结构概述C语言中的关系运算和逻辑运算分支结构及其应用循环结构及其应用其他简单控制结构C语言控制结构应用举例C语言的循环结构及

其应用2.3循环程序结构在实际问题中经常会遇到许多具有规律性的重复计算处理问题,在处理此类问题的程序中就需要将某些语句或语句组重复执行多次。程序设计中,一组被重复执行的语句称之为循环体,每一次执行完循环体后都必须根据某种条件的判断决定是继续

循环,还是停止循环;决定所依据的条件称之为循环条件。这种由重复执行的语句或语句组,以及循环条件的判断所构成的程序结构就称为循环结构。循环结构是结构化程序设计的三种基本结构之一,是构成各种复杂程序的基本构造单元。在C语言中提供了三种用以实现程序循环结构的语句

,它们是:while语句、do_while语句和for语句。while型循环结构及其应用2.3.1while型循环结构1)while型循环控制结构的一般形式为:while(exp)Loop-Body2)while型循环结构的执行过程:首先计算作为判断条

件的表达式exp的值;对表达式exp的值进行判断,若条件表达式的值为非0(真),则执行一次循环体Loop-Body;然后再一次计算条件表达式exp的值,若计算结果仍为非0(真),再一次执行循环体。重复上述过程,直到某次

计算出的条件表达式值为0(假)时,则退出循环结构;控制流程转到该循环结构之后的语句。while循环控制结构的执行过程如图2-4所示。while型循环结构及其应用3)使用while循环结构时需要注意以下几点:①由于整个结构的执行过程是先判断

、后执行,因而循环体有可能一次都不执行。②在循环结构的控制部分中,如果表示条件的表达式是一个非0值常量表达式,则构成了死循环。例如:while(1)Loop-BodyC程序设计中,如果不是有意造成死循环,则在while循环结

构的循环体内必须有能够改变循环控制条件的语句存在。③循环结构的循环体可以是一条语句、一个复合语句、空语句等任意合法的C语句。例2-14使用while循环控制结构求的值。while型循环结构及其应用在例2.14程序中,循环控制变量n从初值1开始,在循环结构的执行过

程中通过循环体中的表达式语句n++;修改循环控制变量,使其逐渐趋近于100。循环结构中的循环体是由两条C语句组成的,所以需要使用复合语句的形式。当然也可以通过语句的组合使得循环体由一条C语句构成,这样

就不需要使用复合语句形式,上面程序中的循环结构可以改写为如下形式:while(n<=100)sum+=i++;在程序中还需要注意变量sum的初值问题,由于变量sum用于存放和数,所以其初值必须从某一固定值开始。一般意义下,用于

存放和数、计数等目的的变量初始值均应为0值。do_while型循环结构及其应用2.3.2do_while型循环结构1)do—while型循环控制结构的一般形式为:do{Loop-Body}while(exp);2)do—while型循环结构的执行过程:首先执行一次循环体Loop-Body;然后计算

作为判断条件的表达式exp的值;对表达式exp的值进行判断,若表达式的值为非0(真),则执行一次循环体;执行完循环体后再一次计算条件表达式的值,若计算结果仍为非0(真),再一次执行循环体。重复上述过程,直到某次计算出的条件表达式值为0(假)时,则退出循环结构;控制流程转到该循环结构之后

的语句。Do_while循环控制结构的执行过程如图2.10所示。do_while型循环结构及其应用3)在使用do_while循环结构时需要注意以下几点:①由于整个结构的执行过程是先执行、后判断,所以循环结构中的循环体至少被执行一次。②在循环

结构的控制部分中,如果表示条件的表达式是一个非0值常量表达式,则构成了死循环。例如:do{Loop-Body}while(1);C程序设计中,如果不是有意造成死循环,则在do_while循环结构的循环体内必须有能改变循环控制条件的语句存在。③循环结构的循环体可以是一

条语句、一个复合语句、空语句等任意合法的C语句。do_while型循环结构及其应用例2-15使用do_while循环控制结构求的值。例2-16编程序实现功能:将一个整数的各位数字颠倒后输出。for型循环结构及其应用2.3.3for型循环结构for语句构成的循环是C语言中提供的使用最为灵活、适

应范围最广的循环结构,它不仅可以用于循环次数已确定的情况,而且也可以用于循环次数不确定但能给出循环结束条件的循环。1)for循环结构的一般形式为:for(exp1;exp2;exp3)Loop-Body其中,括号内的三

个表达式称为循环控制表达式,exp1的作用是为循环控制变量赋初值或者为循环体中的其他数据对象赋初值,exp2的作用是作为条件用于控制循环的执行,exp3的主要作用是对循环控制变量进行修改,三个表达式之间用分号分隔。for型循环结构及其应用2)f

or循环结构的执行过程:首先计算表达式exp1的值对循环控制变量进行初始化,如果有需要也同时对循环体中的其他数据对象进行初始化操作;然后计算作为循环控制条件使用的表达式exp2的值;根据exp2计算的结果决定循环是

否进行,当exp2的值为真(非0)时则执行循环体Loop-Body一次;执行完循环体后,计算表达式exp3的值以修改循环控制变量;然后再次计算表达式exp2的值以确定是否再次执行循环体;反复执行上述过程直到某一次表达式exp2的值为0(假)为止。for循环控制结构的执行过程如

图2.12所示。for型循环结构及其应用3)使用for循环结构时需要注意以下几点:①由于整个结构的执行过程是先判断、后执行,因而循环体有可能一次都不执行。②C语言的for循环控制结构不仅提供在其控制部分的表达式3中

修改循环控制变量的值,而去还允许在for循环的循环体中存在能改变循环控制条件的语句,使用时需特别注意。③循环结构的循环体可以是一条语句、一个复合语句、空语句等任意合法的C语句。④根据程序功能的需要,循环控制部分的三个表达

式分别都可以逗号表达式,这也是逗号表达式最主要的用法之一。⑤根据程序功能的需要,循环控制部分的三个表达式中可以缺省一个、两个、三个,但作为分隔符使用的分号不能缺省。for型循环结构及其应用例2-18编程序实现功能

:判断从键盘输入一个大于2的正整数是否为素数。所谓素数,就是只能被1和自身整除的自然数。根据素数的定义,判断一个正整数m是否为素数最简单的方法就是:将2到m-1之间的每一个整数去除m,若其间有一个能整除m,则m不是素数;若2到m-1之间的所有整数都不能整除m,则m为素数。例2-

17使用for循环控制结构求的值。空语句及其在程序中的使用2.3.4空语句及其在程序中的使用在C语言中,只由分号“;”构成的C语句称为空语句。空语句不进行任何操作(或者称之为进行空操作),在C程序的设计中,程序的某个位置从C语言的语法要求上应该有一个C语句存在,但语义上(即程序的逻辑

功能上)又不需要进行任何操作时,就可以使用空语句来占据这个语句位置以同时满足语法和语义上的需求。空语句及其在程序中的使用例如有如下形式的C程序段:while(getchar()!='\n');该段程序中,当循环条件为真时(即接

收到的字符不是换行符时),程序不进行任何操作(执行空语句后)进入下一次循环过程。该段程序通过这样的方式实现了“反复从键盘上接收输入字符直至换行为止”的语义。例2-19编写程序实现求阶乘的功能,要求循环体用空语句实现。嵌套循环结构及其应用2.3.5循环的嵌套一个循环结构的循环体内又包含另外一个

完整的循环结构,称为循环的嵌套。循环的嵌套层数可以是多层,称为多重循环。在C语言中三种循环结构语句“do....while循环”、“while循环”、“for循环”可以根据需要,任意地互相嵌套,下面是一些常见的循环嵌套

结构:嵌套循环结构及其应用使用多重循环结构时应注意以下几点:①三种循环结构(“while循环”结构、“do~while循环”结构、“for循环”结构)可以相互嵌套。②一般情况下,嵌套结构中的外层循环和内层循环

的循环控制变量不得同名。例2-20编程序输出如下所示由字符构成的图形。例2.20程序是一个双重循环结构,其中外层循环结构控制输出图形的行数。循环体中完成了3件事情:①按照要求输出前导空格,使用了一个内嵌的循环结构完成该功能,注意该内嵌循环结构的控制条件j<5-

i使得其输出的前导空格数会随着外层循环的控制变量值得变化而变化,从而实现每行少输出一个前导空格的要求;②按照要求输出若干规定的字符(本例中通过ch+i-j计算得到),同样使用了一个内嵌的循环结构完成该功能,请注意内嵌内嵌循环结构的控制

条件j<=i的意义;③使用printf("\n");语句实现输出一行字符后的换行功能。嵌套循环结构及其应用例2-21编程序在屏幕上打印出如下所示的乘法九九表。*1234567891122433694481

2165510152025661218243036771421283542498816243240485664991827364554637281C程序的控制结构C程序的控制结构概述C语言中的关系运算和逻辑运算分支结构及其应用循环结构及其应用其他简单控制结构C语言控制结构应用举例其它简

单控制结构及其应用2.4C语言中的其它简单控制结构2.4.1break语句break语句是一条限定转移语句,其一般形式为:break;break语句的使用范围只能在下面两种程序结构之一:①switch语句结构中。②循环控制结构中。break语句的功能:把程序的控制流程从直接包含该brea

k语句的循环控制结构或switch语句结构中转出。其它简单控制结构及其应用C程序中的break语句总是出现在if结构的语句部分,构成如下形式的语句结构形式:if(exp)break;例如,在下面C程序段中,break语句结束了

for循环,使得for循环不是i从1到100循环,而是i从1到10循环。for(i=1;i<=100;i++)/*循环控制结构指定循环100次*/{printf("%d",i);if(i>9)break;}表

2.2中分别给出的是while、for和do…while三种循环结构循环体中包含的break语句执行时控制流程的转向情况。其它简单控制结构及其应用例2-22编制程序实现功能:从键盘输入两个正整数a(a>2)和b,求a与b之间的全部素数。例2-23编程需实现功能:求调和级数中至多少项后的和值大于10

。分析:需要判定数n是否为素数时,可以用2到sqrt(n)之间的所有整数去除n,若其中任意一次能够除尽,则说明n不是素数;否则n是素数。分析:调和级数的第n项形式为:其它简单控制结构及其应用2.4.2continue语句continue语句是一条限定转移语句,其一般形式为

:continue;continue语句的功能:提前结束本次循环体的执行过程而直接进入下一次循环。continue语句只能使用在循环结构的循环体中。C语言的循环结构及其应用C程序中的continue语句总是

出现在if结构的语句部分,构成如下形式的语句结构形式:if(expression)continue;表2.3中分别给出的是while、for和do…while三种循环结构循环体中包含的continue语句执

行时控制流程的转向情况。其它简单控制结构及其应用例2-24编程序实现功能:检测从键盘上输入的以换行符结束的字符流,统计非字母字符的个数。程序通过循环依次检查每一个输入的字符,当字符不是换行符并且是字母时通过执行continue语句提前结束本轮循环(即不执行循环体中的counter+

+;语句);当字符不是换行符并且是不是字母时,条件c>=„A‟&&c<=„Z‟||c>=„a‟&&c<=„z‟不成立,不会执行continue语句,从而程序执行计数器增一的操作counter++;;当遇到换行字符是循环结束并输出变量counter的值。程序的某次执行情况和输出结果如下所示:Inp

utastring:skjdf4623784908%%^*&*(%SDFsdfkCounter=18其它简单控制结构及其应用2.4.3goto语句和标号语句goto语句是无条件转移语句,其一般形式为:goto语句标号;其中:标号语句用标识符加上冒号表示,其定义规则同变量,即由字母、数

字和下划线组成且第一个字符必须是字母或下划线。goto语句的功能:将程序的控制流程无条件地转移到语句标号所指的标号语句处。注意:goto语句的使用范围局限于函数内部,不允许在一个函数中使用goto语句将程序控制转移到本函

数之外。其它简单控制结构及其应用在C程序设计中,使用goto语句和if语句配合也可以构成循环结构,但不提倡使用goto语句来构成循环结构。例如下面循环结构程序的形式:#include<stdio.h>voidmain(){intj=1,sum=0;loop:if(k<=

100)sum+=j;j++;gotoloop;printf(“%d\n”,sum);}在结构化程序设计中,goto语句是一条不常用的语句。其它简单控制结构及其应用在不影响程序的清晰性的原则下,goto语句常用来直接退出

多重循环结构,从而简化程序设计。例如如下的形式:for(…)for(…)for(…){…if(disaster)gotoerror;…}…error:…C程序的控制结构C程序的控制结构概述C语言中的

关系运算和逻辑运算分支结构及其应用循环结构及其应用其他简单控制结构C语言控制结构应用举例C语言控制结构应用举例2.5C语言控制结构应用举例本章的前4节较为详细地讨论了结构化程序设计的基本技术和C语言提供的三种基本程序组成结构,

使用这3种基本结构可以构成许多较为复杂的程序,解决常见的程序设计问题。本小节就程序设计中常见的求最大公约数和最小公倍数问题、穷举方法的程序实现问题和迭代方法的程序实现问题等几个程序设计中典型问题解决过程讨论程序设

计的基本方法。C语言控制结构应用举例2.5.1最大公约数和最小公倍数分析:求两个非负整数m和n(m>n)的最大公倍数可以使用辗转相除法。其算法可以描述为:①m除以n得到余数r(0≤r<n)。②若r=0则算法结束,n为最

大公约数。否则执行步骤③。m←n,n←r,转回到步骤①。③当已知两个非负整数m和n的最大公约数后,求其最小公倍数的算法可以简单描述为:两个正整数之积除以它们的最大公约数。例2-25求两个正整数的最大公约数和最小公倍数。C语言控

制结构应用举例2.5.2穷举思想及程序实现在计算机的应用中,许多问题的解“隐藏”在多个的可能之中。穷举就是对多种可能的情形一一测试,从众多的可能中找出符合条件的(一个或一组)解,或者无解的结论。在一个集合内对集合中的每一个元素进行一一测试的方法称为穷举法。穷举本质上就是在某个特定范围中的查

找,是一种典型的重复型算法,其重复操作(循环体)的核心是对问题的一种可能状态的测试。穷举方法的实现主要依赖于以下两个基本要点:①搜寻可能值的范围如何确定。②被搜寻可能值的判定方法。对于被搜索的可能值,一般都是问题中所要

查找的对象或者是要查找对象应该满足的条件,因而在问题中都会有清晰的描述。但对于搜寻范围,在有些问题是比较确定的,而在另外一些问题则是不确定的。C语言控制结构应用举例例2-26编程序找出所有的“水仙花数”。“水仙花数”是指一个3位数,其各位上

数字的立方之和等于这个数本身。例如153=13+53+33,所以153是“水仙花数”。分析:依题意可以得出,搜寻可能值的范围为100—999;判定方法为各位上数字的立方之和等于被判定数。程序可以依次取出区间[100,999]之间的每一个数,然后将该数分解为3个数字

,按照判定条件判定即可。C语言控制结构应用举例上面求取“水仙花数”的可以称之为分离数据的方法。除此之外还可以使用组合数据的方法求取“水仙花数”。如果用a、b和c分别表示3位数的百位、十位和个位,则该3位数可以表示为:a*100+b*10+c,其中a的变化范围为[1,9]

,b和c的变化范围均为[0,9]。程序只需要依次用a、b和c组合出所有的3位数参加判断即可,使用3重循环控制结构可以得到如下程序。例2-26b编程序找出所有的“水仙花数”。解法2。C语言控制结构应用举例例2-27搬砖问题:36块砖,3

6人搬,男搬4,女搬3,两个小孩抬1砖。要求将所有的砖一次搬完,问需要男、女、小孩各多少?设男、女、小孩的数量分别为man,woman,child,依题意可以得出被搜寻值的判定方法。判定方法表示为:4*man+3*woman+0.5*child=

36。对于搜寻的范围,按照常识简单划分,man,woman,child都应该为整数,而且男人的数量应该少于9人(36/4),女人的数量应该少于12人(36/3),当男人数量和女人数量一定的情况下小孩的数量可以用算式child=36-man-woman&&chi

ld%2==0来确定。由此可以简单地确定搜寻范围表示如下:man:1-8;woman:1-11;child=36-man-woman&&child%2==0C语言控制结构应用举例在程序中,用表达式(4*man+3*woman+child/2.0)==36来保证小孩的数据一定是偶数,因为在

该表达式中,(4*man+3*woman+child/2.0)的一定是实数,比较运算时将右边的36自动转换为实数(36.0)进行比较,如果相等关系成立则表示左边表达式值的小数部分为0,从而保证了小孩数一定是偶数。程序执行

的输出结果为:man=3woman=3child=30C语言控制结构应用举例例2-28爱因斯坦阶梯问题。设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;只有每步跨7阶时,正好

到阶梯顶。问共有多少步阶梯?设用变量ladder表示阶梯数,依题意可以得出:该问题中搜寻的是满足条件的最小阶梯数,虽然搜寻的范围不能用某种形式表示出来,但可以确定其应在找到第一个满足条件的阶梯数时停止搜寻;判断条件为ladder%2==1、ladder%3==2、la

dder%5==4、ladder%6==5和ladder%7==0同时成立。C语言控制结构应用举例程序中,阶梯数从0开始,只要ladder%2==1、ladder%3==2、ladder%5==4、ladder%6==5和ladder%7==0有一个不成立则将阶梯数

增值进行下一次判断(请读者自行分析程序中条件的书写方法),直到找到合适答案为止,程序的运行结果为:flightofstairsis:119程序虽然能够实现题设的功能,但程序的效率并不高,程序中并没有充分利用问题所给出的条件。关注:①在问题中有条件:每步

跨7阶时,正好到阶梯顶。这说明阶梯数应该是7的倍数,所以ladder的初值可以从7开始,每次递增7使得阶梯数始终保持是7的倍数,同时在循环控制条件中去掉相应条件ladder%7!=0;②在问题中有条件:每步跨2阶,最后余1阶。这说明阶梯数应该是奇数,所以ladder的初值可以从7

开始,每次递增14使得阶梯数始终保持是7的倍数并且同时是一个奇数,同时在循环控制条件中再去掉相应条件ladder%2!=1。最后程序可以修改为“例2.28b”所示:例2-28b爱因斯坦阶梯问题。解法2。C语言控制结构应用举例2.5.3迭代思想及程序实现迭代就是一个不断地由变量的旧值按照一定的规

律推出变量的新值的过程,迭代亦称为递推。迭代一般与三个因素有关,它们是:①初始值,②迭代公式,③迭代结束条件(迭代次数)。例2-29裴波那契(Fibonacci)数列问题。裴波那契数列的前两个数据项都是1,从第3个数据项开始,其后的每一个数据项都是其前面的两个数据项之和。例

题分析:设f1、f2和f3表示相邻的3个裴波那契数据项,据题意有f1、f2的初始值为1,即迭代的初始条件为:f1=f2=1;迭代的公式为:f3=f1+f2。有初始条件和迭代公式只能描述前3项之间的关系,为了反复使用迭代公式,可以在每一

个数据项求出后将f1、f2和f3顺次向后移动一个数据项,即将f2的值赋给f1,f3的值赋给f2,从而构成如下的迭代语句序列:f3=f1+f2;、f1=f2;、f2=f3;,反复使用该语句序列就能够求出

所要求的裴波那契数列。C语言控制结构应用举例2.5.4一元高阶方程的迭代解法(*)用迭代法求一元高阶方程f(x)=0的解,就是要把方程f(x)=0改写为一种迭代形式:x=ф(x);选择适当的初值x0,通过重复迭代构

造出一个序列:x0,x1,x2,x3,…,xn,…;若函数在求解区间内连续,且这个数列收敛,即存在极限,那么该极限值就是方程f(x)=0的一个解。在构成求解序列时,不可能重复无限次,重复的次数应由指定的精确度(或

误差)决定。当误差小于给定值时,便认为所得到的解足够精确了,迭代过程结束。C语言控制结构应用举例1.牛顿迭代法求解一元高阶方程牛顿迭代法又称为牛顿切线法,其基本思想如图2.14所示。设xk是方程f(x)=0的精确解x*附近的一个猜测解,过点Pk(xk,f(xk))作f(x)的切线。该切线方程为:

y=f(xk)+f'(xk)*(x-xk)切线与X轴的交点是方程:f(xk)+f„(xk)*(x-xk)=0的解,为:xk+1=xk-f(xk)/f„(xk),该式既是牛顿迭代法求解一元高阶方程迭代公式。从数学上可以证明,若猜测解xk取在单根x*的附近,则它

恒收敛。经过有限次迭代后,便可以求得符合误差要求的近似根。C语言控制结构应用举例例2-30用牛顿迭代法求方程x4-4x3+6x2-8x-8=0在0附近的根。程序的运行结果为:root=-0.602272。2

.二分迭代法求解一元高阶方程C语言控制结构应用举例设有一元高阶方程表示为:f(x)=0,则用二分迭代法求高阶方程在某个单根区间的实根的步骤描述如下:①输入所求区间的两个端点值即初值x1和x2,所取求根区间必须保证f(x1)*f(x2)<0;②计算出用x1和x

2表示端点的求根区间中点值:x=(x1+x2)/2;③计算x1、x和x2三点处的函数值f(x1)、f(x2)和f(x)。此时若f(x)=0,则算法结束,x就是所求的一个实根。否则,转步骤④;④若f(x)和f(x1)同号,令x1=x,否则

,令x2=x,转步骤第②。如图2.15所示:C语言控制结构应用举例应该注意的是:当y=f(x)为0时,x就是方程的根。但是,f(x)是一个实数,在计算机中表示一个实数的精度有限,因此判断一个实数是否等于0时一般不用“f(x)=0”,而用“|f(x)|≤10-k”来代替f

(x)是否为0的判断,如果f(x)满足这个条件,则x即为所求方程的根(近似根)。这个10-k称为精度,所以求高次方程的根应该给出精度要求。例2-31用二分迭代法求方程2x3-4x2+3x-6=0在(-10,10)之间的根。程序的运行结果为:root=2.000000。割线法亦称为

弦截法,设有一元高阶方程表示为:f(x)=0,则用割线法求高阶方程在某个单根区间的实根的步骤描述如下:①输入所求区间的两个端点值即初值x1和x2,所取求根区间必须保证f(x1)*f(x2)<0。②连接f(x1)和f(x2)两点,连线交X轴于x0,x0的坐标方程为:③若f(x0

)与f(x1)同号,则根必在(x0,x2)区间内,此时将x0作为新的x1;反之则表示根在(x1,x0)之间,此时将x0作为新的x2。④反复执行步骤②和③,直到所求根满足要求为止。C语言控制结构应用举例3.割线法求解一元高阶方程C语言控制

结构应用举例C语言控制结构应用举例例2-32用割线法求方程2x3-4x2+3x-6=0在(-10,10)之间的根。程序的运行结果为:root=2.000000

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?