C语言程序设计 第5章 循环结构程序设计.ppt
5.1 5.1 whilewhile语句语句5.2 5.2 do-whiledo-while语句语句5.3 5.3 for for 语句语句5.4 5.4 breakbreak、continuecontinue和和gotogoto语句语句5.5 5.5 循环的嵌套循环的嵌套5.6 5.6 复合结构程序举例复合结构程序举例第五章 循环结构程序设计C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页教学目的和基本要求:教学目的和基本要求:要求学生了解循环结构程序设计,掌握各种循环语句应用的特点及异同点,掌握循环嵌套及复合结构。教学重点:教学重点:各种循环语句应用的特点及异同点。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 scanf(“%f”,&a);s=s+a;scanf(“%f”,&a);s=s+a;.这样重复一百次,然后这样重复一百次,然后 输出输出s的值。的值。这样写显然非常麻烦。我们注意到程序中的 scanf(“%f”,&a);s=s+a;两句话是一直重复的,如果能用一种语句,使这两句话能自动的重复执行一百次,就可以简化了书写的麻烦,这就是循环语句。编程解决这样的一个问题:编程解决这样的一个问题:从键盘输入一百个学生的成绩,求总成绩。从键盘输入一百个学生的成绩,求总成绩。从前面所学,有两种解决方法。从前面所学,有两种解决方法。1.设一百个变量,分别输入学生的成绩,然后求和。设一百个变量,分别输入学生的成绩,然后求和。这种方法浪费内存空间,显然不实际。这种方法浪费内存空间,显然不实际。2.设一个变量,每次输入一个学生成绩,累加后再输入下一个学生成设一个变量,每次输入一个学生成绩,累加后再输入下一个学生成绩,如下:绩,如下:C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 C语言有语言有while、do-while、和和for语句三种循环结构语句。语句三种循环结构语句。前两个称为条件循环,即根据前两个称为条件循环,即根据条件来决定是否继续循环;条件来决定是否继续循环;后一个称为计数循环,即根据后一个称为计数循环,即根据设定的执行次数来执行循环。设定的执行次数来执行循环。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页5.1 5.1 whilewhile语句语句一般形式一般形式:while(表达式表达式)语句语句表达式语句真假表达式1.1.计算表达式计算表达式语句2.2.如果表达式的值为非零如果表达式的值为非零,执行语句执行语句表达式3.返回第一步,重新计算表达式返回第一步,重新计算表达式4.如果表达式的值为零,则结束循环如果表达式的值为零,则结束循环如果表达式的值一开始就为如果表达式的值一开始就为0 0,则语,则语句一次也不会被执行。句一次也不会被执行。执行流程:执行流程:C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页while语句举例语句举例问题问题:求学生的平均成绩,以输入负数成绩为结束求学生的平均成绩,以输入负数成绩为结束 算法分析算法分析:1.定义变量定义变量score存储学生成绩,定义存储学生成绩,定义s=0存储累加的成绩,存储累加的成绩,定义定义n=0统计录入的成绩数目。统计录入的成绩数目。2.输入第一个学生的输入第一个学生的score 3.若若score=0,执行第执行第4步,否则执行第步,否则执行第7步步 4.n+5.s=s+score 6.录入下一个录入下一个score,并返回第并返回第3步步 7.如果如果n0,输出输出s/n否则输出没有学生成绩否则输出没有学生成绩C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页main()int n=0;float s=0,score;scanf(“%f”,&score);while(score=0)n+;s=s+score;scanf(“%f”,&score);if(n0)printf(“n%f”,s/n);else printf(“no student score!”);程序:程序:C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页5.2 dowhile语句一般形式一般形式:do 语句语句 while (表达式表达式);1.1.执行语句执行语句3.3.表达式的值为非零表达式的值为非零,返回第,返回第1步步4.表达式的值为零,结束循环表达式的值为零,结束循环语句至少被执行一次。语句至少被执行一次。表达式语句2.2.计算表达式计算表达式执行流程:执行流程:注意:注意:分号不能丢分号不能丢语句表达式真真假假C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页main()int n=0;float s=0,score;do scanf(“%f”,&score);n+;s=s+score;while(score=0);if(n1)printf(“n%f”,(s-score)/(n-1);else printf(“no student score!”);用用do-while语句编写统计学生平均成绩的程序:语句编写统计学生平均成绩的程序:由于由于do-while语句至语句至少要被执行一次,特少要被执行一次,特别要注意别要注意n和和s的取值的取值问题!问题!C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页想想这样的一段循环语句的执行结果想想这样的一段循环语句的执行结果:i=1;while(i=100)putchar(*);i+;这个循环永远不会结束这个循环永远不会结束,因为循环控制变量因为循环控制变量i没有没有在循环体内被改变,在循环体内被改变,i+;不属于循环体。不属于循环体。应该改为应该改为应该改为应该改为:i=1;i=1;while(i=100)while(i=100)putcharputchar(*);(*);i+;i+;循环语句中一定要注循环语句中一定要注意表达式的值是否能在意表达式的值是否能在循环执行过程中被改变,循环执行过程中被改变,以免造成死循环。以免造成死循环。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页5.3 for循环语句循环语句 for(for(表达式表达式1;1;表达式表达式2;2;表达式表达式3)3)循环体语句循环体语句一般形式:一般形式:1.计算表达式计算表达式1,通常用于循环开始前设,通常用于循环开始前设置变量初值。置变量初值。2.计算表达式计算表达式2,值为,值为0则结束循环,否则结束循环,否则执行第则执行第3步。步。3.执行循环体语句。执行循环体语句。4.计算表达式计算表达式3,返回第,返回第2步。步。执行流程执行流程表达式1表达式2循环体表达式3假真C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例例:求求 1+2+99#includemain()int i,s=0;for(i=1;i=99;i+)s=s+i;printf(“s=%d”,s);分析:用变量分析:用变量i i从从1 1到到9999循环,循环,把把i i的值累加到变量的值累加到变量s s中,最中,最后输出后输出s s的值。的值。程序如下:程序如下:i=1i=99s=s+ii+假真C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页从上面的程序我们看到,从上面的程序我们看到,for语句中:语句中:表达式表达式1:通常是给循环变量赋初值通常是给循环变量赋初值表达式表达式2:循环是否继续执行的判别表达式,这个表达循环是否继续执行的判别表达式,这个表达式通常与某一个(或多个)变量的值有关,随着这个式通常与某一个(或多个)变量的值有关,随着这个(些)变量的值的改变,表达式的结果发生变化,这(些)变量的值的改变,表达式的结果发生变化,这个(些)变量被称为循环因变量。个(些)变量被称为循环因变量。表达式表达式3:通常用于改变循环因变量的值。通常用于改变循环因变量的值。在某些情况下,在某些情况下,for语句中的表达式语句中的表达式1、2、3都可以都可以省略,而改用其他的方式来实现这些功能。我们还用省略,而改用其他的方式来实现这些功能。我们还用上面的例子说明上面的例子说明for语句省略表达式的情形。语句省略表达式的情形。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页1.省略表达式省略表达式1:#includemain()int i=1,s=0;for(;i=99;i+)s=s+i;printf(“s=%d”,s);2.省略表达式省略表达式3:#includemain()int i,s=0;for(i=1;i=99;)s=s+i;i+;printf(“s=%d”,s);3.同时省略表达式同时省略表达式1、3#includemain()int i=1,s=0;for(;i=99;)s=s+i;i+;printf(“s=%d”,s);表达式表达式2也可以省略也可以省略但在循环体中要借助但在循环体中要借助break;语句来实现循语句来实现循环的结束,我们将在环的结束,我们将在后面介绍。后面介绍。注意:表达注意:表达式省略,分式省略,分号不省略。号不省略。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 for语句中的表达式可以是一切形式的表达式,语句中的表达式可以是一切形式的表达式,逗号运算符参与的表达式也可以运用在逗号运算符参与的表达式也可以运用在for语句中,语句中,通常运用于表达式通常运用于表达式1和表达式和表达式3。如上面的例子可以改写为:如上面的例子可以改写为:#includemain()int i,s;for(s=0,i=1;ij时结束循环(即时结束循环(即i=j时继续循环)。最后输出时继续循环)。最后输出s。程序如下:程序如下:#includemain()int i,j;float s=0;for(i=1,j=100;i=j;i+,j-)s=s+(float)i/j;printf(“ns=%f”,s);C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页for、while、do-while的比较的比较 所有需要用到循环结构的程序,都可以用所有需要用到循环结构的程序,都可以用forfor、whilewhile、do-whiledo-while中的任何一个来实现,区别只在中的任何一个来实现,区别只在于某些问题用哪种语句更方便。于某些问题用哪种语句更方便。比如求比如求1+2+99的问题我们也可以分别用的问题我们也可以分别用while与与do-while语句编写如下:语句编写如下:用用while:#includemain()int i=1,s=0;while(i=99)s=s+i;i+;printf(“ns=%d”,s);用用do-while:#includemain()int i=1,s=0;dos=s+i;i+;while(i0,执行第执行第4步,否则执行第步,否则执行第7步步4.i=a%105.t=t*10+i6.a=a/10,并返回第并返回第3步步7.输出输出tC语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页程序:程序:#includemain()long a,i,t=0;scanf(“%ld”,&a);while(a0)i=a%10;t=t*10+i;a=a/10;printf(“n%ld”,t);在这里由于在这里由于a的值可能的值可能很大所以用到了很大所以用到了long型定型定义变量义变量a,如果希望取到的如果希望取到的值更大,可以用值更大,可以用unsigned long型。型。问:如果问:如果a用用double型,并型,并把把i=a%10改为改为i=(long)a%10;把把a=a/10改为改为a=(long)a/10 可以吗?可以吗?答:不可以!答:不可以!C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例:有数列例:有数列2/3、4/5、6/9、10/15求此数列前求此数列前30项的和。项的和。1.初值初值i=2,j=3,s=0;2.用用n从从1到到30循环循环5.输出输出s;3.s=s+i/j;4.c=i;i=j+1;j=c+j;算法分析:算法分析:对于数列的题,首先要找出通项公式,或前后项的计算关对于数列的题,首先要找出通项公式,或前后项的计算关系公式,根据公式求所需。由于数列的题一般执行次数能确定,系公式,根据公式求所需。由于数列的题一般执行次数能确定,用用for语句来编写比较方便。语句来编写比较方便。此题,前后项的关系是:后一项的分子是前一项的分母加此题,前后项的关系是:后一项的分子是前一项的分母加1,后一项的分母是前一项的分子加分母。解题思路是用循环,后一项的分母是前一项的分子加分母。解题思路是用循环语句求各项,并把值累加,因为是求前语句求各项,并把值累加,因为是求前30项的和,循环执行项的和,循环执行30次。次。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页程序:程序:#includemain()int i=2,j=3,n,c;float s=0;for(n=1;n99)break;s=s+i;i+;printf(“s=%d”,s);例:前面讲到的计算例:前面讲到的计算1+2+99的程序,可以同时省的程序,可以同时省略略for循环的三个表达式,改写成如下形式:循环的三个表达式,改写成如下形式:本程序中,当本程序中,当i99时,利用时,利用break语句强行终止语句强行终止for循环,继续执行循环,继续执行for语句后的下一条语句。语句后的下一条语句。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页5.4.2 continue语句语句 该语句被称为继续语句该语句被称为继续语句。在循环结构中执行在循环结构中执行continue语句语句,使本次循环提前结束,即跳过循环使本次循环提前结束,即跳过循环体中体中continrue语句下面的尚未执行的循环体语句,语句下面的尚未执行的循环体语句,但不结束整个循环,继续进行下一次循环的条件但不结束整个循环,继续进行下一次循环的条件判别,条件为真,继续进行执行循环语句。判别,条件为真,继续进行执行循环语句。一般形式:一般形式:continue;C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例:下面这个程序,想想它实现的是什么功能例:下面这个程序,想想它实现的是什么功能?#includemain()int i,s=0;for(i=1;i=100;i+)if(i%5=0)continue;s=s+i;printf(“n%d”,s);在左边的程序在左边的程序中,中,i从从1到到100循循环,当环,当i是是5的倍数的倍数时,直接进入下一时,直接进入下一个个i,当当i不是不是5的倍的倍数时,把数时,把i累加到累加到s,最后输出最后输出s。所以,所以,这个程序实现的是这个程序实现的是求求1100中间所有中间所有非非5的倍数的数之的倍数的数之和。和。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 5.5 循环的嵌套循环的嵌套 当当循循环环体体语语句句又又是是一一条条循循环环语语句句,或或作作为为循循环环体体的的复复合合语语句句中中又又包包含含循循环环语语句句时时称称为为循循环环的的嵌嵌套套。嵌嵌套套可可以以是是两两层层或或多多层层。While、do-while、for三种循环都可以互相嵌套。三种循环都可以互相嵌套。循环体语句可以是任何形式的语句,简单语循环体语句可以是任何形式的语句,简单语句、空语句、复合语句、流程控制语句都可作为句、空语句、复合语句、流程控制语句都可作为循环体语句。循环体语句。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例:输出例:输出nm中中(0n0,执行第执行第6步,否则执行第步,否则执行第9步步C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页#includemain()long a,x,i,t,n,m;scanf(“%ld%ld”,&n,&m);for(a=n;a0)i=x%10;if(i=5)printf(“t%ld”,a);break;x=x/10;程序:程序:问:问:能把能把a%3=0也放到也放到for循环语句的表达循环语句的表达式式2中,写成中,写成a=m&a%3=0吗?吗?答:不可以!答:不可以!C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例:求例:求3150中所有素数的和。中所有素数的和。算法分析:算法分析:1.用变量用变量a从从3到到150循环,每次值增加循环,每次值增加1 2.用变量用变量i从从2到到a-1循环,每次值增加循环,每次值增加1 3.若若a%i=0,结束结束i的循环,执行第的循环,执行第4步步 4.若若i=a,把把a累加到累加到s上。上。5.输出输出s的值的值 注意:此题中执行第注意:此题中执行第4步时有两种情况。第一种:在第步时有两种情况。第一种:在第3步步中发现了满足中发现了满足a%i=0的情况,直接跳出了的情况,直接跳出了i的循环,此时的的循环,此时的i一定是在一定是在2到到a-1中间的一个值,而且中间的一个值,而且a不是素数。第二种:一不是素数。第二种:一直没有发现满足直没有发现满足a%i=0的的i,在在i=a时,不再满足时,不再满足i循环的执行循环的执行条件,条件,i循环结束,此时的循环结束,此时的a是素数!是素数!C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页程序:程序:#includemain()int a,s=0,i;for(a=3;a=150;a+)for(i=2;i=a-1;i+)if(a%i=0)break;if(a=i)s=s+a;printf(“n%d”,s)求素数的方法很求素数的方法很多,大同小异。此多,大同小异。此题可以做一些改动题可以做一些改动。如:。如:i的值可以是的值可以是从从2取到取到sqrt(a);可;可以不用最后察看以不用最后察看i的的值,而是通过在发值,而是通过在发现因子时改动标志现因子时改动标志变量,最后根据标变量,最后根据标志变量的值判断是志变量的值判断是否是素数。否是素数。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 在前面的例子中,循环体内不但包含有循在前面的例子中,循环体内不但包含有循环语句,而且还包含有环语句,而且还包含有if这样的分支结构语句,这样的分支结构语句,这种循环体包含分支结构的形式,叫做复合结这种循环体包含分支结构的形式,叫做复合结构。构。下面,我们再看两个复合结构程序设计的下面,我们再看两个复合结构程序设计的例子。例子。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页例:有一个八层高的灯塔,每层所点灯数都等于上一层例:有一个八层高的灯塔,每层所点灯数都等于上一层的两倍,一共有的两倍,一共有765盏灯,求塔底灯数。盏灯,求塔底灯数。算法分析:算法分析:此题的关键在于塔顶的灯数,只要知道了塔顶的灯此题的关键在于塔顶的灯数,只要知道了塔顶的灯数,就可知道塔底灯数。这里采取试探的方法来求塔顶数,就可知道塔底灯数。这里采取试探的方法来求塔顶灯数。灯数。设塔顶灯数为设塔顶灯数为x,x的初值从的初值从1开始循环,每次值加开始循环,每次值加1。求出相应的灯的总数,总数不为求出相应的灯的总数,总数不为765,继续下一个,继续下一个x的循的循环,直到某次求得灯总数为环,直到某次求得灯总数为765时,结束时,结束x的循环,输出的循环,输出此时塔底灯数。此时塔底灯数。1.x从从1开始循环,每次值加开始循环,每次值加 1 6.出出k/22.设设s初值为零,用于累加每层灯数;设初值为零,用于累加每层灯数;设k初值为初值为x3.i从从1到到8循环,每次值加循环,每次值加15.如果如果s=765 ,结束结束x的循环的循环4.s=s+k;k=k*2;C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页程序:程序:#includemain()int x,s,i,k;for(x=1;x+)s=0;k=x;for(i=1;ibc0,a、b、c为整数,且为整数,且a+b+cbc、a+b+cb&bc&a+b+c100&c*c*(a*a+b*b)=a*a*b*b,统计找到了一组统计找到了一组 5.输出找到的组数输出找到的组数C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页程序:程序:#includemain()int a,b,c,n=0;printf(“n%d”,n);for(c=1;c=97;c+)for(b=c+1;b=98;b+)for(a=b+1;a=99;a+)if(a+b+cbc,而不而不需要再在需要再在if中判断。中判断。改进如左所示:改进如左所示:for(a=1;a=99;a+)for(b=1;b=99;b+)for(c=1;cb&bc&a+b+c100&c*c*(a*a+b*b)=a*a*b*b)n+;C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页#includemain()long int I,s=0;for(I=10;I=130;I+)s=s+I*I;printf(“n%d”,s);注意:注意:i一定要是一定要是 long int 型。型。编程练习编程练习1.10,130之间,所有整数的平方和。之间,所有整数的平方和。分析:用变量分析:用变量i从从10到到130循环,用变量循环,用变量s求和,求和,s初值为初值为0,每次循环,每次循环,s=s+i*i;C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页#include main()long int I,s=0;for(I=10;I=150;I+)if(I%2!=0)s=s+I*I;printf(“n%ld”,s);2.10,150奇数的平方和。奇数的平方和。分析:用变量分析:用变量s求和,求和,s初值为初值为0。用变量。用变量I从从10到到150循环,循环,如果如果I是奇数(是奇数(I%2!=0),则则s=s+I*IC语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页#include main()long int I,s=0;for(I=10;I=150;I+)if(I%3=0|I%7=0)s=s+I*I;printf(“n%ld”,s);3.10,150之间,能被之间,能被3或或7整除的数的平方和。整除的数的平方和。分析:用变量分析:用变量s求和,求和,s初值为初值为0。用变量。用变量I从从10到到150循环,循环,如果如果I能被能被3或或7整除(整除(I%3=0|i%7=0),则则s=s+I*IC语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页#include main()int I,n=0;for(I=1;I=800;I+)if(I%3=0&I%8=0)n+;printf(“n%d”,n);4.1,800中能被中能被3和和8整除的数的个数。整除的数的个数。分析:用变量分析:用变量n求个数,求个数,n初值为初值为0。用变量。用变量I从从1到到800循环,循环,如果如果I能被能被3和和8整除(整除(I%3=0&i%8=0),则则n+C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页#include main()int I;float s=0;for(I=1;I=50;I+)s=s+1.0/(I*I)printf(“n%.4f”,s);5.s=1+1/(2*2)+1/(3*3)+.+1/(m*m),求求m=50时的时的s(结果保留结果保留4位小数位小数)分析:用变量分析:用变量s求和,求和,s初值为初值为0。用变量。用变量I从从1到到50循环,循环,s=s+1/(I*I)C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页#include main()int n=1,s=0;do s=s+n*n;n=n+1;while(s5500分析:用变量分析:用变量s求和,求和,s初值为初值为0。用变量。用变量n从从1开始循环,每开始循环,每次次I增加增加1,如果,如果s5500,循环结束。循环结束。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页#include main()int I;float a=1;for(I=2;I=25;I+)a=1/(1+a);printf(“n%.10f”,a);7.a1=1 a2=1/(1+a1)an=1/(1+an-1),求求a25(结果保留结果保留10位小数位小数)分析:用变量分析:用变量a求项,求项,a初值为初值为1。用变量。用变量I从从2到到25循循环,环,a=1/(1+a)C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页#include main()int I;long int a=1;float s=0;for(I=1;I=10;I+)a=a*I;s=s+1.0/a;printf(“n%.10f”,s);8.1/1!+1/2!+.+1/10!(结果保留结果保留10位小数位小数)分析:用变量分析:用变量s求和,求和,s初值为初值为0。用变量。用变量a求阶乘,求阶乘,a初值为初值为1。用变量。用变量I从从1到到10循环,循环,a=a*I,s=s+1/a。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 main()float s=1;int n;long int a=1,b=1;for(n=1;n=40;n+)a=a*n;b=b*(2*n+1);s=s+(float)a/b;printf(“ns=%.10f”,s);9.求求s=1+1/3+(1*2)/(3*5)+(1*2*n)/(3*5*(2*n+1)当当n=40时的值。(结果保留时的值。(结果保留10位小数)位小数)分析:用变量分析:用变量s求和,求和,s初值为初值为1。用变量。用变量a用来求项的分子,用来求项的分子,变量变量b求项的分母,求项的分母,a、b初值均为初值均为1。用变量。用变量n从从1到到40循环,循环,a=a*n,b=b*(2*n+1),s=s+a/b。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页#include main()long int f1=1,f2=1,f,n;for(n=3;n=40;n+)f=f1+f2;f1=f2;f2=f;printf(“nf=%ld”,f);思考:求思考:求14万之内的最大的万之内的最大的f(n).10.数列数列 1,1,2,3,5,8.有有f(n)=f(n-1)+f(n-2),f(1)=1,f(2)=1,求求f(40)分析:用分析:用 变量变量f1、f2、f作为数列相邻的三项,初值作为数列相邻的三项,初值f1=1,f2=1。用变量用变量n从从3到到40循环,循环,f=f1+f2,f1=f2,f2=f.C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页#include main()int n;float s=0;for(n=1;n=1;a-)for(j=2;ja;j+)if(a%j=0)break;if(j=a&I20)break;printf(“n%d”,s);12.求求1000以内最大的以内最大的20个素数之和。个素数之和。分析:用变量分析:用变量s求和,求和,s初值为初值为0。用变量。用变量I统计以求得素统计以求得素数的个数,数的个数,I初值为初值为1。用变量。用变量a从从1000到到1循环,如果循环,如果a是是素数,并且素数,并且I值小于等于值小于等于20,则,则s=s+a,I+。当当i值大于值大于20时,时,跳出循环。素数求法同上题,用变量跳出循环。素数求法同上题,用变量j从从2到到a-1循环。循环。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 main()int a,b,n=0,I;for(a=200;a=998;a+)for(I=2;Ia;I+)if(a%I=0)break;if(a=i)b=a+2;for(I=2;Ib;I+)if(b%I=0)break;if(b=i)n+;printf(“n%d”,n);13.200,1000的双胞胎数的对数。双胞胎数:两素数差为的双胞胎数的对数。双胞胎数:两素数差为2称为双胞胎数。称为双胞胎数。分析:用变量分析:用变量n统计以求得双胞胎数的对数,统计以求得双胞胎数的对数,n初值为初值为0。用变量。用变量a从从200到到998循环,如果循环,如果a是素数,则令变量是素数,则令变量b=a+2,如果如果b也是素数,则也是素数,则n值值增增1。素数求法同前,用变量。素数求法同前,用变量i循环循环C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 main()int a,c,n=0,I;for(a=10;a=200;a+)c=0;for(I=1;I=1;a-)s=0;for(I=1;Ia;I+)If(a%I=0)s=s+I;if(a=s)break;printf(“n%d”,a);思考:求思考:求1000以内所有完数的和。以内所有完数的和。15.求求1000以内最大的完数。完数就是其真因子的和等于以内最大的完数。完数就是其真因子的和等于其本身的数。其本身的数。分析:用变量分析:用变量a从从1000到到1循环,如果循环,如果a等于其真因子的和,则循环结等于其真因子的和,则循环结束。判断束。判断a是否等于其真因子的和:用变量是否等于其真因子的和:用变量s求求a的真因子的和,的真因子的和,s初值初值为为0,用变量用变量I从从1到到a-1循环,如果循环,如果a%I=0,则则s=s+i。得出得出s值后,若值后,若a=s,则则a为所求。为所求。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页#include#include“math.h”main()double s,a=0,n;for(n=1;n=50;n+)a=a+log(n);s=sqrt(a);printf(“ns=%.6lf”,s);16.S=sqrt(ln(1)+ln(2)+ln(n)n=50(结果保留结果保留6位小数)位小数)分析:开平方数及自然对数都是分析:开平方数及自然对数都是math.h函数库中已定义函数库中已定义的函数。可用的函数。可用n从从1到到50循环直接求得。注意函数定义的循环直接求得。注意函数定义的数据类型。数据类型。C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页上一页下一页下一页 main()int a,b,s=6000,t;for(a=1;a(a+b)s=a+b;t=b;printf(“n%d”,b);17.0aa+b,则则s=a+b,并保存并保存b的值在变量的值在变量t.再见!再见!同学们:同学们: