加法接力赛C语言算法,C语言循环结构

《C语言循环结构》由会员分享,可在线阅读,更多相关《C语言循环结构(47页珍藏版)》请在人人文库网上搜索。

1、UML和需求建模,第六章,循环控制,UML和需求建模,主要内容,6.1 概述 6.2 goto语句以及用goto语句构成循环 6.3 用while语句实现循环 6.4 用do-while语句实现循环 6.5 用for 语句实现循环 6.6 循环的嵌套 6.7 几种循环的比较 6.8 break语句continue和语句 6.9 程 序 举 例,UML和需求建模,6.1 概述,什么是循环? 为什么要使用循环,问题1,问题2:求学生平均成绩,UML和需求建模,循环,UML和需求建模,生活中的例子: 击鼓传花:大家坐成一个圈,鼓声响起的时候将花束顺序交到下一个人的手里,依次向下传递,当鼓声突然中断时。

2、停止传花,花束落在谁的手里便成为输家 4100米接力赛跑:第1个人跑完100米后将接力棒传给第2个人,第2个人再跑100米,然后是第3个人,直到第4个人跑完最后一个100米 共同点: 都要完成相同的任务:量变的重复内容 都有结束条件:发生质变的界限,UML和需求建模,6.2 goto语句以及用goto语句构成循环,goto语句无条件转向语句 goto 语句标号; 语句标号用标识符表示, 例如:goto label_1; 合法; goto 123; 不合法,UML和需求建模,例6.1】 用goto语句和if语句构成循环, 计算sum=1+2+3+100 。 main() int i,sum=0;。

3、 i=1; loop: if(i=100) sum=sum+i; i+; goto loop; printf(%dn,sum);,UML和需求建模,6.2 goto语句以及用goto语句构成循环,滥用goto语句将使程序流程无规律、可读性差. 不建议使用goto语句。 一般来说,可以有两种用途: (1) 与if语句一起构成循环结构; (2) 从循环体中跳转到循环体外,UML和需求建模,6.3 用while语句实现循环,while语句用来实现“当型”循环结构。 一般形式: while (表达式) 语句 执行过程:计算表达式值,若该值为非0时,则执行while语句中的内嵌语句。然后重复上述步骤,直。

4、到表达式值为假(为0),则执行while语句的下一条语句。 其特点是:先判断表达式,后执行语句,循环体语句,UML和需求建模,6.3 用while语句实现循环,注意: 循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。 在循环体中应有使循环趋向于结束的语句,UML和需求建模,1. 计算sum=1+2+3+100,UML和需求建模,第5章 循环程序设计,1. 计算sum=1+2+3+100,循环体,循环控制条件,循环控制变量,循环的初始化,include void main( ) int i=1, sum=0 ; while ( i = 100 ) sum = sum + i。

5、 ; i+ ; printf ( “Sum = %d n”, sum ) ;,UML和需求建模,第5章 循环程序设计,2. 计算sum=2+4+6+100,循环体,循环控制条件,循环控制变量,循环的初始化,include void main( ) int i=2, sum=0 ; while ( i = 100 ) sum = sum + i ; i+=2 ; printf ( “Sum = %d n”, sum ) ;,UML和需求建模,2. 计算sum=2+4+6+100,循环体,循环控制条件,循环控制变量,循环的初始化,include void main( ) int i=2, sum=。

6、0 ; while ( i = 100 ) sum = sum + i ; i+=2 ; printf ( “Sum = %d n”, sum ) ;,UML和需求建模,6.4 do-while语句,do-while语句的特点: 先执行循环体,然后判断循环条件是否成立。 一般形式: do 循环体语句 while (表达式,执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”) 时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束,UML和需求建模,6.4 用do-while语句实现循环,while语句和用do-while语句的比较: 二者是完。

