[工学]第4章_程序的控制结构第2讲4[1]4~

上传人:tia****nde 文档编号:70855347 上传时间:2019-01-18 格式:PPT 页数:47 大小:1.60MB
返回 下载 相关 举报
[工学]第4章_程序的控制结构第2讲4[1]4~_第1页
第1页 / 共47页
[工学]第4章_程序的控制结构第2讲4[1]4~_第2页
第2页 / 共47页
[工学]第4章_程序的控制结构第2讲4[1]4~_第3页
第3页 / 共47页
[工学]第4章_程序的控制结构第2讲4[1]4~_第4页
第4页 / 共47页
[工学]第4章_程序的控制结构第2讲4[1]4~_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《[工学]第4章_程序的控制结构第2讲4[1]4~》由会员分享,可在线阅读,更多相关《[工学]第4章_程序的控制结构第2讲4[1]4~(47页珍藏版)》请在金锄头文库上搜索。

1、第4章 程序的控制结构(二),C语言程序设计,应用场合 循环结构的流程图表示 循环语句 单重循环应用举例 嵌套循环及其应用举例 流程的转移控制,内容提要,应用场合,问题: (1) 计算1+2+3+ n = ? (2) 计算n!(即:123n)= ? (3) 计算1!+2!+3!+n! = ? (4) 在课本例4.6的猜数游戏中,程序每执行一次,只允许用户猜一次,如果猜不对想再猜一次,只能再运行一次程序。能否使游戏在不退出程序运行的情况下,让用户连续猜许多次直到猜对为止呢?,(5) 在课本例4.8中,我们设计了一个简单的计算器程序。每执行一次程序,用户只能选择一种运算符做一次运算,若要再做其他的

2、运算,必须重新运行一次程序。能否在不退出程序运行的前提下,让用户可以做多次运算,直到用户想停止时按一个键程序才结束? 以上的问题都有一个共同点,即含有重复处理的内容,该类问题都可以用本节将要介绍的循环语句实现。,循环结构有两种类型: (1) 当型循环结构 (2) 直到型循环结构,循环结构的流程图表示,传统流程图,当型循环结构,A,当P成立,NS流程图,A,直到P为假,直到型循环结构,传统流程图,NS流程图,A,条 件P,A,当型循环,真,假,假,条 件P,假,真,两种循环结构的比较,直到型循环,2.3 循环语句,(1) while语句 (2) do-while语句 (3) for语句,(1)

3、while 语句 while语句用来实现当型循环结构。 其一般形式为: while(表达式) 循环体语句; 执行: 当表达式为非零时,重复执行循环体语句,直到表达式的值为0(即为假)时结束循环的执行。,当表达式为真,循环体语句,(a) 传统流程图,(b) NS流程图,while 语句应用举例,例1:计算1+2+3+ n = ?(假设n的值为100),#include int main( ) int i=1, sum=0; while(i=100) sum=sum+i; i+; printf(“%d”, sum); return 0; ,输出sum,例2:,#include int main(

