C语言程序设计 课件 梁伟 第3、4章 顺序与分支结构、循环结构_第1页
C语言程序设计 课件 梁伟 第3、4章 顺序与分支结构、循环结构_第2页
C语言程序设计 课件 梁伟 第3、4章 顺序与分支结构、循环结构_第3页
C语言程序设计 课件 梁伟 第3、4章 顺序与分支结构、循环结构_第4页
C语言程序设计 课件 梁伟 第3、4章 顺序与分支结构、循环结构_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章顺序与分支结构3.1程序结构框图3.2顺序结构3.3二分支结构3.4多分支结构3.5分支结构的综合示例本章小结

3.1程序结构框图

3.1.1算法的表示程序设计的关键是算法。那什么是算法?算法就是求解实际问题的步骤。有了正确有效的算法,就可以用计算机语言编写程序,解决实际问题。算法可采用自然语言、流程图或N-S图来描述。

1.自然语言描述

例3-1从键盘输入3个数,按由小到大的顺序输出。

解题思路从键盘输入的3个数值必须用3个变量来保存,设3个变量为x、y、z。3个数按由小到大的顺序输出,则必须将数据两两比较,在比较的过程中,始终保持变量x最小,变量z的值最大,如果不满足此条件,则将比较的两变量互相交换其值。设中间变量为t。

算法步骤如下:

①输入3个数,其值分别赋给3个变量x、y、z;

② x、y进行比较,如果x大于y,通过t交换x、y的值;

③ x、z进行比较,如果x大于z,通过t交换x、z的值;

④ y、z进行比较,如果y大于z,通过t交换y、z的值;

⑤按x、y、z的顺序输出其变量的值。

2.流程图

流程图是一种传统的算法描述方法,它用几种不同的几何图来代表不同性质的操作,用流程线来指示算法的执行方向。用流程图表示的算法简单直观,容易转化成相应的语言

程序。

图3-1所示为国际标准化组织(InternationalStandardOrganization,ISO)规定的一些常用流程图符号。这些符号已为各国普遍采用。图3-1常用的流程图符号

例3-2将例3-1中的算法用流程图表示。

流程图如图3-2所示。图3-2例3-1的算法流程图

3. N-S图

N-S图是程序算法的另一种图形表示,它是由美国人I.Nassi和B.Shneiderman共同提出来的,其依据是:因为任何算法都是由顺序结构、分支结构、循环结构这3种结构所组成的,所以可以不需要各结构之间的流程线,全部算法写在一个矩形框内,矩形框内由顺序、分支、循环3种结构组成。三种基本结构的N-S图如图3-3所示。图3-33种基本结构的N-S图

例3-3将例3-1中的算法用N-S图表示。

N-S图如图3-4所示。图3-4例3-1的N-S图

3.1.2结构化程序设计

结构化程序设计的基本思想是:任何程序都由3种基本结构组成,这3种基本结构如下:

(1)顺序结构:按照语句出现的先后顺序依次执行的。

(2)分支结构:根据给定条件进行判断,选择其中的一个分支执行。

(3)循环结构:根据某一个条件成立与否来决定是否重复执行某一部分操作,反复执行的部分称为循环体。

循环结构有以下两种类型:

①当型(while型)循环结构:当条件满足时,重复执行某一操作。

②直到型循环结构:先执行循环体操作,再判断条件,如果条件满足,则继续执行循环体操作,直到条件不满足时,才退出循环,继续执行循环体后面的语句。

由上面3种基本结构,可以看出结构化程序设计具有以下特点:

①只有一个入口和一个出口;

②程序中不能有无穷循环(死循环);

③程序中不能有在任何条件下都执行不到的语句(死语句)。

3.1.3复合语句

将若干语句用一对花括号括起来的语句,称为复合语句。如

{

y=x++;

printf("%d%d",x,y);

}

复合语句在逻辑上相当于一个单一语句,在流程控制结构,如if结构、for结构、while结构中经常用到。复合语句在书写时采用向右缩进的方式,语句组相对于花括号向右缩进一个制表位。

3.2顺序结构

顺序结构是最基本、最简单的程序结构。顺序结构中,各语句按照代码的书写顺序,自上而下地逐条执行,没有任何条件判断或循环操作,每个语句都被执行一遍,且只执行一次。

例3-4已知长方形的长和宽,计算其周长和面积。

解题思路输入长方形的长和宽并用两个变量保存,设两个变量分别为length、width,然后利用公式计算长方形的周长和面积,周长和面积也分别用两个变量perimeter、area

