[电脑基础知识]C语言5章循环控制
第5章 C语言 循环控制6

for语句中表达式省略的形式:
3. 省略表达式3
循环不能正常结束。
sum=0; for(i=1;i<=100;) { sum=sum+i; i++; }
sum=0; for(i=1;i<=100;) sum=sum+i;
for语句中表达式省略的形式:
4. 省略表达式1和表达式3
完全等同于while语句。
【例5.14】求Fibonacci数列前40个数。
1 5 34 233 1597 10946 75025 514229 3524578 24157817
1 8 55 377 2584 17711 121393 832040 5702887 39088169
2 13 89 610 4181 28657 196418 1346269 9227465 63245986
如:i++;
while语句多用在循环次数预先难以确定的循 环中。
【例5.3 】输入并输出一个字符串,遇“#”结 束
main() { char c; c = getchar(); while ( c!='#' ) { putchar(c); c=getchar(); } }
5.4 用do-while语句实现循环
第5章 循环控制
5.给定的条件成立时反复执行某一程序段。
特点:
有限次的重复某个操作。
5.1 概述
问题:
输出整数1~10
输出整数1~100 输出整数1~n
printf("%d\n", 1); printf("%d\n", 2); …… printf("%d\n", 10); i=1; printf("%d\n", i); i++; printf("%d\n", i); i++; …… printf("%d\n", i); i++;
c-5循环控制

