当前位置:首页 >> 工学 >>

3


循环程序设计(2)

循环程序设计
上周内容回顾 While(条件 条件) While(条件) 循环体 Do {……} } while(条件 条件) while(条件) For(初始化表达式;条件;修正表达式) For(初始化表达式;条件;修正表达式) 初始化表达式

循环程序设计
例4:猜数游戏( ch6_004) 猜数游戏(
编写一道猜数的程序, 编写一道猜数的程序,在程序中预设一 个数字, 个数字,要求用户任意从键盘输入一个 价格(数字), ),由程序在屏幕上给出 价格(数字),由程序在屏幕上给出 高了”或者“低了”的提示, “高了”或者“低了”的提示,当用户 输入数字等于目标数, 输入数字等于目标数,程序结束。

开始
输入一个数字data 输入一个数字data
Y 输出提示信息: 输出提示信息: 高了, 高了,请重新输入

Data>goal?
Y

N

Data<goal? N
输出提示信息: 输出提示信息: 恭喜你答对了

输出提示信息: 输出提示信息: 低了请重新输入

Y

Data不等于goal? Data不等于goal? 不等于 N

结束

#include “stdio.h” /*例4:猜数游戏。 ch6_004 */ 例 :猜数游戏。 #define GOAL 648 void main() { int data; do { printf("Please input data:\n"); scanf(“%d”,&data);/*输入任意一个数字到 输入任意一个数字到data*/ 输入任意一个数字到 if (data>GOAL) printf("It's too big,please try again!\n"); else if(data<GOAL) printf("It's too small,please try again!\n"); else printf("You are right!Bye-bye!"); } while (data!=GOAL); }

break语句和continue break语句和continue 语句和
1.break语句 1.break语句
语句形式: (1) 语句形式:
break;

(2)作用: (2)作用: 作用
结束break所在的 switch语句 语句。 结束break所在的 switch语句。 break 结束当前循环,跳出break break所在的循 结束当前循环,跳出break所在的循 环结构。 环结构。

ch6 300以内能被17整除 以内能被17 【例5:ch6_005 】 求300 以内能被17 整除 的最大的数。 的最大的数。
#include "stdio.h" void main() {int x; for(x=300;x>=1;x--) if(x%17==0) break; printf("x=%d\n",x); }
找到满足条件的最 大数, 大数,结束循环

2、continue 语句
(1)语句形式: 语句形式:
continue;

(2)语句作用: 语句作用:
结束本次循环 本次循环。 结束本次循环。

(3)语句执行流程: 语句执行流程:
continue语句可以结束本次循环, continue语句可以结束本次循环,即不再执 语句可以结束本次循环 行循环体中continue 语句之后的语句, 行循环体中continue 语句之后的语句,转入 下一次循环条件的判断与执行。 下一次循环条件的判断与执行。

300以内能被17整除 以内能被17 【例6:ch6_006】 求300以内能被17整除 6:ch6_006】 ch6_006 的所有整数。 的所有整数。 #include "stdio.h" void main() {int x; for(x=1;x<=300;x++) {if(x%17!=0) continue; printf("%d\t",x); } }

分析以下程序的运行结果。 【练习:】 分析以下程序的运行结果。 练习:
#include "stdio.h" void main() {int a, b; for(a=1,b=1; a<=10; a++) {if(b>=10) break; if(b%3==1) {b+=3; continue;} } printf("%d\n",a); }

程序运行结果: 程序运行结果: 4

循环程序设计(循环嵌套 循环程序设计 循环嵌套) 循环嵌套
例7:打印如下所示等腰三角形() 打印如下所示等腰三角形() * *** ***** ******* *********

循环程序设计(循环嵌套 循环程序设计 循环嵌套) 循环嵌套
例7 ch6_007: 如何打印: 如何打印:

*

***** * *** ***** ******* ********* * *** ***** ******* ********* ******* ***** *** *
NEXT

***** ***** ***** ***** *****

* ** *** **** *****