7、全等价的。 do-while语句有可能一次也不执行循环体,UML和需求建模,循环的变化:sum=1+2+3+100,include void main( ) int i=1, sum=0 ; while ( i= 100 ) sum = sum + i; i+ ; printf ( “Sum = %d n”, sum ) ;,include void main( ) int i=1, sum=0 ; do sum = sum + i ; i+; while ( i= 100 ); printf ( “Sum = %d n”, sum ) ;,UML和需求建模,顺序打印1-10的阶乘,即1!, 。

8、2!, , 10,本题的关键是求阶乘 数学上,n!=123(n-1)n,UML和需求建模,外循环,内循环,对比程序:(更优) #include void main( ) int i=1; float f = 1; while( i = 10 ) f = f * i; printf( %2d! = %.0f n, i, f ); i + ; 思考一下:8-10的阶乘,include void main( ) int i=1, j ; float f ; while( i = 10 ) j = 1; f = 1; while( j = i ) f = f * j; j + ; printf( “ 。

9、%2d! = %.0f n”, i, f ); i + ;,UML和需求建模,6.5 用for 语句实现循环,一般形式: for(表达式1;表达式2;表达式3) 语句,表达式1:初始化表达式,只执行一次 表达式2:循环控制表达式,控制循环的结束 表达式3:增量表达式 ,使表达式2趋向于假,UML和需求建模,6.5 用for 语句实现循环,for语句的执行过程: (1) 先求解表达式1。 (2) 求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环转到第(5)步。 (3) 求解表达式3。 (4) 转回上面第(2)步骤继续执行。 。

