哈工大苏小红版_C语言_课件_chart6_loop_structure_第1页
哈工大苏小红版_C语言_课件_chart6_loop_structure_第2页
哈工大苏小红版_C语言_课件_chart6_loop_structure_第3页
哈工大苏小红版_C语言_课件_chart6_loop_structure_第4页
哈工大苏小红版_C语言_课件_chart6_loop_structure_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章 循环控制结构于水 本章主要内容 循环的类型 while语句和do while语句 for语句 嵌套循环 goto、 break 、continue语句2循环的类型问题的提出问题输入5个数,求其和接受用户输入,并从屏幕输出,直到用户主动退出某些程序段需要重复屡次执行3循环的类型问题的提出输入5个数,求其和(不使用循环)4循环的类型问题的提出输入5个数,求其和(使用循环)5循环的类型循环的类型计数控制循环条件控制循环当型循环直到型循环6循环的类型当型循环和直到型循环A条 件P直到型循环假真A当型循环真假假条 件P7本章主要内容 循环的类型 while语句和do while语句 for语句

2、嵌套循环 goto、 break 、continue语句8while语句语句形式while(循环控制表达式P) 语句序列A 当型循环循环体9while语句执行过程1) 计算循环控制表达式的值2) 如果表达式为真,那么执行循环体的语句,并返回1)3) 如果表达式值为假,那么退出循环,执行循环体后面的语句10while语句程序实例int i = 0;int sum=0;while(i 2) sum += i; i+;printf(“sum=%d,sum)第一次循环1、i = 0 2 结果为真2、sum = sum + i = 03、i = i +1 = 1第二次循环1、i = 1 2 结果为真2、

3、sum = sum + i = 13、i = i +1 =2第三次循环1、i = 2 = 2 结果为假2、退出循环3、执行printf语句11while语句程序的另外两种写法int i = 0;int sum=0;while(i 2) sum += i; i+;int i = 0;int sum=0;while (i+ 2) sum += i;int i = 0;int sum=0;while(i 2) sum += i+; 三种写法结果是否一样?12do-while语句语句形式do 语句序列A while(循环控制表达式P); 直到型循环13do-while语句执行过程1) 执行循环体的语句

4、2)计算循环控制表达式的值,如果表达式为真,那么返回1)3) 如果表达式值为假,那么退出循环,执行循环体后面的语句 do-while语句的循环体至少被执行一次14do-while语句用do-while改写上一个程序int i = 0;int sum=0;do sum += i; i+; while(i 2);int i = 0;int sum=0;do sum += i; while(i+ 2);int i = 0;int sum=0;do sum += i+; while(i 2); 三种写法结果是否一样?15本章主要内容 循环的类型 while语句和do while语句 for语句嵌套循环

5、 goto、 break 、continue语句16for语句语句形式for(初始化表达式;循环控制表达式;增值表达式) 语句序列;循环变量赋初值循环结束条件改变循环变量for(i = 0;i 2;i+) sum = sum + i;17for语句执行过程1) 循环变量赋初值2) 计算循环控制表达式的值,如果表达式为真, 执行循环体,然后执行循环变量增值表达式,返回2)如果表达式值为假,那么退出循环,执行循环体后面的语句18for语句用for语句重写实例int sum=0; for(int i = 0;i 2;i+) sum = sum + i;第一次循环1、i = 0 2 结果为真2、sum

6、 = sum + i = 03、i = i +1 = 1第二次循环1、i = 1 2 结果为真2、sum = sum + i = 13、i = i +1 =2第三次循环1、i = 2 = 2 结果为假2、退出循环3、执行printf语句19for语句使用for语句的本卷须知三个表达式之间有且仅有两个分号,不可省略三个表达式可以省略,但必须符合一定的条件增值表达式不仅仅是增20for语句三个表达式的省略如果已为循环变量赋初值,初始化表达式可以省略int i = 0;int sum=0; for (;i 2;i+) sum = sum + i;21for语句三个表达式的省略如果省略循环控制表达式,

7、那么表示循环条件永远为真int sum=0; int i;for (i = 0;i+) sum = sum + i;死循环22for语句三个表达式的省略如果已在循环体内改变了循环控制变量,那么增值表达式可以省略int sum=0; int i;for (i = 0;i 0;i-)for ( i = 10;i 0;i = i/2) sum += i;25编程小贴士变量的初值未赋初值的变量其初始值为随机值int i = 0 ,sum;sum = 0;for (int i = 0;i 0;i-) sum += i,sum = sum + 1;27空语句仅由一个分号构成的语句什么也不做通常用于延时程序