表示。

算法步骤如下:

(1)输入两个数,其值分别赋给length、width;

(2)根据公式计算长方形的周长,并将其值赋给perimeter;

(3)根据公式计算长方形的面积,并将其值赋给area;

(4)输出perimeter和area。

3.3二分支结构

二分支结构就是判定给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。用if语句可以构成分支结构,if语句可以根据不同的条件,选择不同的执行语句。先来看这样一个问题,计算分段函数:

求解问题的流程如下:

(1)输入x;

(2)如果x≥0,则y=x - 5;否则y=5/x;

(3)输出y的值。

要完成该问题的计算,显然程序的流程必须由x的值确定。像这样的流程(根据某个变量或表达式的值做出判定,以决定执行某个模块和跳过某个模块),就需要选择语句。

3.3.1if-else二分支选择语句

若表达式为非0(即条件判断为真),则执行if后面的语句1,而不执行语句2;否则(即条件判断为假),越过语句1,执行else后面的语句2。if-else的N-S图如图3-5所示。其中的语句1、语句2都是单一的逻辑语句,若语句1、语句2不是单一的逻辑语句,则必须用花括号括起来形成复合语句。

在条件控制语句中,人们习惯把圆括号内的表达式叫作条件,其中if和else是关键字。

图3-5if-else的N-S图

使用if-else语句时的注意事项如下:

(1) if语句中的条件一般是条件表达式或逻辑表达式,它们必须放在圆括号内。

(2)因为C语言中没有逻辑型变量,这里只是测试表达式的值是否为0,所以可以将

if(表达式!=0)

简化为

if(表达式)

(3) if或else后的语句可以是一个简单语句,也可以是由几个简单语句组成的复合语句。若是复合语句,则必须用花括号括起来。

(4)要注意赋值运算符(=)与关系运算符(==)的区别。

几种常见的if表达式的写法如下:

① if(!a):判断变量a的值是否为0。

② if(x>=0&&x<=10):当x位于区间[0,10]上,逻辑表达式为真。

③ if(x>0,y>10):括号内为逗号表达式,故最后一个表达式(y>10)的值是整个条件表达式的值。若表达式y>10成立,则if的条件为真。

④ if(x>0||y<10):只要一个关系表达式成立,if的条件为真。

例3-5求两个整数x、y中较大的数,并赋给变量max。

解题思路x、y值由输入函数输入,根据其大小进行判断,较大的数赋给max变量。其N-S图如图3-6所示。图3-6例3-5的N-S图

3.3.2不平衡if结构

缺少else分支的二分支结构,称为不平衡if结构。不平衡if结构的基本形式如下:

if(表达式)语句;

若表达式为非0(即条件判断为“真”),则执行if后面的语句;否则(即条件判断为“假”),顺序执行if语句的下一条语句。不平衡if结构的N-S图如图3-7所示。

图3-7不平衡if结构的N-S图

例3-6从键盘输入3个整数,按由小到大的顺序输出。

解题思路输入3个整数x、y、z,两两比较,始终保持x的值最小,z的值最大,不满足此条件,则将其值进行交换。N-S图如图3-8所示。图3-8例3-6的N-S图

例3-7求一元二次方程ax2 + bx + c = 0(a不为0)的解。

解题思路对于任意输入的3个数a、b、c(a不等于0),有这样3种可能:

(1)若b2 - 4ac>0,则方程有两个不相等的实根。

(2)若b2 - 4ac=0,则方程有两个相等的实根。

(3)若b2 - 4ac<0,则方程有两个复数根。

3.3.3if语句的嵌套

C语言允许if语句嵌套使用。通常,if语句的嵌套有两种结构:不平衡if嵌套结构和多分支嵌套结构。本小节介绍不平衡if嵌套结构的内容,多分支嵌套结构的内容将在后面小节介绍。

在这种形式的if嵌套结构中,若表达式1为“假”,则跳过花括号中的所有语句,去执行该复合语句下面的语句;若表达式1为“真”,则进一步去判断表达式11,若表达式11也为“真”,则执行语句11,然后越过else子句,去执行该复合语句下面的语句,若表达式11为“假”,则跳过语句11,而去执行语句12,然后去执行该复合语句下面的语句。

其执行流程的N-S图如图3-9所示。

图3-9不平衡if嵌套结构的N-S图

例3-8从键盘接收一整数x,判断x是否含有因子5的正整数,如有,则输出“YES”,否则输出“NO”。

