第4章_循环结构程序设计_第1页
第4章_循环结构程序设计_第2页
第4章_循环结构程序设计_第3页
第4章_循环结构程序设计_第4页
第4章_循环结构程序设计_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

1、普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 在解决实际问题的过程中,常常会遇在解决实际问题的过程中,常常会遇到一些需要重复处理的问题。循环结构可到一些需要重复处理的问题。循环结构可用来处理需要重复处理的问题,所以,循用来处理需要重复处理的问题,所以,循环结构又称为重复结构。环结构又称为重复结构。 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.1 循环的概念循环的概念 4.2 while 语句语句4.3 dowhile循环循环 4.4 for循环循环 4.5 break语句和语句和continue语句语句4.6 多重循环多重循环4.7 程序举例

2、程序举例 4.8 三种循环语句的比较三种循环语句的比较 第4章 循环结构程序设计 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 循环结构,又称为重复结构,是结构化程序设计的三循环结构,又称为重复结构,是结构化程序设计的三种基本结构之一,在数值计算和很多问题的处理中都需要种基本结构之一,在数值计算和很多问题的处理中都需要用到循环控制。例如,用迭代法求方程的根,计算全班同用到循环控制。例如,用迭代法求方程的根,计算全班同学的平均分等。几乎所有的应用程序都包含循环,它和顺学的平均分等。几乎所有的应用程序都包含循环,它和顺序结构、选择结构共同作为各种复杂结构程序的基本构造序结构

3、、选择结构共同作为各种复杂结构程序的基本构造单元。因此熟练地掌握选择结构和循环结构的概念及使用单元。因此熟练地掌握选择结构和循环结构的概念及使用,是程序设计最基本的要求。,是程序设计最基本的要求。普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.1 循环的概念循环的概念 例如,计算例如,计算1100的累计和的累计和sum。 根据已有的知识,可以用根据已有的知识,可以用sum=1+2+3+100来计算,但显来计算,但显然很繁琐。现在换个思路来考虑:首先设置一个累加器然很繁琐。现在换个思路来考虑:首先设置一个累加器sum,其,其初值为初值为0,利用,利用sum=sum+i来计

4、算(来计算(i依次取依次取1、2、100),),只要解决以下只要解决以下3个问题即可:个问题即可: 将将i的初值置为的初值置为1; 每执行每执行1次次sum=sum+i后,后,i值增值增1,其过程如下所示:,其过程如下所示: sum=0; i=1; 重复执重复执 行部分行部分 sum=sum+i; i=i+1; 当当i增到增到101时,停止计算。时,停止计算。 此时,此时,sum的值就是的值就是1100的累计和。的累计和。普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.1 循环的概念循环的概念普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材普通高等教

5、育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.2 while 语句语句whilewhile用来实现用来实现“当型当型”循环,其一般形式为:循环,其一般形式为: while(while(循环条件表达式循环条件表达式) ) 循环体语句循环体语句 在执行在执行whilewhile语句时,先对循环条件表达式进行计算,若语句时,先对循环条件表达式进行计算,若其值为非其值为非0 0(真),则反复执行循环体语句,直到循环条件表(真),则反复执行循环体语句,直到循环条件表达式的值为达式的值为0 0(假)时,循环结束,程序控制转至(假)时,循环结束,程序控制转至whilewhile循环语循环语句

6、的下一条语句。其执行过程如图句的下一条语句。其执行过程如图4-14-1所示。所示。图图4-1 while语句的执行过程语句的执行过程普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材使用使用while语句时,应注意以下几个问题:语句时,应注意以下几个问题: 循环体语句可以是一个空语句、一个语句或一组语句。当循循环体语句可以是一个空语句、一个语句或一组语句。当循环体是一组语句时,则必须用花括号括起来,组成复合语句。环体是一组语句时,则必须用花括号括起来,组成复合语句。图图4-2 计算计算1100累计和的流程图和累计和的流程图和N-S图描述图描述 4.2 while 语句语句普通

7、高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main() int i,sum; /* 定义整型变量定义整型变量i,sum */ sum=0; /* 将将sum的初值置为的初值置为0 */ i=1; /* 将将i的初值置为的初值置为1 */ while(i=100) /* 若若i=100则执行循环体则执行循环体 */ sum=sum+i; /* 将将i进行累加进行累加 */ i=i+1; /* i的值加的值加1 */ printf(sum=%dn,sum); /* 输出输出sum的值的值 */程序运行结果:程序运行结果:sum=50504.2 wh

