1、While、do-while、for语句循环嵌套Break、continue、goto语句exit()函数循环结构类型的选择及转换循环结构程序设计举例本章小结,学习目标,理解循环结构的含义; 掌握C语言三种循环结构的特点; 掌握while、do-while、for、goto、break、continue语句的使用方法; 掌握不同循环结构的选择及其转换方法; 掌握混合控制结构程序设计的方法。,学习内容,5.1 循环结构的程序设计,1. while语句,一般形式:,while (表达式) 循环体语句;,执行流程:,其中:while后面的括号( )不能省。while后面的表达式可以是任意类型的表达式
2、,但一般是条件表达式或逻辑表达式。表达式的值是是循环的控制条件。语句部分称为循环体,当需要执行多条语句时,应使用复合语句。,特点:先判断表达式,再执行循环体,说明: 循环体有可能一次也不执行 循环体如包括有一个以上的语句,则必须用 括起来,组成复合语句。 下列情况,退出while循环 条件表达式不成立(为零) 循环体内遇break,return,goto 无限循环: while(1)循环体;,【例5-1】 用while语句求1100的累计和。,#include void main ( ) int i = 1, sum = 0; while ( i = 100 ) sum += i; i+; p
3、rintf (“sum = %dn“, sum); ,循环初值,循环终值,循环条件,循环体,循环变量增值,运行结果: sum = 5050,注意:循环要赋初值,初值要放在循环体外。,【例6-1p】显示110的平方,#include void main ( ) int i = 1;while ( i = 10 ) printf (“%d*%d=%dn“, i, i, i*i);i+;,运行结果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100,(1) 如果while后的表达式的值一开始就为假,循环体将一次
4、也不执行。(2) 循环体中的语句可为任意类型的C语句。 (3) 遇到下列情况,退出while循环:表达式为假(为0)。循环体内遇到break、return或goto语句(break和goto语句将在随后介绍)。,while语句注意事项:,int a = 0, b = 0; while (a 0) /a 0为假,b+不可能执行b+;,(4) 在执行while语句之前,循环控制变量必须初始化,否则执行的结果将是不可预知的。(5) 要在while语句的某处(表达式或循环体内)改变循环控制变量,否则极易构成死循环。(6) 允许while语句的循环体又是while语句,从而形成双重循环。,while语句
5、注意事项:,例:计算10! #include void main ( )int i; / i应赋初始值10long s = 1;while (i = 1)s *= i-;printf (“10! = %ldn“, s);,i = 1; while (i 100) /死循环,因为i的值没变化,永远小于100sum += i; printf (“sum = %dn“, sum);,i = 1; while (i = 9)j = 1;while (j = 9)printf (“%d * %d = %dn“, i, j, i * j);j+;i+;,while(1)循环体;,【例6-2】求两个正整数的
6、最大公因子。我们采用Euclid(欧几里德)算法来求最大公因子,其算法是:(1) 输入两个正整数m和n。(2) 用m除以n,余数为r,如果r等于0,则n是最大公因子,算法结束,否则(3)。(3) 把n赋给m,把r赋给n,转(2)。,#include void main ( ) int m, n, r;printf (“Please input two positive integer: “);scanf (“%d%d“, ,运行结果: Please input two positive integer: 24 56 Their greatest common divisor is 8,main
7、()int a=1,n;printf(“n input n: “);scanf(“%d“, ,输入:n=2,n-=2 a+ a=1 a+*2 输出:2 n=1 a=2,n=1 a=2 a+ a=2 a+*2 输出:4 n-=0 a=3,2. do_while语句,一般形式:,do 循环体语句; while(表达式);,执行流程:,其中:while后面的括号( )不能省。while最后面的分号;不能省。while后面的表达式可以是任意类型的表达式,但一般是条件表达式或逻辑表达式。表达式的值是是循环的控制条件。语句部分称为循环体,当需要执行多条语句时,应使用复合语句。,特点:先执行循环体,再判断表
8、达式,【例5.2】 用do_while语句求1100的累计和。,#include void main ( ) int i = 1, sum = 0; do sum += i; i+; while ( i = 100 );printf (“sum = %dn“, sum); ,运行结果: sum = 5050,空复合词句作为循环体dowhile();空语句作为循环体do;while();死循环 do while(1) ;,do_while语句注意事项:,int a = 0, b = 0;dob+; while (a 0) ;,(1) 如果do-while后的表达式的值一开始就为假,循环体还是要执
9、行一次。 (2)在if语句、while语句中,表达式后面都不能加分号,而在do-while语句的表达式后面则必须加分号,否则将产生语法错误。(3) 循环体中的语句可为任意类型的C语句。(4) 和while语句一样,在使用do-while语句时,不要忘记初始化循环控制变量,否则执行的结果将是不可预知的。(5) 要在do-while语句的某处(表达式或循环体内)改变循环控制变量的值,否则极易构成死循环。(6) do-while语句也可以组成多重循环,而且也可以和while语句相互嵌套。,例5.3 while和dowhile比较,#include main() int i,sum=0;scanf(“
10、%d“, ,main() int i,sum=0;scanf(“%d“, ,输入:1,输出:55,输出:55,输入:11,输出:11,输出:0,Do while语句先执行循环体i+,sum=0+11. 再判断表达式i=10,不满足,退出。 While语句先判断表达式i=10,不满足,退出,不执行循环体,当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同;否则不相同,3. for语句,一般形式:,for (表达式1;表达式2;表达式3)循环体语句;,执行流程:,其中:for后面的括号( )不能省。表达式1:一般为赋值表达式,给控制变量赋初值。表达式2:关系表达式或逻辑表达式,
11、循环控制条件。表达式3:一般为赋值表达式,给控制变量增量或减量。表达式之间用分号分隔。语句部分称为循环体,当需要执行多条语句时,应使用复合语句。,for语句很好地体现了正确表达循环结构应注意的三个问题:控制变量的初始化。循环的条件。循环控制变量的更新。,【例5-4】 用for语句求1100的累计和。,#include void main ( ) int i , sum = 0; for (i = 1; i = 100; i+) sum += i; printf (“sum = %dn“, sum); ,运行结果: sum = 5050,for语句注意事项:,例:计算1*2+3*4+5*6+99
12、*100。 int i, j; long sum = 0; for ( i =1, j = 2; i = 99; i = i + 2, j = j + 2 )sum += i *j; printf (“sum = %ldn“, sum);,(1) 表达式1、表达式2、和表达式3可以是任何类型的表达式。比方说,这三个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成。,逗号表达式,逗号表达式,#include void main ( ) int i, sum = 0;i = 1;for ( ; i = 100; i+)sum += i;printf(“sum = %dn“, sum);
13、,#include void main ( ) int i, sum = 0;i = 1;for ( ; i = 100; )sum += i+;printf(“sum = %dn“, sum); ,for语句注意事项:,省掉表达式1,3,省掉表达式1,(2) 表达式1、表达式2、和表达式3都是任选项,可以省掉其中的一个、两个或全部,但其用于间隔的分号是一个也不能省的。,#include void main ( ) int i, sum = 0;i = 1;for ( ; ; )if (i 100) break;sum += i+;printf(“sum = %dn“, sum); ,省掉表达
14、式1,2,3,;不能省,main() int i,j,k;for(i=0,j=10;i=j;i+,j-) k=i+j;printf(“%d+%d=%dn“,i,j,k); ,表达式1和表达式3可以是逗号表达式,逗号表达式按从左到右原则,取最右边表达式的值,0+10=10 1+9=10 2+8=10 3+7=10 4+6=10 5+5=10,注意: i=0,j=10 表达式值:10 但i=0 j=10依然被赋值,for语句注意事项:,for (a = 1; ; a+)printf (“,(3) 表达式2如果为空则相当于表达式2的值是真 。,死循环!,(4) 循环体中的语句可为任意类型的C语句。(
15、5) for语句也可以组成多重循环,而且也可以和while语句和do-while语句相互嵌套。(6) 循环体可以是空语句。,例:计算用户输入的字符数(当输入是回车符时统计结束)。 #include void main ( ) int n = 0;printf (“input a string:n“);for ( ; getchar( ) != n; n+) ; printf (“%d“,n); ,表示循环体为空语句,并非表示for语句结束,(7)无限循环: for(;)相当于:while(1)语句 (8) for语句可以转换成while结构,expr1; while(expr2) 循环体语句;
16、expr3; ,例 用for循环求,#include main() int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(“%d“,sum); ,for(i=1; i=100; i+) sum=sum+i; 等同于 i=1; while(i=100) sum=sum+i;i+; ,例1:(用for循环实现) 计算 s=1+2+3+n (n1)例2:说明以下循环语句的循环次数。 for (i=0; i=0; i-); 答: (3) i=1; while (ij;i+,j-); 答:,n-1次,n+1次,n-1次,1次,0次,0次,for(k=1;k=n;k+) s
17、+=k;,练习,x=3; do x-;printf(“%d,”,x); while(x=0); 答:(2) s=0;for(i=0,j=100;i=j;i+,j-) s+=i+j;printf(“%d”,s); 答:,2,1,0,-1,5100,显然,i+j100,i从0到50,共循环51次,例3:分析以下程序的输出结果,练习,例1:计算s=1+2+3+n (n1) #include “stdio.h” main() int s,k,n;printf(“Input n=“);scanf(“%d”, 则可省去复合词句。,练习,问题与思考: /*L1*/行中,若令k的初值为0,请填空:s=0;k=
18、0;while( ) s+=k+; 答: (2) 将/*L2*/行进行如下改动,请填空:s=0;k= ;while( ) k+; s+=k; 答:,s=0;k=1; /*L1*/while(k=n) s+=k; k+; /*L2*/,练习,应填入 k=n或kn+1,第一空应填入 0,或-1 第二空应填入kn或k=n-1,s=1+2+n,s=0+1+2+n,k=0 k+=1 k=-1 k+=0,三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程,(1) while() while() .,(2) do do while( );.while( );,(3)
19、while() do while( );.,嵌套循环的跳转 禁止:从外层跳入内层跳入同层的另一循环向上跳转,4. 循环嵌套,例 循环嵌套,输出九九表,#include main() int i,j;for(i=1;i10;i+)printf(“%4d“,i);printf(“n-n“);for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?“%4dn“:“%4d“,i*j); ,1.i=1,j=1 i*j=1*1=1,2.i=1 j=2 i*j=1*2=2,3. i=1 j=9 i*j=9 换行,4.i=1,j=10 内循环结束 i=2,j=1,外循环赋初值,先做
20、内循环,内循环结束,跳转到外循环,外循环改变初值,再做内循环。依次类推,直到外循环也不被满足,则跳出整个循环,for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?“%4dn“:“%4d“,i*j);,1.i=1,j=1 i*j=1*1=1,2.i=1 j=2 i*j=1*2=2,3. i=1 j=9 i*j=9 换行,4.i=1,j=10 内循环结束 i=2,j=1,几种循环的比较,四种循环都可以用来处理同一个问题,一般可以互相代替。但一般不提倡用goto型循环。while和do-while循环,循环体中应包括使循环趋于结束的语句。for语句功能最强。用whil
21、e和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化。,5. break与continue语句,break语句 功能:在循环语句和switch语句中,终止并跳出循环体或开关体 说明: (1) break不能用于循环语句和switch语句之外的任何其它语句之中。 (2) break只能终止并跳出最近一层的结构。 (3) break语句对if-else的条件语句不起作用。,while (表达式1) if (表达式2) break; 语句,do if (表达式2) break; while (表达式1); 语句
22、,for (; 表达式1; ) if (表达式2)break; 语句,5.7.1 用break语句提前终止循环,例5.4 在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。,5.7.1 用break语句提前终止循环,编程思路: 循环次数不确定,但最多循环1000次 在循环体中累计捐款总数 用if语句检查是否达到10万元 如果达到就不再继续执行循环,终止累加 计算人均捐款数,5.7.1 用break语句提前终止循环,编程思路: 变量amount,用来存放捐款数 变量total,用来存放累加后的总捐款数 变量aver,用来存放人均捐款数 定
23、义符号常量SUM代表100000,#include #define SUM 100000 int main() float amount,aver,total; int i;for (i=1,total=0;i=SUM) break; aver=total / i ; printf(“num=%dnaver=%10.2fn“,i,aver); return 0; ,指定符号常量SUM代表100000,#include #define SUM 100000 int main() float amount,aver,total; int i;for (i=1,total=0;i=SUM) brea
24、k; aver=total / i ; printf(“num=%dnaver=%10.2fn“,i,aver); return 0; ,应该执行1000次,#include #define SUM 100000 int main() float amount,aver,total; int i;for (i=1,total=0;i=SUM) break; aver=total / i ; printf(“num=%dnaver=%10.2fn“,i,aver); return 0; ,达到10万,提前结束循环,#include #define SUM 100000 int main() fl
25、oat amount,aver,total; int i;for (i=1,total=0;i=SUM) break; aver=total / i ; printf(“num=%dnaver=%10.2fn“,i,aver); return 0; ,实际捐款人数,方法:通过设置一标志变量tag,然后在每层循环后加上一条语句:if (tag) break; 其值为1表示跳出循环体,为0则不跳出。,for () while ()if () break; while循环后的第一条语句 ,int tag = 0; for () while ()if () tag = 1; break; if ( t
26、ag ) break; for循环后的第一条语句,多重循环中,break的使用,问:在嵌套循环的情况下,如何让break语句跳出最外层的的循环体?,continue语句 功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断。 说明: (1) 仅用于循环语句中。 (2) 在嵌套循环的情况下,continue语句只对包含它的最内层的循环体语句起作用。,for () while ()if () continue; while循环后的第一条语句 ,break和continue的区别 (1)break能用于循环语句和switch语句中,continue只能用于循环语句中。(2)
27、 continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环 ,break结束整 个循环,不再判定循环条件是否满足。 (3)循环嵌套时,break和continue只影响包含它们的最内层循环,与外层循环无关。,N,表达式1,Y,表达式2,N,Y,N,表达式1,Y,表达式2,N,Y,break语句,continue语句,强行退出循环,只结束本次循环,5.7.2 用continue语句提前结束本次循环,例5.5 要求输出100200之间的不能被3整除的数。 编程思路: 对100到200之间的每一个整数进行检查 如果不能被3整除,输出,否则不输出 无论是否输出此数,都要接着检查下一个数(
28、直到200为止)。,N,n=100,n200,Y,n能被3整除,N,n=n+1,输出n,Y,for(n=100;n=200;n+) if (n%3=0)continue;printf(“%d “,n);,例5.6 输出以下4*5的矩阵。1 2 3 4 52 4 6 8 103 6 9 12 154 8 12 16 20,解题思路: 可以用循环的嵌套来处理此问题 用外循环来输出一行数据 用内循环来输出一列数据 按矩阵的格式(每行5个数据)输出,#include int main() int i,j,n=0;for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=
29、0) printf (“n”); printf (“%dt“,i*j); printf(“n“); return 0; ,累计输出数据的个数,控制一行内输出5个数据,#include int main() int i,j,n=0;for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (“%dt“,i*j); printf(“n“); return 0; ,双重循环,#include int main() int i,j,n=0;for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n
30、%5=0) printf (“n”); printf (“%dt“,i*j); printf(“n“); return 0; ,控制输出4行,#include int main() int i,j,n=0;for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (“%dt“,i*j); printf(“n“); return 0; ,控制每行中输出5个数据,#include int main() int i,j,n=0;for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0)
31、 printf (“n”); printf (“%dt“,i*j); printf(“n“); return 0; ,i=1时,j由1变到5 i*j的值是1,2,3,4,5,#include int main() int i,j,n=0;for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (“%dt“,i*j); printf(“n“); return 0; ,i=2时,j也由1变到5 i*j的值是2,4,6,8,10,如何修改程序,不输出第一行的空行?,#include int main() int i,j
32、,n=0;for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”);printf (“%dt“,i*j); printf(“n“); return 0; ,if (i=3 ,遇到第3行第1列,终止内循环,#include int main() int i,j,n=0;for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”);printf (“%dt“,i*j); printf(“n“); return 0; ,if (i=3 ,原来第3行第1个数据3没有输出,5.8循
33、环程序举例,例5.7用 公式求 的近似值,直到发现某一项的绝对值小于10-6 为止(该项不累计加)。,5.8循环程序举例,解题思路: 求 近似值的方法很多,本题是一种 其他方法:,5.8循环程序举例,每项的分子都是1 后一项的分母是前一项的分母加2 第1项的符号为正,从第2项起,每一项的符号与前一项的符号相反,5.8循环程序举例,#include #include int main() int sign=1; double pi=0,n=1,term=1;while(fabs(term)=1e-6) pi=pi+term;n=n+2; sign=-sign; term=sign/n; pi=p
34、i*4; printf(“pi=%10.8fn“,pi); return 0; ,求绝对值的函数,只保证前5位小数是准确的,#include #include int main() int sign=1; double pi=0,n=1,term=1;while(fabs(term)=1e-6) pi=pi+term;n=n+2; sign=-sign; term=sign/n; pi=pi*4; printf(“pi=%10.8fn“,pi); return 0; ,改为1e-8,例5.8 求费波那西(Fibonacci)数列的前40个数。这个数列有如下特点:第1、2两个数为1、1。从第3个
35、数开始,该数是其前面两个数之和。即:,这是一个有趣的古典数学问题: 有一对兔子,从出生后第3个月起每个月都生一对兔子。 小兔子长到第3个月后每个月又生一对兔子。 假设所有兔子都不死,问每个月的兔子总数为多少?,#include int main() int f1=1,f2=1,f3; int i;printf(“%12dn%12dn“,f1,f2);for(i=1; i=38; i+) f3=f1+f2;printf(“%12dn“,f3);f1=f2;f2=f3;return 0; ,代码可改进,#include int main() int f1=1,f2=1; int i;for(i=1
36、; i=20; i+) printf(“%12d %12d “,f1,f2); if(i%2=0) printf(“n“);f1=f1+f2; f2=f2+f1; return 0;,例5.9输入一个大于3的整数n,判定它是否素数(prime,又称质数)。 解题思路: 让n被i整除(i的值从2变到n-1) 如果n能被2(n-1)之中任何一个整数整除,则表示n肯定不是素数,不必再继续被后面的整数除,因此,可以提前结束循环 注意:此时i的值必然小于n,N,N,Y,n=i+1,输入n,i=2,i n-1,Y,n被i整除,i a,输出不是素数,Y,输出是素数,N,#include int main()
37、 int n,i;printf(“n=?“); scanf(“%d“, ,#include int main() int n,i;printf(“n=?“); scanf(“%d“, ,k=sqrt(n);,#include int main() int n,i,k;printf(“n=?“); scanf(“%d“, ,k=sqrt(n);,#include ,#include int main() int n,i,k;printf(“n=?“); scanf(“%d“, ,k=sqrt(n);,#include ,例5.10 求100200间的全部素数。 解题思路: 使用例5.9的算法 在
38、例5.9程序中只要增加一个外循环,先后对100200间的全部整数一一进行判定即可, for(n=101;n=k+1) printf(“%d “,n); m=m+1; if(m%10=0) printf(“n”); ,只对奇数进行检查,控制每行输出10个数据,例5.11 译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。A B C D E F G W X Y Z非字母字符保持原状不变 输入一行字符,要求输出其相应的密码,解题思路:问题的关键有两个:(1) 决定哪些字符不需要改变,哪些字符需要改变,如果需要改变,应改为哪个字符 处理的方法是:输入一个字符给字符变
39、量c,先判定它是否字母(包括大小写),若不是字母,不改变c的值;若是字母,则还要检查它是否W到Z的范围内(包括大小写字母)。如不在此范围内,则使变量c的值改变为其后第4个字母。如果在W到Z的范围内,则应将它转换为AD(或ad)之一的字母。,c=getchar();,解题思路:问题的关键有两个:(1) 决定哪些字符不需要改变,哪些字符需要改变,如果需要改变,应改为哪个字符 处理的方法是:输入一个字符给字符变量c,先判定它是否字母(包括大小写),若不是字母,不改变c的值;若是字母,则还要检查它是否W到Z的范围内(包括大小写字母)。如不在此范围内,则使变量c的值改变为其后第4个字母。如果在W到Z的范
40、围内,则应将它转换为AD(或ad)之一的字母。,if(c=a & c=A & c=Z),解题思路:问题的关键有两个:(1) 决定哪些字符不需要改变,哪些字符需要改变,如果需要改变,应改为哪个字符 处理的方法是:输入一个字符给字符变量c,先判定它是否字母(包括大小写),若不是字母,不改变c的值;若是字母,则还要检查它是否W到Z的范围内(包括大小写字母)。如不在此范围内,则使变量c的值改变为其后第4个字母。如果在W到Z的范围内,则应将它转换为AD(或ad)之一的字母。,if(c=W ,解题思路:问题的关键有两个:(2) 怎样使c改变为所指定的字母? 办法是改变它的ASCII值 例如字符变量c的原值
41、是大写字母A,想使c的值改变为E,只需执行“c=c+4”即可,因为A的ASCII值为65,而E 的ASCII值为69,二者相差4,char c; c=getchar(); while(c!=n) if(c=a ,可以改进程序,char c; while(c=getchar()!=n) if(c=A ,不能少,基本程序设计类型 一、统计(计数)问题 二、数列求和(求积):累加累乘递推法 三、字符图形 四、搜索(穷举)求解 五、数论有关问题 六、查找排序求最大值(最小值)数组 七、字符串处理 八、链表 九、文件处理,一、统计与计数问题方法:计数变量c的初值为0,每输入一个数据, 进行必要判断后,若
42、输入的数据满足统 计条件,则计数变量c自加1,这样当对 所有输入进行判断后,计数变量c的值就 是统计的结果,例2:输入一行字符,统计其中的英文字母个数。 提示:即输入到字符n时停止输入,#include “stdio.h” main() char ch; int n=0;printf(“Input a string:n”);while(1) ch=getchar();if(ch=n) break;if(ch=a ,二、数列求和求积:累加累乘递推法 1.基本累加累乘问题,累加求和与求均值,(1) (2) (3),累加法:求和变量初值一般为0,每循环一次,求和变量自加一个数据,这样循环结束后,求和
43、变量的值即为这些数据的和。,累乘法: 累乘变量初值一般为1,每循环一次,累乘变量自乘一个数据,这样当循环结束的时候,累乘变量的值即为这些数据连乘的积。例1. 输入n个100分制成绩(用整型),计算并输出平均成绩,要求输出精确到两位小数。,#include “stdio.h” #define n 10 main() double av=0; int score,i;printf(“Input %d int numbers:”,n);for(i=1;i=n;i+) scanf(“%d”, ,例2.6 将例2.1的算法用流程图表示。求12345 如果需要将最后结果输出:,1t,输出t,i5,开始,2
44、i,t*it,i+1i,结束,N,Y,#include #include main() int s;float n,t,pi;t=1; pi=0; n=1.0; s=1;while(fabs(t)=1e-6) pi=pi+t;n=n+2;s=-s;t=s/n;pi=pi*4;printf(“pi=%10.6fn“,pi); ,分子:1,-1,1,-1 分母:1,3,5,7,.,累加和,分母,分子,每一项,2.数列计算,求和求积,例 求Fibonacci数列:1,1,2,3,5,8,的前40个数,6.9 程序举例,#include main() long int f1,f2;int j;f1=1
45、; f2=1;for(j=1;j=20;j+) printf(“%12ld %12ld “,f1,f2);if(i%2=0) printf(“n“);f1=f1+f2;f2=f2+f1; ,j=1 f1=1,f2=1 f 1(f3)=f1+f2=1+1=2 f2(f4)=f2+f1(f3)=1+2=3,2. j=2 f 1(f3)= =2 f2(f4)=3 f 1(f5)=f1+f2=f3+f4=2+3=5 f 2(f6)=f2+f1=3+5=8,6.9 程序举例,j=1 计算出f3,f4 j=2 计算出f5,f6 j=20 计算出f40,三、字符图形 例1:*号图形 (打印行数n由键盘输入),* * * * * * * * * * * * * * *(1),* * * * * * * * * * * * *(2),* * * * * * * * * * * * * * *(3),* * * * * * * * * * *(4),* * * * * * * * * * * * * *(5),* * * * * * * * * * * * *(6),* * * * * * * * *(7),分析(2)号图形: 从第1行打印到第n行,打印第i行时(i从1n)首先打印n-i 个空格;接着打印 i个*号;换行;,