3.4多分支结构

3.4.1if-else多分支语句二分支if语句中,若二分支中的语句1或语句2也是一个分支结构,则整个结构称为分支嵌套结构。采用多层嵌套可以实现多分支结构。

分支结构中,若表达式1的值不为0,则执行语句1,然后越过所有的else子句,去执行整个if语句的下一个语句。若表达式1的值为0,则判断表达式2的值是否为0,若其值不为0,则执行语句2,然后越过它下面的所有else子句,去执行整个if语句下的语句;若表达式2的值为0,则再判断下一个if语句的条件表达式。若表达式1,表达式2,…,表达式n的结果都为0,则执行语句n+1。其执行流程如图3-12所示。

图3-10多分支嵌套结构的流程

例3-9计算下列分段函数的值。

N-S图如图3-11所示。

图3-11例3-9的算法N-S图

在if嵌套语句中,应注意以下两点。

(1) else语句要有if语句与之匹配,在同一个模块内,else总是与其前面最近的、没有匹配过的if语句相匹配。

(2) if后的表达式可以是关系表达式、逻辑表达式。if和else关键字后的语句可以是单语句,也可以是复合语句,这与单if语句相同。

例3-10从键盘输入一学生成绩,判断学生成绩等级。如果成绩在90~100,等级为“A”;成绩在80~89,等级为“B”;成绩在70~79,等级为“C”;成绩在60~69,等级为“D”;成绩小于60,等级为“E”。

3.4.2switch语句

switch语句将一个表达式的值与多个常量表达式的值一一进行比较,如果相等,则与之相应的语句便会被执行。

switch语句的一般形式如下:

其中,语句序列称为switch语句的子语句;switch语句中的表达式称为开关控制表达式。方括号内的语句可缺省。

switch语句的执行过程如下:

(1)计算switch语句后面表达式的值。

(2)逐个比较表达式的值与case后面常量表达式的值是否相等。

(3)当表达式的值与常量表达式i的值相等时,就转去执行语句序列i的各个语句,若语句序列i后有break语句,则终止switch语句,继续执行整个switch语句后的下一条语句;当语句序列i后无break语句,则会顺序执行语句序列i+1,i+2,…,直到遇到break语句或语句序列n+1为止,然后继续执行整个switch语句后的下一条语句。如果没有一个常量表达式的值与switch语句表达式的值相等,则执行语句n+1后,继续执行整个switch语句后的下一条语句。

在不考虑break语句的情况下,switch语句一般形式的执行流程如图3-12所示。图3-12switch语句一般形式的执行流程图

使用switch语句注意事项如下:

(1) switch后面的表达式的值类型和常量表达式的值类型必须一致,且只能是整型、字符型或枚举型。

(2)当表达式的值与某个case中的常量表达式的值进行匹配,若相等时,就执行相应的case后的语句序列,直到遇到break语句或到达switch语句末尾(无break语句,则入口后的语句序列顺序执行)。若匹配不成功,则执行default后的语句。default语句是可省的,如没有default语句,所有的匹配不成功,则不执行case中任何语句序列,程序继续执行整个switch语句后的下一条语句。

(3)多个连续的case语句可以共用一个语句序列。

(4) case后的常量表达式的值不能相等。

(5) break的作用是改变程序在switch结构中的执行流程,将程序流程跳出switch语句,转到整个switch语句后的下一条语句去执行。

(6) switch语句中允许嵌套switch语句,这称为switch嵌套结构。

例3-11用switch语句完成从键盘输入一学生成绩,判断学生成绩等级。如果成绩在90~100分,等级为A;成绩在80~89分,等级为B;成绩在70~79分,等级为C;成绩在60~69分,等级为D;成绩小于60分,等级为E。

3.5分支结构的综合示例

例3-12从键盘输入3个整数,按从小到大的顺序输出。N-S图如图3-13所示。

图3-13例3-12的算法N-S图

例3-13计算下面分段函数的值。

下面使用4种不同的方法实现上述计算,以展现C语言多分支结构的风格。

(1)使用不嵌套的if语句编程。

(2)使用嵌套的if语句编程。

(3)使用if-else形式编程。

(4)使用switch语句编程。

本章小结