8、ile 语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 while语句中的循环条件表达式可以是任何类型的表达式。语句中的循环条件表达式可以是任何类型的表达式。 循环体内一定要有循环体内一定要有使表达式的值变为使表达式的值变为0(假)(假)的操作,否则的操作,否则 循环将无限进行,即形成死循环。循环将无限进行,即形成死循环。 while语句的特点是语句的特点是“先判断,后执行先判断,后执行”,如果循环条件表,如果循环条件表达达 式的值一开始就为式的值一开始就为0,则循环体语句一次也不执行。,则循环体语句一次也不执行。 例如,对于下面的语句:例如,对于下面的语句: w

9、hile(i-) printf(%d ,i); 如果变量如果变量i赋值赋值0时,则一次也不执行循环体语句;如果变量时,则一次也不执行循环体语句;如果变量 i赋值赋值4时,则其运行结果为:时,则其运行结果为: 3210。4.2 while 语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例4.1 利用公式利用公式求求的近似值,直到最后一项的绝对值小于的近似值,直到最后一项的绝对值小于 为止为止。 分析:本题仍为求累加和问题,因此,循环体分析:本题仍为求累加和问题,因此,循环体中有中有sum=sum+temp这样的求累加和表达式。这样的求累加和表达式。temp为公式中

10、的某一项,其特点是,分母为奇数,且相为公式中的某一项,其特点是,分母为奇数,且相邻项符号相反,当邻项符号相反,当|temp| 时,停止求累加和。时,停止求累加和。的近似值的近似值pi可以表示为可以表示为pi=4sum。91715131144104104.2 while 语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材(b) N-S图描述图描述图图4-3 例例4.1的流程图和的流程图和N-S图描述图描述(a) 流程图描述流程图描述 4.2 while 语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include #include voi

11、d main() int sign=1; float i=1,temp=1,sum=0; while(fabs(temp)=1e-4) /* 当满足条件时结束当满足条件时结束 */ sum=sum+temp; /* 计算通项并进行累加计算通项并进行累加 */ i=i+2; /* i值加值加2得到下一个奇数得到下一个奇数 */ sign=-sign; /* 相邻项符号取反相邻项符号取反 */ temp=sign/i; /* 求公式中的某一项求公式中的某一项temp */ sum=4*sum; printf(pi=%8.6fn,sum); /* 输出输出pi的值的值 */程序运行结果:程序运行结果

12、:pi=3.1413974.2 while 语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材(a) 流程图描述流程图描述 (b) N-S图描述图描述 例例 4.2 从键盘上连续输入字符,直到输入从键盘上连续输入字符,直到输入“回车回车”符为止,统计符为止,统计 输入的字输入的字符中数字字符的个数。符中数字字符的个数。4.2 while 语句语句普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main() char ch; int num=0; printf(Press enter to end input n); wh

13、ile(ch=getchar()!=n) /*按回车键时结束按回车键时结束*/ if(ch=0&ch=9) /* 只对数字字符的个数进行统计只对数字字符的个数进行统计*/ putchar(ch); /* 输出数字字符输出数字字符 */ num=num+1; /*对数字字符的个数进行累加统计对数字字符的个数进行累加统计*/ printf(nnum=%dn,num); /* 输出数字字符的个数输出数字字符的个数 */程序运行结果:程序运行结果:Press enter to end input 5!a66bc7 5667num=44.2 while 语句语句普通高等教育普通高等教育“十一五十

14、一五”国家级规划教材国家级规划教材4.3 dowhile 循环循环 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.3 dowhile循环循环 dowhile用来实现用来实现“直到型直到型”循环,其一般形式为:循环,其一般形式为: do 循环体语句循环体语句 while(循环条件表达式循环条件表达式); 执行过程是,先执行循环体语句,然后对循环条件表达式执行过程是,先执行循环体语句,然后对循环条件表达式进行计算,若其值为真(非进行计算,若其值为真(非0),则重复上述过程,直到循环),则重复上述过程,直到循环条件表达式的值为假(条件表达式的值为假(0)时,循环结束,程序控

15、制转至该结)时,循环结束,程序控制转至该结构的下一条语句。其执行过程如图构的下一条语句。其执行过程如图4-5所示。所示。普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材使用使用dowhile语句时,应注意以下几个问题:语句时,应注意以下几个问题: 当循环体是一组语句时,则必须用花括号括起来,组当循环体是一组语句时,则必须用花括号括起来,组 成复合语句。成复合语句。 循环体内一定要有使表达式的值变为循环体内一定要有使表达式的值变为0(假)的操作,(假)的操作, 否则循环将无限进行。否则循环将无限进行。 dowhile循环是先执行,后判断,因此循环体至少执循环是先执行,后判断,

