第3章+循环程序设计.docx
- 文档编号:24042668
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:15
- 大小:133.84KB
第3章+循环程序设计.docx
《第3章+循环程序设计.docx》由会员分享,可在线阅读,更多相关《第3章+循环程序设计.docx(15页珍藏版)》请在冰豆网上搜索。
第3章+循环程序设计
第3章循环程序设计
本章重点
●循环的概念
●while及do-while循环的执行过程
●while循环的应用
●for循环的执行过程
●for循环语句的变形及应用
●循环的嵌套
3.1循环的概念
循环是程序设计中非常常见的格式之一,所谓循环就是根据某个条件反复执行一系列指令。
3.2while循环
while循环的格式为:
while(条件表达式)
{
循环体
}
3.1while循环流程图
注意:
程序中反复执行的一段程序被称为循环体,一般以{}括起来。
例3.1计算1+2+3+…….+99+100的和。
分析:
计算1到100的和,是重复做100次加法,首先定义变量sum及用于循环变量i,每循环一次,做一次sum=sum+i运算,且循环变量i自增长1,当i增加到101时循环结束。
程序流程图如图3.2所示。
i是这个循环结构的循环变量,以它来控制循环的继续或者退出。
图3.2流程图
编辑源程序代码3-1.c
#include
intmain()
{
inti,sum=0;
i=1;
while(i<=100)
{
sum=sum+i;
i++;
}
printf(“sum=%d\n”,sum);
return0;
}
注意:
如果while中的循环体有二条以上的语句构成,用‘{’与‘}’构成一个程序块,while中的条件表达式后不能有‘;’号。
思考:
求100+101+102+…+200的和。
例3.2输出1到100之间的所有奇数。
关键代码:
i=1;
while(i<=100)
{
printf(“%d\n”,i);
i+=2;
}
图3.3输出1到100的所有奇数流程图
编辑源程序代码3-2.c
#include
intmain()
{
inti=1;
while(i<=100)
{
printf("%4d",i);
i+=2;
}
printf("\n");
return0;
}
例3.3求5!
的值(5!
=1×2×3×4×5)。
分析:
设乘积t的初始值为1,乘数项i的初试值也为1,每循环1次,i与t相乘,得到一个新的t,然后i的值增1,再与t相乘,如此反复直到i>5。
退出循环后输出t即为所求值。
流程图如图3.4所示。
图3.4求5!
的流程图
编辑源程序代码3-3.c
#include
intmain()
{
inti=1,t=1;
while(i<=5)
{
t*=i;
i++;
}
printf("5!
=%d\n",t);
return0;
}
例3.4将求s=1+1/2+1/3+1/4+……+1/n,直到和s大于3为止,求此时的s与n的值。
分析:
设置变量n,每循环1次n的值增1,s变量用来存放各数的和,当s的值大于3时,循环结束。
因此在while条件里设置s<=3。
流程图如图3.5所示。
图3.5流程图
编辑源程序代码3-4.c
#include
intmain()
{
intn=1;
doubles=0;
while(s<=3)
{
s+=1.0/n;
n++;
}
printf("s=%lfn=%d\n",s,n-1);
return0;
}
模仿例3.4,求s=1-1/2+1/3-1/4+……的值,直到误差<0.00001
3.3do-while循环
do~while循环是后判断循环,不论循环的条件是否满足,循环体至少应执行一次,do~while循环的语句格式为:
do
{
循环体
}while(表达式);
语句执行流程图如图3.6所示。
图3.6语句执行流程图
例3.5输入任意一个正整数,按低位开始输出它各个位置上的数字。
例如:
531输出135。
分析:
先求出531除以10的余数,得到1;将531除以10得到53;再求53除以10的余数,得到3,将53除以10,得到5。
这样将1,3,5全部分解出来。
执行步骤:
设被除数m,余数n,进行下列运算:
(1)n=m%10;
(2)m=m/10;
(3)循环的条件为m!
=0。
流程图如图3.7所示。
图3.7流程图
编辑源程序代码3-5.c
#include
intmain()
{
longm,n;
pringf(“请输入一个正整数:
”);
scanf("%ld",&m);
do
{
n=m%10;
m=m/10;
printf("%ld,",n);
}while(m);
return0;
}
3.4for循环
C语言中的for循环语句应用比较灵活,虽然主要用于定数循环,但也可以不定数循环,它完全可以替代while循环。
for语句格式:
for(初始化表达式;条件表达式;增量表达式)
{
循环体
}
for语句的执行过程是:
(1)计算初始化表达式的值。
(2)计算条件表达式的值,若值为真(非0)则执行循环体中的语句,转第(3)步;若值为假(0)则转第(4)步。
(3)计算增量表达式的值,转第
(2)步重复执行。
(4)结束循环。
程序流程图如图3.8所示。
图3.8程序流程图
先用for语句来处理加法的问题。
例3.6:
求1+2+3+……+100的和,用for语句实现。
分析:
在计算求和时,采用循环的方法,把1加到s,再把2加到s,一直加到100,然后循环结束。
程序设计中首先把存放结果的变量s置零,循环变量i初值为1,把i加到s中,每循环一次,i增1,其流程图如图3.9所示。
图3.9流程图
编辑源程序代码3-8.c
#include
intmain()
{
inti,sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf("1+2+……+100=%d\n",sum);
return0;
}
例3.7用循环体是空语句的for循环,计算输入的一行字符的字符个数。
分析:
程序中的循环条件为getchar()!
='\n',判断从键盘输入的字符是不是回车。
增量表达式用于字符计数,而不是用来修改循环变量,所有的工作都在表达式中已完成,循环体是空语句了,注意此时空语句的分号不可少。
流程图如图3.12所示。
图3.12流程图
编辑源程序代码3-7.c
#include
intmain()
{
intn=0;
printf("请输入一串字符:
\n");
for(;getchar()!
='\n';n++);
printf("%d\n",n);
return0;
}
3.5break语句和continue语句
break语句可应用于循环体中或switch语句中,在循环中当程序执行到break语句后,立即退出循环。
continue语句只能位于循环体内,执行continue语句后,continue语句到循环体末尾之间的语句会被跳过,但会接着执行下一次循环。
break语句和continue语句往往与if一起使用。
if将在以后的章节中详细讲到,if的其中一个格式如下:
if(条件)
语句1
else
语句2
当括弧中的条件(逻辑值)为真时,程序执行语句1,条件为假时执行语句2。
例3.8将求s=1+1/2+1/3+1/4+……+1/n,直到和s大于3为止,求此时的s与n的值,用break语句跳出循环。
分析:
设置一个无限循环,当和s的值大于3时,用break语句跳出循环。
流程图如图3.13所示。
图3.13流程图
编辑源程序代码3-8.c
#include
intmain()
{
intn=1;
doubles=0;
while
(1)/*非0(永真),无条件循环*/
{
s+=1.0/n;
if(s>3)/*当s>3时,执行break跳出循环*/
break;
n++;
}
printf("s=%fn=%d\n",s,n);
return0;
}
思考:
求s=1/1!
+1/2!
+1/3!
+1/4!
+···,要求误差<0.00001。
3.6循环嵌套
指循环中还有其它的循环语句。
例3.9用户输入一个正整数字,判断它是否是素数之后,若用户还想判断其他数字是否为素数时,需要重新运行程序,非常麻烦。
我们可以编写一个新的程序可以让用户多次重复输入。
分析:
设计一个无限循环,当输入1时继续测试数字,输入0则退出循环。
流程图如图3.15所示:
图3.15流程图
编辑源程序代码3-9.c
#include
#include
intmain()
{
inti,m,k,c;
do
{i=2;
scanf("%d",&m);
k=sqrt(m);
while(i<=k)
{
if(m%i==0)break;
i++;
}
if(i>k+1)printf("%d是素数\n",m);
elseprintf("%d不是素数\n",m);
printf("输入1继续,输入其他数字退出:
");
scanf("%d",&c);
if(c==1)
continue;
else
break;
}while
(1);/*永真循环*/
}
思考:
用双重循环的方式输出下列图形
*****
******
*******
********
*********
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 程序设计