C语言中,顺序结构和分支结构是两大基本结构。顺序结构可确保程序按照既定顺序执行每条指令,是程序设计的基础。本章首先介绍了程序结构框图,如流程图和N-S图,然后介绍了顺序结构,最后介绍了分支结构。分支结构中常用的if语句和switch语句,可使程序能够根据不同条件选择执行路径。if语句灵活,适用于处理复杂的条件判断,而switch语句在处理多个简单条件时更为高效。将顺序结构和分支结构两者结合使用,是C语言程序员必须掌握的核心技能。第4章循环结构4.1循环结构的要素4.2循环语句4.3循环嵌套4.4流程转移控制语句4.5循环结构的综合示例本章小结

4.1循环结构的要素

循环结构就是用来处理需要重复处理的问题的,所以循环结构又称为重复结构。循环结构有3个要素:循环控制变量、循环体和循环条件。

1.循环控制变量

循环控制变量通常用于控制循环的次数和进程。它在循环开始前被初始化,在循环过程中会发生变化,并且循环条件通常会依赖于这个变量的值。在for循环中,控制变量的初始化、条件检查和变量更新通常在循环语句的头部明确给出。

2.循环体

循环体包含了每次循环迭代时需要执行的代码块。只要循环条件为真,循环体内的代码就会被执行。循环体可以是一个简单的语句或一个复杂的代码块,包括更多的控制流语句,如条件判断、嵌套循环等。

3.循环条件

循环条件是一个逻辑表达式,其结果决定了循环是否继续执行。在每次循环迭代开始前(while和for循环)或结束时(do-while循环)检查这个条件。如果条件为真(即表达式结果非0),则循环继续执行;如果条件为假(即表达式结果为0),则循环结束,控制流转移到循环结构后的下一条语句。

循环有两种:无限循环和有限循环。无限循环,如地球绕太阳的转动或昼夜的连续交替,理论上永无止境。有限循环,在满足特定条件后便会停止,比如在处理完一个班级里所有50名学生的绩点计算之后循环停止。

循环结构是结构化程序设计的基本结构之一,它和顺序结构、分支结构共同作为各种复杂程序的基本构造单元。因此,熟练掌握循环结构的概念及使用方法是程序设计最基本的要求。

4.2循环语句

循环语句是一种在编程中使用的语句,它允许程序重复执行一段代码多次,直到满足某个条件为止。C语言中提供for、while、do-while这三种循环控制语句来实现循环结构。

4.2.1for语句

1. for语句的一般形式

for语句的一般形式为

for(表达式1;表达式2;表达式3)

循环体;

循环体;

其中:表达式1可以是赋值表达式、逗号表达式或函数调用表达式,它是循环控制的初始化部分,为循环中所使用的变量赋初值,即为循环作准备;表达式2通常是关系表达式或逻辑表达式,它是循环条件,循环体反复执行多次,必须在循环条件满足的情况下(即表达式2的值非0)才能进行,否则循环终止;表达式3是赋值表达式或算术表达式,它使循环变量的值或循环条件得到修改,使循环只能进行有限次;循环体是循环结构中反复执行的语句,它可以是空语句(单独用分号表示的一条语句)、单语句或复合语句。

2. for语句的执行过程

for语句的执行过程如下:

(1)计算表达式1。

(2)判断表达式2,若其值非0,则执行第(3)步;若为0,则执行第(6)步。

(3)执行循环体。

(4)计算表达式3。

(5)跳转到第(2)步继续执行。

(6)终止循环,执行for语句后的下一条语句。

for语句的执行流程如图4-1所示。

图4-1for语句的执行流程

3. for语句的说明

for语句的使用说明如下:

(1)在for语句中3个表达式都可以缺省,但其中的两个分号不可省。例如,下面的语句是正确的:

for(;;)

①若表达式1缺省,则必须将表达式1作为语句安排在for语句之前。如例4-1中的语句

for(s=0,n=1;n<=100;n++)

可改成

s=0;

n=1;

for(;n<=100;n++)

②若表达式2缺省,则系统默认循环条件为真(非0值),此时,如果不在循环体中加其他语句进行控制,循环将无限制进行下去,即出现死循环。如将例4-1中的循环语句改成

for(s=0,n=1;;n++)

s=s+n;

则会出现死循环。

③若表达式3缺省,可将它的语句放在循环体的最后。如可将例4-1中的循环语句改成

for(s=0,n=1;n<=100;)

{

s=s+n;

n++;

}

(2)若循环体中有多个语句,则循环体一定要用花括号括起来,以复合语句形式出现,且循环体中的变量在每一次循环过程中其值一般来说是不相同的。

如例4-1中,第一次循环,s的值是1,n的值是1;第二次循环,s的值是3,n的值是2。