16、因此循环体至少执 行一次。行一次。 do和和while都是关键字,配合起来使用,都是关键字,配合起来使用,while()后面的后面的 “;”不可缺少。不可缺少。4.3 dowhile循环循环 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例4.3 用用dowhile循环编写计算循环编写计算sum=1+2+3+100的程序。的程序。(a) 流程图描述流程图描述(b) N-S图描述图描述4.3 dowhile循环循环 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main( ) int sum=0,i=1; do /* 开始

17、执行循环开始执行循环 */ sum=sum+i; /* 计算累加和计算累加和 */ i+; /* i自加自加1 */ while(i=100); /* 如果如果i=100,则循环继续执行,则循环继续执行 */ printf(sum=%dn,sum); /* 输出累加和输出累加和 */程序运行结果:程序运行结果:5050例例4.3 用用dowhile循环编写计算循环编写计算sum=1+2+3+100的程序。的程序。4.3 dowhile循环循环 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例4.4 输入若干名学生的某门课程的成绩,以负输入若干名学生的某门课程的成绩,以负

18、数作为结束输入的标志,计算该门课程的平均数作为结束输入的标志,计算该门课程的平均成绩。成绩。 首先输入一个成绩,若输入负数,直接结首先输入一个成绩,若输入负数,直接结束 ; 否 则 使 用 循 环 结 构 计 算 总 成 绩束 ; 否 则 使 用 循 环 结 构 计 算 总 成 绩s u m = s u m + s c o r e , 同 时 统 计 学 生 人 数, 同 时 统 计 学 生 人 数num=num+1,最后计算平均成绩,最后计算平均成绩ave=sum/num。4.3 dowhile循环循环 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include v

19、oid main() int num=0; float score,sum=0,ave; printf(input score of student:n); scanf(%f,&score); if(score=0); /* 若输入负数,则结束循环若输入负数,则结束循环 */ ave=sum/num; /* 计算平均成绩计算平均成绩 */ printf(average=%6.2fn,ave); /* 输出平均成绩输出平均成绩 */ 程序运行结果:程序运行结果:input score of student:80 67 -1 average=73.504.3 dowhile循环循环 普通高

20、等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.4 for循环循环 C 语言的语言的 for 循环使用最为灵活,功能循环使用最为灵活,功能很强。不仅可以用于计数型循环,而且可以很强。不仅可以用于计数型循环,而且可以用于条件型循环。完全可以代替用于条件型循环。完全可以代替 while 和和 dowhile 循环。循环。普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.4 for循环循环 for循环语句的一般形式为:循环语句的一般形式为: for(表达式表达式1;表达式;表达式2;表达式;表达式3) 循环体语句循环体语句 其中,其中,for是是C语言的关键字

21、,其后圆括号通常语言的关键字,其后圆括号通常有有3个表达式。表达式之间用分号隔开,表达式可以个表达式。表达式之间用分号隔开,表达式可以是是C语言中任何合法的表达式。表达式语言中任何合法的表达式。表达式1给循环变量给循环变量赋初值;表达式赋初值;表达式2是循环条件;表达式是循环条件;表达式3修改循环变修改循环变量值。量值。for后面的语句为循环体。循环体多于一条语后面的语句为循环体。循环体多于一条语句时,要用复合语句表示。句时,要用复合语句表示。 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 for循环语句的作用:循环语句的作用: 首先求解表达式首先求解表达式1的值,然后

22、求解表的值,然后求解表达式达式2的值,若表达式的值非的值,若表达式的值非0(真)时,就执行循环体,执行(真)时,就执行循环体,执行一次循环体后求解表达式一次循环体后求解表达式3的值的值,再求解表达式再求解表达式2的值,若表达式的值,若表达式2仍不为仍不为0再执行循环体再执行循环体,再求解表达式再求解表达式3的值。如此反复直到表的值。如此反复直到表达式达式2的值为的值为0时时,整个循环结束。其执行过程如图所示。整个循环结束。其执行过程如图所示。4.4 for循环循环 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 for语句最简单的应用形式,也就是最易理解的语句最简单的应用

