【C-循环结构】

C语言提供了多种循环语句,可以组成各种不同形式的循环结构:

  • 用goto语句和if语句构成循环;
  • 用while语句;
  • 用do-while语句;
  • 用for语句;

一、goto语句

goto语句是一种无条件转移语句,与BASIC中的goto语句相似。goto 语句的使用格式为:
     goto  语句标号;

其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。

goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理。

二、while

while语句的一般形式为:
    while(表达式) 语句
其中表达式是循环条件,语句为循环体。
while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。

练习:统计从键盘输入一行字符的个数。

  1. #include <stdio.h>
  2. int main(void){
  3. int n=0;
  4. printf("input a string:\n");
  5. while(getchar()!='\n') n++;
  6. printf("%d",n);
  7. return 0;
  8. }

三、do...while

do-while语句的一般形式为:
    do
        语句
    while(表达式);
这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。

四、for

在C语言中,for语句使用最为灵活,它完全可以取代 while 语句。它的一般形式为:
    for(表达式1; 表达式2; 表达式3)  语句
它的执行过程如下:

  1. 先求解表达式1。
  2. 求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,转到第5)步。
  3. 求解表达式3。
  4. 转回上面第2)步继续执行。
  5. 循环结束,执行for语句下面的一个语句。

注意:
1) for循环中的“表达式1(循环变量赋初值)”、“表达式2(循环条件)”和“表达式3(循环变量增量)”都是选择项,即可以缺省,但分号(;)不能缺省。

2) 省略了“表达式1(循环变量赋初值)”,表示不对循环控制变量赋初值。

3) 省略了“表达式2(循环条件)”,则不做其它处理时便成为死循环。

4) 省略了“表达式3(循环变量增量)”,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。

5) 省略了“表达式1(循环变量赋初值)”和“表达式3(循环变量增量)”。

6) 3个表达式都可以省略。例如:
    for( ; ; )  语句
相当于:
    while(1)  语句

7) 表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。

8) 表达式1和表达式3可以是一个简单表达式也可以是逗号表达式。

9) 表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。

 

五、break 跳出循环

break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;

当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起,即满足条件时便跳出循环。

六、continue  结束本次循环

ontinue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。

 

练习:求100至200间的全部素数。

  1. #include <stdio.h>
  2. #include <math.h>
  3. int main(void){
  4. int m,i,k,n=0;
  5. for(m=101;m<=200;m=m+2){
  6. k=sqrt(m); // m 的开方
  7. for(i=2;i<=k;i++)
  8. if(m%i==0) break;
  9. if(i>=k+1){
  10. printf("%d\n",m);
  11. n=n+1;
  12. }
  13. }
  14. printf("\n");
  15. return 0;
  16. }

练习2:用下面的公式求π:

分析:首先,系数为正数的项的分母是4n-3(n为正数项的项数),为负数的项的分母为4n-1(n为负数项的项数),即分母的变化规律是1、3、5、7...的奇数数列,则第n项的分母为2n-1,第10000项的分母为2*10000-1。

  1. #include <stdio.h>
  2. #include <math.h>
  3. int main(void)
  4. {
  5.     double p=0,j=1;
  6.     int i;
  7.     for( i=1;i<10000;i++ //此处i为项数
  8.     {
  9.         j=pow(-1.0,i+1)/(2*i-1);  //pow(x,y)求x的y次幂
  10.         p+=j;
  11.         printf("%lf\n",4*p);  //输出每一项的值
  12.     }
  13.     printf("%lf\n",4*p);  //输出最终pi值
  14.     return 0;
  15. }

 

posted on 2015-04-11 10:56  追梦小子fire  阅读(246)  评论(0编辑  收藏  举报