循环嵌套
在循环体语句中又包含有另一个完整的循 环结构的形式,称为循环的嵌套 循环的嵌套。 环结构的形式,称为循环的嵌套。如果内 部的循环体中又有嵌套的循环语句, 部的循环体中又有嵌套的循环语句,则构 成多重循环。 成多重循环。 do-while、for三种循环都可以互相 while 、do-while、for三种循环都可以互相 嵌套。 嵌套。

外 循 环

for(...) for(...) ... {... 内 for(...) ... 循 for(...) 环 {... } ... }

for(....) {... } for(...) {... }

循环嵌套
百钱买百鸡。( 。(鸡翁一值 例8ch6_008 :百钱买百鸡。(鸡翁一值 钱五,鸡母一值钱3 鸡雏三值钱一。 钱五,鸡母一值钱3,鸡雏三值钱一。百 钱买百鸡,问鸡翁、鸡母、鸡雏各几何? 钱买百鸡,问鸡翁、鸡母、鸡雏各几何? Cocks+hens+chicks=100; 5*cocks+3*hens+chicks/3=100; Cocks: Hens: Chicks: 1-------20; 1-------20; ------1--------33; 1--------33; -------3,6,9….99; 3,6,9 .99;

Cocks 1

hens 1 2 … 33

chicks 98 97

66 97 96

2

1 2 …

… 20

33 1 2 … 33

65

循环嵌套
枚举或穷举算法:按问题本身的性质, 枚举或穷举算法:按问题本身的性质,一一 列举出该问题所有可能的解, 列举出该问题所有可能的解,并在逐一列举 的过程中, 的过程中,检验每个可能解是否是问题的真 正解,若是,我们采纳这个解,否则抛弃它。 正解,若是,我们采纳这个解,否则抛弃它。 对于所列举的值,既不能遗漏也不能重复。 对于所列举的值,既不能遗漏也不能重复。

#include "stdio.h" void main() { int x,y,z; for(x=1;x<20;x++) { for(y=1;y<=33;y++) { z=100-x-y; if (5*x+3*y+z/3 ==100)&&z%3==0) printf(“cock:%d, hens:%d, chicks:%d\n",x,y,z); } } }

循环嵌套
搬砖问题:36块砖 36人搬 块砖, 人搬, 例 、搬砖问题:36块砖,36人搬,男搬 女搬3 两个小孩抬一块砖。 4,女搬3,两个小孩抬一块砖。要求一 次全搬完,问男、 小孩各若干? 次全搬完,问男、女、小孩各若干?

解:据题意: 据题意: men的值 的值: men的值:1—9 9 women的值 的值: women的值:1—12 12 children的值 36-men的值: children的值:36-men-women

循环程序设计
使用枚举法,主要掌握两条原则: 使用枚举法,主要掌握两条原则: 确定搜索范围。 1、确定搜索范围。 选择搜索策略。 2、选择搜索策略。 搜索策略选择得好坏, 搜索策略选择得好坏,直接决定程序的 工作量的大小。 工作量的大小。

循环程序设计
请思考下面程序的功能, 请思考下面程序的功能,并思考怎样改变搜索策略或搜 索范围,可以提高程序的效率。 索范围,可以提高程序的效率。

main() {int m=7;n=5;i=1; do {if(i%m==0) if(i%n==0) {printf(“%d\n”,i); break;} i++;} while (i!=0); }

例9:ch6_009求最小公倍数 : 求最小公倍数 main() {int x,y,z,t; printf("Please input x,y:"); scanf("%d%d",&x,&y); If(x<y) {t=x;x=y;y=t;} for(z=x;z%y!=0;z+=x); ; printf("%d\n",z); ; }

循环程序设计
验证素数: 例10: CH6_010 :验证素数: 数学定义:看在2 数学定义:看在2——n-1中能否找到 n 一个整数m能将n整除, 存在, 一个整数m能将n整除,若m存在,则n 不是素数;若找不到m 为素数。 不是素数;若找不到m,则n为素数。

/*判断素数CH6_010 /*判断素数CH6_010 */ 判断素数 #incude “stdio.h” main() {int x,m,flag=1; clrscr(); m<=sqrt(x) printf("please input x:\n"); scanf("%d",&x); for(m=2;m<=x-1;m++) if(x%m==0) {flag=0;break;} if (flag) printf("Yes."); else printf("No"); }

循环程序设计
算法2 迭代。 算法2:迭代。不断用新值取代变量的旧 值或由旧值递推出变量的新值的过程。 值或由旧值递推出变量的新值的过程。
例如:人口增长问题: 例如:人口增长问题: 现有12亿人,按年2%的增长速度,10年后将 12亿人 2%的增长速度 现有12亿人,按年2%的增长速度,10年后将 有多少人? 有多少人? 分析:设现有人口数为M 则第一年后人口变为: 分析:设现有人口数为M,则第一年后人口变为: M*(1+2%),第二年后, M*(1+2%),第二年后,把上述赋值表达式再 ),第二年后 执行一次,要计算10年后的人口, 10年后的人口 执行一次,要计算10年后的人口,就是把上述 表达式执行10 10次 可以用循环来实现。 表达式执行10次。可以用循环来实现。

循环程序设计
迭代与下列因素有关: 迭代与下列因素有关: 初值; 迭代公式; 迭代次数 迭代公式;
兔子繁殖问题: 例11 : ch6_011 兔子繁殖问题: 设有一对新生兔子, 设有一对新生兔子,从第三个月开始每个月都生一对 兔子,按此规律,并假设没有兔子死亡, 兔子,按此规律,并假设没有兔子死亡,一年后共有 多少兔子? 请同学们写出每月兔子对数,找出规律) 多少兔子?(请同学们写出每月兔子对数,找出规律)

每月兔子呈如下规律: 每月兔子呈如下规律:1,1,2,3,5,8,13, 13, 21,34…… 21,34 f1=f2=1; f3=f1+f2;f4=f2+f3; …… 找出迭代规律: fn+1=fn+fn-1

循环程序设计
个非负整数的最大公约数。 例12 ch6_012 求2个非负整数的最大公约数。 u=55 v=15 u=15 u=10 u=5 v=10 v=5 r=u%v=10 r=u%v=5 r=u%v=0

v=0(终止) 终止

个非负整数的最大公约数。 例ch6_012求2个非负整数的最大公约数。
#include “stdio.h” void main() {int u, v,r; , scanf(“%d%d”,&u,&v); while (v != 0) { r=u%v; u=v; v=r; } printf(“%d\n”,u); }

循环的第2 循环的第2次作业
Xunhuan05:有一分数序列, Xunhuan05:有一分数序列, 2/1+3/2+5/3+8/5+13/8+21/12……求出这个数 2/1+3/2+5/3+8/5+13/8+21/12 求出这个数 列的前20 20项之和 列的前20项之和 Xunhuan06:一位卡车司机违反交通规则, Xunhuan06:一位卡车司机违反交通规则,撞死 了行人。当时有三位目击者, 了行人。当时有三位目击者,都没有看清卡车 的牌照号码,只记住了牌照的某些特征: 的牌照号码,只记住了牌照的某些特征:甲记 住前两个数字是相同的,乙记住牌照的后两位 住前两个数字是相同的, 数字是相同的,丙是一位数学家,他说: 数字是相同的,丙是一位数学家,他说:“牌 照号码肯定是一个四位数, 照号码肯定是一个四位数,并且这个四位数恰 好是一个整数的平方。 根据这些, 好是一个整数的平方。”根据这些,你能否正 确判断出牌照号码? 确判断出牌照号码? Xunhuan07:打印由*号构成的菱形。 Xunhuan07:打印由*号构成的菱形。

单元测试
1、指出下列程序的运行结果: 指出下列程序的运行结果:
main() {int x=1,i=1; for ( ;x<50;i++) {if(x>=10) break; if(x%2!=0) {x+=3; continue;} x-=1; } printf(“%d\n”,x); printf(“%d\n”,i); }

单元测试
R(1+R)N 的公式,并以N为 ( ) 下面的程序是利用T= 下面的程序是利用 的公式,并以 为 N—1 (1+R) ) 变量求以系列T值 是整数, 取到K, 为常数 为常数, 变量求以系列 值,N是整数,从1取到 ,R为常数,将下 是整数 取到 列程序填完全。 列程序填完全。 #include “stdio.h” #include “stdio.h” #include k 10 main() {int n=1; float r=2.5,s=1,t; do {s= t= printf( “N=%d,T=%f\n”,n,t); ++n; }while