判断水仙花数:
不妨做些改变……
• 每次判断需要重复输入,若要求输出 100~999之间全部的水仙花数,该如何操 作?
输出100~999之间的水仙花数
• 用自然语言描述
– 从100开始判断,100是否为水仙花数,若是, 则输出; – 继续判断101,重复上面的判断操作… – …… – 判断999,是否为水仙花数并输出。
#include “stdio.h” int main( )
)。
答案: (A)
{
int n = 1 ; while ( n == 1 ) return 0; } (A) n = 0 (B) while构成无限循环 n --; printf(“n = %d\n”, n) ;
(C) n = 1
(D) n = -1
例:编程计算1×2×3×…×n ,n=10
#include <stdio.h>
用if+goto 构成的循环 { 用while语句 构成的循环 long int prod = 1 ; int n = 1 ; 将内嵌语句用大 Loop : 括号括起来形成 while ( n 10 <=)10 ) 复合语句。 if ( n <= 这后面没有分号。
输出100~999之间的水仙花数
开始 n=100
重复执行了900次!!
判断水仙花数 并给出相应输出 变化n 是
n在100~999之间
结束
三种基本结构
顺序结构 选择结构 循环结构
A B
Yes
A
?
No
B
A
?
No
Yes
循环概述
பைடு நூலகம்重复执行某部分代码,就构成循环结构。 有限循环:在某个条件满足时重复执行,不满足时结束 无限循环:无条件的重复执行或循环结束条件永远不满足 循环结构的组成要素: 循环初始化部分 循环变量或循环计数器 循环继续条件(循环终止条件)
C语言之循环控制

do
循环体语句
循环体
while(<条件>);
条件p
假
功能:先执行循环体然后判断条件 是否满足,如果条件成立则继续执
真
行循环体中的语句,再判断条件。
依次反复,直到条件不再满足为止。
后续语句
二、说明:
1)循环体至少执行一次。 2)while(表达式)后的分号不可少,表明整个语句 结构的结束。
3)while与do——while的区别
43—RED4
红4
3
MAGENTA
5
紫5
2
BROWN 1—BLU6E
LIGHTGRAY
7
5—M棕A67GENT10A 浅灰
题解: 例#i题nc:lu画d出e 八“c个o不ni同o.大h”小的窗口,分别用互补的颜色显示前景 色#i和nc背lu景d色e 。“s(tdcihop.h5”\color.c) void main() { int x1,y1,x2,y2,bc,i ;
i++; }
i=1;01; s=0;
do {s=s+i;
i++;} while(i<=100);
s的值为0
s的值为101
练习:1)lt5_1.c main() {int x=3; do
printf(“%3d”,x-=2); while(!(--x)); } 程序输出结果为: 1 -2
作业1):编程完成一个猜数的小游戏:由系统随机产生一 100以内的整数。由用户来猜该数,如果没有猜对则由系统 给出相应的或大或小的提示,直到猜对为止。
练习:输出100以内所有能被3整数的数 输出100以内的所有数
main() {int i=1; while(i<=100)
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*1,0!=1.即S0=1,Sn=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的值依次为1,3,5,7,...,从多项式的前⼀项算后⼀项,只需将前⼀项乘⼀个因⼦:(-x2)/((n-1)*n)⽤s表⽰多项式的值,⽤t表⽰每⼀项的值,程序如下:#include# includem a i n ( ){double s,t,x ;int n ;printf("please input x :");scanf("%lf",&x);t=x;n=1;s=x;do{n=n+2;t=t*(-x*x)/((float)(n)-1)/(float)(n);s=s+t;}while(fabs(t)>=1e-7);printf("sin(%f)=%lf,"x,s);}运⾏结果如下:RUN?pleaseinputx:1.5753?sin(1.575300)=0.999990RUN?pleaseinputx:-0.65?sin(-0.650000)=-0.6051863.4.3for语句for语句是循环控制结构中使⽤最⼴泛的⼀种循环控制语句,特别适合已知循环次数的情况.它的⼀般形式为:for(<表达式1>;<表达式2>;<表达式3>)语句for语句很好地体现了正确表达循环结构应注意的三个问题:1)控制变量的初始化.2)循环的条件.3)循环控制变量的更新.表达式1:⼀般为赋值表达式,给控制变量赋初值;表达式2:关系表达式或逻辑表达式,循环控制条件;表达式3:⼀般为赋值表达式,给控制变量增量或减量.语句:循环体,当有多条语句时,必须使⽤复合语句.for循环的流程图如图3-11,其执⾏过程如下:⾸先计算表达式1,然后计算表达式2,若表达式2为真,则执⾏循环体;否则,退出for 循环,执⾏for循环后的语句.如果执⾏了循环体,则循环体每执⾏⼀次,都计算表达式3,然后重新计算表达式2,依此循环,直⾄表达式2的值为假,退出循环.[例3-14]计算⾃然数1到n的平⽅和.# include# includemain ( ){int i;float s;printf("please input n :");scanf("%d",&n);s=0.0;for(i=1;i<=n;i++)s=s+(float)(i)*(float)(i);printf("1*1+2*2+...+%d*%d=%f\,nn",n,s);}运⾏结果如下:RUNplease input n:51*1+2*2+...+5*5=55.000000for语句的⼏种格式for语句的三个表达式都是可以省略的,但分号“;”绝对不能省略.a.for(;;)语句;这是⼀个死循环,⼀般⽤条件表达式加break语句在循环体内适当位置,⼀旦条件满⾜时,⽤break语句跳出for循环.例如,在编制菜单控制程序时,可以如下:for(;;){printf("please input choice(Q=Exit):");显/*⽰菜单语句块:*/scanf("%c",&ch);if(ch=='Q')or(ch=='q')break;语/*句段*/}b.for(;表达式2;表达式3)使⽤条件是:循环控制变量的初值不是已知常量,⽽是在前⾯通过计算得到,例如:i=m-n;for(;ic.for(表达式1;表达式2;)语句⼀般当循环控制变量⾮规则变化,⽽且循环体中有更新控制变量的语句时使⽤.例如:for(i=1;i<=100;){i=i*2+1;}d.for(i=1,j=n;i在for语句中,表达式1、表达式3都可以有⼀项或多项,如本例中,表达式1同时为i和j 赋初值,表达式3同时改变i和j的值.当有不⽌⼀项时,各项之间⽤逗号“,”分隔.另外,C语⾔还允许在循环体内改变循环变量的值,这在某些程序的设计中是很有⽤的.到此,我们已经学习了C语⾔中三种循环控制语句while、do...while和for语句,下⾯再讨论两个问题:三种语句的选⽤同⼀个问题,往往既可以⽤while语句解决,也可以⽤do...while或者for语句来解决,但在实际应⽤中,应根据具体情况来选⽤不同的循环语句,选⽤的⼀般原则是:1)如果循环次数在执⾏循环体之前就已确定,⼀般⽤for语句;如果循环次数是由循环体的执⾏情况确定的,⼀般⽤while语句或者do...while语句.2)当循环体⾄少执⾏⼀次时,⽤do...while语句,反之,如果循环体可能⼀次也不执⾏,选⽤while语句.循环的嵌套⼀个循环的循环体中有另⼀个循环叫循环嵌套.这种嵌套过程可以有很多重.⼀个循环外⾯仅包围⼀层循环叫⼆重循环;⼀个循环外⾯包围两层循环叫三重循环;⼀个循环外⾯包围多层循环叫多重循环.三种循环语句for、while、do...while可以互相嵌套⾃由组合.但要注意的是,各循环必须完整,相互之间绝不允许交叉.如下⾯这种形式是不允许的:do{for(;;){......}while();}[例3-15]打印8⾏7列的星形矩阵.流程图见图3-12,程序如下:#includemain(){inti,j;for(i=0;i<8,i++)/*控制⾏*/{for(j=0;j<7>;j++)/*控制列*/printf("*");printf("\n");/*换⾏*/}}打印结果如下:RUN********************************************************将程序中for(j=0;j<7;j++)改为for(j=0;j打印三⾓形.3.4.4break与continue语句有时,我们需要在循环体中提前跳出循环,或者在满⾜某种条件下,不执⾏循环中剩下的语句⽽⽴即从头开始新的⼀轮循环,这时就要⽤到break和continue语句.1.break语句在前⾯学习switch语句时,我们已经接触到break语句,在case⼦句执⾏完后,通过break 语句使控制⽴即跳出switch结构.在循环语句中,break语句的作⽤是在循环体中测试到应⽴即结束循环时,使控制⽴即跳出循环结构,转⽽执⾏循环语句后的语句.[例3-16]打印半径为1到10的圆的⾯积,若⾯积超过100,则不予打印.#includemain(){intr;float area;for(r=1;r<=10;r++){area=3.141593*r*r;if(area>100.0)break;printf("square=%f\n",area);}printf("nowr=%d\n",r);}运⾏程序:RUNsquare=3.141593square=12.566373square=28.274338square=50.265488square=78.539825nowr=6当break处于嵌套结构中时,它将只跳出最内层结构,⽽对外层结构⽆影响.2.continue语句continue语句只能⽤于循环结构中,⼀旦执⾏了continue语句,程序就跳过循环体中位于该语句后的所有语句,提前结束本次循环周期并开始新⼀轮循环.[例3-17]计算半径为1到15的圆的⾯积,仅打印出超过50的圆⾯积.#includemain(){int r;float area;for(r=1;r<=5;r++){area=3.141593*r*r;if(area<50.0)continue;printf("square=%f",area);}}结果为:RUNsquare=50.265488square=78.539825同break⼀样,continue语句也仅仅影响该语句本⾝所处的循环层,⽽对外层循环没有影响.3.4.5程序应⽤举例[例3-18]验证哥德巴赫猜想:任⼀充分⼤的偶数,可以⽤两个素数之和表⽰,例如:4=2+26=3+3......98=19+79哥德巴赫猜想是世界著名的数学难题,⾄今未能在理论上得到证明,⾃从计算机出现后,⼈们就开始⽤计算机去尝试解各种各样的数学难题,包括费马⼤定理、四⾊问题、哥德巴赫猜想等,虽然计算机⽆法从理论上严密地证明它们,⽽只能在很有限的范围内对其进⾏检验,但也不失其意义.费马⼤定理已于1994年得到证明,⽽哥德巴赫猜想这枚数学王冠上的宝⽯,⾄今⽆⼈能及.分析:我们先不考虑怎样判断⼀个数是否为素数,⽽从整体上对这个问题进⾏考虑,可以这样做:读⼊⼀个偶数n,将它分成p和q,使n=p+q.怎样分呢?可以令p从2开始,每次加1,⽽令q=n-p,如果p、q均为素数,则正为所求,否则令p=p+q再试.其基本算法如下:1)读⼊⼤于3的偶数n.2)P=13)do{4)p=p+1;q=n-p;5)p是素数吗?6)q是素数吗?7)}whilep、q有⼀个不是素数.8)输出n=p+q.为了判明p、q是否是素数,我们设置两个标志量flag p和flag q,初始值为0,若p是素数,令flag p=1,若q是素数,令flagq=1,于是第7步变成:7)}while(flag p*flag q==0);再来分析第5、第6步,怎样判断⼀个数是不是素数呢?素数就是除了1和它⾃⾝外,不能被任何数整除的整数,由定义可知:2、3、5、7、11、13、17、19等是素数;1、4、6、8、9、10、12、14等不是素数;要判断i是否是素数,最简单的办法是⽤2、3、4、??i-1这些数依次去除i,看能否除尽,若被其中之⼀除尽,则i不是素数,反之,i是素数.但其实,没必要⽤那么多的数去除,实际上,⽤反证法很容易证明,如果⼩于等于i的平⽅根的数都除不尽,则i必是素数.于是,上述算法中的第5步、第6步可以细化为:第5)步p是素数吗?flag p=1;for(j=2;j<=[sqrt(p)];j++)ifp除以j的余数=0{flag p=0;break;}第6)步q是素数吗?flag q=1;for(j=2;j<=[sqrt(q)];j++)ifq除以j的余数=0{flag q=0;break;}程序如下:#include#includemain(){intj,n,p,q,flag p,flag q;printf("please input n:");scanf("%d",&n);if(((n%2)!=0)||(n<=4))printf("inputdataerror!\n");else{p=1;do{p=p+1;q=n-p;flag p=1;for(j=2;j<=(int)(floor(sqrt((double)(p))));j++) {if((p%j)==0){flag p=0;break;}}flag q=1;for(j=2;j<=(int)(floor(sqrt((double)(q))));j++) { if((q%j)==0){flag q=0;break;}}}while(flag p*flag q==0);printf("%d=%d+%d\n,"n,p,q);}}程序运⾏结果如下:RUN?please input n:88=3+5RUNplease input n:98 98=19+79RUNplease input n:9 input data error!。
C语言第五章循环结构程序控制PPT教学课件

PF
T
A
i++; 说明:}
其中prinwtfh(i“lesu是m=关%键d字, a;ver(表=%达f式\n”)通,su常m是,su关m系/20表.0达) ;式 或逻} 辑表达式;<语句>作为 while 循环语句的循环体, 可以是一条语句,也可以是复合语句。
2020/12/10
上一页
下一页 1
注意: 1.只有 <表达式> 的值是非0时,才执行< 语句 > 给出的循环体。
2020/12/10
上一页
下一页 8
例: 1要.点fo说r 明语例例例例:句::::fi=o中r1if=o(;的r1i=(;1表i;=;i1<达i<;==式;1i10+010+可0;;)i)以+s{u+省ms)us略m=u=m(susum分=m+s号u+i mi;不;+i能i+;+省;)} 。 2.如果例省f:o略rfo(表r; i(达<;=式;1)0{20s,u; m)将{=形ss成uumm无+=限i s;u循}m环+i。; i++ ; } 3.表达例式:3fo也r(s可um以=省0; 略i<=。100 ;i++)sum = sum+i ; 45..可3 个以表同达时pffcfooorh式省rrira((nisr同(略=tuf;0cm(时表,;“(j==\cn0省达1=,T0ig=略0式he1et;;,c1iic<h和<h=此a=a1表rjr0(时;0达)iis;)+相i++!:式=%,+当j)3‘sc-\。于ur\-nm’)”;wk=),h=sciulie)m+(;+j1i;); …
c语言循环控制