23、形式,也就是最易理解的形式:形式: for(循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值) 循环体语句循环体语句 4.4 for循环循环 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材执行执行执行执行for循环之后的语句循环之后的语句执行执行执行表达式执行表达式1循环初始条件循环初始条件循环控制条件循环控制条件循环体循环体普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例4.5 用用for循环编写计算循环编写计算sum=1+2+3+100的程序。的程序。4.4 for循环循环 普通高等教育普通高等教育“十一五十一五”国

24、家级规划教材国家级规划教材#include void main() int sum=0,i; /* 定义整型变量定义整型变量sum,i并对并对sum赋初值赋初值 */ for(i=1;i=100;i+) sum=sum+i; /* 通过通过for循环对循环对i进行累加进行累加 */ printf(“sum=%dn”,sum); /* 输出累加和输出累加和 */4.4 for循环循环 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 使用使用 for 循环时,循环时,for 语句中的表达式可以部分或全部省语句中的表达式可以部分或全部省略,但两个略,但两个“;”不可省略。不可省

25、略。 这时没有了给循环变量赋初值的操作,则应这时没有了给循环变量赋初值的操作,则应 该在该在for语句之前给循环变量赋初值。语句之前给循环变量赋初值。 例如:例如: i=1; /* 对循环变量对循环变量i赋初值赋初值 */ for( ;i=100;i+) /*省略了表达式省略了表达式1 */ sum=sum+i; ,相当于缺少条件判断,循环将无限进行,因,相当于缺少条件判断,循环将无限进行,因 此如果缺少表达式此如果缺少表达式2,可以认为表达式,可以认为表达式2始终为真。始终为真。4.4 for循环循环 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 ,则可以把循环变量的

26、修改部分放到循环体,则可以把循环变量的修改部分放到循环体 中进行。中进行。 例如:例如: for(i=1;i=100; ) /* 省略了表达式省略了表达式3 */ sum=sum+i; i+; /* 在循环体内改变循环变量在循环体内改变循环变量i的值的值 */ ,相当于在循环中只有表达式,相当于在循环中只有表达式2, 即只给出循环结束的条件。这时可以采用上述和中的即只给出循环结束的条件。这时可以采用上述和中的 方法,保证循环正常结束。方法,保证循环正常结束。 ,for( ; ; )相当于相当于while(1)。4.4 for循环循环 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级

27、规划教材例例4.6 用用for循环编写计算循环编写计算n!的程序。的程序。 由于是个连乘的重复过程,每次循环完成一次乘法,共循由于是个连乘的重复过程,每次循环完成一次乘法,共循环次。在前面我们对计算累加和采用了环次。在前面我们对计算累加和采用了“sum=sum+第第i项项”的的循环算式,类似对于连乘可以采用循环算式,类似对于连乘可以采用“t=t*第第i项项”的循环算式,的循环算式,其中第其中第i项就是循环变量项就是循环变量i。4.4 for循环循环 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main() int n,i,t=1; /* 定义

28、整型变量定义整型变量i,t,并对阶乘并对阶乘t赋初值赋初值1 */ printf(input n:); /* 输出提示信息输出提示信息 */ scanf(%d,&n); /* 从键盘输入从键盘输入n的值的值 */ for(i=1;i=n;i+) t=t*i; /* 循环重复循环重复n次次,计算计算n! */ printf(t=%dn,t); /* 输出输出n的阶乘的阶乘 */程序运行结果:程序运行结果:input n:5 t=1204.4 for循环循环 例例4.7普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.4 for循环循环 普通高等教育普通高等教育“十一

29、五十一五”国家级规划教材国家级规划教材#include void main() int i; float score,max,min; scanf(%f,&score); max=score; /* 将输入的第一个学生的成绩赋给将输入的第一个学生的成绩赋给max */ min=score; /* 将输入的第一个学生的成绩赋给将输入的第一个学生的成绩赋给min */ for(i=2;imax) /*输入的成绩大于输入的成绩大于max, 将输入的成绩值赋给将输入的成绩值赋给max*/ max=score; if(scoremin) /* 输入的成绩小于输入的成绩小于min,则将输入的成绩值