相关文章:
3 - 常用美国统计网站.doc
3 - 常用美国统计网站 - 美国普查局 http://www.census.g
3-网络经济与电子商务-2016.9.24_图文.ppt
3-网络经济与电子商务-2016.9.24 - 电子商务概论 第二章 网络经济与
课堂练习答案3.doc
课堂练习答案3 - 、分析题 2、假定货币的边际效用递减,将高工资者的收入转移
第3章答案.txt
3章答案 - 第章 CH3CH2C 2 烯烃和炔烃习题 (2) 对称甲基异丙基乙烯 1 2 3 4 5 用系统命名法命名下列各化合物: CHCH3 2 3 4 (1) 1 CH C...
-|-3|=( )_答案_百度高考.doc
-|-3|=( ) A-3 B- C D3正确答案及相关解析 正确答案 A 解析 解:根据负数的绝对值等于它的相反数,得-|-3|=-3. 故选A. ...
模电习题解答3章.pdf
模电习题解答3章 - 3.2 习题解答 3-1 选择填空 1. 场效应管 g、s
第3章习题解答_图文.ppt
3章习题解答 - 引 言 1.讨论温度(包括熔点)对短程序及长程序的影响。 A
大学物理测试卷3.doc
大学物理测试卷3 - 测试卷 3 一、(6 题,每题 5 分,共 30 分)简要
3#_论文.pdf
研究?开发 弹性体C,H20IN15A0 8E2L5A,2S5T(4O)M:4E2R~IC4S5 3#标准油对 丁腈 橡胶性能的影响 游海 军, 张保 岗, 马楠楠 ,巩 丽,刘 莉 ( ...
3. 2015年中国企业共对“一带一路”相关的49个国家进行....doc
3. 2015年中国企业共对“一带一路”相关的49个国家进行了直接投资,投资额合
水力学习题评讲3_图文.ppt
水力学习题评讲3 - 《水力学》重庆大学出版社,主编:肖明葵。课后习题答案。第
幼儿2、3、4、5、6的分成与10以内算术题.doc
幼儿2、3、4、5、6的分成与10以内算术题 - 图形的需要分别画出所需的图形的个数,数字的用数字来表示 2 3 4 5 6 算式 1+1= 0+1= 4+1= 3+2= 6...
三个牛_三个鱼_三个羊_三个火都念什么!.doc
3.孤儿。 个「牛」-->:bēn,「奔」之异体。 个「鱼」-->:xiān,「鲜」之异体。 个「鹿」-->:cū,1.超远、遥远。2.「粗」 之异体。...
2004考研数学试题详细解析--3.doc
完全类似的例题见《数学复习指南》 完全类似的例题见《数学复习指南》P36 例 1.60,P43 第 1(3)题,P44 第 2(10)题, , 题题 《数学题型集粹与练习题集 ...
3.三减三健_图文.ppt
3.健 - 全民健康生活方式行动 “减””健“”专项行动介绍 怀化市疾
3五位一体总体布局、内涵.doc
3五位一体总体布局、内涵 - 五位一体的内容和内涵 将生态文明建设与经济建设、政
英雄无敌3秘籍大全.doc
英雄无敌3秘籍大全 - 英雄无敌 3 死亡阴影秘籍 按 Tab 键输入: nwc
战略管控体系三个体系和五个支撑.doc
(3)没有制定出适合为制定长期计划莫定基础的公司目标。 (4)没有适度参与主要员
金蝶K3培训详细教程.doc
金蝶K3培训详细教程 - K/3 系统项目实施文档 文档号:XAKDSS H
三年级上册科学知识点.doc
3.拓印一片(树叶)的方法是:用较浓的水粉画颜色,均匀地涂到叶的背面上,盖上白纸