(3)循环体可以为空语句,但必须有分号(即循环为空语句)。

(4)要注意循环终止后循环变量的值,一般来讲该值是循环变量最后一次循环值加步长。如例4-1中循环变量终止后n的值为100+1,即101。

4.程序举例

例4-2判断正整数x是否为素数。

解题思路素数是指除1和本身之外不能被其他数整除的数。设一个标志性变量flag,如果其值等于0,则x不为素数;如果其值等于1,则x为素数。先设flag = 1(即假设x为素数),另设变量n由2变化到x - 1,接着判断x是否能被n整除,只要有一个n值能使x被整除,则令flag=0。

N-S图如图4-2所示图4-2例4-2的N-S图

例4-3从键盘输入任意两个正整数x和y,求出这两数的最大公因子。

解题思路首先输入两个正整数,判断其大小,大的数放在x中,小的数放在y中。其次设r为余数,x与y的关系可写为x = ky + r,由于x与y有公因子f,因此r中必有公因子f。这样求大的数x与y的公因子,就可以转化为求小的数y与r的公因子f。这就是辗转相除法。当r = 0时,y值为最大公因子。

N-S图如图4-3所示,

图4-3例4-3的N-S图

例4-4输出斐波那契数列的前20项之值。

解题思路设f0、f1、f2是数列中的3个数,且有如下关系:f2 = f1 + f0。在循环计算过程中,始终使f1、f0指向两个相加的相邻数,f2始终为新计算出的和值。

4.2.2while语句

1. while语句的一般形式

while语句是一种当型循环语句,即先判断条件,后执行循环体。while语句的一般形式为

while(表达式)

循环体;

其中:圆括号中的表达式一般是关系表达式、逻辑表达式或算术表达式,运算结果是一个逻辑值,或为真(非0),或为假(0),它是循环控制的条件;循环体是循环反复执行的语句,它可以是空语句、单语句或复合语句。

2. while语句的执行过程

首先计算和判断表达式的值,如果表达式的值为“真”(非0),则执行循环体;然后程序转回去计算和判断表达式的值,当表达式的值为“假”(0)时,终止while循环,继续执行while语句后的下一条语句。

其N-S图如图4-4所示。图4-4while语句的N-S图

3.程序举例

例4-5求10个数(实数)中的最大数。

解题思路设存放最大数的变量为max。先输入第一个数,并将其值赋给max。然后输入第二个数,将其与当前max比较,如果输入的数大于max,则将max更新为当前最大数。接着输入第三个数、第四个数……

N-S图如图4-5所示

图4-5例4-5的算法N-S图

例4-6用while语句求s = 1 + 2 + 3 + … + 100。

解题思路首先s赋初值0,被加数n赋初值1,将n的值(1)累加到s中;然后将n加1后的值(2)累加到s中。这样,n的值不断加1并被累加到s中,直到将100也累加到s中为止,此时s中的值即为所求累加和。

4.2.3do-while语句

1. do-while语句的一般形式

do-while语句的一般形式为

do

{

循环体;

}while(表达式);

2. do-while语句的执行过程

do-while语句的作用是,首先无条件地执行循环体一次(无论表达式的值是否为0),然后计算和判断表达式的值,若表达式的值为“真”(非0),则程序转回去反复执行循环体,直到表达式的值为“假”(0),这时终止do-while语句,继续执行do-while语句后的下一条语句。do-while语句的N-S图如图4-6所示。图4-6do-while语句的N-S图

3.程序举例

例4-7求12 + 22 + 32 + … + n2 ≤ 10 000的最大n值。

解题思路定义累加和变量s和正整数n。当s小于或等于10 000的值为真时输出n - 1。

N-S图如图4-7所示图4-7例4-7的N-S图

例4-8求一个正整数(该数小于65535)的逆序数。

解题思路对于x的逆序数,按顺序分离它的每个数位t,设变量newd保存逆序数,初始值为0,按表达式“newd=newd*10+t”将t累加到newd变量中,则可实现转换。

例4-9用牛顿迭代法求方程3x3 - 4x2 + 3x - 6 = 0在1.5附近的根,要求绝对值误差小于1E-5,并输出迭代次数。

解题思路牛顿迭代法实际上是根据曲线f(x)的切线与x轴的交点来求非线性方程的近似解,其迭代公式为

x = x0 - f(x0) / f1(x0)

其中f1(x0)是f(x)的导函数在x0点的值。

4.2.4三种循环的比较