30、赋给则将输入的成绩值赋给min */ min=score; printf(nmax=%6.2f min=%6.2fn,max,min); 程序运行结果:程序运行结果:75 89 66 48 98 100 79 85 90 68 max=100.00 min= 48.004.4 for循环循环 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.5 break语句和语句和continue语句语句 为了使循环控制更加灵活,为了使循环控制更加灵活,C 语言允许语言允许在特定条件成立时,使用在特定条件成立时,使用 break 语句强行结语句强行结束循环,或使用束循环,或使用 con

31、tinue 语句跳过循环体语句跳过循环体其余语句,转向循环条件的判定语句。其余语句,转向循环条件的判定语句。 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.5 break语句和语句和continue语句语句 4.5.1 break 语句语句 break 语句的一般形式为:语句的一般形式为: break 语句有两个作用:用于语句有两个作用:用于 switch 语句时,退语句时,退出出 switch 语句,程序转至语句,程序转至 switch 语句下面的语句;用语句下面的语句;用于循环语句时,退出包含它的循环体,程序转至循环于循环语句时,退出包含它的循环体,程序转至循环体

32、下面的语句。体下面的语句。普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例4.8 找出在找出在100以内的自然数中,能被以内的自然数中,能被9整除的第一个数。整除的第一个数。4.5 break语句和语句和continue语句语句 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main() int i,n; printf(input n:); scanf(%d,&n); for(i=n;i=100;i+) if(i%9=0) /* 判别判别i能否被能否被9整除整除 */ printf(the first numbe

33、r is %d.n,i); /*i能被能被9整除,则输出整除,则输出i的值的值*/ break; /* 提前退出循环提前退出循环 */ 程序运行结果:程序运行结果:input n:1 the first number is 9.input n:65 the first number is 72.4.5 break语句和语句和continue语句语句 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.5.2 continue 语句语句 continue语句的一般形式为:语句的一般形式为: continue语句作用是:结束本次循环,跳过循环语句作用是:结束本次循环,跳过循环体

34、中尚未执行的语句,接着进行下一次是否执行循体中尚未执行的语句,接着进行下一次是否执行循环的判断。在环的判断。在while和和dowhile语句中,语句中,continue语语句把程序控制转到句把程序控制转到while后面的表达式处,在后面的表达式处,在for语句语句中,中,continue语句把程序控制转到表达式语句把程序控制转到表达式3处。处。 4.5 break语句和语句和continue语句语句 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例4.9 找出在找出在100以内的自然数中,能被以内的自然数中,能被9整除的所有数。整除的所有数。4.5 break语句和语

35、句和continue语句语句 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main() int i,n; /* 定义整型变量定义整型变量i,n */ printf(input n:); /* 输出提示信息输出提示信息 */ scanf(%d,&n); /* 从键盘输入从键盘输入n的值的值 */ printf(the number is:); for(i=n;i=100;i+) if(i%9=0) /* 判别判别i能否被能否被9整除整除 */ printf(%4d,i); /* i能被能被9整除,则输出整除,则输出i的值的值 */ co

36、ntinue; /* 结束本次循环结束本次循环, 转至转至i+处处 */ 程序运行结果:程序运行结果:input n:65 the number is:728190994.5 break语句和语句和continue语句语句 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例4.10 分析下面程序的执行结果。分析下面程序的执行结果。#include void main() int k,b=1; for(k=1;k5) /* 若若b10,则结束整个循环则结束整个循环 */ break; if(b%2=1) /* 若若b/2=1,则则b=b+3并结束本次循环并结束本次循环 */

37、 b+=3; continue; /* 转至转至k+处处 */ b-; 程序运行结果:程序运行结果:k=1, b=1k=2, b=4k=3, b=3k=4, b=64.5 break语句和语句和continue语句语句 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材注意注意: continue 语句和语句和 break 语句的区别:语句的区别:continue 语句只结束本次循环,而不是终止整个循环的执行语句只结束本次循环,而不是终止整个循环的执行;break 语句则是结束循环,不再进行条件判断。语句则是结束循环,不再进行条件判断。 4.5 break语句和语句和cont

38、inue语句语句 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.6 多重循环多重循环 一个循环体内又包含另一个完整的循环结一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。构,称为循环的嵌套。while、dowhile 和和for三种循环语句可以互相嵌套,内嵌的循环体内三种循环语句可以互相嵌套,内嵌的循环体内还可以嵌套循环,这就是多重循环。还可以嵌套循环,这就是多重循环。普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.6 多重循环多重循环例例4.11 以下面形式输出九九乘法表。以下面形式输出九九乘法表。11= 121= 2 22= 431

