




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2008-9-26,程序设计基础(C语言)wh,1,第 四 章,循环结构程序设计,2008-9-26,程序设计基础(C语言)wh,2,熟练掌握三种循环语句的基本结构以及循环语句的嵌套。 掌握goto语句的一般形式。 熟练掌握break、continue跳转语句使用 使用三种基本结构编写简单的程序,本章重点,2008-9-26,程序设计基础(C语言)wh,3,4.1循环的概念,循环: 就是有规律地重复执行某些语句的过程。,例如:要计算0到360度的正弦函数,要求每隔0.1度计算一次,如果没有循环结构,则: . x=0.0; y=sin(x); printf(“y=%f”,y); x=0.1; y
2、=sin(x*3.14159/180.0); printf(“y=%f”,y); 对于如此简单的问题,需要10000多条语句。,2008-9-26,程序设计基础(C语言)wh,5,循环结构来处理重复计算的问题。 对于上述问题可以用以下程序: for(i=0;i=3600;i+) x=i*3.14159/1800.0; y=sin(x); printf(“y=%f”,y); 显然,这段程序简洁易懂。,2008-9-26,程序设计基础(C语言)wh,6,4.2 for循环,for循环通过for语句实现。 for语句的一般格式为: for(表达式1;表达式2;表达式3)语句 表达式1用于循环赋初始值
3、,它只能执行一次; 表达式2是循环条件; 表达式3用于对循环条件的修改,以使循环能趋于结束。,2008-9-26,程序设计基础(C语言)wh,7,执行过程:,执行表达式1,计算表达式2并判断,循 环 体,执行表达式3,=0,非0,2008-9-26,程序设计基础(C语言)wh,8,例如:求从1加到100的程序。程序如下:,main() int s,i; s=0; for(i=1;i=100;i+) s=s+i; printf(sum=%d,s); ,循环体!,结果: sum=5050,2008-9-26,程序设计基础(C语言)wh,9,for语句-使用要点,1、for语句中的表达式1可以省略,
4、但在for循环之前 应给循环变量赋值. 例如:i=1;for(;i=100;i+) sum=sum+i; 2、表达式2也可以省略,但循环将陷入死循环. 例如:for(i=1;i+) sum=sum+i; 3、表达式3也可以省略,但应在循环体中增加使循环变量值改变的语句. 例如:for(sum=0,i=0;i=100;) sum=sum+i; i+;,2008-9-26,程序设计基础(C语言)wh,10,4、表达式1和表达式3同时省略也允许, 例如:i=1;sum=0; for(;i=100;) sum=sum+i; i+; 这是完全与while循环等同. 5、三个表达式都可以省略,但“;”不能
5、省略。 for(;) sum=sum+i; 循环将无休止的执行下去,for语句-使用要点,2008-9-26,程序设计基础(C语言)wh,11,for语句-使用要点,6、表达式1中的表达式可以是循环变量的赋初值的表达式,也可是与赋初值根本无关的其他表达式,或者两者兼而有之.例如:for(sum=0,i=1;i=100;i+) sum=sum+i; 表达式3也可以出现同样的情况,例如: for(sum=0,i=1;i=100;sum=sum+i,i+);,2008-9-26,程序设计基础(C语言)wh,12,7、表达式2一般清况下是关系表达式或逻辑表达式,也可以是其他表达式, 例如: for(;
6、(c=getchar()!=n;printf(“%c”,c); 若输入:cauc 输出为cauc, 不是输出ccaauucc.,for语句-使用要点,2008-9-26,程序设计基础(C语言)wh,13,例 求Fibonacci数列1,1,2,3,5,8 的前30个数 F1=1 F2=1 Fn=Fn-1+Fn-2 2=1+1 3=1+2 5=2+3 8=3+5 在一次循环中计算两项,递推公式为: F1=1 F2=1 (初值) F1=F1+F2 F2=F2+F1,2008-9-26,程序设计基础(C语言)wh,14,main() long int f1,f2; int i,n printf(“I
7、nput n:”); scanf(“%d”, ,2008-9-26,程序设计基础(C语言)wh,15,例 利用公式计算 ex=1+x/1!+x2/2!+x3/3!+xn/n! 对于求级数的和,常用递推公式法: 递推公式法 t0=1 ti= ti-1 .x/i (i=1,2,n) 程序如下:,2008-9-26,程序设计基础(C语言)wh,16,main() int i,n; double t,x,ex; ex=1.0; t=1.0; printf(“Enter value of n,x:”); scanf(“%d%lf”, ,2008-9-26,程序设计基础(C语言)wh,17,例 求10个大
8、于0小于100的数中的最大数和最小数 置初值的方法一般有两种: 1)极值法:取有界数据的上界作为最小值 的初值,取有界数据的下界作为最大的初值 2)成员法:取一批数据的第一个数作为最 大值和最小值的初值。,2008-9-26,程序设计基础(C语言)wh,18,main() int a,i,max,min; max=0;min=100; for (i=1;ia) min=a; printf(“Max=%d,Min=%dn”,max,min); ,方法1:极值法,2008-9-26,程序设计基础(C语言)wh,19,方法2:成员法,#include void main( ) int a,i,max
9、; scanf(%d, ,2008-9-26,程序设计基础(C语言)wh,20,for语句-范例,#include void main(void ) int i,n; long fact=1; printf(please input n:); scanf(%d, ,例:求n!,2008-9-26,程序设计基础(C语言)wh,21,for语句例2: 求一个等差数列前n项的和: ai+1-ai=d (i=1,2,3) 分析:1 输入n、d和等差数列的第一个数a的取值。 2 sum 、i的初值置0 3 a+sumsum 4 计算数列中下一个数的取值 a+da 5 i+1i 6 重复3、4、5步直到i
10、大于n 7 输出结果n,for语句-范例,2008-9-26,程序设计基础(C语言)wh,22,#include void main(void) int a,d,n,i; int ai,sum=0; printf(“input a=?td=?tn=?n”); scanf(“%d%d%d”, ,2008-9-26,程序设计基础(C语言)wh,23,for语句的特点: 1、使用了三个表达式 2、循环控制变量可以在循环体内使用,也可以不使用,仅用来控制循环次数 3、从正常出口离开循环时,循环控制变量会超过终值,2008-9-26,程序设计基础(C语言)wh,24,for语句练习,练习:求 (即求1+
11、2!+3!+4!+20!)。,2008-9-26,程序设计基础(C语言)wh,25,4.3 while循环当型循环,while循环通过while语句实现。 while语句的一般格式为: while(表达式)语句,2008-9-26,程序设计基础(C语言)wh,26,while语句的执行过程为: (1)计算并判断表达式的值。若值为0,则结束循环,退出while语句;若值为非0,则执行循环体。 (2)转步骤(1)。,while语句的执行过程,2008-9-26,程序设计基础(C语言)wh,27,执行过程:,计算表达式并判断,循 环 体,=0,非0,2008-9-26,程序设计基础(C语言)wh,2
12、8,#include void main(void) int a = 1, sum = 0; while(a = 100) sum += a; a+; printf(%d, sum); ,while语句-范例,100 例如:求 n n=1,注意“边界值”的选择!,应有使循环趋于结束的语句!,结果: Sum=5050,2008-9-26,程序设计基础(C语言)wh,29,例:统计从键盘输入的一行字符的个数。 #include void main(void) int num=0; printf(请输入一行字符:); while( getchar( ) !=n) num+; printf(共输入了%
13、d个字符!,num); ,while语句-范例,2008-9-26,程序设计基础(C语言)wh,30,while语句-范例,例:个位数是6,且能被3整除的5位数共有多少个? #include void main(void ) long int n=10006; int count=0; while(n=99999) if(n%3=0) count+; n+=10; printf(“count=%dn”,count); ,练习:能被3整除的3位偶数共有多少个?,2008-9-26,程序设计基础(C语言)wh,31,例 利用辗转相除法,求两个正整数的 最大公约数 算法: 1)若J=0,则I为最大公
14、约数 2)若J不为0 将I除以J,余数为K I=J;J=K 转1),2008-9-26,程序设计基础(C语言)wh,32,main() int i,j,temp; printf(“Enter 2 integers:”); scanf(“%d%d”, ,2008-9-26,程序设计基础(C语言)wh,33,1.圆括号中的表达式可以是任意表达式,它仅用来测试表达式的结果值是零值还是非零值,用以决定循环进行的条件,称为“判终表达式”,一般是关系表达式或逻辑表达式,与条件语句一样可进行如下简化: while(x != 0) while(x) while(x = 0) while(!x),While语句
15、-使用要点(当型循环),2008-9-26,程序设计基础(C语言)wh,34,2.当判终表达式为非零常量时,这样的while语句为无穷循环语句,如: while(1) 语句; / 无穷循环语句 3. while语句的循环体通常是一个复合语句,也可以是简单语句,甚至可以是一个空语句。 4.在循环体中应有使循环趋于结束的语句,以避免“死循环”。,While语句-使用要点,2008-9-26,程序设计基础(C语言)wh,35,4.4 do-while循环直到型循环,do-while循环通过do-while语句实现。 do-while语句的一般格式为: do 语句 while(表达式);,2008-9
16、-26,程序设计基础(C语言)wh,36,do-while语句的执行过程为: (1)执行循环体语句。 (2)计算并判断表达式的值。若值为0,则结束循环,退出while语句;若值为非0,则转步骤 (1)。,do-while语句的执行过程,2008-9-26,程序设计基础(C语言)wh,37,执行过程:,计算表达式并判断,循 环 体,=0,非0,2008-9-26,程序设计基础(C语言)wh,38,#include void main(void) int i,sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(“%d”,sum); ,do-whil
17、e语句-范例,100 例如:求 n n=1,无论表达式的值是多少,循环体至少执行一次!,结果: Sum=5050,2008-9-26,程序设计基础(C语言)wh,39,用牛顿迭代法求方程f(x)= -6x-1=0在2.5附近的一个实根.直到满足:,所以,Y=f(x),x,y,O,牛顿迭代公式为:,在几何意义上:,do-while语句范例:,2008-9-26,程序设计基础(C语言)wh,40,已知:,求出:,算法:1、输入x的初值 2、做循环: x0=x 按牛顿迭代公式计算x 直到满足: 3、输出结果,2008-9-26,程序设计基础(C语言)wh,41,#include math.h mai
18、n( ) float x,x0; printf(nInput x:); scanf(%f, ,2008-9-26,程序设计基础(C语言)wh,42,例:个位数是6,且能被3整除的5位数共有多少个? #include void main(void ) long int n=10006; int count=0; do if(n%3=0) count+; n+=10; while(n=99999); printf(“count=%dn”,count); ,do-while语句-范例,练习:个位数是奇数,且能被7整除的4位数共有多少个?,2008-9-26,程序设计基础(C语言)wh,43,do-w
19、hile语句与while语句的本质区别,while语句是先计算并判断表达式的值。若其值为非 0,则执行循环体;若其值为0,则退出循环。 do-while语句则首先执行循环体,然后再计算并判断表 达式的值。因此,do-while语句至少要执行一次循环体。,2008-9-26,程序设计基础(C语言)wh,44,1.与while语句类似,判终表达式可以是任意表达式,它仅用来测试表达式的值是零值还是非零值,用以决定循环进行的条件. 2.do-while语句的循环体既可以是一个复合语句,也可以是一个简单语句。但即使循环体是一个简单语句,包围它的一对大括号也不能省略。,do-while语句-使用要点,20
20、08-9-26,程序设计基础(C语言)wh,45,4.5 跳转语句4.5.1 continue语句,continue语句用于提前结束循环中的一轮循环。当程序执行到continue语句时,就跳过循环中后面还未执行的语句,回到循环的起始处,继续进行下一轮的循环。 continue语句常与if 语句联合起来使用,以便在满足一定条件时提前结束本轮循环。 功能:结束本次循环,接着判定下一次是否 执行循环。,2008-9-26,程序设计基础(C语言)wh,46,continue语句-范例1例如,对除5的倍数以外的1100的数求和。, s=0; for(i=1;i=100;i+) if(!(i%5) con
21、tinue; s+=i; printf(SUM=%dn,s); ,2008-9-26,程序设计基础(C语言)wh,47,例:把100200之间的不能被3整除的数输出. #include void main(void) int n; for(n=100;n=200;n+) if (n%3= =0) continue; printf(“%d”,n); ,continue语句-范例2,2008-9-26,程序设计基础(C语言)wh,48,4.5.2 break语句,ISO/ANSI C+标准中规定的跳转语句有 break语句、continue语句、return语句和goto语句等。return语句将
22、在第6章介绍。 1. break语句的功能:用于从循环体内跳出循环体,即提前结束循环。 2.使用要点:break只能用在循环语句和switch语句中.,2008-9-26,程序设计基础(C语言)wh,49,例 如,此循环本是无限循环,因加上了break语句,使程序在输入字符常量!时就终止循环。, for(;) scanf(%c, ,2008-9-26,程序设计基础(C语言)wh,50,for(r=1;r100) break; printf(“%f”,area); ,break语句-范例1,例:计算r=1到r=10的圆面积,当面积大于100时结束循环.,2008-9-26,程序设计基础(C语言)
23、wh,51,break语句-范例2,Break语句例2: 某银行利息2.8%(以复利计)。假设某储户存入本金8000元,当满足以下条件之一,储户从银行将钱取出。 (1)储蓄满10年 (2)连本带息超过10000元 编程求储户会在第几年将钱取出,取出时连 本带息是多少?,2008-9-26,程序设计基础(C语言)wh,52,#include void main(void) int year; float money=8000; for(year=1;year10000) break; printf(“%d year %fn”,year,money); ,2008-9-26,程序设计基础(C语言)
24、wh,53,continue与break的比较,continue与break的区别: continue只结束本次循环,而不是终止整个 循环。而break终止本层循环,不再会去判 断执行循环体的条件是否成立。,2008-9-26,程序设计基础(C语言)wh,54,2008-9-26,程序设计基础(C语言)wh,55,4.5.3 goto语句,1、一般形式为: goto 语句标号; 2、例: 100 #include 求 n void main( ) n=1 int i,sum=0; i=1; 运行结果为:5050 loop :if (i=100) sum=sum+i; i+; goto loop
25、; printf(“%d”,sum); 3、说明:目前goto语句很少使用,过多的使用goto语句会降低程序的可读性。,2008-9-26,程序设计基础(C语言)wh,56,注意:,goto语句对结构程序设计有影响。它将使程序的结构不清晰。应尽可能用break和continue语句代替goto 不能用goto语句从循环的外层跳到循环的内层,否则会导致程序的混乱。,2008-9-26,程序设计基础(C语言)wh,57,goto语句的举例:,main() int x,y,z; for(x=1;x=32;x+) for(y=1;y=48;y+) z=100-x-y; if(z%3=0),结果: he
26、n=5 cock=32 chicken=63,goto语句,2008-9-26,程序设计基础(C语言)wh,58,4.6 多重循环,多重循环: 嵌套多层循环结构的循环。 外循环: 处于外层的循环称为外循环。 内循环: 处于内层的循环称为内循环。,2008-9-26,程序设计基础(C语言)wh,59,12,1,2,3,4,5,6,7,8,9,10,11,多重循环的等效,2008-9-26,程序设计基础(C语言)wh,60,循环语句嵌套,#include void main(void) int i,j; for(i=1;i=3;i+) for(j=1;j=8;j+) putchar(*); pri
27、ntf(n); ,例 输出图形 * * *,2008-9-26,程序设计基础(C语言)wh,61,循环语句嵌套,例: 编写一个九九乘法表的程序 A方式:,#include void main() int i,j;/*定义两个下标变量i和j*/ for(i=1;i=9;i+) for(j=1;j=9;j+) printf(%4d,i*j); printf(n); ,2008-9-26,程序设计基础(C语言)wh,62,A方式运行结果:,1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24
28、28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81,2008-9-26,程序设计基础(C语言)wh,63,循环语句嵌套,例: 编写一个九九乘法表的程序 方式B:,#include stdio.h void main() int i,j; for(i=1;i10;i+) for(j=1;j10;j+) printf(%d*%d=%-4d,i,j,i*j); printf(n
29、); ,2008-9-26,程序设计基础(C语言)wh,64,B方式运行结果:,1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9 2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 5*1=5 5*2=10 5*3=15 5*4=20
30、 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81,2008-9-26,程序设计基础
31、(C语言)wh,65,循环语句嵌套,例: 编写一个九九乘法表的程序 C方式分析:九九乘 法表分9行,第i 行共i个小项。 i*j i=1,2,9 j=1,2,i,#include void main(void) int i,j; for(i=1;i=9;i+) for(j=1;j=i;j+) printf(“%d*%d=%-4d”,i,j,i*j); printf(“n”); ,2008-9-26,程序设计基础(C语言)wh,66,C方式运行结果:,1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=1
32、0 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81,2008-9-26,程序设计基础(C语言)wh,67,例 输出下面图案 ABCDE BCDE CDE DE E,#include “stdio
33、.h” main() int i; char ch; for(i=0;i5;i+) for(ch=A+i;chA+5;ch+) printf(“%c”,ch); printf(“n”); ,2008-9-26,程序设计基础(C语言)wh,68,多重循环举例,main() int x,y,z,flag=0; for(x=1;x=32;x+) for(y=1;y=48;y+) z=100-x-y; if(z%3=0 ,结果: hen=5 cock=32 chicken=63,外循环,内循环,例 百元买百鸡,母鸡3元/只,公鸡2元/只,小鸡3只/元.,2008-9-26,程序设计基础(C语言)wh,
34、69,例 求1M之间的全部素数 要判断一个数N是否素数,只需判断2N之间的整数是否能整除N,如能整除,则不是素数 程序使用了二重循环,程序如下:,2008-9-26,程序设计基础(C语言)wh,70,if(j=i+1) if (l5) printf(“%dt”,n); l+; else printf(“%dn”,n); l=0; ,#include “math.h” main() int n,m,i,j,l=0; scanf(“%d”,2008-9-26,程序设计基础(C语言)wh,71,应用举例,应用例1:输入一行字符,分别统计其中字母、空格、数字及其他字符的个数。 分析: 1 读入一个字符
35、到变量c 2 判断c是哪一类,再给相应计数的变量加1 3 重复1、2直到c等于n,2008-9-26,程序设计基础(C语言)wh,72,#include stdio.h void main() char c; int letters=0,space=0,digit=0,other=0; printf(please input one group of charactor:n); while(c=getchar()!=n) if(c=a ,2008-9-26,程序设计基础(C语言)wh,73,应用举例,应用例2:假定小兔子一个月就可以长成大兔子,而大兔子每个月都会生出一对小兔子。如果年初养了一对小兔子,问到年底时将有多少对兔子? (当然得假设兔子没有死亡而且严格按照上述规律长大与繁殖),2008-9-26,程序设计基础(C语言)wh,74,应用举例,兔子问题分析表,2008-9-26,程序设计基础(C语言)wh,75,应用举例,每一个月份的兔子总数与上一个月的数字有什么联系? “兔子问题”很容易列出一条递推式而得到解决。假设第N个月的兔子数目是F(N),我们有: Fibonacci数列满足以下递推关系: f(1)=1 f(2)=1 f(n)=f(n-1)+f(n-2),2008-9-26,程序设计
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 病毒与生物安全法律法规合同
- 壁画与古代渔业技术合同
- 保险业保险业风险报告编制合同
- 休闲农业园区场地调研与农产品加工合同
- 老人病患护理课件
- 翻译相关课件
- 美术用具介绍课件
- 单位工作总结怎样写
- 服装生产车间安全培训
- 安全生产法7个职责
- 镁合金半固态注射成型技术的研究与发展
- 企业管理咨询重点总结
- 2025年广东深圳美术馆选聘专业技术岗位工作人员1人历年自考难、易点模拟试卷(共500题附带答案详解)
- 腹股沟疝诊疗指南(2024版)
- 2025年吉林司法警官职业学院单招职业技能测试题库完整版
- 2024年上海中学自主招生数学试卷
- 秋季开学班主任培训
- 护理实习生职业规划
- 安徽省合肥市普通高中六校联盟2023-2024学年高一下学期期末联考试题 化学 含解析
- 9《天上有颗南仁东星》 【知识精研】八年级上册同步备课
- 小号独奏名曲100首
评论
0/150
提交评论