8、for ( i = 0;i 100;i+) ;for ( i = 0;i 100;i+) ;for ( i = 0;i 100;i+) 28for中的空语句int sum=0; int i;for (; ;) ;printf(“hello world);死循环,重复执行这一句永远都没有执行时机空语句29空语句while中的空语句正常情况下while语句后没有分号,for也一样错误的使用分号会导致程序错误i = 1;while (i 10) ; sum = sum + i;i = 1;while (i 10) ; sum = sum + i;30想一个1100之间的数猜对: right!猜错:w

9、rong!并提示大小循序渐进式编程例6.6:猜数游戏31只猜1次直到猜对为止最多猜10次猜多个数10次猜不对就猜下一个数循序渐进式编程例6.6:猜数游戏32怎样模拟计算机“想一个数呢?随机函数rand()产生0,RAND_MAX 之间的随机数magic = rand(); #include RAND_MAX在stdlib.h中定义,不大于双字节整数的最大值32767 循序渐进式编程例6.6:猜数游戏33产生0,b-1 之间的随机数magic = rand()%b;产生a,a+b-1 之间的随机数magic = rand()%b + a; 循序渐进式编程例6.6:猜数游戏34#include #

10、include main() int magic; /*计算机想的数*/int guess; /*人猜的数*/magic = rand()%100 + 1; /*“想一个1,100之间的数magic*/printf(Please guess a magic number:);scanf(%d, &guess); if (guess magic) printf(Wrong! Too high!n); else if (guess magic) printf(Wrong! Too low!n); else printf(Right! n); printf(The number is:%d n, m

11、agic); 例5.4只猜1次35#include #include main() int magic; int guess; int counter; /*记录人猜次数的计数器变量*/magic = rand() % 100 + 1; counter = 0; /*计数器变量count初始化为0*/doprintf(Please guess a magic number:);scanf(%d, &guess); counter +; /*计数器变量count加1*/if (guess magic) printf(Wrong! Too high!n);else if (guess magic)

12、 printf(Wrong! Too low!n); else printf(Right!n);while (guess != magic); printf(counter = %d n, counter); 直到猜对为止例6.636每次运行程序时计算机所“想的数都是一样的,这是什么原因呢?函数rand()产生的只是伪随机数随机函数srand为函数rand()设置随机数种子来实现对函数rand所产生的伪随机数的 “随机化 通过输入随机数种子,产生1,100之间的随机数scanf(%u, &seed); srand(seed); magic = rand() % 100 + 1; 循序渐进式编程

13、例6.6:猜数游戏37#include #include main() int magic; int guess; int counter; /*记录人猜次数的计数器变量*/ unsigned int seed; printf(Please enter seed:);scanf(%u, &seed);srand(seed);magic = rand() % 100 + 1; counter = 0; /*计数器变量count初始化为0*/doprintf(Please guess a magic number:);scanf(%d, &guess); counter +; /*计数器变量cou

14、nt加1*/if (guess magic) printf(Wrong! Too high!n);else if (guess magic) printf(Wrong! Too low!n); else printf(Right!n);while (guess != magic); printf(counter = %d n, counter); 直到猜对为止例6.638使用计算机读取其时钟值并把该值自动设置为随机数种子,产生1,100之间的随机数函数time()返回以秒计算的当前时间值,该值被转换为无符号整数并用作随机数发生器的种子 #include srand(time(NULL); ma

15、gic = rand() % 100 + 1; 函数time()能为程序员提供代表时间的字符串,使用NULL作为函数参数,使其不具备此功能循序渐进式编程例6.6:猜数游戏39#include #include #include main() int magic; int guess; int counter; /*记录人猜次数的计数器变量*/ srand(time(NULL);magic = rand() % 100 + 1; counter = 0; /*计数器变量count初始化为0*/doprintf(Please guess a magic number:);scanf(%d, &gu

16、ess); counter +; /*计数器变量count加1*/if (guess magic) printf(Wrong! Too high!n);else if (guess magic) printf(Wrong! Too high!n);else if (guess magic) printf(Wrong! Too low!n); else printf(Right!n);while (guess != magic & counter 10); printf(counter = %d n, counter); 例6.7最多猜10次41本章主要内容 循环的类型 while语句和do w