39、= 3 32= 6 33= 941= 4 42= 8 43=12 44=1651= 5 52=10 53=15 55=2571= 7 72=14 73=21 77=4981= 8 82=16 83=24 88=6491= 9 92=18 93=27 99=81普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材分析:求积可以用两层分析:求积可以用两层for循环结构实现:循环结构实现: / /* * i i表示被乘数表示被乘数 * */ / / /* * j j表示乘数表示乘数 * */ / 第一个第一个for语句,称为语句,称为外循环外循环,i表示被乘数。第二个表示被乘数。第二

40、个for语语句,称为句,称为内循环内循环,j表示乘数。嵌套重复循环结构总是先完整表示乘数。嵌套重复循环结构总是先完整地执行内循环一次,外循环再执行一次。地执行内循环一次,外循环再执行一次。4.6 多重循环多重循环普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材据上述分析,算法可以用如图所示的流程图和据上述分析,算法可以用如图所示的流程图和N-S图描述。图描述。4.6 多重循环多重循环普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main() int i,j,t; /* 定义整型变量定义整型变量i,j,t */ for(i=1

41、;i=9;i+) /* 外循环用于控制行数外循环用于控制行数 */ for(j=1;j=i;j+) /* 内循环用于控制列数内循环用于控制列数 */ t=i*j; /* 计算计算i*j,并赋值给变量,并赋值给变量t */ printf(%3d*%d=%2d,i,j,t); /* 输出输出t,即,即i*j的值的值*/ printf(n); /* 输出输出1行后换行行后换行 */ 4.6 多重循环多重循环普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例4.12 用嵌套循环计算用嵌套循环计算 的值的值。!3!2! 1n4.6 多重循环多重循环普通高等教育普通高等教育“十一五十

42、一五”国家级规划教材国家级规划教材#include void main() int i,j,n; long int t,sum=0; printf(input n:); scanf(%d,&n); for(i=1;i=n;i+) /* 外层循环重复外层循环重复n次,求累加和次,求累加和*/ t=1; /* 置置t的初值为的初值为1,以保证每次求阶乘都从,以保证每次求阶乘都从1开始连乘开始连乘 */ for(j=1;j=i;j+) /* 内层循环重复内层循环重复i次,计算次,计算t=i! */ t=t*j; sum=sum+t; /* 把把i!累加到累加到sum中中 */ printf(

43、sum=%ldn,sum); 程序运行结果程序运行结果:input n:4 sum=334.6 多重循环多重循环普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例4.13 输出一个任意行的等腰三角形图形。输出一个任意行的等腰三角形图形。 * * * *分析:分析: 把三角形顶点放在屏幕第把三角形顶点放在屏幕第40列的位置,每行的输出开始列的位置,每行的输出开始位置比上一行提前一列,每行输出星号的个数是行数的位置比上一行提前一列,每行输出星号的个数是行数的2倍减倍减去去1。输入。输入n的值来确定所需要的行数。程序的外循环控制输的值来确定所需要的行数。程序的外循环控制输出的行

44、数,内循环是两个并列的循环,前面一个循环输出每出的行数,内循环是两个并列的循环,前面一个循环输出每行前面的空格,后面一个循环输出该行的星号,星号输出结行前面的空格,后面一个循环输出该行的星号,星号输出结束后换行,接着输出下一行。束后换行,接着输出下一行。4.6 多重循环多重循环普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main() int n,j,k; printf(input n=); scanf(%d,&n); /*从键盘上输入等腰三角形所占的行数从键盘上输入等腰三角形所占的行数 */ for(k=1; k=n; k+) /*

45、此循环用于控制行数此循环用于控制行数 */ for(j=1;j40-k;j+) /* 此循环用于控制星号前的空格此循环用于控制星号前的空格 */ printf( ); for(j=1;j=2*k-1;j+) /*此循环用于控制一行内打印星号的个数此循环用于控制一行内打印星号的个数 */ printf(*); printf(n); /* 输出一行后换行输出一行后换行 */ * * * *4.6 多重循环多重循环普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.7 程程 序序 举举 例例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.7 程序举例程序举