10、(5) 循环结束,执行for语句下面的一个语句,UML和需求建模,任意输入10个数,求平均值,include void main( ) int i ; float x, sum=0 ; printf( Enter 10 numbers one by one: n ); for( i =1 ; i=10 ; i+) scanf( %f,UML和需求建模,例:顺序打印1-10的阶乘,即1!, 2!, 3!, , 10,include void main( ) int i, j ; float f ; for( i=1; i = 10 ; i+ ) f = 1; for( j=1; j = i ; 。

11、j+ ) f = f * j; printf( %2d! = %.0f n, i, f );,include void main( ) int i=1, j ; float f ; while( i = 10 ) j = 1; f = 1; while( j = i ) f = f * j; j + ; printf( “ %2d! = %.0f n”, i, f ); i + ;,UML和需求建模,例:打印几何图形,对于这类问题,每行中星号的个数、总行数等都应该用循环结构进行控制,而不是直接输出若干行字符串,include void main( ) int i, j ; for(i=1; i。

12、 = 4; i+ ) for( j = 0; ji ; j+ ) putchar( ); for( j = 1; j=4 ; j+ ) putchar(*); putchar(n);,UML和需求建模,for语句的变化形式,可以省略for语句的“表达式1”或“表达式3”,也可以都省略(“退化为”while语句,例:将用键盘输入的若干字符顺序输出到屏幕上,include void main( ) char ch ; for( ; (ch=getchar( ) ) !=n ; ) putchar( ch ) ;,UML和需求建模,6.6 循环的嵌套,一个循环体内又包含另一个完整的循环结构 称为循环。

13、的嵌套。内嵌的循环中还可以嵌套 循环,这就是多层循环。 三种循环(while循环、do-while循环和for循 环)可以互相嵌套,UML和需求建模,6.6 循环的嵌套,下面几种都是合法的形式: (1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while(,UML和需求建模,6.6 循环的嵌套,4) while( ) (5) for(;) (6) do do while( ) for(;) while( ) while(,UML和需求建模,错误的嵌 套形式,循环必须是完整的,不允许内外循环交叉嵌套 f = 1; while。

14、( i 10) i=1; do f = f * i; i +; while( i10,混乱的控 制条件,内外循环的循环控制条件通常是分开的,相对独立的 i=1; s=0; while ( i 3 ) s = s + f; i = 1; f=1; while( i5) i +=2; f = f * i; i+ ;,UML和需求建模,6.7 几种循环的比较,1)四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用goto型循环。 (2)在while循环和do-while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语。

15、句(如i+,或i=i+1等,UML和需求建模,6.7 几种循环的比较,for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。因此for语句的功能更强,凡用while循环能完成的,用for循环都能实现。 (3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化,UML和需求建模,6.7 几种循环的比较,4)while循环、do-while循环和for循环,可以用break语句跳出循环,用continue语句结束本次循环(break语句和continue语。

16、句见下节)。而对用goto语句和if语句构成的循环,不能用 break语句和continue语句进行控制,UML和需求建模,6.8 break语句和continue语句,6.8.1 break语句 break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句 一般形式: break; 注意:break语句不能用于循环语句和switch语句之外的任何其他语句中,UML和需求建模,6.8 break语句和continue语句,例:计算r=1到r=10时的圆面积,直到面积area大于100为止。 float pi=3.14159; for( ) area=pi*r*r; pri。

17、ntf(r=%f,area=%fn,r,area);,当area100时,执行break语句,提前结束循环,即不再继续执行其余的几次循环,r=1;r=10;r,r=1;r=10;r,if(area100) break,UML和需求建模,6.8 break语句和continue语句,6.8.2 continue语句 作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定. 一般形式: continue,UML和需求建模,6.8 break语句和continue语句,continue语句和break语句的区别 continue语句只结束本次循环,而不是终止整个循环的。

18、执行,while(表达式1) for if(表达式2) continue;,UML和需求建模,6.8 break语句和continue语句,continue和break的区别 break语句则是结束整个循环过程,不再判断执行循环的条件是否成立,while(表达式1) for if(表达式2) break;,UML和需求建模,6.9 程序举例,例6.6用/41-1/3+1/5-1/7+公式求的近似值,直到某一项的绝对值小于为止。 N-S图表示算法,UML和需求建模,fabs(t ()=1e-6,float s=1.0,pi=0; int s=1,n=1; while( ) pi+=t; n+=2。

19、; s=-s; t=s/n; pi*=4,UML和需求建模,6.9 程序举例,例6.7 求Fibonacci数列前40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即: F(1)=1 (n=1) F(2)=1 (n=2) F(n)=F(n-1)+F(n-2) (n3) 算法如图所示,UML和需求建模,6.9 程序举例,例6.8 判断m是否素数。 算法思想:让m被2到除,如果m能被2之中任何一个整数整除,则提前结束循环,此时i必然小于或等于k(即);如果m不能被2k(即)之间的任一整数整除,则在完成最后一次循环后,i还要加1,因此i=k+1,然后才终止。

20、循环。在循环之后判别i的值是否大于或等于k+1,若是,则表明未曾被2k之间任一整数整除过,因此输出“是素数,UML和需求建模,UML和需求建模,float k; int m,i=2; scanf(“%d”,k=sqrt(m,if (m%i=0) break,ik+1,UML和需求建模,6.9 程序举例,例6.10 译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。 思路:可以按以下规律将电文变成密码: 将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D,UML和需求建模,练习 1.已知在某C语言编译系统中表达式siz。

21、eof(int)的值是2,如果希望将常量-70 000正确地保存在一个变量a中,该变量声明语句应该是________。 A. int a;B. long int a;C. unsigned int a;D. unsigned long int a; 2.常量n的数据类型是_________。 3.C语言的源程序中若出现常量1L,则该常量的类型是__________。 4.(2005年秋)以下声明中错误的是______________。 A.int a=0 xFFB.double a=1.2e0.5C.long a=2L D. char a=72,UML和需求建模,练习:以下程序运行后的输出结果。

22、的第一行是_________,第二行是__________。 #include void main() int i=5; do switch(i%2) case 0: i-; break; case 1: i-; continue; i-;printf(%dn, i); while(i0);,UML和需求建模,计算 (1!)+(1!+2!)+(1!+2!+3!)+(1! +2!+3!+20!)。 main() int i, n; double s=0, t; for(i=1;i=20;i+) _______; for(n=1; ______;n+) t=t*n;s=s+t; printf(1!)+(1!+2!)+(1! +2!+20!)=%en,s。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值