循环语句练习程序流程图
流程图(三)
流程图(三)教学目标:使学生了解循环结构的特点,并能解决一些与此有关的问题.教学重点:循环结构的特性.教学难点:循环结构的运用.教学过程:Ⅰ.课题导入问题:给出求满足1+2+3+4+…+>2008最小正整数的一种算法,并画出流程图.我的思路:在解题的时候经常会遇到需要重复处理一类相同的事或类似的操作,如此题就需要重复地做加法运算.如果用逐一相加算法,步骤太多,采用循环结构可以很好地解决此类问题.算法如下:S1n←1;S2T←0;S3T←T+n;S4如果T>2008,输出n,结束.否则使n的值增加1重新执行S3,S4.流程图如下:Ⅱ.讲授新课循环结构分为两种——当型(while型)和直到型(until型).当型循环在执行循环体前对控制循环条件进行判断,当条件满足时反复做,不满足时停止;直到型循环在执行了一次循环体之后,对控制循环条件进行判断,当条件不满足时反复做,满足时停止.例1:求1×2×3×4×5×6×7,试设计不同的算法并画出流程图.算法1算法2开始输出X结束X 1X ×2X X ×3X X ×4X X ×5X X ×6X X ×7X开始输出X结束X 1I 2X I ×X I +1II >7是否点评:本题主要考查学生对顺序结构和循环结构的理解,学会推理分析.算法都可以由顺序结构、选择结构和循环结构这三块“积木”通过组合和嵌套来完成. 算法2具有通用性、简明性.流程图可以帮助我们更方便直观地表示这三种基本的算法结构.例2:有一光滑斜面与水平桌面成α角,设有一质点在t =0时,从此斜面的顶点A 处开始由静止状态自由释放,如下图所示.如果忽略摩擦力,斜面的长度S =300 cm ,α=65°.求t =0.1,0.2,0.3,…,1.0 s 时质点的速度.试画出流程图.解析:从物理学知识知道:质点在斜面上运动时,它的加速度a =g sin α.当在水平面上运动时,速度为常数,且保持它在B 点时的速度.从A 点到B 点间的速度v ,可由公式v =at =g (sin α)t 求出,到B 点时的速度v B 为v B =at =aaS2=aS 2=2Sg ·sin α. 解题的过程是这样考虑的:按公式v =at =g (sin α)t ,求t =0.1,0.2,0.3……时的速度v ,每求出对应于一个t 的v 值后,即将v 与v B 相比较,如果v <v B ,表示质点还未到达B 点,使t 再增加0.1 s ,再求下一个t 时的v 值,直到v ≥v B 时,此时表示已越过B 点,此后的速度始终等于v B 的值.流程图如下:例3:设y 为年份,按照历法的规定,如果y 为闰年,那么或者y 能被4整除不能被100整除,或者y 能被400整除.对于给定的年份y ,要确定它是否为闰年,如何设计算法,画出流程图.解析:总结:1.理解程序框图的三种基本逻辑结构:顺序结构、选择结构、循环结构.算法的表示方法:(1)用自然语言表示算法.(2)用传统流程图表示算法.2.能够理解和掌握构成流程图的符号:⑤流程线①起止框④输入、输出框②处理框③判断框⑥连接点3.利用计算机进行数值计算,需要经过以下几个步骤: (1)提出问题、分析问题.(2)确定处理方案,建立数学模型,即找出处理此顺题的数学方法,列出有关方程式. (3)确定操作步骤,写出流程图算法见下图. (4)根据操作步骤编写源程序.(5)将计算机程序输入计算机并运行程序. (6)整理输出结果.以上过程可用流程图表示如下:提出问题确定数学模型和计算方法画流程图编写程序运行程序修改程序有无错误结束Ⅲ.课堂练习课本P 14 1,2.Ⅳ.课时小结循环结构的特点:在程序执行过程中,一条或多条语句被重复执行多次(包括0次),执行的次数由循环条件确定. Ⅴ.课后作业课本P 14 7,8,9.练习1.算法的三种基本结构是( ) A.顺序结构、选择结构、循环结构 B.顺序结构、流程结构、循环结构 C.顺序结构、分支结构、流程结构 D.流程结构、分支结构、循环结构 答案:A2.流程图中表示判断框的是( ) A.矩形框 B.菱形框 C.圆形框 D.椭圆形框 答案:B3.下面是求解一元二次方程ax 2+bx +c =0(a ≠0)的流程图,请在空缺的地方填上适当的 标注.结束开始 答案:(1)Δ<0 (2)x 1←aΔb 2+-,x 2←a Δb 2-- (3)输出x 1,x 24.下面流程图表示了一个什么样的算法?输入,,a b c5.下面流程图是当型循环还是直到型循环?它表示了一个什么样的算法?结束答案:此流程图为先判断后执行,为当型循环.它表示求1+2+3+…+100的算法.6.已知梯形的上底、下底和高分别为5、8、9,写出求梯形的面积的算法,画出流程图. 答案:解:算法如下: S1 a ←5; S2 b ←8; S3 h ←9;S4 S ←(a +b )×h /2; S5 输出S . 流程图如下:结束7.设计算法流程图,输出2000以内除以3余1的正整数. 答案:结束8.某学生五门功课成绩为80,95,78,87,65.写出求平均成绩的算法,画出流程图. 答案:解:算法如下:S2 S ←S +95; S3 S ←S +78; S4 S ←S +87; S5 S ←S +65; S6 A ←S /5; S7 输出A . 流程图如下:结束9.假设超市购物标价不超过100100元,则超过部分按七折收费.写出超市收费的算法,并画出流程图. 答案:解:设所购物品标价为x 元,超市收费为y 元.则y =⎩⎨⎧-⨯+⨯≤).100(7.01009.0,100 ,9.0xx x收费时应先判断标价是否大于100,其算法如下:S1 输入标价x ;S2 如果x ≤100,那么y =0.9x ;否则y =0.9×100+0.7×(x -100); S3 输出标价x 和收费y . 流程图如下:开始结束10.写出求1×3×5×7×9×11的算法,并画出流程图. 答案:解:算法如下: S1 p ←1;S3 p ←p ×I ; S4 I ←I +2;S5 若I ≤11,返回S3;否则,输出p 值,结束. 流程图:结束11.《中华人民共和国个人所得税法》规定,公民全月工资、薪金所得不超过800元的试写出工资x (x ≤5000元)与税收y 的函数关系式,给出计算应纳税所得额的算法及流程图.答案:解:研究这个表提供的信息,可以发现,如果以一个人的工资、薪金所得为自变量x ,那么应纳税款y =f (x )就是x 的一个分段函数.y =⎪⎪⎩⎪⎪⎨⎧≤<-≤<+≤<-≤<5000.2800 28000.151752800,13001300)0.1(251300,800 )800(05.08000 0x x x x x x ,x )(+ -算法为:S1 输入工资x (x ≤5000); S2 如果x ≤800,那么y =0;如果800<x ≤1300,那么y =0.05(x -800); 如果1300<x ≤2800;那么y =25+0.1(x -1300); 否则y =175+15%(x -2800); S3 输出税收y ,结束. 流程图如下:12.根据下面的算法画出相应的流程图. 算法:S1 T ←0; S2 I ←2; S3 T ←T +I ; S4 I ←I +2;S5 如果I 不大于200,转S3; S6 输出T ,结束.答案:解:这是计算2+4+6+…+200的一个算法. 流程图如下:开始输出T结束T 0I 2T I +T I +2II >200NY13.一个三位数,各位数字互不相同,十位数字比个位、百位数字之和还要大,且十位、百位数字不是素数.设计算法,找出所有符合条件的三位数,要求画出流程图.答案:开始=120a = m o d 100b a =(1-100) m o d 10c a b=-100-10a b b c c a=或=或=b a +c ≤a =2,3,5,7b =2,3,5,7=+1<1000输出是是是是是否否否否否14.已知算法:①指出其功能(用算式表示).②将该算法用流程图描述之. S1 输入X ;S2 若X <0,执行S3;否则执行S6; S3 Y ←X + 1; S4 输出Y ; S5 结束;S6 若X =0,执行S7;否则执行S10; S7 Y ←0; S8 输出Y ; S9 结束; S10 Y ←X ; S11 输出Y ; S12 结束.答案: 解:这是一个输入x 的值,求y 值的算法.其中y =⎪⎩⎪⎨⎧>=<+.0 ,0 0,0 1x x x x x流程图如下:15.下面流程图表示了一个什么样的算法?试用当型循环写出它的算法及流程图.输出A答案:解:这是一个计算10当型循环的算法如下: S1 S ←0; S2 I ←1;S3 如果I 大于10,转S7; S4 输入G ; S5 S ←S +G ;S6 I ←I +1,转S3; S7 A ←S /10; S8 输出A. 流程图:开始结束李白写的“举头望明月,低头思故乡”,看月亮,必须得抬头看,不然你看见的月只是水中月,而思故乡,必须得低头,看着脚下的土地,土地连结深情,传递的思念感应才会自然。
C语言循环语句课件四章
Page 14ຫໍສະໝຸດ while语句(当型循环)
❖例 求自然数1~10之和。
▪ 分析:本题需要用累加算法,累加 过程是一个循环过程,可以用 while语句实现。
▪ 流程图
开始
sum=0 i=1
i<=10 false
true sum=sum+i
i=i+1
输出sum
结束
Page 15
while语句(当型循环)
▪ 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例 如6=1+2+3
8. 求水仙花数:是指一个n(>=3)位数字的数,它等于每个数 字的n次幂之和。
9. 输入两个正整数m和n,求其最大公约数和最小公倍数。
Page 29
3.求1~599中能被3整除,且至少 有一位数字为5的所有整数。
❖ 判断a、b、c中是否有5:将1~599中三位整数i分 解成个位、十位、百位,分别存放在变量a、b、 c中。然后判断这三个变量是否含5。将三位整数i (设i=513)分解成个位、十位、百位的方法是: c=i/100; //百位 b=i%100/10; //十位 a=i%100%10; //个位
❖ 流程图
❖ 注意:在循环体中,一般应该 包含改变条件表达式的语句。
语句
true 表达式
false
Page 19
do…while语句(直到型循环)
❖例 用do…while语句求自然数 1~10之和。
▪ 分析:本题需要用累加算法,累加 过程是一个循环过程,可以用 do…while语句实现。
▪ 流程图
❖ 表达式1和3可以是简单表达式,也可以是逗号表 达式
▪ for(i=0,j=100;i<=j;i++,j--) k=i+j;
C语言 第五章-循环结构程序设计
执行过程如图所示。其中i为外循环的控制变 量,j为内循环的控制变量。
i =0 当 i <=10
j=0 当 j<=10
printf(“%d ”, i*j ) j++ i++
例4 编程打印“九九乘法表”。
分析:九九乘法表 1×1=1 1×2=2 1×3=3 … 2×1=2 2×2=4 2×3=6 … 3×1=3 3×2=6 3×3=9 … …… 9×1=9 9×2=18 9×3=27 …
i ++ ; } while ( i <= 100 ) ; printf ( " %d " , sum ) ; }
结果相同
同样是下列程序,但如果while后面的表达式结果一开始就是 假时,两种循环结果会不一样。
main ( ) /*程序1*/
{ int i , sum = 0 ; i = 101 ;
所以程序需要设计成二重循环。由于题目只 要求找到一组解,所以在循环过程中只要找到一组 满足条件的x, y, z就可以跳出循环。
跳出循环的方法可以采用break语句,但是, 因为是二重循环,所以要考虑使用break是否方便。
程序 百钱买百鸡问题。 void main ( ) { int x , y , z ;
打印第2行 ( i = 2 ) for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
…… 打印第9行 ( i = 9 )
for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
第5章 循环结构1
说明:
(3)最简单的应用形式: for(循环变量赋初值;循环条件;循环变量增值) 例如:for(i=1;i<=10;i++) sum=sum+i; (4)三个表达式均可缺省,但起分割作用的两个分号 不可省略。 例如:for( ; ; ) i=1;for(;i<=10;i++) sum=sum+i; 或 for(i=1;i<=10;) {sum=sum+i;i++;} • 表达式1省略,应在for之前对循环变量赋初值 • 表达式2省略,则不判断条件,循环无终止进行下去 • 表达式3省略,则应另设法保证循环的结束
5.4
循环的嵌套
一个循环体内又包含另一个完整的循环结构称为循 环的嵌套。
① while() {… while() {…} } ② do {… do {…} while(); } while() ; ③ for(;;) { for(;;) {…} }
5.4
④ while() {… do {…} while(); … } 说明:
在许多问题中都需要用到循环结构,如
要求计算全校每个学生的平均成绩,计算两 个正整数的最大公约数和最小公倍数等都需
要用到循环控制。C语言中有三种循环语句, 分别是while语句、do…while语句和for语 句。
5.1 while循环语句
while循环语句是用来实现“当型”循环结构的。 它的特点是先判断表达式,后执行语句。 格式: while(表达式) 语句; 该语句的执行顺序是:先计算表达式的值,再判 断其值是否为“真”(即非0)。若结果为“真”, 则执行语句;此过程重复执行,直到表达式的值为 “假”(即为0)时,结束循环。其流程图和N-S图 分别如图5-1和5-2所示。
程序框图(循环结构)
§1.1.2程序框图
• (2)算法步骤中的“第四 步”可以用条件结构来表 示(如下图).在这个条件 结构中,“否”分支用 “a=m”表示含零点的区间 为[m,b],并把这个区 间仍记成[a,b];“是” 分支用“b=m ”表示含零 点的区间为[a,m],同样 把这个区间仍记成[a, b].
主页
主页
§1.1.2程序框图
开始 P=0 i=1 t=0
1
1
p=p+i
t=t+1
i=i+t
否
i >46?
是
输出p 结束
主页
§1.1.2程序框图
主页
§1.1.2程序框图
讲授新课
三、循环结构及框图表示
1.循环结构的概念
循环结构是指在算法中从某处开始,按 照一定的条件反复执行某一处理步骤的结 构.在科学计算中,有许多有规律的重复计算, 如累加求和、累乘求积等问题要用到循环 结构.
主页
§1.1.2程序框图
2.循环结构的算法流程图
当型Βιβλιοθήκη 循环体循环 结
§1课.1.2堂程序练框习图
开始
n=1
输入r
r≥6.8? 是
否
输出r
n=n+1
是 n≤9? 否
主结页束
§1.1.2程序框图
例2.画出
1
2
1
2
1
2 2 11
2 1
2
的值的程序框图.
主页
§1.1.2程序框图
解法2.
开始
a1
1 2
1 a2 2 a1
1 a3 2 a2
1
主页
1
1 a4 2 a3
大学Python学习课件第6讲-循环结构-while
示例 5
【示例5】求200以内能被17整除的最大正整数。程序保 存为06_number.py。
【分析】
这个查找过程将以递减的方式遍历200至1之间的整数,当找到第1 个能被17整除的数时,循环过程立即停止,后续还没有遍历的数 将无需再进行判断,因此可以使用break语句将循环提前终止。
示例5:程序和运行结果
课堂练习与课后作业
课堂练习
教材上的相关实例
• P57_4-1,p64_4-7
示例1-5
课后作业
输入一个整数n,计算1+2+3+…+n 输入一个整数n,计算n! P75:3,5,6,7,8
下一讲内容
循环结构程序设计
for循环 continue语句
做好预习
34
【分析】
该问题使用循环结构解决,由于不确定 用户即将输入几个正整数,因此属于不 确定循环次数的问题。
使用while语句的“格式1”
开始 输入第一个整数 x
x >= 0 ? True
将 x 累加到 s 中
输入后续整数 x
False
输出 s 结束
图 4-3 累加若干整数值的框图
示例1:程序和运行结果
示例3:程序和运行结果
注意: s的初始值设为0 i的初始值设为1 i的作用:
– 循环计数变量,控制循环次数 – 作为每次被累加的整数值
示例3思考
在示例程序中,第1条语句改成如下,会有什么后果?请
尝试
i, s = 0, 0
循环体中语句“i+=1”,还可以如何表示?
循环结束后,变量i的值是什么?
教学目标重点难点?教学目标?程序设计的3种基本结构?循环结构概述?while语句?解决不确定循环次数问题?解决确定循环次数问题?重点难点?程序设计的3种基本结构?while语句语法程序设计的3种基本结构?顺序结构?程序流程按先后顺序执行只有执行了前一步才能执行后一步
项目五 循环结构程序设计
图5-10 多循环的并列与嵌套
任务4 掌握循环结构程序设计实例
【例5-7】输出10~100之间的全部素数。所 谓素数n,是指除1和n之外,不能被2~(n-1) 之间的任何整数整除。 算法设计要点: (1)显然,只要设计出判断某数n是否是素 数的算法,外面再套一个for循环即可。
(2)判断某数n是否是素数的算法:根据素数 的定义,用2~(n-1)之间的每一个数去整除n, 如果都不能被整除,则表示该数是一个素数。 判断一个数是否能被另一个数整除,可通过判 断它们整除的余数是否为0来实现。
二、continue语句 continue语句的一般形式为: continue; continue只能用在循环语句中,它的功能是 结束本次循环,跳到循环体中下面尚未执行的语 句,接着进行下次是否执行循环的判定。
continue语句的功能:对于for循环,跳过循环 体其余语句,转向循环变量增量表达式的计算;对 于while和do-while循环,跳过循环体其余语句,但 转向循环继续条件的判定,也就是说continue语句 用在循环中时不会强制退出循环,但它会跳过循环 体中剩余的部分而转去循环的结尾部分,强制开始 下一轮循环。
普通高等教育“十二五”规划教材·计算机专业
C语言程序设计
主编 刘孟强 李思广
兴趣是最好的老师
知识有限创意无限 欢迎大家学习
C语言程序设计
项目五 循环结构程序设计
任务1 掌握循环结构语句
任务2 掌握break与continue语句
任务3 掌握多重循环
任务4 掌握循环结构程序设计实例
任务1 掌握循环结构语句
由于循环结构在现实生活中和数学运算中比 较常用,并且较之顺序结构和选择结构比较难, 所以要认真学习这一项目。
C语言程序设计第5单元
例5.2流程图
N
8
5.1 while语句
程序代码: #include<stdio.h> main() { int i=1,n;
float fac=1; printf("please input an integer>=0:\n"); scanf("%d",&n); if(n==0||n==1)
printf("factorial is 1.\n"); else
int i,sum=0,score; float ave=0; printf("\n计算学生总成绩和平 均成绩\n"); printf("请输入10名学生的成 绩:\n");
for(i=1;i<=10;i++) { scanf("%d",&score); sum=sum+score; } ave=sum/10.0; printf("总成绩为%d 平均成绩为
1. break语句
出现在循环体中的break语句使循环结束。若在多层循环体 中使用break语句,则只结束本层循环。
【例5.11】使用for语句输出50个“*”,使用break控制数量。
#include <stdio.h>
main()
{
int i;
for(i=1;;i++)
{
if(i>50) break;
方法三:
#include "stdio.h"
int main()
{
int i=1;
for(;i<=10;)
{
循环结构&while-do-while循环
#include <stdio.h> void 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"); }
要构成一个有效的循环,应当指定两个条件: 需要重复执行的操作,这称为循环体 循环结束的条件,即在什么情况下停止重复的操作 while语句 实现循环结构的语句有: do-while语句 for语句
while语句
while语句的一般形式如下: while (条件表达式) 循环体语句 当条件表达式为“真”时,执行循环体语句,为“假”时 不执行。 while循环的特点是:先判断条件表达式后执行循环体语句
流程图
N-S流程图
用do…while循环求:1+2+3+…+100,即
sum=0,i=1 sum=sum+i i=i+1 i <=100
0(假)
sum=0,i=1 sum=sum+i i=i+1 i <=100
非0(真)
#include <stdio.h> void main() { int i,sum=0; i=1; do //在循环开始时不检查条件,先执行一次循环体 sum=sum+i; i++; }while(i<=100); printf(“%d\n”,sum); }
第四章 循环结构程序设计
while(i<=100)
{ i++;
程序运行结果: sum=5050
sum=sum+i;
}
6
4.3 do-while语句
do-while语句的结构 do 语句 while(表达式);
例如: do
x-=1; while(x>0);
功能:
1)执行“语句”。 2)计算“表达式”的值。如果值为非0,转1);否则转3)。
}
8
4.3 do-while语句
1)循环体如果包含一个以上的语句,要用复合语句表示。 2)在循环体中应有使循环趋于结束的语句。 3)while语句的特点是先执行循环体,然后判断表达式的值。 4)一般情况下,用while语句和用do-while语句处理同一 个问题时,若二者的循环体部分一样,其结果也一样。但如
18
4.7 goto语句以及用goto语句构成循环结构
goto语句的一般格式:
goto 语句标号;
例如: goto loop;
功能:程序执行到goto语句时,将程序流程转到语句标号指定的 语句去执行。
有标号的语句的格式:
语句标号: 语句
例如: loop: sum=sum+i;
19
4.7 goto语句以及用goto语句构成循环结构
【例4-9】用goto语句实现求1~100累加和。
#include <stdio.h>
main() { int n=1, sum=0; loop: sum += n; n++;
if(n<=100) goto loop;
printf("sum=%d\n",sum); }
第四章。循环结构(while、do-while、for)
Top1.循环结构(while、do…while、for)1. 循环结构(while、do…while、for)1.1. 什么是循环结构在日常生活中,会有很多需要反复执行的事情,比如:每一年的4个季节,每一周的7天,每日的3餐,打印机每份文档打印50份,一圈跑道400米跑3圈,都是在反复执行的。
再看软件系统中的需求:问题1:输出100行语句,每行语句都一样,即:∙行动是成功的阶梯,行动越多,登得越高!∙行动是成功的阶梯,行动越多,登得越高!∙行动是成功的阶梯,行动越多,登得越高!…问题2:输出100行语句,每行语句都类似,即:∙第1,行动是成功的阶梯,行动越多,登得越高!∙第2,行动是成功的阶梯,行动越多,登得越高!∙第3,行动是成功的阶梯,行动越多,登得越高!∙…∙第100,行动是成功的阶梯,行动越多,登得越高!问题3:计算1到50乘以8.88的结果∙1×8.88 =8.88∙ 2 ×8.88 =17.76∙ 3 ×8.88 =26.64∙ 4 ×8.88 =35.52∙…∙50 ×8.88 =444诸如此类问题都是在反复执行的,在软件系统中可以通过循环这种语法结构来解决。
循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性执行。
对于循环来说,需要考虑两个要素,其一要素为循环体,也就是被反复执行的相同或相似的语句,其二要素为循环的条件,也就是循环得以继续执行下去的条件,常常以循环次数的方式体现。
常用的循环结构有:while、do-while、for。
1.2. while语句1.2.1. while语句的执行逻辑while语句是循环的一种常见语法结构,语法如下:1.while(boolean表达式){语句块;2.}while语句的执行过程为,首先计算boolean表达式的值,而后进行判断,若值为true则执行语句块,语句块执行完后再次判断boolean表达式的值,如果为true则继续执行语句块,如此循环往复,直到boolean表达式的值为false时退出while循环而执行while之后的语句。
循环程序设计PPT课件
表达式? N
Y
后续语句
第23页/共59页
for语句 计算表达式1
表达式2? N
Y… continue;
… 计算表达式3
后续语句
[例]:用while语句求n项和
#include<stdio.h> main() {int i,sum=0; i=1; while(i<=100)
{sum=sum+i; i++; } printf("%d\n",sum); }
while 循环程序 #include<stdio.h>
do -while 循环程序 #include<stdio.h>
main()
main()
{int i,sum=0;
{int i,sum=0;
scanf("%d",&i);
scanf("%d",&i);
while(i<=10)
do
{sum=sum+i;
main()
main()
{ int x,sum=0; scanf("%d",&x);
{ int x,sum=0;
do
结果:sum=-2
while(x>=0) 结果:sum=8 { sum=sum+x;结果:sum=0
scanf("%d",&x);
{
结果:sum=-10
scanf("%d",&x);
sum=sum+x;
do—while循环体中一定要有能使表达式值 趋于0的操作(如i++),否则会出现死循环。
c语言 第5章循环结构(while do-while for)
第1次运行: Input data: 11 22 33 44 55 66 77 88 99 0 1 2 11 22 33 44 55 66 77 88 99 0 sum=495 第1次运行: Input data: 0 0 sum=0 sum的初值与0的和
5.4 for语句
#include <stdio.h> int main() { int i=1,sum=0; while (i<=100) { sum=sum+i; i++; } printf("sum=%d\n",sum); return 0; for (i=1;i<=100;i++) } #include <stdio.h> int main() { int i=1,sum=0; do { sum=sum+i; i++; }while(i<=100); printf("sum=%d\n",sum); return 0; }
i++ for ( i = 1; i <= 100; i = i + 1 ) printf ( “**********\n” );
语句是?
【例1】在3~100之间所有3的倍数中,找出个位 数为2的数。
编程点拨 3~100内3的倍数有3 6 9 … 99 for ( i=3; i<=100; i=i+3 )
第1次运行: Input data: 11 22 33 44 55 66 77 88 99 0 1 2 11 22 33 44 55 66 77 88 99 sum=495 第2次运行: Input data: 0 (空一行) sum的初值 sum=0
4循环结构
攸县职业中专 谭五爱
第4部分 循环结构
4.5 循环的嵌套
一个循环体内的语句又包含另一个完整的循环结构, 称为循环嵌套。如果内嵌的循环体中还包含完整的循 环,这就构成了多层循环。
三种循环语句(while,for,do-while)可以相互 嵌套。例如,以下几种均为合法的循环嵌套。
攸县职业中专 谭五爱
第4部分 循环结构
4.4.2 for循环的变量(循环变量)
在循环中通过改变循环变量的值,实现对循环条件的 改变来控制循环。可以使用一个或两个及以上的变量共同 实现对循环的控制。 例,下面例子使用变量x和y共同来控制循环,这两个 变量都是在for语句的内部被初始化。 int x,y; for(x=0,y=0;x+y<10;++x) { y=getchar(); y=y-’0’;/*将数字字符转化为整数值*/ printf(“%d”,y); } 欲键盘输入456789<回车>,输出结果是:
攸县职业中专 谭五爱
第4部分 循环结构
for语句最主要的特点是: 特别适合已知循环次数的循环语句,根据for循环的循环 变量的变化情况。循环次数的计算可以用公式进行计算:
n=(int)((终值-初值+步长)/步长)
例如:循环语句for(n=1;n<=100;n++)(设n为整 型变量)控制循环体反复执行的次数为 n=(int)((100-1+1)/1)=100 又如:循环语句for(n=100;n>0;n=n-2)(设n为 整形变量)控制循环体反复执行的次数为 n=(int)((1-100-2)/(-2))=50
do循环语句
作业:已知S=1+3+5+•••+n,找出一个最小 的整数n,使得S>30000。编写程序解决这 个问题。
Private S s=s+n n=n+2 Loop Until s > 30000 Print “最小的整数n为"; n - 2 End Sub
Do 循环语句
问题:已知S=1+2+3+•••+N,找出一个最大的整 数N,使得S<30000。编写程序解决这个问题。 For循环语句的基本格式
For 循环变量 = 初值 To 终值 Step 步长
语句组
Next 循环变量
For 循环语句主要用于描述预先知道循环次数的循 环结构,是一种计数循环。
Do 循环语句的基本格式 Do 循环体 Loop until 循环终止条件 其中: 循环体是一组vb语句 循环终止条件是一个逻辑表达式
Do
循环体 Loop Until 条件
判断条件放在loop后至少执行循环一次,放在do后面有可能一次也不执行
当型循环:(while) 当条件成立时执行循环体 直到型循环:(until) 直到条件成立时退出循环体
特别注意:当型循环和直到型循环的判断条件相反
问题:已知S=1+2+3+•••+N,找出一个最大的整数N,使得S<30000。编写程序解决 这个问题。 程序二: 程序一: Private Sub Command1_Click() Private Sub Command1_Click() s=0 s=0 n=1 n=1 Do While s < 30000 Do s=s+n s=s+n n=n+1 n=n+1 Loop Loop While s < 30000 Print "最大的整数n为"; n - 2 Print "最大的整数n为"; n - 2 End Sub End Sub 程序三: 程序四: Private Sub Command1_Click() Private Sub Command1_Click() s=0 s=0 n=1 n=1 Do Do until s >= 30000 s=s+n s=s+n n=n+1 n=n+1 Loop until s >= 30000 Loop Print "最大的整数n为"; n - 2 Print "最大的整数n为"; n - 2 End Sub End Sub
C语言程序设计教程(第4版)_第5章_循环结构
void main()
{ int i,sum=1,n;
printf("please input the value of n:");
scanf("%d:",&n);
if (n>=0)
{ i=1;
while(i<=n)
{sum=sum*I; i++;}
printf("%d\n",sum);}
else
printf("wrong\n"); }
5.2 while语句
例6:编写程序,从键盘输入一个正整
数n,求n!。
分析:n!=n*(n−1)*(n−2)*…*2*1 (约定:n≥0,0!=1) 用i代表循环变量,s代表n!的结
果值,则循环计算表达式:s=s*i, 即可求得n!。 思考:能否用for循环实现?
#include<stdio.h>
2.判断<条件表达式>的值。该表达式就是循环条件, 若该表达式的值为“真”,则执行<循环体语句>; 若该表达式的值为“假”,则退出循环,执行循环结 构外的语句。
3.计算<循环表达式>的值。该表达式更新循环控制变 量的值。
4.转第2步。
5.1 for语句
for语句的流程图:
注意: ①若<循环体语句>中有多
sum=0; for(i=1; i<=100; i=i+2) 7.for循环也可以嵌套,执行时是先执行最里层的循环,再 执行其外一层的循环。
5.1 for语句
例2:编写程序,从键盘输入两个不等于零的正整数a、
b(a<b),求它们之间的几何级数的和,数学表达式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、计算1-2+3-4+5……+99-100的值。
2、求1~1000之间可以同时被
3、5、7整除的数字。
分析过程:
1、明确判断的区间为[1,1000];
2、对[1,1000]范围内的每一个数字都要进行相同的判
断过程;
3、判断过程:一个数字是否能够同时被3、5、7整除,
如果可以,将该数字输出,否则不操作。
算法步骤:
1、利用循环结构来循环读取[1,1000]区间的每一个数字
for( i )//循环读入[1,1000]内的数字
{
//每读入一个数字,都要进行是否能够
同时被3、5、7整除的判断过程
if( )
{
//输出数字
}
}
2、求解水仙花数。
水仙花数是一个三位数,并且该三位
数每个位数上的数字的立方和等于该三位数本身。
分析过程:
1、由概念确定判断数字的取值范围为[100,999];
2、分解每个三位数,得出个、十、百位数字;
3、判断每个三位数的个十百数字立方和是否等于该数字
本身;如果等式为真,输出该三位数,否则不操作。
算法步骤:
1、由分析过程可知每个三位数都要进行相同的分解过
程和判断过程,可以使用循环结构来实现:
for( i )//循环读入[100,999]内数字
{
//1、分解读入的三位数i
ge=…….
shi=……..
bai=………
//2、判断ge3+shi3+bai3==i等式的真假
if(ge3+shi3+bai3==i)
{
//输出该三位数i
}
}
4、假定在银行中存款5000元,按照6.25%的年利率计算,
试过经过多少年后会连本带利翻一番,编程实现。
分析过程:
1、假设今年存款5000元,按6.25%年利率增加,明年是
5000*(1+0.0625)元,后年就是5000*(1+0.0625)2,大后年就是5000*(1+0.0625)3,依次类推;
2、在存款初值为5000元的基础上,每一年增加以后,都
要判断一下是否连本带利翻一番(即当年的存款额是否
大于等于存款初值的2倍),如果判断结果为真,则不
再按年利率增加;
3、题目要求统计出经过多少年会使得2中的判断结果为
真;
算法步骤:
1、存款初值为5000(m),当年存款额(s)为存款初值;
2、当年存款额按照年利率增加,每增加一年,将年数累加
一次,然后判断是否大于等于存款初值的2倍,如果没
有超过,则继续按年利率增加,否则不再增加。
do
{
//1、增加一次存款额
………….
//2、累加一次年数
……………
}while(存款额是否大于等于存款初值的2倍);
5、打印输出前100个自然数中的所有素数。
分析过程:
1、明确素数的概念:在一个大于1的自然数中,除
了1和此数本身外,没法被其他自然数整除。
2是
最小的素数,其余偶数均不是素数,1和0既不是
素数也不是合数!
2、由概念可以推导出几个结论:2是最小素数,可以
直接输出;大于2的偶数绝不是素数;对于大于2
的奇数,可以进行是否素数的判定,该判定过程
可以从该数是否只能被1和它本身整除而不能被
其他自然数整除的条件上去进行判定。
算法步骤:
1、直接输出最小素数2
2、排除掉3-100区间范围内的所有偶数
3、针对3-100区间内的奇数去进行判断,因为每一个奇数
都要重复相同的判断过程,所以可以利用一个循环体去进行循环读取奇数,读入奇数以后的判断过程:每次读入一个奇数(假设用i变量表示)以后,只要能够证明该奇数不能被区间[2,i-1]内的所有数字整除(取模运
算结果等于0),就可以说明该奇数是一个素数。
该过
程又可以用一个循环结构去描述,所以用第二个循环体去进行整除的判定。
for( i )//循环读入[3-100]内的奇数
{
//判断奇数i是否能被[2,i-1]内的数字整除
for( j )//循环进行i%j==0等式的判断
{
//只要某一次循环时候i%j==0等式为真,
即可结束内层循环,i不是素数;只有当区间内
所有数字进行等式判断都为假时,i是素数!
…………….
}
}
6、计算1!+2!+…+10!的值。
(也可以利用单层循环来实
现)
分析过程(以两层循环来实现):
1、单个数字的阶乘如何计算?(利用循环结构进行累乘的
操作)
1!:1*1
2!:2*1
3!:3*2*1
2、单个数字的阶乘计算出结果以后,再将结果进行累加?
(利用循环结构进行累加的操作);
3、先计算阶乘后进行累加,所以两个循环结构存在嵌套关
系,哪个是内层循环,哪个是外层循环?
算法步骤:
1、for( m )//计算单个数字阶乘
{
//累乘操作
}
2、由题目可知累加[1-10]区间的数字的阶乘,可以理解为
该区间数字都要重复1中的计算过程,可以在1的基础上循环读入[1-10]区间内的每一个数字。
既然是循环读入,所以可以再利用循环结构来实现。
for( n )//循环读入[1-10]区间内数字
{
}
3、根据逻辑过程(先读入数字后计算该数字阶乘),可将
1和2组合成循环嵌套结构:
for( n )//循环读入[1-10]区间内数字,外层{
for(m )//计算单个数字阶乘内层
{
//累乘操作
…………..
}
//阶乘结果进行累加
……………..
}。