46、例 例例4.14 编写程序求斐波纳契(编写程序求斐波纳契(Fibonacci)数列的前)数列的前20项,项,要求每行输出要求每行输出5个斐波纳契数。个斐波纳契数。 斐波纳契数列源自一个有趣的问题:一对小兔,一个月后斐波纳契数列源自一个有趣的问题:一对小兔,一个月后长成中兔,第长成中兔,第3个月长成大兔,长成大兔以后每个月生一对小个月长成大兔,长成大兔以后每个月生一对小兔。问第兔。问第20个月有多少对兔子?个月有多少对兔子? 斐波纳契数列的规律是:每个数等于前两个数之和。其可斐波纳契数列的规律是:每个数等于前两个数之和。其可以用数学上的递推公式来表示:以用数学上的递推公式来表示:2211121n

47、ffnnfnnn普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main() long f1,f2,f3; int k; f1=1,f2=1; /* 斐波纳契数列的头两个数斐波纳契数列的头两个数 */ printf(%10ld%10ld,f1,f2); /* 输出斐波纳契数列的头两个数输出斐波纳契数列的头两个数 */ for(k=3;k=20;k+) /* 循环循环18次求斐波纳契数列的后次求斐波纳契数列的后18项项 */ f3=f1+f2; /* 新的斐

48、波纳契数的一个数等于前两个数之和新的斐波纳契数的一个数等于前两个数之和 */ printf(%10ld,f3); f1=f2; /* 迭代,用新的数覆盖旧的数迭代,用新的数覆盖旧的数 */ f2=f3; if(k%5=0) printf(n); /* 每输出每输出5个斐波纳契数换行个斐波纳契数换行 */ 4.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材程序运行结果:程序运行结果:1 1 2 3 58 13 21 34 5589 144 233 377 610987 1597 2584 4181 67654.7 程序举例程序举例普通高等教育普通高等教育

49、“十一五十一五”国家级规划教材国家级规划教材例例4.15 利用下面级数求正弦函数的值(要求算到最后一项的利用下面级数求正弦函数的值(要求算到最后一项的绝对值小于绝对值小于 为止)。为止)。 这是一个多项式累加和,每一项的符号和分子、分母都这是一个多项式累加和,每一项的符号和分子、分母都是有规律性地变化:符号依此作正负变化;分子是是有规律性地变化:符号依此作正负变化;分子是x的奇数次的奇数次幂;分母则是从幂;分母则是从1开始的奇数阶乘。可以用循环结构实现,当开始的奇数阶乘。可以用循环结构实现,当循环计算到某一项循环计算到某一项 |temp| 时循环结束,输出时循环结束,输出 sin(x) 的值的

50、值。 ! 9! 7! 5! 3sin9753xxxxxx-610-6104.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include #include #define PI 3.14159void main() float x,x1,y; float t,temp,nume; int i,j,sign=1; printf(input x=); /* 输出提示信息输出提示信息 */ scanf(%f,&x1); /* 从键盘输入角度从键盘输入角度x1

51、的值的值 */ x=x1*PI/180; /* 将角度将角度x1换算成弧度换算成弧度 */ y=x; /* 把级数的第一项把级数的第一项x作为累加和的初值作为累加和的初值 */ temp=x; /* 将将x赋值给赋值给temp */ 4.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 for(i=3;fabs(temp)=1e-6;i+=2) /*当前项当前项|temp|= , 执行执行for循环循环 */ t=1; nume=1; for(j=1;j=i;j+) t=t*j; /* 通过通过for循环计算当前项的阶乘循环计算当前项的阶乘t */ nu

52、me=nume*x; /* 通过通过for循环计算当前项的分子循环计算当前项的分子nume */ sign=-sign; /* 将将sign值的符号取反值的符号取反 */ temp=sign*nume/t; /* 计算新的当前项值计算新的当前项值temp */ y=y+temp; /* 对对temp进行累加进行累加 */ printf(sin(%.2f)=%fn,x1,y);程序运行结果:程序运行结果:input x=2 sin(2.0)=0.034899-6104.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例4.16 从键盘上输入一个大于从键盘

