欢迎来到天天文库
浏览记录
ID:48773598
大小:407.50 KB
页数:43页
时间:2020-01-23
《4迭代与重复-循环程序设计(4).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、高级语言程序设计第4章迭代与重复—循环程序设计(4)今天讨论的题目判断一个数是否是素数再次讨论学生成绩统计问题猜数游戏模拟目标break/continue自顶向下逐步求精的分析设计方法随机数的产生,随机现象的模拟仿真问题1:判断一个数是否是素数问题描述:从键盘输入一个自然数,判断它是否是素数,是素数输出1,否则输出0.样例输入1:2样例输出1:1样例输入2:1样例输出2:0样例输入3:4样例输出3:0如果是这样的测试用例?样例输入:2140样例输出:100分析什么是素数?素数也称质数,是只有1和自身两个
2、因数的自然数.1不是素数,2是最小的素数怎么判断自然数m是否是素数呢?方法1:依次用2到m-1的数作为除数,判断它是否能整除m。方法2:依次用2到sqrt(m)的数为除数,判断它是否能整除m。怎么控制循环?对于方法1:i3、4如果i<=k执行(5)否则执行(6)5如果m%i==0则执行(6)否则i++,返回(4)6如果i>k输出1否则输出07结束流程图循环有两个出口:1)对所有的i都不能整除m,m一定是素数;2)如果某个i<=k能整除m,m必然不是素数。break语句如果先不考虑用户输入1的情况,实现代码为再次讨论成绩统计问题问题描述:循环接收用户键盘输入的有效学生成绩并累加求和,如果输入的数据超出了0到100的范围,则忽略它,如果输入一个非数值型数据则结束输入,打印求和结果和平均结果。输入样例606060-160110a4、输出样例okokokerrokerraverageof4scoresis60.0算法设计流程图能够读到数据就是正确的scanf函数返回0没读到继续做下一次循环,continue语句算法实现continue0.c思考题:输入CTRL-Z结果怎样?能结束吗?输入-1又怎样?思考题:break/continue破坏了程序的单入口单出口的结构化特征,不用break/continue是否可以实现同样的效果?break语句只适用于标准的循环和多分支选择结构,continue也只能用于标准的循环结构中,它们一般都是有5、条件的无条件转移语句—goto一般形式goto语句标号;……语句标号:……语句标号:可以在goto语句的前面判断素数问题用goto取代break见代码goto0.c更多的goto见代码goto.c问题3:随机数游戏模拟问题描述:计算机“想”好一个1到100之间的数,你来猜,如果没猜中给出提示,是大了还是小了。如果猜中输出祝贺信息!问是否继续猜?假设计算机“想”的数是55(这个数是随机的)输入样例:506055输出样例:toolowtoohighCongradulation!youareright!继续否6、?再如:碰运气游戏游戏者每次投掷两个骰子,把两个朝上的点数相加。第一次投掷时如果得到的和为7或11,游戏者就赢了;如果得到的和为2、3或12游戏者就输了(即计算机这个“东家”就赢了);如果得到的和为4、5、6、8、9或10,那么这个和就作为游戏者的点数,要想赢必须再次投掷,一直到取得自己的点数为止,如果投掷出7点,游戏者就输了。分析自顶向下,逐步求精:从抽象到具体,逐步明晰的过程。开始先勾划出求解方案的一个比较粗糙的轮廓,确定一个比较抽象地概念,然后再逐步细化,把抽象的东西逐渐细化到可以实现的具体步骤算7、法设计(顶层1)1.1计算机“想”一个1到100之间的数1.2猜数1.3是否继续猜?是回到1.1,否结束计算机怎么想那个数—把1.1细化1.1使用随机函数rand()产生一个1~100之间的数numberrand()是包含在stdlib库中的一个函数,它能返回一个0到RAND_MAX之间的一个整数,ANSI标准规定RAND_MAX不得小于32767,从stdlib.h中可以查到它的值就是32767。怎么猜–把1.2细化1.2.1读用户猜的数guess1.2.2判断是否猜中,如果没中,返回到(1.2.1)8、继续猜,否则到(1.2.3)1.2.3输出猜中祝贺信息经过一次求精之后算法细化为:1.1使用rand()随机产生一个1~100之间的数number1.2.1读用户猜的数guess1.2.2判断是否猜中,如果没中,返回到(1.2.1)继续猜,否则到(1.2.3)1.2.3输出祝贺信息1.3是否继续猜?是回到1.1,否结束对1.2.2判断是否猜中再求精一次1.2.2.1如果guess>number提示toohigh返回到(1.2.1)1.2.2
3、4如果i<=k执行(5)否则执行(6)5如果m%i==0则执行(6)否则i++,返回(4)6如果i>k输出1否则输出07结束流程图循环有两个出口:1)对所有的i都不能整除m,m一定是素数;2)如果某个i<=k能整除m,m必然不是素数。break语句如果先不考虑用户输入1的情况,实现代码为再次讨论成绩统计问题问题描述:循环接收用户键盘输入的有效学生成绩并累加求和,如果输入的数据超出了0到100的范围,则忽略它,如果输入一个非数值型数据则结束输入,打印求和结果和平均结果。输入样例606060-160110a
4、输出样例okokokerrokerraverageof4scoresis60.0算法设计流程图能够读到数据就是正确的scanf函数返回0没读到继续做下一次循环,continue语句算法实现continue0.c思考题:输入CTRL-Z结果怎样?能结束吗?输入-1又怎样?思考题:break/continue破坏了程序的单入口单出口的结构化特征,不用break/continue是否可以实现同样的效果?break语句只适用于标准的循环和多分支选择结构,continue也只能用于标准的循环结构中,它们一般都是有
5、条件的无条件转移语句—goto一般形式goto语句标号;……语句标号:……语句标号:可以在goto语句的前面判断素数问题用goto取代break见代码goto0.c更多的goto见代码goto.c问题3:随机数游戏模拟问题描述:计算机“想”好一个1到100之间的数,你来猜,如果没猜中给出提示,是大了还是小了。如果猜中输出祝贺信息!问是否继续猜?假设计算机“想”的数是55(这个数是随机的)输入样例:506055输出样例:toolowtoohighCongradulation!youareright!继续否
6、?再如:碰运气游戏游戏者每次投掷两个骰子,把两个朝上的点数相加。第一次投掷时如果得到的和为7或11,游戏者就赢了;如果得到的和为2、3或12游戏者就输了(即计算机这个“东家”就赢了);如果得到的和为4、5、6、8、9或10,那么这个和就作为游戏者的点数,要想赢必须再次投掷,一直到取得自己的点数为止,如果投掷出7点,游戏者就输了。分析自顶向下,逐步求精:从抽象到具体,逐步明晰的过程。开始先勾划出求解方案的一个比较粗糙的轮廓,确定一个比较抽象地概念,然后再逐步细化,把抽象的东西逐渐细化到可以实现的具体步骤算
7、法设计(顶层1)1.1计算机“想”一个1到100之间的数1.2猜数1.3是否继续猜?是回到1.1,否结束计算机怎么想那个数—把1.1细化1.1使用随机函数rand()产生一个1~100之间的数numberrand()是包含在stdlib库中的一个函数,它能返回一个0到RAND_MAX之间的一个整数,ANSI标准规定RAND_MAX不得小于32767,从stdlib.h中可以查到它的值就是32767。怎么猜–把1.2细化1.2.1读用户猜的数guess1.2.2判断是否猜中,如果没中,返回到(1.2.1)
8、继续猜,否则到(1.2.3)1.2.3输出猜中祝贺信息经过一次求精之后算法细化为:1.1使用rand()随机产生一个1~100之间的数number1.2.1读用户猜的数guess1.2.2判断是否猜中,如果没中,返回到(1.2.1)继续猜,否则到(1.2.3)1.2.3输出祝贺信息1.3是否继续猜?是回到1.1,否结束对1.2.2判断是否猜中再求精一次1.2.2.1如果guess>number提示toohigh返回到(1.2.1)1.2.2
此文档下载收益归作者所有