17、hile语句 for语句 嵌套循环 goto、 break 、continue语句42嵌套循环将一个循环语句放在另一个循环语句的循环体中构成的循环for 、while、do-while语句均可以嵌套循环先由外层循环进行内层循环,执行完内层循环后返回外层,并再次进入内层,直至外层循环执行完毕43嵌套循环嵌套循环的实例总循环次数10 * 8 = 80在每次循环全部执行完成的前提下,即为内外层循环次数的乘积int i, j, sum =0;for (i = 0;i 10; i+ ) for (j = 0;j magic) printf(Wrong!Too high!n);else if (guess

18、 magic) printf(Wrong!Too low!n);else printf(Right!n);while (guess != magic & counter magic) printf(Wrong!Too high!n);else if (guess magic) printf(Wrong!Too low!n);else printf(Right!n);while (guess != magic & counter 10);printf(counter = %dn, counter); printf(Do you want to continue(Y/N or y/n)?);sca

19、nf( %c, &reply);while (reply = Y) | (reply = y); 6.4嵌套循环例6.12防止非法字符输入47本章主要内容 循环的类型 while语句和do while语句 for语句 嵌套循环 goto、break、continue语句48流程的转移控制goto语句break语句continue语句exit()函数49goto语句一般形式50goto语句作用使程序无条件跳转到语句标号所标识的语句执行int i, sum =0;for (i = 0;i 10) goto err;err: printf(“ok);51goto语句优点跳转方便缺点过多的goto语句

20、使流程随意跳转而导致程序流程混乱不建议在程序中使用goto语句52break语句作用退出switch结构和循环结构的循环体当程序执行到break语句时,循环立即终止,从循环语句后的第一条语句开始继续执行Break?退出一层循环或switch53break实例break语句n?10Please enter n:10n = 10Please enter n: -10Program is over!-10#include main() int i, n; for (i=1; i=5; i+) printf(Please enter n:); scanf(%d, &n); if (n 0) break

21、; printf(n = %dn, n); printf(Program is over!n);54continue语句作用当程序执行到continue语句时,程序将跳过continue语句后面尚未执行的语句,开始下一次循环Continue?中断此次循环,开始下一次55#include main() int i, n; for (i=1; i=5; i+) printf(Please enter n:); scanf(%d, &n); if (n 0) continue; printf(n = %dn, n); printf(Program is over!n);continue实例conti

22、nue语句n?10Please enter n:10n = 10Please enter n: -10Please enter n:20n = 20Please enter n: -20Please enter n:30n = 30Program is over!-1020-203056在嵌套循环中,continue和break只对包含它们的最内层循环起作用跳出多重循环的方法使用goto语句使用break层层跳出Goto语句的适用场合快速跳出多重循环跳向共同的出口位置,进行退出前的错误处理工作goto、continue和break语句57用goto语句跳向共同的出口位置void Init(vo

23、id) char *p1 = NULL;char *p2 = NULL;char *p3 = NULL;p1 = (char*)malloc(256); if (p1 = NULL) goto Exit; p2 = (char*)malloc(256); if (p2 = NULL) goto Exit; p3 = (char*)malloc(256); if (p3 = NULL) goto Exit; /*正常处理的代码*/Exit: if (p1 != NULL) free(p1); if (p2 != NULL) free(p2); if (p3 != NULL) free(p3);

24、return;58exit()函数作用终止整个程序的运行,强制返回到操作系统,将int型参数code返回到调用进程Code = 0或EXIT_SUCCESS:正常退出Code非0或EXIT_FAILURE:程序异常退出用法 exit(0);59exit()函数exit?退出整个程序程序结束exit60exit()函数exit实例int i, sum =0;for (i = 0;i 10; i+ ) if ( i = 5) exit(0); sum = sum + i;printf(“sum = %d,sum);int i, j, sum =0;for (i = 0;i 10; i+ ) for (j = 0;j 10; j+ ) if ( j = 5) exit(0); sum = sum + j; sum = sum + i;printf(“sum = %d,sum);61韩信有一队兵,他想知道有多少人,便让士兵排队报数。按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。你知道韩信至少有多少兵吗?设兵数为x,那么x应满足:x%5=1 & x%6=5 & x%7=4 & x%11

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论