您好,欢迎进入深圳市颖特新科技有限公司官方网站!

您现在的位置:首页 新闻资讯 >> 新闻头条 >> C语言循环结构
新闻资讯
NEWS INFORMATION

C语言循环结构

发布时间:2019-05-22

该章内容:本章我们学习三大结构之一:循环结构。通常采用循环结构来解决有规律性的重复性工作,如求学生的总成绩;统计车站某月的人流量。在程序设计中对那些需要重复执行的操作我们采用循环结构来完成,几乎所有实用的程序都包含循环。c语言中有三种循环语句来构成循环结构:while语句,do-while语句和for语句。本章是考试的重点章节。

学习方法:先了解循环结构相关的基础知识,熟悉三种循环结构的特点,先读懂循环的程序,再慢慢学习编写程序。最终一定要学会用循环来解决规律性的重复性工作的问题。

第一节   while语句及其构成的循环结构

知识点:while语句的执行过程;循环体中语句书写的位置对程序的影响;

重要程度:★★★★

程序一:

while(y++);      (循环体为空,while只管后面一个语句,管多个用大括号!!!)

printf(“%d”,y);

----------------------------------------

程序二:

while(y++)       (循环体为printf(“%d”,y);)

printf(“%d”,y);

当以上两个程序的y初始化为-2的时候,两个程序运算的结果是不同的,请注意原因就是:程序二中的while(y++)后面有没有分号。(这几年考试的热点

注意:while只管后面一个语句,管多个要用大括号!!(考试热点)

                    

图1  while循环流程图

例1:以下程序的输出结果是________(for、while这些循环都只管后面一个分号

main( )

{      int x=2;

       while(x- -);

            printf("%d",x);

}

分析:本题需要特别注意的是while(x--)后面紧跟一个分号,它表示while循环的循环体部分是一个空语句,而不是printf语句。

(1)程序首先将x的值初始化为2。进入while循环后,表达式x--的值为2,为真,执行空循环体,此时x的值为1。第一轮循环结束。

(2)进入第二轮循环,x--的值为1,表达式仍然为真,继续执行空循环体,此时x的值为0。第二轮循环结束。

(3)进入第三轮循环,x--的值为0,表达式仍然为假,跳出循环,执行printf语句,此时x的值为-1。答案为-1。

第二节   do-while语句及其构成的循环结构

知识点:do-while语句的执行过程;do-while和while的相似和不同之处;

重要程度:★★★★

do-while语句的一般形式如下:

do

循环体

while (表达式);

 

 

 

                                                           图3  do-while语句流程图

注意:

(1)do-while循环语句的循环体至少执行一次

(2)在while(表达式)后的“;”不可以少。它表示do-while语句的结束。

(3)do-while语句与while语句可以相互转换。

例1:有如下程序

main( )

{  int x=23;

do

{  printf("%d",x--);}

while(!x);

}

该程序的执行结果是 ( )。

A) 321   B) 23   C) 不输出任何内容   D) 陷入死循环

分析:本例就是告诉大家do-while循环至少执行一次循环体。

首先执行循环体,将表达式x--的值输出,其值为23。接着判断!x为假,因此跳出do-while循环。最后得到输出结果为23,答案选择B。不要先去判断表达式!x的真假,这样容易选到C。

例2:有以下程序(注:字符a的ASCIl码值为97)
#include
main()
{char*s={"abe");
do
{printf(”%d”,*s%10);++s;)
while(*s);
)
程序运行后的输出结果是(    )。B
A)abc   
B)789   
C)7890   
D)979899
第三节   for语句及其构成的循环结构(重点章节)

知识点:for语句的执行过程;for语句中三个表达式使用方法;for 、while、 do-while之间的联系和区别;

重要程度:★★★★★

for(表达式1;表达式2;表达式3)

循环体语句

三个表达式要背诵的:

表达式1:作用是初始化循环的变量;(执行一次)

表达式2:循环条件的判断;(可执行多次)

表达式3:作用是循环变量增值或减少。(可执行多次)

 

其执行过程如下:

