计算机c语言ppt课件.ppt
《计算机c语言ppt课件.ppt》由会员分享,可在线阅读,更多相关《计算机c语言ppt课件.ppt(93页珍藏版)》请在三一办公上搜索。
1、1,第五章,循环结构程序设计,2,循环结构,循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体。 在C语言中可以用以下语句来实现循环:1、用while语句;(“当”循环)2、用do-while语句;(“直到”循环)3、用for语句;(计数循环)4、用goto语句和if语句构成循环。,3,5.1 while循环,1、while 语句 常称为“当型”循环语句。,循环体,非零,零,表达式,4,2 、while 的格式: while (表达式) 循环体;特点:先判断表达式,后执行语句。说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环条件表达式不
2、成立(为零)循环体内遇break,return,goto无限循环:,while(1) 循环体;,5,例 (ch5_01.c)求1+2+3+4+5+100。,#include main() int i=1,sum=0; while(i=100) sum+=i; i+; printf(%d,sum);,循环初值,循环终值,循环变量增值,6,例 (ch5_02.c)显示110的平方,#include main() int i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; (total.c;totalb.c;total5w.c;fib.c;calc3.c)
3、,运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100,7,5.2 dowhile循环,1、do-while语句 常称为“直到型”循环语句。,8,2、do-while的格式: do 循环体; while (表达式);特点:先执行,后判断。说明:至少执行一次循环体dowhile可转化成while结构例:用dowhile求 1+2+3+4+5+100。 (ch5_03.c),#include main() int i,sum=0; i=1; do sum+=i; i+; while(i=100); printf(%d,s
4、um); ,9,1. 循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。 2. 循环体中应有使循环趋于结束的语句。例:分析下列三个程序段,使用循环结构要注意:,10,当循环结构:main () int i,sum=0;i=1; while(i=100) sum=sum+i; i+ ; printf(“%dn”,sum); ,直到循环结构:main()int i,sum=0;i=1; do sum=sum+i;i+; while(i=100);printf(“%dn”,sum);,11,5.3 for循环,1、C语言中最灵活、最复杂的循环语句;,可以用于循环次数确定的情况;
5、可以用于循环次数不确定的情况; 可实现while和do-while语句所有功能。,非0,0,12,2、for的格式:for (表达式1;表达式2;表达式3) 循环体 说明:for语句中expr1, expr2 ,expr3 类型任意,都可省略,但分号不可省.无限循环: for ( ; ; )for语句可以转换成while结构,13,sum=0; for(i=1;i=100;i+) sum=sum+i; 它相当于以下语句:i=1; while (i=100) sum=sum+i; i+; ,表达式1;while(表达式2) 语句; 表达式3; ,14,3、for语句中表达式的省略,(1)for语
6、句一般形式中的“表达式1”可以省略;如: sum=0;i=1; for ( ; i=100;i+) sum=sum+i;(2)表达式2省略,即不判断循环条件,循环无终止地进行下去;如: for(sum=0,i=1;i+) sum=sum+i;,if(i100) break;,15,(3)表达式3也可以省略,但此时要保证循环能正常结束;如:for(sum=0,i=1;i=100;) sum=sum+i; i+; (4) 可以省略表达式1和表达式3,只有表达式2;如:i=1; sum=0;i=1;sum=0; for (;i=100;) while (i=100) sum=sum+i; sum=s
7、um+i; i+; i+; ,16,(5)三个表达式都可省略;如: for ( ; ; ) 循环体; 相当于 while (1) 循环体; 即不设初值,不判断条件,循环变量不增值。无终止地执行循环体。如: sum=0,i=1; for(;) if(i100) break; sum=sum+i; i+; ,17,(6)循环体为空语句。 对for语句,循环体为空语句的一般形式为: for (表达式1;表达式2;表达式3) ;如:for(sum=0,i=1;i=100;sum+=i, i+) ;又如: 要在显示器上复制输入的字符,输入的字符为.时, 结束循环。 while(putchar(getch
8、ar( ) )!=. ) ;,输入:abcdefg. 输出:abcdefg.,18,例:#include main( ) int i=0; for(;i10;putchar(a+i),i+); ,例:#include main( ) int i=0; for(;i10;) putchar(a+(i+); ,例:#include main( ) int i; for(i=0;i10;i+) putchar(a+i); ,运行结果:abcdefghij,例:#include main( ) int i=0; for(;i10;i+) putchar(a+i); ,(exmp5for.c),19,#
9、includemain() char c; for(;(c=getchar()!=n;) printf(%c,c); (exmp5frc.c),main() int i,j,k; for(i=1,j=100;i=j;i+,j-) k=i+j; printf(%d+%d=%dn,i,j,k); (exmp5frj.c),20,循环终止条件的种类:1.关系表达式: 如前几例2.逻辑表达式: for (; ab ,21,例 输入30个09的字符数字,计算数字串中有多少个奇数,偶数和零 ?思路: 输入30个字符数字char num,而不是整数 30个字符的输入和30个数字的输入的区别 字符可以连续输入
10、30个 009764146589. 数字输入必须是用空格,Tab键或回车隔开 0 0 9 7 6 4 1 4 6 5 8 9 将字符变成数字后判断奇偶 i=num-0; 字符数字的ASCII码:48 49 50 51 52 53 54 55 56 57,22,步骤:计数变量n1,n2,n3初始值设为零;输入1个字符num;循环变量初值为1;若i=30,重复字符变成数字,num=num-0判断num是否为0判断num2的值循环变量i+再输入1个字符num输出n1,n2,n3的值。,输入num,n1=0,n2=0,n3=0,i=1,i=30,num=num-0,num%2,n1+,n2+,n3+,
11、输出n1,n2,n3 的值,num=0,Y,N,i+,输入num,Y,N,23,main() int i, n1=0,n2=0,n3=0; char num; scanf(“%c”, (exmp5jol.c),24,解题思路 每当我们读入一张选票,只有6种情况,将它们加到相应的人选上。 读入-1结束循环。 通过switch的case语句作为开关。,例 统计选票。现有选票如下3,1,2,1,1,3,3,2,1,2,3,3,2,1,1, 3,2,0,1,4,-1. -1是结束标志。设1选李, 2选张,3选王,0和4为废票,谁会当选?,25,main() int vote,l_vote,z_vote
12、,w_vote, invalidvote; l_vote=0; z_vote=0; w_vote=0; invalidvote=0; scanf(“%d”,26,例 输入一个整数,计算它的位数.并反向输出.分析:设一个数13579,一位一位地切下末位循环结束条件: num=0;同时计数 count=count+1;,135,1357,13579,7,9,5,13,bit,bit=num%10,num=num/10,1357,9,135,7,13,5,3,1,3,27,main() long int num; int count = 0; printf(“Please enter an inte
13、ger:n”); scanf(“%ld”, (exmp5rev.c),28,1、goto语句 1) 无条件转移语句; 形式: goto 标号; 2)有标号的语句称为标号语句; 形式: 标号:语句; 3) goto语句在使用时只能转移到goto所在的函数内的标号语句处,不能转移到该函数外; 4) 可以从多重循环的内层转移到最外层,而break只能跳出一层循环。,满足标识符的规定,5.5 goto、break和continue语句,29,main() int i=1,sum=0; loop: if (i101) sum=sum +i; i+; goto loop; printf(“SUM = %f
14、n”,sum); ,30,2、break语句一般形式: break;功能:跳出所在的多分支switch语句跳出所在的while、do-while、for循环语句(提前结束循环)。3、continue语句一般形式: continue;功能:提前结束本次(本轮)循环体的执行,接着进行下一次循环条件的判别。,31,break语句,main() int i; for(i=1;i=5;i+) printf(n%5d,i); printf(%5d,i); ,main() int i; for(i=1;i=5;i+) printf(n%5d,i); if(i=3) break; printf(n%d,i);
15、 ,1 1 2 2 3 3 4 4 5 5,1 1 2 2 3,当i=3时,结束循环,32,continue语句,main() int i; for(i=1;i=5;i+) printf(n%5d,i); printf(%5d,i); ,main() int i; for(i=1;i=5;i+) printf(n%5d,i); if(i=3) continue; printf(n%d,i); ,1 1 2 2 3 3 4 4 5 5,1 1 2 2 3 4 4 5 5,当i=3时,结束本次循环体的执行,33,for( e1;e2;e3) if(e) continue; ,break与conti
16、nue的区别,for( e1;e2;e3) if(e) break; ,34,例(ch5_05.c)输出110中不是3的倍数的数。main() int n;for (n=1;n=10;n+) if (n%3=0) break; printf(“%d,”,n); ,输出:1,2,,输出:1,2,4,5,7,8,10, 不输出3的倍数的数字,35,main() int i,num=0,a; float sum=0; for(i=1;i=10;i+) scanf(%d,例 求输入的十个整数中正数个数及其平均值,(ch5_06.c),36,(1) while() while() . ,(2) do d
17、o while( ); . while( );,(3) while() do while( ); . ,5.6 循环的嵌套,三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环嵌套循环的执行流程嵌套循环的跳转禁止:从外层跳入内层跳入同层的另一循环,(4) for( ; ;) do while(); while() . ,内循环,外循环,内循环,37,()当外层循环结构每执行一次循环时,内层循环结构在一般情况下要从循环的开始到循环的正常结束从头到尾执行一遍。 例1 ()在内层循环结构中使用break语句可以提前结束本次内层循环结构的执行,而不影响外层循环结构的继续执行。例2 ()如果程序因某
18、种原因需要从内层循环体跳出整个循环结构,此时才可考虑使用 goto 语句。例3 ()对于并列的循环结构,控制循环执行的变量名字可以相同。在嵌套循环结构中,内、外层控制循环执行的变量名字不能相同。 例4,对于嵌套循环结构的几点说明:,(nestfor.c),38,例1:main() int i,j; for(i=0; i3;i+) for(j=1;j=4;j+) printf( %d,j); printf(n); 运行后输出:,1 2 3 4 1 2 3 4 1 2 3 4,例2:main() int i,j; for(i=0; i3;i+) for(j=1;j=4;j+) printf( %d
19、,j); if( ! (j%3) ) break; printf(n); 运行后输出:,1 2 3 1 2 3 1 2 3,39,例4: main() int i, j; for( i=0; i3; i+) printf( %d, i ); printf(n ) ; for( i=1; i=4; i+) printf(%d, i ) ; 运行后输出:,例3:main() int i, j; for( i=0; i3; i+) for( j=1;j=4;j+) printf( %d,j); if( ! (j%3) ) goto K; printf(n); K: ;运行后输出:,1 2 3,0 1
20、 2 1234,40,分析:求累加和ss=0for(k=1;k=n;k+) 求累乘积tk s=s+tk求累乘积tk=k!tk =1for(i=1;i=k;i+) tk=tk*i,main( )int i,k,n;long s, t; printf(nInput n:);scanf(%d,Input n:5s=153,例 求1!+2!+n! (ch5_07.c),内外层循环控制变量不要同名。,41,main() int i,k,n; long s, t; printf(nInput n:); scanf(%d,n=3s k k3 外循次数 t i ik 内循次数,Input n:,3,s=9,4
21、2,例(ch5_08.c)循环嵌套,输出九九表。,43,44,#include main() int i,j; for(i=1;i=9;i+) printf(%4d,i); printf(n-n); for(i=1;i=9;i+) for(j=1;j=i;j+) printf(%4d,i*j); printf(n);,显示表头,45,1,4,3,2,46,分析: 行的控制 i:19 *的个数j与当前行的关系: j=2*i-1 *前面的空格k与行的关系: 开始时,第一行有8个空格 每多一行,少一个空格k=9-iwhile (i=9)for (k=1;k=9-i;k+) 输出空格; for (j=
22、1;j=2*i-1;j+) 输出*; 换行;,*,47,main() int i,j,k; i=1; while (i=9) for(k=1;k=9-i;k+) printf(“ ”); for(j=1;j=2*i-1;j+) printf(“*”); printf(“n”); i+; ,48,例(ch5_04.c) 求fibonacci数列 0,1,1,2,3,5,8, 的前20项。fibonacci数列满足下面递归关系: F1=1 (n=1)F2=1 (n=2)Fn=Fn-1+Fn-2 (n3),分析: 1 1 2 3 5 8 13 a+ ba b+ a b a + b a b + a b
23、 ,49,main() int i,a,b,k=0;a=b=1; for(i=1;i=10;i+) printf(%10d%10d,a,b);a=a+b; b=a+b; k+=2; if(k%4=0) printf(n); ,987,610,377,233,144,89,55,34,21,13,8,5,3,2,1,1,6765,4181,2584,1597,50,1 i控制行: i 19 空格数: 9-i 121 j控制列: 第i行 左边数值: 1 i 12321 右边数值: i-1 1 .,12345678987654321,例 编程输出杨辉三角形 (1到9)。,51,(ch5_09.c)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 语言 ppt 课件

链接地址:https://www.31ppt.com/p-1438487.html