![]() ![]() |
|
C语言循环控制语句(二) | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 13:58:01 文章录入:杜斌 责任编辑:杜斌 | |
|
|
![]() # include <stdio.h> # include <math.h> main ( ) { 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); } 运行结果如下: RUN please input n:5 1*1+2*2+...+5*5=55.000000 for语句的几种格式 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(;i<k;i++)语句; c.for(表达式1;表达式2;)语句 一般当循环控制变量非规则变化,而且循环体中有更新控制变量的语句时使用。 例如: for(i=1;i<=100;) { ⋯⋯ i=i*2+1; ⋯⋯ } d.for(i=1,j=n;i<j;i++,j--)语句; 在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,程序如下: ![]() #include<stdio.h> main() { 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<i;j++),用行数来控制每行星号的多少,就可以 打印三角形。 3.4.4break与continue语句 有时,我们需要在循环体中提前跳出循环,或者在满足某种条件下,不执行循环中剩下 的语句而立即从头开始新的一轮循环,这时就要用到break和continue语句。 1.break语句 在前面学习switch语句时,我们已经接触到break语句,在case子句执行完后,通过break 语句使控制立即跳出switch结构。在循环语句中,break语句的作用是在循环体中测试到应立 即结束循环时,使控制立即跳出循环结构,转而执行循环语句后的语句。 [例3-16]打印半径为1到10的圆的面积,若面积超过100,则不予打印。 #include<stdio.h> main() { 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); }运行程序: RUN square=3.141593 square=12.566373 square=28.274338 square=50.265488 square=78.539825 nowr=6 当break处于嵌套结构中时,它将只跳出最内层结构,而对外层结构无影响。 |
|
![]() ![]() |