{int sum=0,1; scanf(”%d” ,&i) ; while(i<=10) {sum=sum 十 I;
(2) main() {int sum=0,i; scanf(”%d”,&i) ; do sum=sum 十 i; }
i++; } printf("%d",sum); “ 运行情况如下: 运行情况如下: 66 55 可以看到:当输入 i 的值小于或等于 10 时,二者得到结果相同。而当 1>10 时,二 者结果就不同了。这是因为此时对 while 循环来说,一次也不执行循环体(表达式“j< =10”为假) ,而对 do 一 while 循环来说则要执行一次循环体。可以得到结论:当 while 后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,二者结果不相 同(指二者具有相同的循环体的情况) 。 还要注意一点:do 一 while 循环是先执行循环体语句,后判断表达式,从这点来说, 它类似于直到型循环,但它与其它语言中的 until 型循环 (如 FORTRAN 语言的 DO 一 UNTIL) 不同, do 一 while 循环是当表达式为真时反复执行循环体,表达式为假时结束循环。而 典型的 until(直到型)循环结构则是表达式为真时结束循环(见第三章图 3. 5) 。因 此在将图 5. 4 (a) 画成用 N 石结构流程图形式表示的直到型循环结构时应将条件取 “反” , 即将图 5. 4(a)中的“i<100”改为图 5. 4(U 中的“i>100” 。因为“当 i<100
5. 5 . 3 while 语 句 它用来实现“当型”循环结构。其一般形式如下: whi1e ( 表 达 式 ) 语 句 ; 当 表 达 式 为 非 0 值 时 执 行 while 语 句 中 的 内 嵌 语 句 。 其 流 程 图 见
c语言 循环控制

22
while、do-while、for循环语句可以并列,
2013-9-6
5.7 几种循环语句的比较
while和do-while语句的表达式只有一个,for语 句有三个。
23
while 和for先判断循环条件后执行循环体,dowhile语句先执行循环体后判断循环条件。
while语句多用于循环次数不定的情况 do-while语句多用于至少要运行一次的情况 for语句多用于要赋初值或循环次数固定的情况
2013-9-6
应用举例
【例5.5】把100~200之间能被7整除的数, 以十个数为一行的形式输出,最 后输出一共有多少个这样的数。
for (n=100; n<=200; n++) n能被7整除 T F 终止本次循环 输出n 输出10个数 T F 换行
24
2013-9-6
算法和程序
main( ) { int n,j=0; for(n=100;n<=200;n++) { if (n%7!=0) continue; printf("%6d",n); j++; if (j%10==0) printf("\n"); } printf(" \n j=%d\n",j); }
while语句
表达式?
Y N
do-while语句 … break; …
表达式?
Y N
for语句 计算表达式1
表达式2?
Y N
… break; …
… break; …
计算表达式3 后续语句
2013-9-6
后续语句
后续语句
例如:
第5讲 循环控制

循环结构
概述
什么是循环?
循环结构是结构化程序设计的基本结构之一,它和顺序结
构、选择结构共同作为各种复杂程序的基本构造单元。
为什么要使用循环?
在许多问题中需要用到循环控制。
C语言可实现循环的语句:
和 if 构成循环 while 语句 do ~ while 语句 for 语句
n 1
100
#include <stdio.h> main() { int i,sum=0; i=1; do { sum+=i; i++; }while(i<=100); printf("%d",sum); }
例
while和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+=i; 一般情况下,用while语句和用do{ sum+=i; i++; while语句处理同一问题时,若二者 i++; } 循环体一样,则它们的结果也一样。 }while(i<=10); 但是如果while后面的表达式一开始 printf("%d",sum); 就为假(0值)时,两种循环的结果是 printf("%d",sum); } 不同的。 }
break;
…...
……
真(非0)
while expr
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
5.2.2 for循环语句使用说明
1、for语句可以取代while语句或do-while 语句,尤其对于确定循环次数的循环,使用 for语句让程序结构更加直观和容易理解。
2、for语句中()中的三条表达式语句可以省 略,即可以将它们写在程序其他地方,但是 它们之间的分号“ ;”不可省略。
如何选择循环语句
scanf(“%f”, &x); sum=sum+x; /* 累加到变量sum中 */ i++; /*循环控制变量进行更新自增1 */ }
【例5.1】 编写一个程序,用户从键盘输入整数n,计算 s=2+4+6+8+…+2n并输出计算结果s。
程序设计分析: (1)s实际上是n个整型数据项的和,这些数据项分别是2、4、 6、…、2n; (2)利用循环结构,在每次循环中
do
{
x=2*i;
/* 计算累加第i项 */
s += x ;
/* 累加 */
i++;;
/* i自增1 */
} while ( i<=n ) ; /*注意分号不能遗漏 */
printf ( “s=%d\n”, s );
}
5.1.4 do-while语句使用说明
1、do-while语句与while语句的使用方法相 同,都由循环继续条件来决定循环体语句 是否继续被重复执行。
}
5.3流程转向语句
• break语句: break;
作用:强行结束循环, 跳出本层循环转向循 环体外的下一条语句。
通常与if语句在一起使 用:
if(条件表达式) break;
例如:
#include <stdio.h> void main ( ) { int i=1, s=0;
while ( i<100 ) { s+=i;
printf (“s=%d”, s ); }
5.4 循环结构程序举例
【例5.11】编写一个程序,接收用户从键盘输入的 字符,当用户输入回车时表示确认输入,统计用户 输入了多少个字符(不含回车符)。
程序设计分析: 1)无法预知循环的执行次数; 2) 使用循环来接收用户的输入,每次接收一个 字符都判断以下是否是回车符,如不是则把计 数变量的值增加1。
#include <stdio.h>
void main ( )
{ char c;
int i=0;
/*计数变量初始化*/
printf (“请输入字符串(以回车确认):\n”);
c=getchar( );
/*接收字符*/
while (c != ‘\n’)
/*判断是否是结尾*/
{ i++;
/*计数增加1*/
printf ( “%f\n”, sum );
}
【例5.3】用do-while语句完成【例5.1】的要求;计算 s=2+4+6+8+…+2n并输出计算结果s。
void main( )
{ int i=1, x, n, s=0 ;
printf( “请输入n的值:” );
scanf ( “%d”, &n );
for( i=1; i<= n; i++ )
{ j=1; /*循环控制变量初始化 */
x=1;
while( j<=i )
内
{ x *= j; /*把j累乘到x中*/
层
j++; /*循环控制变量自增*/ 循
外 层 循
}
环
环
s += x; /* 累加到s变量中 */
}
printf(“s=%d\n”, s ); /*显示结果*/
#include <stdio.h>
void main()
{
float x,sum=0; /*定义并初始化变量*/
int i;
/*定义并初始化循环控制变量*/
printf ( “请输入数据:” );
for ( i=1; i<=20; i++ )
{ scanf(“%f, &x); /* 输入一个数 */
c=getchar( );
/*继续接收字符*/
}
printf(“字符串中共%d个字符!”, i );
}
【例5.12】编写程序完成功能:输入一个大于或等于0 的整数,计算它是一个几位数(0算一位整数)。
#include <stdio.h>
void main ( )
{ int x , n;
printf (“请输入一个整数:”);
/*定义并初始化变量*/
printf ( “请输入n的值:”) ;
scanf ( “%d” , &n ) ;
/* 输入n的值 */
for( i=1; i<= n; i++ )
{ x = 2*;
/* 计算要累加的数据项 */
s += x;
/* 累加到s变量中 */
}
printf ( “s=%d\n”, s );
【例5.7】编写程序,计算s=1!+2!+3!+...+n!,其中n是由 用户输入的整数(小于8),计算完成后显示结果。
#include <stdio.h> void main( )
int i,j,x,s=0;
{ 定义并初始化变量; 请输入n的值;
j=1; x=1; while(j<=i)
for( i=1; i<= n; i++ ) /*外层循环*/{
用相似编程方法求以下各式:
S=1+3+5+…+2n-1; S=1+1/3+1/5+….+1/(2n-1); S=1+1/2+1/3+1/4+…1/n; S=2/1+3/2+5/3+8/5+…;前n项之和. S=1!+2!+3!+…+n!
5.1.2 while语句使用说明
1、 while语句是先判断条件,然后决定是否执行循 环体。
【例5.9】计算1000以内所有不能被3整数的正整数 之和并显示结果。
#include <stdio.h> void main ( ) { int i, s=0;
for (i=1; i<1000; i++) { if ( i%3 == 0) { continue ; } /*结束本轮循环*/ s += i ; }
2、为使循环能正常结束,应保证每次执行循环体后, 表达式的值会有一种向“假”变化的趋势 。
如 i=5; while(i>0) { x++; }
3、在进入循环之前应做好有关变量的初始化赋值操 作。如上例中,累加变量s初始化为0,i变量初始 化为1。
5.1.3 do-while语句(”直到型”循环)
一般形式:
{ 计算i!值;
/*内层循环计算ixj+!=*+/x;*j;
将i!的值累加到s中;/*累加到s中}*/
}
/*for循环结束*/
显示计算结果;
}
#include <stdio.h>
void main( )
{ int i,j,x,n,s=0;
printf(“请输入n的值:”);
scanf(“%d”, &n);
(值非0);如果为真,则执行循环体语句,接着执行表达 式3,再判断表达式2的值;如此重复执行,直到表达式2的 值为0终止循环,跳转到循环体之后的语句执行。
for ( 循环变量赋初值;循环继续条件;循环变量更新 ) { 循环体语句}
【例5.6】 使用for循环语句实现例【5.2】的要求,用户从键 盘输入20个数,求它们的和并输出结果。
if ( s>999 ) { break ; } /*终止循环*/
} printf (“s=%d”, s ); }
注意:break语句只能跳出一层循环,如果它位于多层嵌套 循环的内层,那么只能终止break语句所在的那层循环。
int i, j; for (i=0; i<N; i++ ) { for (j=0; j<N; j++ )
do {
循环体语句 }while(表达式);
功能:先执行循环体语句,然后计算表达式的值。若 表达式值为真(值非0),继续执行循环;否则当表 达式的值假(值为0)时,循环结束,执行do-while语 句的后续语句。
【例5.4】用do-while语句完成【例5.2】的要求,用户从键 盘输入20个数,求它们的和并输出结果。
{ if (j>100) { break; } /*跳出内层循环*/
} if (i>100 ) { break; } /*跳出外层循环*/ }
• continue语句 continue;
功能:跳过当前循环体剩余 语句,直接开始执行下 一轮循环。
通常与if语句在一起使用:
if(条件表达式) continue;
【例5.2】 编写一个程序,用户从键盘输入20个数,求 它们的和并输出结果。
程序设计分析:使用循环结构,每次输入一个数x,将它累 加到变量sum上,重复执行20次这样的操作,便得到最后的 结果。
float x,sum=0; /*定义并初始化变量*/ int i=1; /*定义并初始化循环控制变量*/ printf (“请输入数据:\n”); while(i<=20) /*循环条件*/ {