(1)     求解表达式1。

(2)     求解表达式2,若其值为“真”非0,则执行

for语句控制的循环体语句,然后执行步骤(3)。

若为“假”0,则结束循环,转到第(5)步。

(3)     求解表达式3

(4)     返回第(2)步继续执行。

(5)     循环结束,执行for语句后面的语句。

                                                图4  for循环流程图

例1:如有以下程序

main()

{

   int i , sum=0;

   for(i=1;i<6;i++) sum+=i;

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

}

执行后sum的值是( )

A)15        B)14     C) 不确定     D)0

分析:本例用一个for循环实现了1到5的累加。首先i为1,sum为0,i<6为真,执行sum+=i;使sum的值变为1,然后执行i++,使i的值变为2,i<6仍然为真,继续执行循环体sum+=i;,使sum的值变为3,再执行i++,使i的值变为3。如此反复,直到i为6,i<6为假,跳出循环,执行printf语句输出sum的值。答案选A。本例有两种变形,请读者自己分析结果。希望读者深刻理解,循环体语句可以是一条语句,也可以是一条复合语句,甚至是条空语句。

变形1:main()                                变形2:main()

{                                            {

      inti , sum=0;                                   int i , sum=0;

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

      sum+=i;                                      {sum+=i;

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

}                                            }

 

关于for语句我们这里有几点说明:

(1)for语句可以完全代替while语句:

表达式1;

while(表达式2)

{

循环体语句

表达式3;

}

(2)for后面小括号中的表达式1和表达式3都可以缺省,表达式1可以移到for语句之前,表达式3可以移到for循环体的尾部,但分号一定不能省。如:

                   i=1;

for(;i<=100;)

{     

sum=sum+i;

i++;

}

同理表达式1和表达式3既可以是单个的表达式,也可以是由多个表达式构成,中间用逗号“,”隔开。如:for(sum=0,i=1;i<=100;i++,i++)。

(3)表达式2可以缺省,此时相当于表达式2的值永远为真,循环将无限执行下去,一般就会形成死循环。这样就会出现三个表达式都缺省的情况。如 for(;;),等同于while(1)。

(4)看懂:for(sum=0,i=1;i<=100,sum=sum+i; i++)这个长得很特殊的循环的程序。

例2:以下程序的输出结果是( )。

main()

{ int a=0,i;

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

  {

    switch(i)

    {   case0:

      case 3:a+=2;

      case 1:

      case 2:a+=3;

      default:a+=5;

    }

  }

  printf("%d\n",a);

}

A) 31     B)13      C) 10      D) 20

分析:本例是for语句和switch语句的结合应用。首先i为1,i<5为真,执行循环体,循环体是一条switch语句,转到case 1它不做任何操作,特别注意它后面的case也要执行,因此执行a+=3;和a+=5;,此时a为8了。接着执行i++,i变为2,i<5为真,继续执行循环体switch语句,执行case2和后面的default,此时a变为16。如此反复,直到i为5,i<5为假,跳出循环。最后结果为31。答案选A。

例3:有以下程序
#include <stdio.h>
double f(double x);
main()
{double a=0;int i;
for(i=0;i<30;i+=10)a+=f((double)i);
printf("%5.0f\n",a);
}
double f(double x)
(return x*x+1;)
程序运行后的输出结果是(    )。
A)503   
B)401   
C)500   
D)1404

第四节   循环的嵌套

知识点:嵌套循环的执行的过程; (学会做题目,掌握循环的方法)

重要程度:★★★★

例1

有以下程序

main( )

{    

int i,j,sum=0;

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

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

sum++;

printf("%d",sum);

}

程序的输出结果是_______

分析:本题考察点在嵌套的for循环中,内层和外层循环的执行过程。内层循环结构的循环体是sum变量的自加,外层循环的循环体是内层的for循环结构。首先i的值为1,进入循环体(内层for循环结构),j的值为1,sum的值变为1;内层循环继续执行,j为2,sum再次自加为2;j自加为3,sum也为3;j自加为4的时候,j<4为假,因此跳出内层循环。外层循环的循环体执行完毕一次,下面计算i++。

