《第5章循环结构设计程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章循环结构设计程序设计.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1高级语言程序设计 南京邮电大学传媒技术学院第5章循环结构设计程序设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望2高级语言程序设计 南京邮电大学传媒技术学院学习目标学习目标学习目标学习目标n理解循环结构的概念。理解循环结构的概念。n掌握如何用掌握如何用while语句构成循环结构。语句构成循环结构。n掌握如何用掌握如何用do-while语句构成循环结构。语句构成循环结构。n熟练掌握如何用熟练掌握如何用for语句构成循环结构。语句构成循环结构。n掌握循环结构的嵌
2、套使用。掌握循环结构的嵌套使用。n理解理解break和和continue语句应用于循环体时的区别。语句应用于循环体时的区别。3高级语言程序设计 南京邮电大学传媒技术学院在在C C语言中可以用以下语句来实现循环:语言中可以用以下语句来实现循环:1)while语句。语句。2)do-while语句。语句。3)for语句。语句。4)goto语句和语句和if语句。语句。循环循环循环循环 是一种对同一程序段有规律的重复是一种对同一程序段有规律的重复是一种对同一程序段有规律的重复是一种对同一程序段有规律的重复被重复执行的部分叫被重复执行的部分叫被重复执行的部分叫被重复执行的部分叫循环体循环体循环体循环体。5
3、.1 5.1 引言引言4高级语言程序设计 南京邮电大学传媒技术学院n!=123n,用,用fac来存放结果:来存放结果:初始化初始化值为值为1fac12nfac1facfac2facfacnfac作n次乘法facifac累乘器计数器例如,求阶乘例如,求阶乘5高级语言程序设计 南京邮电大学传媒技术学院5.5.2 while2 while语句语句真真(非零非零)表达式表达式 循环体循环体假假(零零)while 语句的形式语句的形式:while(表达式)表达式)循环体;循环体;while while 语句常称为语句常称为“当型当型”循环语句。循环语句。6高级语言程序设计 南京邮电大学传媒技术学院【例例
4、例例5-15-1】用用用用whilewhile语句构成的循环语句构成的循环语句构成的循环语句构成的循环结构求结构求结构求结构求n!n!算法:算法:l lstep1step1:定义初始化变量。:定义初始化变量。:定义初始化变量。:定义初始化变量。本程序需要三个变量,一个用来接收本程序需要三个变量,一个用来接收本程序需要三个变量,一个用来接收本程序需要三个变量,一个用来接收n n,一个用来表,一个用来表,一个用来表,一个用来表示求阶乘过程中数据从示求阶乘过程中数据从示求阶乘过程中数据从示求阶乘过程中数据从1 1到到到到n n的变化,还有一个保存的变化,还有一个保存的变化,还有一个保存的变化,还有一
5、个保存计算结果计算结果计算结果计算结果l lstep2step2:输入:输入:输入:输入n n,需要考虑输入数据合法性的问题,需要考虑输入数据合法性的问题,需要考虑输入数据合法性的问题,需要考虑输入数据合法性的问题l lstep3step3:计算:计算:计算:计算n!n!就是一个循环累乘求积的过程就是一个循环累乘求积的过程就是一个循环累乘求积的过程就是一个循环累乘求积的过程 n n!=1*2*3=1*2*3*.(n-1n-1)*n*n7高级语言程序设计 南京邮电大学传媒技术学院【例例例例5-15-1】n!n!的的的的C C语言程序语言程序语言程序语言程序#include#include voi
6、d main()void main()int n,i=1;int n,i=1;long int fac;long int fac;printf(please input n(n=0):);printf(please input n(n=0):);scanf(%d,&n);scanf(%d,&n);if(n=0)fac=1;if(n=0)fac=1;else else printf(Invalid input!n);printf(Invalid input!n);return 0;return 0;while(i=n)while(i0)printf(+);else printf(-);scanf
7、(%f ,&x);判断正负号判断正负号继续输入下一个数继续输入下一个数10高级语言程序设计 南京邮电大学传媒技术学院#include stdio.h#include stdio.h void main()void main()char ch;int num=0;char ch;int num=0;ch=getchar();ch=getchar();例:统计从键盘输入的一行字符的个数(以回例:统计从键盘输入的一行字符的个数(以回车键作为输入结束标记车键作为输入结束标记)while(ch!=n)判断是否输入结束判断是否输入结束 num+;ch=getchar();printf(num=%dn,nu
8、m);11高级语言程序设计 南京邮电大学传媒技术学院注意:注意:表达式在判断前,必须要有明确的值。表达式在判断前,必须要有明确的值。循环体中一般有改变条件表达式的语句。循环体中一般有改变条件表达式的语句。while(while(表达式表达式)后面没有分号。后面没有分号。12高级语言程序设计 南京邮电大学传媒技术学院 5.5.3 do-while3 do-while语句语句 do-while的形式:的形式:do 循环体;循环体;while(表达式);表达式);do-while语句语句形式与与直到型形式与与直到型循环相似,但它仍然是当型循循环相似,但它仍然是当型循环。条件为真时执行循环环。条件为真
9、时执行循环真真(非零非零)表达式表达式 循环体循环体假假(零零)13高级语言程序设计 南京邮电大学传媒技术学院【例例例例5-25-2】用用用用do-whiledo-while语句构成的循环语句构成的循环语句构成的循环语句构成的循环结构求结构求结构求结构求n!n!do do fac*=i;fac*=i;i+;i+;while(i=n);while(i=n);说明说明:先先执行执行语句语句,后判断,后判断表达式表达式。第一次条件为真时,第一次条件为真时,while,do-whilewhile,do-while等价;等价;第一次条件为假时,二者不同。第一次条件为假时,二者不同。while(i=n)w
10、hile(i=n)fac*=i;fac*=i;i+;i+;14高级语言程序设计 南京邮电大学传媒技术学院注意:注意:在在ifif、whilewhile语句中,表达式后面都没有语句中,表达式后面都没有分号,而在分号,而在do-whiledo-while语句的表达式后面则语句的表达式后面则必须加分号。必须加分号。do-whiledo-while和和whilewhile语句相互替换时,要注语句相互替换时,要注意修改循环控制条件意修改循环控制条件 。15高级语言程序设计 南京邮电大学传媒技术学院5.4 for5.4 for语句语句forfor的形式:的形式:for(for(初始表达式初始表达式1 1;
11、条件表达式;条件表达式2 2;循环表达式;循环表达式3 3)循环体循环体;表达式表达式1 1:用于循环开始前为循环变量设置初始值。:用于循环开始前为循环变量设置初始值。表达式表达式2 2:控制循环执行的条件,决定循环次数。:控制循环执行的条件,决定循环次数。表达式表达式3 3:循环控制变量修改表达式。:循环控制变量修改表达式。循环体语句:循环体语句:被重复执行的语句。被重复执行的语句。16高级语言程序设计 南京邮电大学传媒技术学院表达式表达式3 3计算表达式计算表达式1 1循环体循环体判断表达式判断表达式2 2假假(零零)真真(非零非零)forfor的下一条语句的下一条语句执行流程执行流程:1
12、7高级语言程序设计 南京邮电大学传媒技术学院 for(fac=1,i=1;i=n;i+)for(fac=1,i=1;i=n;i+)for(fac=1,i=1;i=n;i+)for(fac=1,i=1;i=n;i+)fac*=i;fac*=i;fac*=i;fac*=i;例如:例如:它相当于以下语句:它相当于以下语句:fac=1;i=1;fac=1;i=1;while(i=n)while(i=n)fac*=i;fac*=i;i+;i+;表达式表达式1 1;whilewhile(表达式表达式2 2)表达式表达式3 3;18高级语言程序设计 南京邮电大学传媒技术学院说明说明:三个表达式都可以是逗号表
13、达式。三个表达式都可以是逗号表达式。三个表达式都是任选项,都可以省略,三个表达式都是任选项,都可以省略,但要注意省略表达式后,但要注意省略表达式后,分号间隔符分号间隔符不不能省略。能省略。19高级语言程序设计 南京邮电大学传媒技术学院 for语句中表达式省略的几种情况:语句中表达式省略的几种情况:(1 1)forfor语句一般形式中的语句一般形式中的“表达式表达式1”1”可以可以省略;省略;如:如:fac=1;i=1;for(;in)break;fac*=i;21高级语言程序设计 南京邮电大学传媒技术学院(3 3)表达式)表达式3 3也可以省略,同样此时循环体中也可以省略,同样此时循环体中要保
14、证循环能正常结束;要保证循环能正常结束;如:如:for(fac=1,i=1;i=n;)fac*=i;i+;22高级语言程序设计 南京邮电大学传媒技术学院 (4)4)4)4)可以省略表达式可以省略表达式可以省略表达式可以省略表达式1 1 1 1和表达式和表达式和表达式和表达式3 3 3 3,只有表达式,只有表达式,只有表达式,只有表达式2 2 2 2如:如:如:如:fac=1;i=1;for(;i=n;)fac*=i;fac*=i;i+;i=1;fac=1;while(in)break;fac*=i;i+;(5 5)三个表达式都可省略,同样此时)三个表达式都可省略,同样此时循环体中要保证循环能正
15、常结束;循环体中要保证循环能正常结束;fac=1;i=1;for(;)if(in)break;fac*=i;i+;相当于相当于条件始终为真地执行循环体。条件始终为真地执行循环体。如如:24高级语言程序设计 南京邮电大学传媒技术学院(6 6 6 6)循环体为空语句)循环体为空语句)循环体为空语句)循环体为空语句 对对对对forforforfor语句,循环体为空语句的一般形式为语句,循环体为空语句的一般形式为语句,循环体为空语句的一般形式为语句,循环体为空语句的一般形式为:for(for(for(for(表达式表达式表达式表达式1 1 1 1;表达式;表达式;表达式;表达式2 2 2 2;表达式;
16、表达式;表达式;表达式3)3)3)3);如:如:如:如:在在显显示示器器上上输输出出输输入入的的一一串串字字符符,输输入入的的字字符为符为*时时,结束循环。结束循环。输入输入abcd*abcd*输出输出abcd*abcd*while(while(putchar(getchar(putchar(getchar()!=*)!=*););for(fac=1,i=1for(fac=1,i=1;i=ni=n;fac*=i,i+)fac*=i,i+);25高级语言程序设计 南京邮电大学传媒技术学院 5.5 continue5.5 continue5.5 continue语句和语句和语句和语句和语句和语句和
17、breakbreakbreak语句在循环体中的语句在循环体中的语句在循环体中的语句在循环体中的语句在循环体中的语句在循环体中的应用应用应用应用应用应用5.5.1 continue5.5.1 continue语句在循环体中的应用语句在循环体中的应用语句在循环体中的应用语句在循环体中的应用l lcontinuecontinue语句的一般形式为:语句的一般形式为:语句的一般形式为:语句的一般形式为:continue;continue;l l其作用是结束本次循环,即跳过本次循环体中其作用是结束本次循环,即跳过本次循环体中其作用是结束本次循环,即跳过本次循环体中其作用是结束本次循环,即跳过本次循环体中c
18、ontinue continue 语句之后的语句,转入下一次循环条语句之后的语句,转入下一次循环条语句之后的语句,转入下一次循环条语句之后的语句,转入下一次循环条件的判断,决定循环是否继续执行。件的判断,决定循环是否继续执行。件的判断,决定循环是否继续执行。件的判断,决定循环是否继续执行。26高级语言程序设计 南京邮电大学传媒技术学院注意:注意:注意:注意:执行执行continue语句并没有使整个循环终止语句并没有使整个循环终止l l在在在在whilewhile和和和和do-whiledo-while循环中,循环中,循环中,循环中,continuecontinue语句使得流语句使得流语句使得流
19、语句使得流程直接跳到循环控制条件的测试部分程直接跳到循环控制条件的测试部分程直接跳到循环控制条件的测试部分程直接跳到循环控制条件的测试部分l l在在在在forfor循环中,遇到循环中,遇到循环中,遇到循环中,遇到continuecontinue后,跳过循环体中后,跳过循环体中后,跳过循环体中后,跳过循环体中余下的语句,而转去对余下的语句,而转去对余下的语句,而转去对余下的语句,而转去对forfor语句中的语句中的语句中的语句中的“表达式表达式表达式表达式3 3”求值,然后进行求值,然后进行求值,然后进行求值,然后进行“表达式表达式表达式表达式2”2”的条件测试,最后的条件测试,最后的条件测试,
20、最后的条件测试,最后根据根据根据根据“表达式表达式表达式表达式2”2”的值来决定的值来决定的值来决定的值来决定forfor循环是否执行。循环是否执行。循环是否执行。循环是否执行。27高级语言程序设计 南京邮电大学传媒技术学院 5.5.2 break5.5.2 break语句在循环体中的应语句在循环体中的应用用语句形式语句形式:break;break;用用break语句可以使程序执行流程跳出语句可以使程序执行流程跳出switch语句体,语句体,从从而构成多分支选择结构而构成多分支选择结构。breakbreak语句只能使用在循环体和语句只能使用在循环体和switchswitch语句内。语句内。作用
21、作用:break出现在循环体中时,用于结束当前循环,出现在循环体中时,用于结束当前循环,跳出跳出break所在的循环结构所在的循环结构。28高级语言程序设计 南京邮电大学传媒技术学院breakbreak语句和语句和语句和语句和continuecontinue语句的区别:语句的区别:语句的区别:语句的区别:lbreak语句是完全从循环中跳出语句是完全从循环中跳出lcontinue语句只结束本次循环。语句只结束本次循环。29高级语言程序设计 南京邮电大学传媒技术学院while(条件条件)语句语句A;break;语句语句 B;真真语句语句B条件条件语句语句Abreak假假结束循环结束循环 break
22、break语句与语句与continuecontinue语句的区别语句的区别至此位置至此位置30高级语言程序设计 南京邮电大学传媒技术学院while(条件条件)语句语句A;continue;语句语句 B;真真语句语句B条件条件语句语句Acontinue假假结束循环结束循环至此位置至此位置31高级语言程序设计 南京邮电大学传媒技术学院【例例例例5-35-3】编程实现如下要求:找出编程实现如下要求:找出编程实现如下要求:找出编程实现如下要求:找出1 1到到到到100100之间的前之间的前之间的前之间的前1010个偶数并输出。个偶数并输出。个偶数并输出。个偶数并输出。while(n100)n+;if(
23、count=10)break;/判断偶数个数判断偶数个数 是否已满是否已满10个个 if(n%2!=0)/判断当前数据是否奇数判断当前数据是否奇数 continue;/是奇数结束本次循环是奇数结束本次循环 printf(“%dt”,n);/打印偶数打印偶数 count+;/统计偶数个数统计偶数个数 程序运行结果:程序运行结果:2 4 6 8 10 12 14 16 18 2032高级语言程序设计 南京邮电大学传媒技术学院 在一个循环体内又包含有另一个完整的循环结构,在一个循环体内又包含有另一个完整的循环结构,在一个循环体内又包含有另一个完整的循环结构,在一个循环体内又包含有另一个完整的循环结构
24、,称为循环嵌套。称为循环嵌套。称为循环嵌套。称为循环嵌套。5.6 5.6 循环的嵌套循环的嵌套嵌套时,每一层循环在逻辑上必须是完整的。嵌套时,每一层循环在逻辑上必须是完整的。前面介绍的三种类型的循环:前面介绍的三种类型的循环:while while、do-whiledo-while、forfor三种都可以互相嵌套。三种都可以互相嵌套。33高级语言程序设计 南京邮电大学传媒技术学院循环嵌套时正确和错误的逻辑关系循环嵌套时正确和错误的逻辑关系 for(.).for(.).内内循循环环外外循循环环for(.).for(.).并列循环并列循环嵌套循环嵌套循环交叉循环交叉循环for(.).for(.).
25、错误错误34高级语言程序设计 南京邮电大学传媒技术学院真真真真外循环初始条件外循环初始条件内循环初始条件内循环初始条件内循环体内循环体外循环条件外循环条件假假内循环条内循环条件件假假内循环循环条件内循环循环条件外循环循外循环循环条件环条件循环结束循环结束二重二重循环循环嵌套嵌套结构结构执行执行流程流程 35高级语言程序设计 南京邮电大学传媒技术学院程序范例程序范例程序范例程序范例使用双层循环输出下面的图形使用双层循环输出下面的图形*36高级语言程序设计 南京邮电大学传媒技术学院#include stdio.h#include stdio.hmain()main()int i,j,k;int i
26、,j,k;for(i=0;i=2;i+)for(i=0;i=2;i+)for(j=0;j for(j=0;ji i;j+)printf();j+)printf();for(k=0;k=for(k=0;k=3 3;k+)printf(*);k+)printf(*);printf(n);printf(n);程序代码如下:程序代码如下:程序代码如下:程序代码如下:37高级语言程序设计 南京邮电大学传媒技术学院uu由由由由i i i i控制的外层控制的外层控制的外层控制的外层forforforfor循环中内嵌了两个平行的循环中内嵌了两个平行的循环中内嵌了两个平行的循环中内嵌了两个平行的forforfo
27、rfor循环循环循环循环由由由由j j j j控制的控制的控制的控制的forforforfor循环体用来输出空格循环体用来输出空格循环体用来输出空格循环体用来输出空格由由由由k k k k控制的控制的控制的控制的forforforfor循环体用来输出循环体用来输出循环体用来输出循环体用来输出“*”“*”“*”“*”号号号号uu当当当当i i i i等于等于等于等于0 0 0 0时,由时,由时,由时,由j j j j控制的循环,因为控制的循环,因为控制的循环,因为控制的循环,因为j j j j的值为的值为的值为的值为0 0 0 0,表达,表达,表达,表达式式式式jijijiji的值为假,循环体一
28、次也不执行,接着执行由的值为假,循环体一次也不执行,接着执行由的值为假,循环体一次也不执行,接着执行由的值为假,循环体一次也不执行,接着执行由k k k k控控控控制的循环,连续输出四个制的循环,连续输出四个制的循环,连续输出四个制的循环,连续输出四个“*”“*”“*”“*”号;当号;当号;当号;当i i i i等于等于等于等于1 1 1 1时,由时,由时,由时,由j j j j控控控控制制制制forforforfor循环体执行一次,输出一个空格,这就使得接着循环体执行一次,输出一个空格,这就使得接着循环体执行一次,输出一个空格,这就使得接着循环体执行一次,输出一个空格,这就使得接着输出的四个
29、输出的四个输出的四个输出的四个“*”“*”“*”“*”号右移一个字符位置号右移一个字符位置号右移一个字符位置号右移一个字符位置uu第三行续依次类推第三行续依次类推第三行续依次类推第三行续依次类推代码分析:代码分析:代码分析:代码分析:38高级语言程序设计 南京邮电大学传媒技术学院注意:注意:以上内嵌的第一个以上内嵌的第一个以上内嵌的第一个以上内嵌的第一个forfor循环的结束条件和循环的控制变量循环的结束条件和循环的控制变量循环的结束条件和循环的控制变量循环的结束条件和循环的控制变量i i有关;有关;有关;有关;第二个第二个第二个第二个forfor循环结束条件是固定不变的。循环结束条件是固定不
30、变的。循环结束条件是固定不变的。循环结束条件是固定不变的。下面给出了以上双重循环中下面给出了以上双重循环中下面给出了以上双重循环中下面给出了以上双重循环中i i,j j 和和和和k k值的变化规律。值的变化规律。值的变化规律。值的变化规律。i i的变化的变化j j的变化的变化k k的变化的变化0 00 00 0,1 1,2 2,3 3,4 41 10 0,1 10 0,1 1,2 2,3 3,4 42 20 0,1 1,2 20 0,1 1,2 2,3 3,4 43 3 39高级语言程序设计 南京邮电大学传媒技术学院 【例例例例5-45-45-45-4】打印九九乘法表打印九九乘法表打印九九乘法
31、表打印九九乘法表算法分析:算法分析:采用双重循环,逐行输出。采用双重循环,逐行输出。外层循环控制行数,九九乘法表共有九行,因此外层循环次数为外层循环控制行数,九九乘法表共有九行,因此外层循环次数为9 9每一行的具体输出一般分为每一行的具体输出一般分为3 3步:步:1 1)确定起始打印位置。本例每行左对齐。)确定起始打印位置。本例每行左对齐。2 2)输出该行数据,因为有多项数据,需要嵌套一个内层循环完成)输出该行数据,因为有多项数据,需要嵌套一个内层循环完成对本例,若行号用对本例,若行号用i i表示,每一行有表示,每一行有i i个数据项式子,所以内层个数据项式子,所以内层循环次数与行号相关,从循
32、环次数与行号相关,从1 1变化到变化到i i。3 3)每输完一行进行换行操作。)每输完一行进行换行操作。40高级语言程序设计 南京邮电大学传媒技术学院具体程序如下:具体程序如下:具体程序如下:具体程序如下:#include#includevoid main()void main()int i,j;int i,j;for(i=1;i=9;i+)for(i=1;i=9;i+)for(j=1;j=i;j+)for(j=1;j=i;j+)printf(%d*%d=%-4d,i,j,i*j);printf(%d*%d=%-4d,i,j,i*j);printf(n);printf(n);41高级语言程序设
33、计 南京邮电大学传媒技术学院5.7 goto5.7 goto语句与标号语句与标号goto goto 语句一般形式:语句一般形式:语句一般形式:语句一般形式:语句标号语句标号语句标号语句标号:goto goto 语句标号语句标号语句标号语句标号;作用:作用:无条件转向无条件转向“语句标号语句标号”处执行。处执行。“语句标号语句标号”是一个标识符,它表示程序指令的地址。是一个标识符,它表示程序指令的地址。语句标号仅仅对语句标号仅仅对goto 语句有效,对其它语句不影响。语句有效,对其它语句不影响。无条件转向使程序结构无规律、可读性差。无条件转向使程序结构无规律、可读性差。所以所以gotogoto语
34、句不符合结构化程序设计准则,语句不符合结构化程序设计准则,一般应避免使用一般应避免使用gotogoto语句,语句,除非能在很大程度上提高程序的执行效率,除非能在很大程度上提高程序的执行效率,才适当使用它。才适当使用它。42高级语言程序设计 南京邮电大学传媒技术学院5.8 5.8 应用举例应用举例 【例例5-6】判断一个数是否为素数判断一个数是否为素数 算法分析:算法分析:l l素数是指那些大于素数是指那些大于1,且除了,且除了1和它本身以外和它本身以外不能被其他任何数整除的数。不能被其他任何数整除的数。l l为了判断某数为了判断某数x是否为素数,采用最简单的方是否为素数,采用最简单的方法:用法
35、:用2、3、4、x-1这些数逐个去除这些数逐个去除x,只,只要能被一个数整除,要能被一个数整除,x就不是素数;就不是素数;l l否则,否则,x就是素数。就是素数。43高级语言程序设计 南京邮电大学传媒技术学院程序代码:程序代码:程序代码:程序代码:#include#include#include#includevoid main()void main()int x,k;int x,k;int flag=1;int flag=1;scanf(%d,&x);scanf(%d,&x);for(k=2;k=x-1;k+)for(k=2;k=x-1;k+)if(x%k=0)flag=0;if(x%k=0
36、)flag=0;if(flag)printf(%d is a prime ,x);if(flag)printf(%d is a prime ,x);else printf(%d is not a prime ,x);else printf(%d is not a prime ,x);循环部分可优化化为如下形式:循环部分可优化化为如下形式:for(k=2;k=sqrt(x);k+)if(x%k=0)flag=0;break;44高级语言程序设计 南京邮电大学传媒技术学院 【例例例例5-75-7】计算裴波那契数列的前计算裴波那契数列的前计算裴波那契数列的前计算裴波那契数列的前十项十项十项十项算法分
37、析:算法分析:算法分析:算法分析:斐波那契数列的变化规律是:斐波那契数列的变化规律是:斐波那契数列的变化规律是:斐波那契数列的变化规律是:l l第一项和第二项为第一项和第二项为第一项和第二项为第一项和第二项为1 1l l从第三项开始,每一项的值为前两项的和从第三项开始,每一项的值为前两项的和从第三项开始,每一项的值为前两项的和从第三项开始,每一项的值为前两项的和l l可以用递推算法来求出斐波那契数列中每项的值可以用递推算法来求出斐波那契数列中每项的值可以用递推算法来求出斐波那契数列中每项的值可以用递推算法来求出斐波那契数列中每项的值l l用变量用变量用变量用变量f1f1和和和和f2f2存储第一
38、个数和第二个数,存储第一个数和第二个数,存储第一个数和第二个数,存储第一个数和第二个数,f3f3保存第保存第保存第保存第三个数,以后只要改变三个数,以后只要改变三个数,以后只要改变三个数,以后只要改变f1,f2f1,f2的值,即可求出下一的值,即可求出下一的值,即可求出下一的值,即可求出下一个数个数个数个数循环过程:循环过程:循环过程:循环过程:45高级语言程序设计 南京邮电大学传媒技术学院程序源代码如下:程序源代码如下:程序源代码如下:程序源代码如下:#include#include void main()void main()int count=3;int count=3;long int
39、 f1,f2,f3;long int f1,f2,f3;f1=1;f1=1;f2=1;f2=1;printf(f1=%dnf2=%dn,f1,f2);printf(f1=%dnf2=%dn,f1,f2);while(count=10)while(count=10)f3=f1+f2;f3=f1+f2;printf(f%d=%ldn,count,f3);printf(f%d=%ldn,count,f3);f1=f2;f1=f2;f2=f3;f2=f3;count+;count+;46高级语言程序设计 南京邮电大学传媒技术学院【例例例例5-85-8】计算计算计算计算a+aa+aaa+aaaa+aa.
40、aa+aa+aaa+aaaa+aa.a总共总共总共总共n n项的值项的值项的值项的值 算法分析:算法分析:算法分析:算法分析:关键是计算出每一关键是计算出每一关键是计算出每一关键是计算出每一项的值项的值项的值项的值 每一项与前一项每一项与前一项每一项与前一项每一项与前一项tntn的对应关系为:的对应关系为:的对应关系为:的对应关系为:tn=tn+a*10tn=tn+a*10n-1n-1;程序源代码如下:程序源代码如下:#include#include void main()void main()int a,n,count=1;int a,n,count=1;long int sn=0,tn=0
41、;long int sn=0,tn=0;printf(please input a and nn);printf(please input a and nn);scanf(%d,%d,&a,&n);scanf(%d,%d,&a,&n);printf(a=%d,n=%dn,a,n);printf(a=%d,n=%dn,a,n);while(count=n)while(count=1;n-)sum=(sum+1)*2;printf(%d,sum);49高级语言程序设计 南京邮电大学传媒技术学院小结小结uu重点讲解了重点讲解了重点讲解了重点讲解了语言的三种循环语句:语言的三种循环语句:语言的三种循环
42、语句:语言的三种循环语句:uuwhilewhile或或或或do-whiledo-while语句主要用于循环次数及控制条件要在语句主要用于循环次数及控制条件要在语句主要用于循环次数及控制条件要在语句主要用于循环次数及控制条件要在循环过程中才能确定的循环循环过程中才能确定的循环循环过程中才能确定的循环循环过程中才能确定的循环uuforfor语句主要用于给定循环变量初值,步长增量以及循环语句主要用于给定循环变量初值,步长增量以及循环语句主要用于给定循环变量初值,步长增量以及循环语句主要用于给定循环变量初值,步长增量以及循环次数的循环结构。次数的循环结构。次数的循环结构。次数的循环结构。uu在循环程序
43、中应避免出现死循环。在循环程序中应避免出现死循环。在循环程序中应避免出现死循环。在循环程序中应避免出现死循环。uu三种循环结构都可以相互嵌套组成多重循环,循环之间三种循环结构都可以相互嵌套组成多重循环,循环之间三种循环结构都可以相互嵌套组成多重循环,循环之间三种循环结构都可以相互嵌套组成多重循环,循环之间可以并列但不能交叉。可以并列但不能交叉。可以并列但不能交叉。可以并列但不能交叉。uu可以用可以用可以用可以用continuecontinue语句和语句和语句和语句和breakbreak语句控制程序流程的方向,语句控制程序流程的方向,语句控制程序流程的方向,语句控制程序流程的方向,两个语句的主要
44、区别是:两个语句的主要区别是:两个语句的主要区别是:两个语句的主要区别是:breakbreak语句是完全从循环中跳语句是完全从循环中跳语句是完全从循环中跳语句是完全从循环中跳出,出,出,出,continuecontinue语句只结束本次循环。语句只结束本次循环。语句只结束本次循环。语句只结束本次循环。uu需要掌握累加、连乘、判断素数、斐波那契数列计算等需要掌握累加、连乘、判断素数、斐波那契数列计算等需要掌握累加、连乘、判断素数、斐波那契数列计算等需要掌握累加、连乘、判断素数、斐波那契数列计算等典型循环应用算法典型循环应用算法典型循环应用算法典型循环应用算法50高级语言程序设计 南京邮电大学传媒技术学院第一次第一次第一次第一次 P62P62P62P6263:63:63:63:5.45.45.45.4、5.75.75.75.7第二次第二次第二次第二次 P62P62P62P6263:63:63:63:5.15.15.15.1、5.35.35.35.3、5.85.85.85.8第二次第二次第二次第二次 P62P62P62P6263:63:63:63:5.55.55.55.5、5.105.105.105.10 作业作业