c语言学习----循环结构程序设计(2)

个人感觉,循环结构比较有意思。像很多复杂的计算,交给电脑来做就可以了。写上两行代码,坐享其成,何乐不为。



break和continue语句

  1. break语句

     break语句的一般形式如下所示:

    break;

    其执行过程是:终止对switch语句或循环语句的执行,即跳出这两种语句,而转入下一语句执行。

    使用break语句应注意如下几个问题:

  1. break语句只能用于循环语句或switch语句中。如果在程序中有下列语句:

    if(…)

       break;

    则此时的if语句一定位于循环体中或switch语句中,break语句跳出的也不是if语句,而是跳出包含此if语句的循环体或switch语句。

        (2)由于循环语句的循环体部分还可以使用循环语句,这样,循环语句就可以嵌套使用。在循环语句嵌套使用的情况下,break语句只能跳出(或终止)它所在的循环,而不能同时跳出(或终止)多层循环,如:

         for(…)

        {

            for(…)

            {…

                break;

            }

        }

       上述的break语句只能从内层的for循环体中跳到外层的for循环体中,而不能同时跳出两层循环体。

       【例6-13】从键盘上连续输入字符,并统计其中大写字母的个数,直到输入“换行”字符时结束。

    #include"stdio.h"

    main ()

    {

    char ch;

    int sum=0;

    while(1)

    {

    ch=getchar();

    if(ch=='\n')

    break;      /*跳出整个while循环结构*/

    if(ch>='A'&&ch<='Z')

    sum++;

    }

    printf("sum=%d\n",sum);

    }

    说明:在本程序中,while(1)表示“无限循环”,即循环条件总为“真”,在这种情况下,就只能依靠循环体中的语句来结束循环了。由程序可知,当读入的字符是“换行”符(\n)时,将执行break语句,这时,将终止循环体的执行。

    【例6-14】在循环体中break语句执行示例。

    #include"stdio.h"

    main ()

    {

    int i,s=0;

    for(i=1;i<=10;i++)

    {

    s=s+2;

    if(s>5)

    break;         /*跳出整个for循环结构*/

    printf("s=%d\n",s);

    }

    }

    程序运行结果:

    s=2

    s=4

        上例中,如果没有break语句,程序将进行10次循环;但当i=3时,s的值为6,if语句中的表达式:s>5的值为1,于是执行break语句,跳出for循环,从而提前终止循环。

  1. continue语句

        continue语句的一般形式为:

        continue

        其作用是结束本次循环,即跳过本层循环体中余下尚未执行的语句,接着再一次进行循环的条件判定。注意:执行continue语句并没有使整个循环终止。

        在whiledo-while循环中,continue语句使得流程直接跳到循环控制条件的测试部分,然后决定循环是否继续进行。在for循环中,遇到continue后,跳过循环体中余下的语句,而去对for语句中的“表达式3”求值,然后进行“表达式2”的条件测试,最后根据“表达式2”的值来决定for循环是否执行。在循环体内,不论continue是作为何种语句中的语句成分,都将按上述功能执行,这点与break有所不同。

       【例6-15】从键盘输入30个字符,并统计其中数字字符的个数。

    #include"stdio.h"

    main ()

    {

    int sum=0,i;

    char ch;

    for(i=0;i<30;i++)

    {

    ch=getchar();

    if(ch<'0'||ch>'9')

    continue;        /*终止本轮循环,但未跳出循环结构*/

    sum++;

    }

    printf("sum=%d\n",sum);

    }

    在本程序中,当读入的字符(在ch中)不是数字字符(‘0~9’)时,将不执行sum++语句,而立即进行下一轮循环。

        【例6-16】在循环体中continue语句执行示例。

    #include"stdio.h"

    main ()

    {

    int k=0,s=0,i;

    for(i=1;i<=5;i++)

    {

    s=s+i;

    if(s>5)

    {

    printf("***i=%d,s=%d,k=%d\n",i,s,k);

    continue;               /*终止本轮循环,但未跳出循环结构*/

    }

    k=k+s;

    printf("i=%d,s=%d,k=%d\n",i,s,k);

    }

    }

    程序运行结果:

    i=1,s=1,k=1

    i=2,s=3,k=4

    ***i=3,s=6,k=4

    ***i=4,s=10,k=4

    ***i=5,s=15,k=4

    程序运行时,当i12时,并不执行if之后的复合语句,仅执行k=k+s;和第2个输出语句;执行第三次循环时,s的值已是6,这时表达式s>5的值为1,因此执行if分支中的第1个输出语句和continue语句,并跳过k=k+s;语句和第2个输出语句;接着执行for后面括号中的i++,继续执行下一次循环。由输出结果可见,后面三次循环中k的值没有改变。

    continue语句和break语句的主要区别是:continue语句只终止本次循环,而不是终止整个循环结构的执行;break语句则是结束循环,不再进行条件判断。如果有以下两个循环结构:

    1while (表达式1)                  2while (表达式1)

    {……;                                      {  ……;

      if(表达式2break;                           if(表达式2continue;

      …… ;                                         ……;

    }   c语言学习----循环结构程序设计(2)_第1张图片c语言学习----循环结构程序设计(2)_第2张图片                                        }

    请注意图中当“表达式2”为真时,流程的转向。

  1. 应用举例

    【例6-17】从键盘输入一个大于2的整数n,判断n是不是素数。

    只能被1和它本身整除的数是素数。为了判断n是不是素数,可以让n除以2到n的平方根(sqrt(n))之间的每一个整数,如果n能被某个数整除,则说明n不是素数,否则,n一定是素数。程序的执行过程见图6-12。程序如下:c语言学习----循环结构程序设计(2)_第3张图片#include"stdio.h"

  2. #include"math.h"

    main ()

    {

    int  n, m, i, flag;

    do

        scanf ("%d",&n);

    while(n<=2);

    m=sqrt(n);

    flag=0;

    for(i=2;i<=m;i++)

    {

    if(n%i==0)   

    {

    flag=1;

    break;

    }

    }

    if(flag==1)

    printf("%d is NOT a prime number.\n",n);

    else

    printf("%d is a prime number.\n",n);

    }

    说明:

  1. 此程序中增加了一个头文件“math.h”,这是因为在使用sprt函数(求平方根)时需要这一头文件。

  2. 在程序的开始处利用了do-while循环语句来处理读键盘过程,这是为了保证所读入的数据是一个大于2的整数,如果不满足这一条件,将重复读操作,一直到读入的数据满足条件为止。

  3. 程序中的flag变量是用于设置标志的,当flag=1时,说明n不满足素数条件,最后通过对flag的判断来显示相应的提示信息。正确地使用标志变量,对程序设计会带来方便。

    一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。

    三种循环(while循环、do-while循环和for循环)可以相互嵌套。例如:

  1. while(  )

    {

       ……;

       for(  ;   ;  )

       {……;}

    }

  2. for( ;  ;  )

           {

               ……;

               do

               {……;

               }while(  );

            }

    【例6-18】求100~200之间的所有素数

    在例6-17的基础上,对本题用一个嵌套的for循环即可处理。程序如下:

    #include"stdio.h"

    #include"math.h"

    main ()

    {

    int  n, m, i, flag;

    for(n=101;n<=200;n=n+2)

    {

    m=sqrt(n);

    flag=0;

    for(i=2;i<=m;i++)

    {

    if(n%i==0)   

    {

    flag=1;

    break;

    }

    }

    if(flag==0)

    printf("%5d",n);

    }

    }

    程序运行结果:

  1. 103  107  109  113  127  131  137  139  149  151  157  163  167  173

  1. 181  191  193  197  199

    循环变量n代表被检测的数,从101变化到200。在每一次循环中,又内嵌一个for循环,用来检测当前的n是否素数,这个内嵌循环的循环变量是i,它从2变化到m

    【例6-19】输出下三角形式九九乘法表。

    1   

  1. 1   

  2. 2   4

  3. 3   6   9

  4. 4   8   12  16

    ……

    9   9   18  27  36  45  54  63  72  81

    对这样表格形式的输出,可以用多次循环来解决。用外层循环来控制行,如:

              for(i=1;i<=9;i++)   

    用内层循环来控制列,如:   for(j=1;j<=i;j++)

    程序如下:

    #include"stdio.h"

    main ()

    {

    int  i,j;

    printf("      ***九九乘法表***\n    ");    /*输出表头*/

    for(i=1;i<=9;i++)                         /*外层循环,控制行*/

    printf("%-4d",i);

    printf("\n");

        for(i=1;i<=9;i++)                       /*内层循环,控制列*/

      {

        printf("%-4d",i);

    for(j=1;j<=i;j++)

    printf("%-4d",i*j);

    printf("\n");

      }

    }

    【例6-20】求Fibonacci数列的前50项。Fibonacci数列的第一项为1,第二项为1,从第三项开始,每项等于前两项之和。

    我们可以引入三个变量f1、f2和f,分别存放数列的前两项和当前项,其中f=f1+f2。用一个循环来求解数列的前50项,每次求下一项时,令f1=f2,f2=f,f=f1+f2。程序如下:

    #include"stdio.h"

    main ()

    {

    int i;

    long f1=1,f2=1,f;       /*数字较大,可能超出整数范围,定义为长整型*/

    printf("%10d%10d",f1,f2);      /*输出数列的前两项*/

    for(i=3;i<=30;i++)

    {

    f=f1+f2;

    printf("%10d",f);

    f1=f2;                     /*这两行为下一次循环作准备*/

    f2=f;

    }

    }

下面再来解析一下:


break语句的作用:

A、在分支结构程序设计中用break语句可以使流程跳出switch结构,继续执行switch语句下面的一个语句。

B、break语句还可以用来从循环体内中途跳出循环体,即提前结束循环,接着执行循环下面的语句。


break语句使用应该注意的问题:


在循环语句中,break语句一般都是与if语句一起使用。

break语句不能用于循环语句和switch语句之外的任何其它语句中。


continue语句是跳过循环体中剩余的语句而强制执行下一次循环。其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。


continue语句只能用在循环语句中。一般都是与if语句一起使用。


continue语句和break语句的区别是:continue语句只结束本次循环,而不是终止整个循环的执行,而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。



重要的话说三遍!

continue语句只结束本次循环,而不是终止整个循环的执行,而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。


continue语句只结束本次循环,而不是终止整个循环的执行,而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。


continue语句只结束本次循环,而不是终止整个循环的执行,而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。


其实很简单,其实很自然。

好好学习,天天向上。

哈哈哈哈

你可能感兴趣的:(c和数据结构)