c语言循环语句:C语言循环控制语句



循环控制结构(又称重复结构)是个基本结构在实际问题中常常需要
进行大量重复处理循环结构可以使我们只写很少语句而让计算机反复执行从而完成大量类同计算
C语言提供了while语句、do...while语句和for语句实现循环结构
3.4.1while语句
while语句是当型循环控制语句般形式为:
while<表达式>语句;
语句部分称为循环体当需要执行多条语句时应使用复合语句
while语句流程图见图3-8其特点是先判断后执行若条件不成立有可能次也不执行

[例3-11]求n!
分析:n!=n*(n-1)*(n-2)*..2*10!=1即S0=1Sn=Sn-1*n可以从S0开始依次求出S1、S2、...Sn
令S等于阶乘值S初值为0!=1;变量i为计数器i从1变到n步令S=S*i
则最终S中值就是n!
流程图见图3-9如下:


考察图3-9中循环部分流程图可以看出在循环前各变量应有合适值(s=1)另外控制循环结束变量(此处为i)必须在循环体中被改变否则循环将无限进行下去成为死循环


本题中将多项式项用t表示s代表符号在每次循环中只要改变s、n就可求出每项t
般情况下while型循环最适合于这种情况:知道控制循环条件为某个逻辑表达式
而且该表达式值会在循环中被改变如同例3-12情况



3.4.2do...while语句
在C语句中直到型循环语句是do...while般形式为:
do语句while<表达式>
其中语句通常为复合语句称为循环体
do...while语句流程图见图3-10其基本特点是:先执行后判断因此循环体至少被执行
但需要注意do...while和标准直到型循环有个极为重要区别直到型循环是当条件为真时结束循环而do...while语句恰恰相反当条件为真时循环旦条件为假立即结束循环请注意do...while语句特点
例[3-13]计算sin(x)=x-x3/3!x5/5!-x7/7!...
直到最后绝对值小于1e-7时为止
分析:这道题使用递推思路方法来做
让多项式项和个变量n对应n值依次为1357...从多项式
算后只需将前项乘个因子:
(-x2)/((n-1)*n)
用s表示多项式用t表示每如下:

#<math.h>
#<stdio.h>

{
doublestx;
n;
prf("pleaseinputx:");
scanf("%lf"&x);
t=x;
n=1;
s=x;
do
{
n=n2;
t=t*(-x*x)/((float)(n)-1)/(float)(n);
s=st;
}while(fabs(t)>=1e-7);
prf("sin(%f)=%lf"xs);
}
运行结果如下:
RUN¿
pleaseinputx:1.5753¿
sin(1.575300)=0.999990
RUN¿
pleaseinputx:-0.65¿
sin(-0.650000)=-0.605186
3.4.3for语句
for语句是循环控制结构中使用最广泛种循环控制语句特别适合已知循环次数
般形式为:
for(<表达式1>;<表达式2>;<表达式3>)语句
for语句很好地体现了正确表达循环结构应注意 3个问题:
1)控制变量
2)循环条件
3)循环控制变量更新
表达式1:般为赋值表达式给控制变量赋初值;
表达式2:关系表达式或逻辑表达式循环控制条件;
表达式3:般为赋值表达式给控制变量增量或减量
语句:循环体当有多条语句时必须使用复合语句
for循环流程图如图3-11其执行过程如下:
首先计算表达式1然后计算表达式2若表达式2为真则执行循环体;否则退出for循环执行for循环后语句如果执行了循环体则循环体每执行都计算表达式3然后重新计算表达式2依此循环直至表达式2值为假退出循环
[例3-14]计算自然数1到n平方和

#<stdio.h>
#<math.h>

{
i;
floats;
prf("pleaseinputn:");
scanf("%d"&n);
s=0.0;
for(i=1;i<=n;i)
s=s(float)(i)*(float)(i);
prf("1*12*2...%d*%d=%f\\nn"ns);
}
运行结果如下:
RUN
pleaseinputn:5
1*12*2...5*5=55.000000
for语句几种格式
for语句 3个表达式都是可以省略但分号“;”绝对不能省略



a.for(;;)语句;
这是个死循环般用条件表达式加语句在循环体内适当位置旦条件满足时
语句跳出for循环
例如在编制菜单控制可以如下:
for(;;)
{
prf("pleaseinputchoice(Q=Exit):");显/*示菜单语句块:*/
scanf("%c"&ch);
(ch’Q’)or(ch’q’);语/*句段*/
}
b.for(;表达式2;表达式3)
使用条件是:循环控制变量初值不是已知常量而是在前面通过计算得到例如:
i=m-n;
⋯⋯
for(;i<k;i)语句;
c.for(表达式1;表达式2;)语句
?br/>除实际上用反证法很容易证明如果小于等于i
方根数都除不尽则i必是素数于是上述算法中第5步、第6步可以细化为:
第5)步p是素数吗?
flagp=1;
for(j=2;j<=[sqrt(p)];j)
p除以j余数=0
{flagp=0;
;}
第6)步q是素数吗?
flagq=1;
for(j=2;j<=[sqrt(q)];j)
q除以j余数=0
{flagq=0;
;}
如下:
#<math.h>
#<stdio.h>



{
jnpqflagpflagq;
prf("pleaseinputn:");
scanf("%d"&n);
(((n%2)!=0)||(n<=4))
prf("inputdataerror!\\n");

{
p=1;
do{
p=p1;
q=n-p;
flagp=1;
for(j=2;j<=()(floor(sqrt((double)(p))));j)
{
((p%j)0)
{
flagp=0;
;
}
}
flagq=1;
for(j=2;j<=()(floor(sqrt((double)(q))));j)
{
((q%j)0)
{
flagq=0;
;
}
}
}while(flagp*flagq0);
prf("%d=%d%d\\n"npq);
}
}
运行结果如下:
RUN¿
pleaseinputn:8
8=35
RUN
pleaseinputn:98
98=1979
RUN
pleaseinputn:9
inputdataerror!
Tags:  c语言case语句 c语言语句 c语言if语句 c语言循环语句

延伸阅读

最新评论

发表评论