1 / 24

第 5 章 循环结构

第 5 章 循环结构. 图 1.6  当型循环结构. 当 p 为真. A. 循环的基本要素有三个: 循环入口(即循环的初始化条件) 循环出口(即循环的终止条件) 循环体(反复执行的部分) C 语言提供了 3 种循环语句实现循环结构 while 语句 do-while 语句 for 语句. sum=0 , i=1. 表达式. i <=100?. sum=sum+i. 语句. i=i+1. 图 5.1 while 语句的语义. 输出 sum. 5.1 while 语句. while 语句的一般形式为: while ( 表达式 ) 语句;.

tanika
Download Presentation

第 5 章 循环结构

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章 循环结构

  2. 图1.6 当型循环结构 当p为真 A • 循环的基本要素有三个: • 循环入口(即循环的初始化条件) • 循环出口(即循环的终止条件) • 循环体(反复执行的部分) • C语言提供了3种循环语句实现循环结构 • while语句 • do-while语句 • for语句

  3. sum=0,i=1 表达式 i <=100? sum=sum+i 语句 i=i+1 图5.1 while语句的语义 输出sum 5.1while语句 • while语句的一般形式为: while (表达式) 语句; while (i<=100) { sum=sum+i; i=i+1; }

  4. 1.求 定义变量i=1, sum=0和n 输入正整数给n i<=n sum=sum+i; i++; 输出sum 图5.2 例5.1N-S图 思考: 【例5.1】计算 2.求1+1/2+1/3+…..+1/n 3.求 累加

  5. 使用while语句应注意以下几点: • while语句中的表达式可以是任意表达式,一般是关系表达或逻辑表达式,只要表达式的值为非0 (真)则继续循环。 如: while (n--) printf("%d ",n); • 循环体可以是空语句、单语句或用花括号括起来的复合语句。 • 应注意循环条件的选择以避免死循环。例如下列循环语句: while(n=10) printf("%d ",n++); • while语句从语法上来说是一条完整的控制语句。 • 允许while语句的循环体语句又是while语句,从而形成循环嵌套。 如: i=1; while(i<=9) /* 外循环 */ { j=1; while(j<=i) /* 内循环 */ { printf("%4d ",i*j); j++; } i++; printf("\n"); }

  6. 语句 表达式 图54 do-while语句的语义 5.2 do-while语句 • do-while语句的一般形式为: do   语句 while(表达式);

  7. 【例5.3】一个人口统计程序,1980年世界人口已达45亿,按年增长率1%计算,问什么年份开始世界人口突破100亿大关。

  8. 表达式1 表达式2 语句 表达式3 图5.5 for语句的语义 5.3 for语句 • 一般形式为: for(表达式1;表达式2;表达3) 语句 • 执行过程: ① 计算表达式1的值,为循环变量赋初值。 ② 计算表达式2的值,若值为非0 (真),则执行循环体一次,否则跳出循环。 ③ 计算表达式3的值,转回第②步重复执行。 如:sum=0; for (k=1; k<=100; k++) sum+=k;

  9. 定义变量i,n,e_sum,o_sum 输入n e_sum=0; o_sum=0; i=1 i<=n i%2==0 0 非0 o_sum+=i e_sum+=i i++ 输出e_sum和o_sum 图5.6 例5.4N-S图 【例5.4】编程计算正整数1到n中的奇数之和以及偶数之和。

  10. 注意: for(表达式1;表达式2;表达3) 语句 • 表达式1一般为赋值表达式,通常用于给循环变量赋初值,所以也称为初值表达式。 • 表达式2一般为关系表达式或逻辑表达式,作为控制循环结束的条件,又称为终值表达式。 • 表达式3一般为赋值表达式,或是其他表达式,通常用于为循环变量增值或减值,又称为增值表达式。 • 三个表达式均可省略,但两个分号不能省略。 • 省略表达式1:此时必须在for语句之前给循环变量赋初值。 如:k=1; for ( ; k<=100 ; k++) s+=k ; • 省略表达式2:认为条件永远为真,出现“死循环”。 如:for ( k=1; ; k++) { s+=k ; if(k>=100) break; } • 省略表达式3:应另设法使循环正常执行。 如:for ( k=1 ; k<=100 ; ) { s+=k ; k++; } • 全省略:“死循环” 如: for (; ; ) sum+=k;

  11. 循环体也可以省略,但分号不可省略。“;”代表空语句,表示不执行任何操作,但在语法上不可少。循环体也可以省略,但分号不可省略。“;”代表空语句,表示不执行任何操作,但在语法上不可少。 如:for (k=1 ; k<=10000 ; k++) ; • 表达式1和3还可包含与循环变量无关的其它表达式。 如:for ( s=0, k=1; k<=100 ; k++,s=s+k); for (k=0; k<=100; k++, k++) s+=k; • 表达式2可为任意表达式,只要其值为非零,就执行循环体。 如:for ( k=0; (c=getchar ( ))!=’\n’ ; k++) ; for (; (c=getchar ( ))!=’\n’ ;) printf(“%c”,c); 三种循环语句实现:1+2*2+3*3+……+100*100

  12. for语句也可与while,do-while语句相互嵌套,构成多重循环。for语句也可与while,do-while语句相互嵌套,构成多重循环。 ① for( ) { … while( ) {…} … } ② do { … for( ) {…} … }while( ); ③ while( ) {… for( ) {…} … } ④ for() {… for( ) {…} … }

  13. 【例5.6 】有1、2、3三个数字,编写程序输出由这三个数组成的互不相同且无重复数字的两位数。即输出:12,13,21,23,31,32。 main() { int i,j,k; printf("\n"); for (i=1;i<4;i++)/*以下为二重循环*/ for (j=1;j<4;j++) { if (i!=j) /*确保i、j两位互不相同*/ printf("%d%d\n",i,j); } }

  14. 【例5.7 】编程打印三角形表示(黑色区域)的九九乘法表 * 1 2 3 4 5 6 7 8 9 1 1 2 2 4 3 3 6 9 4 4 8 12 16 5 5 10 15 20 25 6 6 12 18 24 30 36 7 7 14 21 28 35 42 49 8 8 16 24 32 40 48 56 64 9 9 18 27 36 45 54 63 72 81

  15. 5.4转移语句 • C语言提供的4种转移语句为:goto,break,continue和return。 • goto语句 • goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; • 改变程序正常流向,转去执行语句标号所标识的语句。 • 语句标号用标识符定义,置于某一语句行的前面,语句标号后加冒号(:) ,语句标号起标识语句的作用。 • 与goto语句配合使用 •   如: label: i++; • …… • goto label;

  16. break语句 • 一般形式为:break; • break语句只能用在switch 语句或循环语句中 • 作用: 跳出switch语句或跳出本层循环,转去执行后面的程序语句。 main() {int i, s; s=0; for(i=1; i<=10; i++) { s=s+i; if(s>5) break; printf(“s=%d\n” , s ); } }

  17. continue语句 • 一般格式是:continue; • 只能用在循环体中 • 语义:结束本次循环,即不再执行循环体中continue 语句之后的语句,转入下一次循环条件的判断与执行。 • 注意,本语句只结束本层本次的循环,并不跳出循环。 main() { int k=0, s=0, i; for( i=1; i<=3; i++ ) {s=s+i; if(s>2) {printf(“****i=%d,s=%d,k=%d\n”,i, s, k); continue; } k=k+s; printf(“i=%d,s=%d,k=%d\n”,i,s,k); } }

  18. 例:打印1-100之内能被7整除的数 main() { int n; for (n=1; n<=100; n++) { if ((n%7)!=0) continue; printf (“%d ”,n); } }

  19. 本 章 举 例 【例5.12】有一个古老的传说(棋盘上的麦粒):有一位宰相发明了国际象棋,国王打算奖赏他。国王问他想要什么,宰相对国王说:“陛下,请您在棋盘上的第一小格里,赏给我1粒麦子,第2个小格里给2粒,第3个小格里给4粒,以后每一小格给的麦子都是前一小格的2倍。您像这样把棋盘上的64个小格用麦粒摆满,就把这些麦粒赏给我吧!”请问国王需要拿出多少麦粒? 循环/循环嵌套 思考:求 1!+2!+······+100!

  20. 【例5.16】输出2~100以内的素数。

  21. 求100~200间的全部素数 #include “math.h” main() { int m,k,i,n=0 ; for (m=101;m<=200;m=m+2) { k=sqrt(m); for (i=2;i<=k;i++) if (m%i==0) break; if (i>=k+1) { printf(“%d”,m); n++; } if (n%10==0) printf(“\n”); } }

  22. 加密 #include “stdio.h” main() { char c ; while ((c=getchar())!=‘\n’) { if ((c>=‘a’ && c<=‘z’) || (c>=‘A’ && c<=‘Z’)); { c=c+4; if (c>’Z’ && c<‘Z’+4 || c>’z’) c=c-26; } printf(“%c”,c); } printf(“\n”); }

More Related