《C语言循环结构程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言循环结构程序设计.ppt(88页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、,C语言程序设计,学习目标,熟练三种基本的循环控制语句,掌握循环的嵌套,第5章循环结构程序设计,能够应用基本的循环语句编写复杂的程序,课程回顾,单分支结构 if(条件) 语句1; 语句2;双分支结构 if(条件) 语句1; else 语句2;多分支结构 if (表达式1) 语句 else if (表达式) 语句 else 语句n,第5章循环结构程序设计,课程回顾,#include main() int x=1,a=0,b=0; switch(x) case 0: b+;break; case 1: a+; case 2: a+;b+;break; default: a+; printf(a=%
2、d,b=%dn,a,b); getch();,程序运行结果:,第5章循环结构程序设计,void main() int age; printf(请输入年龄:); scanf(%d,提高用户友好界面,限制年龄范围,无分号,作业点评,循环的必要性 1-1,int result1,result2,result3;int result4,result5;result1 = 1 * 10;printf(1 10 %d n,result1);result2 = 2 * 10;printf(2 10 %d n,result2);result3 = 3 * 10;printf(3 10 %d n,result3
3、);result4 = 4 * 10;printf(4 10 %d n,result4);result5 = 5 * 10;printf(5 10 %d n,result5);,1 10 102 10 203 10 304 10 405 10 50,输出结果,重复语句,循环的必要性 2-2,1 10 = 102 10 = 203 10 = 304 10 = 405 10 = 50,0 + 1,1 + 1,2 + 1,上个数字 + 1,.,重复 (上个数字 +1) 10,5.1 while语句,基本形式,一般为关系表达式或逻辑表达式,也可以是C语言其他类型的合法表达式 用来控制循环体是否执行,称
4、为内嵌语句,可以是基本语句、控制语句,也可以是复合语句是循环重复执行的部分,5.1 while语句,语句流程,while (表达式) 循环体语句;,1、循环体如果包含一个以上的语句,必须使用复合语句形式。2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。3、先判断表达式,后执行语句。,程序分析案例1,#include stdio.h int main() int n=9; n6是表达式 while(n6) 意思应该为只要n不小于6,就一直执行while后面的这一条语句; 大括号括起来的应该为内嵌语句 n-; 因为大于一条所以用括号包起来 printf(%d,n); 成为一条复合语句 r
5、eturn 0;,程序运行结果:,5.1 while语句,5.1 while语句,实例分析,用while循环求1100的累加和。,sum=1+2+100;,分析,首先设置一个累计器sum,其初值为0,利用sum += n来计算(n依次取1、2、100),只要解决以下3个问题即可: (1)将n的初值置为1; (2)每执行1次“sum += n;”后,n增1; (3)当n增到101时,停止计算。 此时,sum的值就是1100的累计和。,s=1+2+3+4+.100;s=1+2;s=s+3;s=s+4; s=s+100;,s=s+1;s=s+2;,s=s+n;,#include stdio.h/用w
6、hile循环求1100的累加值,计科1809安逸/int main(void) int sum=0,n=0;/n=0|n=1都是一样的/ while(n101) /这是一个限制条件/ sum+=n; /n+和sum+=n的先后顺序很重要/ n+; /第一次计算值是0,无效/ /只要限制条件的值没达到就一直循环/ printf(%d,sum); return 0; /结果等于5050/,5.1 while语句,实例分析,用while循环求1100的累加和。,#include int main() int sum = 0 , i = 1; while(i = 100) sum = sum + i;
7、 i +; printf(sum = %dn, sum); return 0;,运行结果如下:sum=5050,1、如果去掉循环体中的大括号,执行过程将会怎样变化?2、在循环体中,使循环条件趋向于不满足(假)的语句是哪条?,1、求1-5的整数和 2、求1-10的偶数和,#include stdio.h/用while循环求15的整数和,计科1809安逸/int main() int sum=0,n=0; while(n6) sum+=n;n+; printf(%dn,sum); return 0;/结果等于15/,#include stdio.h/用while循环求110的偶数和,计科1809安
8、逸/int main() int sum=0,n=0; while(n=10) sum+=n;n+=2; printf(%dn,sum); return 0;/结果等于30/,#include stdio.h/用while循环求1100的奇数和,计科1809安逸/int main() int sum=0,n=0,sum1=0,sum2=0,n2=0; while(n=100) sum+=n;n+; while(n2=100) sum2+=n2; n2+=2; sum1=sum-sum2; printf(%dn,sum1); return 0;/结果等于2500/,注意事项,5.1 while语
9、句,如果while的 (表达式) 值为0,则循环体一次也不执行 (例如当i的初值=101) 。在循环体中必须有使循环趋向结束的操作,否则循环将无限进行(死循环)。 在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。,5.2 do-while语句,基本形式,do 语句 while(表达式);,执行过程: 它先执行循环体中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。,语句流程,5.2 do-while语句,do 循环体语句;while (表达式);,至少执行一次,1、循环体如果包含一个以上的语句,必须使用复合语句形式。2、在循环体中,必须有使循环条件趋向于不
10、满足(假)的语句。3、先执行循环体语句,后判断表达式的值。,程序分析案例2,#include stdio.h int main() int a=3; do printf(“%dn”,a-=2);该处参与a的赋值 while(!(-a);这里的非-3是什么意思?return 0;s,程序运行结果:,5.2 do-while语句,sum= 55,求110的累加和。,include void main() int i,sum; i=1; sum=0;/定义成1可以少循环一次 do sum=sum+i; i+; while (i=10); printf(“sum=%dn”,sum);,1、如果去掉循环
11、体中的大括号,执行过程将会怎样变化?语句错误不能执行。2、在循环体中,使循环条件趋向于不满足(假)的语句是哪条?i+,5.2 do-while语句,案例分析,while语句: 先判断,后执行。 程序执行次数可能为0 do-while语句: 先执行,后判断。 程序至少被执行1次,5.2 do-while语句,while、do-while的区别,实例分析,用dowhile循环求n!。,5.2 do-while语句,算法描述:(1)定义变量n,接受用户的输入;(2)定义累乘器变量multi,multi 1;(3)定义变量i,i 1;(4)如果 n 0,则给出相应的提示信息; 否则,如果 n = 0,
12、则直接输出变量multi的值1; 否则,执行第56步。(5)如果i =0):); scanf(%d, ,实例分析,5.2 do-while语句,问题描述:猜数游戏。要求猜一个介于110之间的数字,根据用户猜测的数与标准值进行对比,并给出提示,以便下次猜测能接近标准值,直到猜中为止。,思考?,main()int number=5,guess; printf (猜一个介于 1 与 10 之间的数n); do printf(请输入您猜测的数:); scanf(%d,猜一个介于 1 与 10 之间的数请输入您猜测的数:3太小请输入您猜测的数:5您猜中了! 答案为 5,输入数字 5 后,dowhile
13、循环中的条件为假, 输出结果消息后,程序终止。,#include stdio.h/用dowhile循环编写猜数字游戏,计科1809安逸/int main()int number,guess;puts(1号选手请输入一个介于1100中间的整数:); scanf(%d,实例分析,5.2 do-while语句,编写程序,找出满足条件1+2+3+n500的最大值?,#include int main() int n=1,sum=0; do sum=sum+n;n+; while(sum500); printf(n= %dn,n-2); return 0;循环次数和累加值不同,实例分析,5.2 do-w
14、hile语句,分析: 后一项分子为前一项分子与分母之和; 后一项的分母为前一项的分子算法描述:(1)定义变量i=1,a=1,b=2,sum=0;(2)定义累加器变量sum,sum 0;(3)如果i=10循环执行以下语句 sum=sum+b/a; b=a+b; a=b-a; i+;(6)输出sum的值。,设有一个分数数列2/1+3/2+5/3+8/5+13/8+21/13?编程求这个数列的前10项和,实例分析,5.2 do-while语句,设有一个分数数列2/1+3/2+5/3+8/5+13/8+21/13?编程求这个数列的前10项和,#include int main() int a=1,b=
15、2,i=1; float sum=0; do sum=sum+(float)b/a;b=a+b;a=b-a; i+; while(i6) n-; printf(%d,n); return 0;,程序运行结果:,5.3 for语句,课程回顾,#include stdio.h int main() int a=3; do printf(“%dn”,a-=2); while(!(-a);return 0;,程序运行结果:,5.3 for语句,课程回顾,#include int main() int v1=0,v2=0; char ch ; while(ch=getchar()!=#) switch(
16、ch) case a: case h: case 0:v2+; default:v1+; printf(%d,%dn,v1,v2);,程序运行结果:,5.3 for语句,如果从键盘上输入china#回车,则输出结果为,5.3 for语句,基本形式,for(表达式1; 表达式2; 表达式3) 语句,语句流程,5.3 for语句,(1)先求解表达式1;(2)求解表达式2,若其值为真,则 执行循环体语句,然后执行第(3)步;若为假,则结束循环,转到第(5)步;(3)求解表达式3;(4)转向步骤(2);(5)循环结束,执行for语句下面的一个语句。,实例分析,5.3 for语句,求110的累加和。,i
17、nclude void main() int i,sum; sum=0; for (i=1;i=10;i+) sum=sum+i; printf(“sum=%5dn”,sum);,sum= 55,1 求15的累加和.2 求110的奇数和.3 求110的偶数和.,5.3 for语句,省略表达式1、2、3,即: for ( ; ; )就等同于:while (1),会无限循环(死循环)省略表达式1和表达式3,即: for(;表达式2;)就等同于:while( 表达式2 )省略表达式2,即: for(表达式1; ;表达式3)就等同于:表达式1; while(1)表达式3;,注意事项,分号分隔符不能省略
18、,实例分析,5.3 for语句,#include stdio.h int main() int i,x=0;for(i=0;i2;i+) x+; x+; printf(x=%dn,x); return 0;,程序运行结果:,实例分析,5.3 for语句,#include stdio.h int main() int s,i; for(s=0,i=1;i3;i+,s+=i) printf(%dn,s); return 0;,程序运行结果:,实例分析,5.3 for语句,程序运行结果:,#include stdio.h int main( ) int a=0,i; for(i=1;i5;i+) s
19、witch(i) case 0: case 3: a+=2; case 1: case 2: a+=3; default: a+=5; printf(%dn,a); return 0;,实例分析,5.3 for语句,#include int main()int n;char ch;for(n=0;(ch=getchar()!=n;n+);printf(该字符输入个数为%dn,n);return 0;,输入一串字符,统计输入字符的个数,实例分析,输出Fibonacci数列1、1、2、3、5、8、13的前20项,要求每输出5项后换行。,5.3 for语句,#include int main() i
20、nt f1,f2,f,i; f1=f2=1; printf(%10d%10d,f1,f2); /前2项先输出 for(i=3; i=20; i+) /迭代从第3项开始 f=f1+f2; f1=f2; f2=f; printf(%10d,f);if(i%5=0) /一行输出够五个,就换行printf(n); return 0; ,学习目标,理解break、continue语句,掌握循环的嵌套,能够应用基本的循环语句编写复杂的程序,5.4 循环的嵌套,课程回顾,有哪3种循环结构? while、do while、for循环 while、dowhile循环的语句格式,while (表达式) 循环体语句
21、;,do 循环体语句;while (表达式);,5.4 循环的嵌套,课程回顾,for语句格式 for(表达式1;表达式2;表达式3) 语句 while、dowhile的区别 while语句: 先判断,后执行。 循环体执行次数可能为0次 do-while语句:先执行,后判断。 循环体语句至少被执行1次,5.4 循环的嵌套,课程回顾,#include stdio.h int main( ) int i; for ( i=0; i3; i+ ) switch ( i ) case 1 : printf(%d , i); case 2 : printf(%d , i); default : print
22、f(%d , i); printf(n); return 0; ,程序运行结果:,5.4 循环的嵌套,课程回顾,#include int main() int i,j; for(i=0,j=1;i=j+1;i+=2,j+) printf(%d n,i); return 0;,程序运行结果:,5.3 for语句,5.4 循环的嵌套,如果将一个循环语句放在另一个循环语句的循环体中,就构成了循环的嵌套。内嵌的循环结构内还可嵌套循环结构,构成多层嵌套。3种循环语句都可以在循环嵌套中使用。,5.4 循环的嵌套,实例分析,阅读下列程序,分析运行结果?,#include int main() int k,j
23、,s=0 ; for(k=2;k6;k+,k+) for(j=k;j6;j+) s+=j; printf(%dn,s); ,程序运行结果:,5.4 循环的嵌套,实例分析,分析:几行?几列? 每行有几个*,#include int main() int i,j; for (i=1;i=4;i+) for (j=1;j=2*i-1;j+) printf(*); printf(n); return 0;,5.4 循环的嵌套,实例分析,分析:( 行数)几行?几列? 每行有几个空格 每行有几个*?,#include int main() int i,j,k; for (i=1;i=4;i+) for (
24、j=1;j=4-i;j+) printf( ); for(k=1;k=i;k+) printf(*); printf(n); return 0;,问题描述:用“*”输出一个菱形图案,图案如下: * * * * * * * * * * * * * * * * * * * * * * * * *,voidmain()int i,j,k; for(i=1;i=4;i+) for(j=1;j=4-i;j+) printf( ); for(k=1;k=2*i-1;k+) printf(*); printf(n); for(i=1;i=3;i+) for(j=1;j=i;j+) printf( ); fo
25、r(k=1;k=7-2*i;k+) printf(*); printf(n); ,输出: * * * * * * * * * * * * * * *,* * * * * * * * *,控制打印的行数,控制每行打印的空格数,控制每行打印的*号数,控制打印的行数,控制每行打印的空格数,控制每行打印的*号数,5.4 循环的嵌套,5.4 循环的嵌套,思考,#include stdio.hmain() int i,j;for(i=0;i8;i+) for(j=0;j8;j+) if(i+j)%2=0) printf( ); else printf(%c%c,219,219); printf(n); ,
26、编写一C程序,打印国际象棋棋盘,如图所示:,5.4 循环的嵌套,实例分析,输入n的值,计算并输出1n的阶乘之和。,5.4 循环的嵌套,实例分析,编写程序解决搬砖问题:36块砖,36人搬,男人搬4块,女人搬3块,2个小孩抬一块,要求一次搬完,问需要男、女、小孩各多少人?,#include int main() int m,w,c;printf(%10s%10s%10sn,mem,wowen,children); for(m=1;m9;m+) for(w=1;w12;w+) c=36-m-w; if(m*4+w*3+c/2.0=36) printf(%10d%10d%10dn,m,w,c); re
27、turn 0; ,学习目标,熟练break和continue语句的用法,3. 5 转移控制语句,能够应用break和continue语句解决实际问题,课程回顾,有哪3种循环结构? while、do while、for循环 while、dowhile循环的语句格式,while (表达式) 循环体语句;,do 循环体语句;while (表达式);,5. 5 转移控制语句(必抄),课程回顾,for语句格式 for(表达式1;表达式2;表达式3) 语句 while、dowhile的区别 while语句: 先判断,后执行。 循环体执行次数可能为0次 do-while语句:先执行,后判断。 循环体语句至少
28、被执行1次,5. 5 转移控制语句,课程回顾,循环嵌套(过程:从外到里,一次外层,n次内层(穷尽内层)再跳到外边) 如:while(表达式) for(表1;表2;表3) 语句; . . ,内嵌循环,5. 5 转移控制语句(必抄),实例分析,阅读下列程序,分析运行结果?,#include int main() int i,j,m=0; for (i=1;i=15;i+=4)for (j=3;j=19;j+=4) m+; printf(%dn,m); return 0;,程序运行结果:,5. 5 转移控制语句,实例分析,阅读下列程序,分析运行结果?,#include int main() int
29、k,j,s ; for(k=2;k6;k+,k+) s=1; for (j=k;j6;j+=2) s+=j; printf(%dn,s);,程序运行结果:,5. 5 转移控制语句,实例分析,阅读下列程序,分析运行结果?,#include int main() int k,j,s ; for(k=2;k6;k+,k+) s=0; for (j=k;j6;j+=2) s+=j; printf(%dn,s);,程序运行结果:4,5. 5 转移控制语句,5.5.1 break语句,基本形式,break语句除用于退出switch结构外,还可用于由while、dowhile和for构成的循环结构中。当执行
30、循环体遇到break语句时,break所在循环将立即终止,从循环语句后的第一条语句开始继续往下执行。break语句的一般形式如下: break ;,5.5.1 break语句,语句流程,5.5.1 break语句,实例分析,阅读下列程序,分析运行结果,#include main() int i=1,a=0; while(i20) if(i%10)=0) break; else i-; i+=11; a+=i; printf(“a=%dn,a);return 0;,程序运行结果:,#include int main() int i,j,x=0; for(i=0;i2;i+) x+; for(j=
31、0;j=3;j+) if(j%2) break; x+; x+;printf(x=%dn,x);return 0; ,程序运行结果:,阅读下列程序,分析运行结果,5.5.1 break语句,实例分析,5.5.1 break语句,实例分析,算法描述:(1)接收用户输入的m的值;(2)循环变量赋初值i 2, 循环条件i = m-1,循环变量i+,循环执行以下语句:如果m能被i整除,则结束循环。(3)循环结束后判断m与i的关系,如果m等于i,则输出m是素数。否则输出m不是素数。,判断任意一个数是否为素数。,5.5.1 break语句,实例分析,#include int main() int m,i;
32、 scanf(%d,5.5.1 break语句,关于break语句的几点说明,break语句可以改变程序的控制流break语句用于do-while、while、for循环中时,可使程序终止循环而执行循环后面的语句 break语句通常在循环中与条件语句一起使用。若条件值为真,将跳出循环,控制流转向循环后面的语句如果已执行break语句,就不会执行循环体中位于 break 语句后的语句在多层循环中,一个break语句只向外跳一层,5.5.2 continue语句,基本形式,continue语句与break语句不同,当在循环体中遇到continue语句时,程序将不执行continue语句后面尚未执行
33、的语句,开始下一次循环,即只结束本次循环的执行,并不终止整个循环的执行。continue语句的一般形式如下:continue ;,5.5.2 continue语句,语句流程,该语句不被执行,while() continue; ,while() break; ,跳出整个循环,继续下一次循环,5.5.2 continue语句,结束整个循环,结束本次循环,5.5.2 continue语句,实例分析,#include stdio.h int main() int i=0,s=0; do if (i%2) i+; continue; i+; s += i; while( i7 ); printf(s=%
34、dn, s); return 0; ,程序运行结果:,5.5.2 continue语句,实例分析,把100120之间不能被3整除的整数输出。,include int main()int n;for(n=100; n=120; n+)if(n%3=0)continue;printf(%d ,n);return 0;,5.5.2 continue语句,实例分析,在半径为1-10的圆中,输出面积超过100的半径和面积。,算法描述:(1)定义常量PI,值为3.14;(2)定义循环变量r和存储圆的面积s;(3)循环变量赋初值r 1,循环条件r=10 循环语句: S=PI*r*r; 判断s=100,则执行continue语句,结束本次循环 r和s的值。,5.5.2 continue语句,实例分析,#include #define PI 3.14int main() int r; float s; for(r=1; r=10; r+) s=PI*r*r; if(s=100) continue; printf(r=%d,s=%.2fn,r,s); return 0;,