i的值变为2,进入循环体,重复上述过程,sum一共增加3,值为6。跳出内层循环。外层循环的循环体执行完毕。再次计算i++。

i的值变为3,重复以上过程,sum的值增加3。i的值变为4,sum继续增加3。当i的值变为5的时候,i<5为假,跳出外层循环。输出sum的值。由于外层循环每执行一次,sum要自加3次,所以一共sum自加12次。最后sum的值为12。各个变量的变化情况见图5所示。

                                   i             1               2                   3                   4

                                   j             1 2  3         1  2  3         1  2  3         1 2  3

                                   sum        1 2  3         4  5  6         7  8  9         10 11 12

图5  例6中各变量的变化情况

考试核心:

1、 近几年是考试的重点,复习时候,把习题册上最近三年的嵌套循环完成就可以了。

2、 嵌套循环是上机考试天空题目的重点。

3、 一定要知道嵌套循环的实质,和运算的整个流程。

   sum = 0;

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

for(j=2;j<=5;j++) sum++;

       这个程序中,sum就一共执行了10(外层循环次数)乘以4(嵌套的二次循环)等于40次。

 

第五节  break语句和continue语句在循环体中的运用

知识点:break和continue的区别; break和continue的使用范围;

重要程度:★★★★★

1、break语句

break; 英文的意思是打破的意思。所以看到break,我们马上要知道它是终止了循环这个过程。

例1:以下程序运行后的输出结果是

main()

{      int x=15;

      while(x>10)

       {     x++;

             if(x%3) {x++;break;}   //误区,break是打破一层循环,不是一层括号!!

        x++;

      }

       printf(“%d\n”,x);

}

A)15                       B)16                       C)17                       D)18

分析:本例是break语句在循环体中的运用。x的初值为15,满足while循环条件,执行循环体。x++使x的值变为16。进入if语句,计算16%3的值为1,if后的表达式为真,故执行复合语句,x自加为17,接着执行break语句,跳出整个while循环。显然后面的x++并不执行。因此x的值为17,答案选C。

注意: break语句只能出现在switch语句体和循环结构中。

2、continue语句

continue;英文的意思是继续的意思.。其作用是结束本轮循环,跳过本轮循环体中余下尚未执行的语句,接着下一轮继续进行循环。

注意:continue语句和break语句的区别:continue语句只结束本轮循环,而不是终止整个循环。而break语句则是结束整个循环

main( )

{      int x=1;

      while(x<3)

       {     x++;

             if(x%2) continue;

        x++;

      }

       printf(“%d\n”,x);

}

 

 

 

main( )

{      int x=1;

      while(x<3)

       {     x++;

             if(x%2) break;

        x++;

      }

       printf(“%d\n”,x);

}

 

 

   

    以上两个程序看上去是只有break和countine的差别,但是运算起来差别很大。第一个程序运算的结果为2,第二个程序运算的结果为3。

例2:把100~500之间的能3整除的数输出。(深刻理解)

main( )

{     int n;

for(n=100;n<=500;n++)

{     if(n%3!=0) continue;

printf("%3d",n);

}

}

分析:当n不能被3整除时,表达式n%3!=0为真,执行continue语句,跳过printf语句,直接执行n++,然后再对n<=500进行判断,决定是否执行循环体。当n能被3整除时,表达式n%3!=0为假,跳过continue语句,执行printf语句将该数输出。

考试核心:

1、含有break和continue的程序运算考察,习题册上有多个经典考题的代表。

2、break和continue的概念区别是考试爱出题的地方。

3、自己写一下,输出1-100之间被三整除的数,并且每行输出三个数字的程序。

main( )

{     int n=1,count=0;

for(n=1;n<=100;n++)

{     if(n%3==0){printf("%3d",n);count++;}

    if(count%3==0)printf(“\n”);

}}

联系方式0755-82591179

传真:0755-82591176

邮箱:vicky@yingtexin.net

地址:深圳市龙华区民治街道民治大道973万众润丰创业园A栋2楼A08