4、) int number, rightDigit; printf(“Enter your number.n“); scanf(“%d“, ,程序的功能是?,(2) do-while 语句 do-while语句用来实现直到型循环结构。 其一般形式为: do 循环体语句 ; while(表达式); 执行: 先执行一次循环体语句,然后判断表达式,当表达式为非零时,继续重复执行循环体语句,直到表达式的值为0(即为假)时结束循环的执行。,(a) 传统流程图,(b) NS流程图,do-while 语句应用举例,计算n!=123 n = ?(假设n的值为10),#include int main( ) in

5、t i=1; long fac=1; do fac=fac*i; i+; while( i=10 ); printf(“10!=%ldn“, fac); return 0; ,for (表达式1; 表达式2; 表达式3) 语句 首先执行表达式1。如果表达式2的值为非0,就重复执行语句和表达式3,直到表达式2的值为0时结束循环。,循环起始条件,循环结束条件,循环增量,(3) for 语句,for (表达式1; 表达式2; 表达式3) 循环体语句 ;,for 语句应用举例,计算n!=123 n = ?(假设n的值为10),#include int main( ) int i; long fac=1

6、; for(i=1; i=10; i+) fac=fac*i; printf(“10!=%ldn“, fac); return 0; ,选择三种循环的一般原则,如果循环次数已知,用for 如果循环次数未知,用while 如果循环体至少要执行一次,用do-while 这只是“一般”原则,不是“原则”,循序渐进式编程 例4.6:猜数游戏,想一个1100之间的数,猜对: right 猜错:wrong并提示大小,2.4 单重循环举例,循序渐进式编程 例4.6:猜数游戏,猜数游戏用到的库函数,怎样模拟计算机“想”一个数呢? 随机函数rand() 产生0,RAND_MAX 之间的随机数 magic = r

7、and(); #include RAND_MAX在stdlib.h中定义 产生0,b-1 之间的随机数 magic = rand()%b; 产生a,a+b-1 之间的随机数 magic = rand()%b + a;,例4.6,#include #include main() int magic; /*计算机“想“的数*/ int guess; /*人猜的数*/ magic = rand()%100 + 1; /*“想”一个1,100之间的数magic*/ printf(“Please guess a magic number:“); scanf(“%d“, ,例4.9,#include #i

8、nclude main() int magic; int guess; int counter; /*记录人猜次数的计数器变量*/ magic = rand() % 100 + 1; counter = 0; /*计数器变量count初始化为0*/ do printf(“Please guess a magic number:“); scanf(“%d“, ,猜数游戏用到的库函数,每次运行程序时机器所“想”的数都是一样的,这是什么原因呢? 函数rand()产生的只是伪随机数 函数srand 为函数rand()设置随机数种子来实现对函数rand所产生的伪随机数的 “随机化” 通过键入随机数种子,

9、产生1,100之间的随机数 scanf(“%u“, ,例4.9,#include #include main() int magic; int guess; int counter; unsigned int seed; printf(“Please enter seed:“); scanf(“%u“, ,猜数游戏用到的库函数,使用计算机读取其时钟值并把该值自动设置为随机数种子,产生1,100之间的随机数 函数time()返回以秒计算的当前时间值,该值被转换为无符号整数并用作随机数发生器的种子 #include srand(time(NULL); magic = rand() % 100 +

10、1;,例4.9,#include #include #include main() int magic; int guess; int counter; srand(time(NULL); magic = rand() % 100 + 1; counter = 0; do printf(“Please guess a magic number:“); scanf(“%d“, ,实验3,#include #include #include main() int magic; int guess; int counter; srand(time(NULL); magic = rand() % 10

11、0 + 1; counter = 0; do printf(“Please guess a magic number:“); scanf(“%d“, ,存在一个错误,实验3,#include #include #include main() int magic; int guess; int counter; srand(time(NULL); magic = rand() % 100 + 1; counter = 0; do printf(“Please guess a magic number:“); scanf(“%d“, ,实验课作业,(1)先由计算机“想”一个1到100之间的数请人猜

12、,如果人猜对了,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,且结束游戏,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。,实验课作业,(2)在课本例4.8中,我们设计了一个简单的计算器程序。每执行一次程序,用户只能选择一种运算符做一次运算,若要再做其他的运算,必须重新运行一次程序。修改程序的功能为:在不退出程序运行的前提下,让用户可以做多次运算,直到用户想停止时按一个键(Y或y)程序才结束。,如果将一个循环语句用在另一个循环语句的循

13、环体中,就构成了嵌套循环。 while、do-while和for这三种循环均可以相互嵌套,即在while循环、do-while循环和for循环体内,都可以完整地包含上述任一种循环结构。,嵌套循环及其应用举例,例1:计算1!+2!+3!+10! = ?,#include int main( ) int i, j; float fac, sum = 0; for(i=1; i=10; i+) fac=1; for(j=1; j=i; j+) fac=fac*j; sum=sum+fac; printf(“1!+2!+10!=%.2en“, sum); return 0; ,该例能否用单重循环实现?

14、,例4.16:马克思手稿中的趣味数学题,有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人? 解方程组 穷举法,例4.16方法1: 采用三重循环穷举x,y,z的全部可能的组合,#include int main() int x,y,z; printf(“Man t Women t Childernn“); for (x=0; x=30; x+) for (y=0; y=30; y+) for (z=0; z=30; z+) if (x+y+z = 30 ,例4.16方法2:改进算法,#inc

15、lude int main() int x,y,z; printf(“Man t Women t Childernn“); for (x=0; x=16; x+) for (y=0; y=25; y+) z = 30 x - y; if (3*x+2*y+z = 50) printf(“%3d t %5d t %8dn“,x,y,z); return 0; ,goto语句 break语句 continue语句 函数exit(),2.6 流程的转移控制,goto语句,goto语句为无条件转向语句,其一般形式为: goto 语句标号; 说明:语句标号用标识符表示,其定名规则与变量名 相同,由字母、数字和下划线组成,其第一个 字符必须为字母或下划线。不能用整数做标号。 例如:goto label_1; (合法) goto 123; (不合法),void main() int i, sum = 0; i = 1; loop:if (i = 100) sum = sum + i; i+; goto loop;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号