while循环和do-while循环由循环控制变量、循环条件和循环体组成,循环体中包含需要反复执行的操作和循环控制变量值的修改语句。而for语句则在它的一般形式中有4个固定位置,用4个表达式表示,其结构更加简洁。

while循环和for循环是先判断循环条件,后执行循环体,当第一次判断循环条件不满足时,循环体一次也不执行,称为当型循环;do-while循环是先执行循环体一次,后判断循环条件,所以循环体至少执行一次,称为直到型循环。

4.3循环嵌套

如果一个循环完全包含在另一个循环的循环体中,那么这样的结构称为循环嵌套。内嵌的循环中还可以再嵌套循环,这称为多重循环。三种循环控制语句for、while、do-while可以互相嵌套、自由组合。

例4-10求1~1000中的回文数(正读和反读相同的整数)的个数。

解题思路回文数是正读和反读相同的整数,即该数和它的逆序数相等。

例4-11求2~1000中所有素数的个数及这些素数的和。

解题思路判断一个数x是否为素数,在例4-2中有详细做法,这里只需要遍历判断2~1000的每个数是否为素数即可。

二重循环的执行过程是:外循环执行一次,内循环执行一遍,之后,跳转到外循环,若外循环条件满足,则重复执行一遍内循环,如此反复;当外循环条件不满足时,结束整个循环。通俗地说,执行时由外循环进入内循环,退出则相反,由内循环退至外循环,直到外循环结束时才结束整个循环嵌套。

循环嵌套可以有效解决复杂问题,但在使用循环嵌套时,要注意以下几点:

(1)使用花括号明确定义每个循环体。

(2)区分各层循环的控制变量名。

(3)保持清晰的缩进层次。

(4)严格遵守循环的包含关系。

(5)循环要进行初始化

4.4流程转移控制语句

在C语言中,流程转移控制是指通过特定的语句改变程序的执行流程。主要的流程转移控制语句有break、continue等语句,这些控制语句允许程序根据条件跳过某些代码的执行或提前退出循环,使得代码的逻辑更加灵活。

4.4.1break语句

break语句经常放在循环语句的循环体中,且通常和if语句一起连用。break语句的一般形式为

break;

其作用是:在满足一定条件时,提前退出本层循环(不管循环条件是否成立),使程序流程转向该循环结构后的下一条语句。break语句示例如图4-8所示。图4-8break语句示例

例4-13求2~1000中超级素数的个数。

解题思路超级素数指一个素数从低位到高位依次去掉一位数后剩下的数还是素数。判断一个数x是否为素数,在例4-2中有详细介绍,若x是素数,则去掉x的一个数位,继续判断x是否为素数。

4.4.2continue语句

continue语句的一般形式为

continue;

其作用是:提前结束本次循环,即跳过循环体中某些还没有被执行的语句,开始新的一次循环。continue语句示例如图4-9所示,执行循环体中的continue时,提前结束本次循环,即循环体中continue后的语句不执行,接着进行下一次循环操作。图4-9continue语句示例

例4-14从键盘输入10个不为0的整数,统计其中负数的个数,并求所有正数的平均值。

解题思路程序中定义的变量count用于统计负数个数;变量avg在循环结构中用于统计正数的和,循环结束后用于计算平均值,

4.5循环结构的综合示例

例4-15祖冲之一生钻研自然科学,其主要贡献在数学、天文历法和机械制造三个方面。他在刘徽开创的探索圆周率的精确方法基础上,首次将圆周率精算到小数点后第7位,即在3.1415926和3.1415927之间。他提出的“祖率”对数学的研究具有重大贡献。请利用级数展开式求π的近似值,直到某一项的值小于10-8为止。

解题思路这是一个累加求和问题,但这里的循环次数是未知的,只能使用条件控制的循环来实现。由于控制循环结束的条件是累加的最后一项的绝对值小于10-8,因此循环继续的条件是累加的最后一项的绝对值大于或等于10-8。又由于累加项是由分子和分母两部分组成的,因此累加项的构成规律为

term=sign/n

由于相邻累加项的符号是正负交替变化的,因此可以令分子sign按+1,-1,+1,-1,…交替变化,这可通过反复取sign自身的相反数再重新赋值给自己(即sign=-sign)的方法来实现,注意sign需初始化为1。分母n则按1,3,5,7,…即每次递增2变化,这可通过n=n+2来实现,注意n也需初始化为1。此外,还要设置一个计数器变量count来统计累加的项

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论