53、上输入一个大于2的整数,判断的整数,判断m是否为素数。是否为素数。 所谓素数是指除了所谓素数是指除了1和它本身以外,再不能被任何整数整和它本身以外,再不能被任何整数整除的数。根据这一定义,判断一个整数是否素数,只需把被除的数。根据这一定义,判断一个整数是否素数,只需把被2到到m -1之间的每一个整数去除,如果都不能被整除,则之间的每一个整数去除,如果都不能被整除,则m就是就是一个素数。一个素数。 例如例如:判断判断19是否素数,将是否素数,将19被被2,3,18除,都不能整除,都不能整除除19,则,则19就是一个素数。就是一个素数。 实际上,除数只要为实际上,除数只要为2 的全部整数即可。让的

54、全部整数即可。让m被被2除,如果除,如果m能被能被2之中任何一个整数整除,则说明之中任何一个整数整除,则说明m不是素数不是素数,否则,否则m一定是素数。一定是素数。 mm4.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材4.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材void main() int m,i,k,flag; flag=1; /* 将素数标志将素数标志flag设置为设置为1 */ do printf(input a integer:); /* 输出提示信息输出提示信息 */ scanf(%ld,&

55、amp;m); /* 从键盘输入变量从键盘输入变量m的值的值 */ while(m=2); /* 若若m=2,则结束,则结束dowhile循环循环 */ k=(int)sqrt(m); /* 将将sqrt(m)取整后赋值给变量取整后赋值给变量k */ for(i=2;i=k;i+) if(m%i=0) /*若若m不是素数,则将素数标志不是素数,则将素数标志flag置为置为0并结束循环并结束循环*/ flag=0; break; if(flag) /* 若素数标志若素数标志flag=1,则输出该数是素数,则输出该数是素数 */ printf(%d is a prime mumber.n,m);

56、else /* 若素数标志若素数标志flag=0,则输出该数不是素数,则输出该数不是素数 */ printf(%d is not a prime mumber.n ,m);4.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材程序运行结果:程序运行结果:input a integer:35 35 is not a prime mumber.input a integer:19 19 is a prime mumber.4.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 例例4.17 把一元钱换成把一元钱换成5分,分

57、,2分,分,1分的零钱,统计共有多少种换法。分的零钱,统计共有多少种换法。 用用a、b、c分别表示换的分别表示换的5分、分、2分、分、1分的张数,则分的张数,则a、b、c的值应该的值应该满足:满足:5*a+2*b+c=100。4.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main() int a,b,c,cnt=0; for(a=0;a=20;a+) /* 本循环表示本循环表示5分的有多少种换法分的有多少种换法 */ for(b=0;b=50;b+) /* 本循环表示本循环表示2分的有多少种换法分的有多少种换法 */ f

58、or(c=0;c=100;c+) /* 本循环表示本循环表示1分的有多少种换法分的有多少种换法 */ if(5*a+2*b+c=100) cnt+; /* 经过三重循环后,统计出有多少种换法经过三重循环后,统计出有多少种换法 */ printf(count=%dn,cnt); /* 输出结果输出结果 */程序运行结果:程序运行结果:count=5414.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例4.18 计算用户输入的两个正整数之间的所有整数中计算用户输入的两个正整数之间的所有整数中0,1,2,9数码的个数。例如,数码的个数。例如,101104

59、之间总共包含四个整数之间总共包含四个整数101,102,103,104,其中,其中0的个数为的个数为4,1的个数为的个数为5,2、3、4的的个数为个数为1,其余数码没有出现都为,其余数码没有出现都为0。 要计算某整数中包含的各个数码的个数,必须对该整数进要计算某整数中包含的各个数码的个数,必须对该整数进行分解,求得所包含的各个数码,其方法可以通过每次除以行分解,求得所包含的各个数码,其方法可以通过每次除以10取余数得到,然后再对商进行同样的处理,直到商为取余数得到,然后再对商进行同样的处理,直到商为0时为止。时为止。对所得到的数码进行计数,可采用对所得到的数码进行计数,可采用switch语句来

60、实现。语句来实现。4.7 程序举例程序举例普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材#include void main() int num1,num2,n,s,r; int cnt0=0,cnt1=0,cnt2=0,cnt3=0,cnt4=0; int cnt5=0,cnt6=0,cnt7=0,cnt8=0,cnt9=0; do /* 循环用于从键盘上输入两个正整数循环用于从键盘上输入两个正整数 */ printf(input two integer:); scanf(%d %d,&num1,&num2); while(num10|num2num2); /*若若num10或或num2num2,则退出循环则退出循环*/ for(n=num

温馨提示

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

评论

0/150

提交评论