循环控制语句:
本章是最麻烦也是最重要而且学C语言必须要学好的一章,大家打起精神let\’s go!
循环结构是程序中一种很重要的结构。其特点是, 在给定条件成立时,反复执行某程序段,直到条件不成立为止。 给定的条件称为循环条件,反复执行的程序段称为循环体。 C语言提供了多种循环语句,可以组成各种不同形式的循环结构。总体来说分为四种:
<1>if和goto组成的循环
<2>while循环
<3>do……while循环
<4>for循环
goto语句
goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。
在C语言不限制程序中使用标号的次数,但各标号不得重名。goto语句的语义是改变程序流向, 转去执行语句标号所标识的语句。
goto语句通常与条件语句配合使用,通常用的是if。可用来实现条件转移, 构成循环,跳出循环体等功能。
但是,在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。由于在结构化的程序设计中主张禁止goto语句,所以就不做 多的赘述。简单的给个例题巴
例题1:从键盘输入一组数据,以0结束输入,求数据和。
#include <stdio.h>
main()
{      int number,sum=0;
read_loop: scanf(“%d”,&number);
    if(!number)  goto print_sum;
    sum+=number;
    goto read_loop;
print_sum: printf(“The total sum is %d\\n”,sum);

while循环语句
while语句的一般形式为: while(表达式)语句; 其中表达式是循环条件,语句为循环体。
while语句的语法含义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。一定要注意:是先判断后执行!这个和do……while的先执行后判断完全不一样!
还是来看代码段
void main()
{
int a=1,b=0;
while(a<5)
{
n+=b;
b++;
}
printf(“%d “,b++);
}
怎么样还是比较简单的吧,其实无论多么复杂的程序都是一点一点的代码块组成的~再来看下面的例题:
例题2:求1~5的平方
#include <stdio.h>
main()
{   int i=1;
    while(i<=5)
    {  printf(“%d*%d=%d\\n”,i,i,i*i);
       i++;
    }
}

do……while语句
do……while语句的一般形式为:
do
语句;
while(表达式);
其中语句是循环体,表达式是循环条件。
do-while语句的语法含义是:
先执行循环体语句一次, 再判别表达式的值,若为真(非0)则继续循环,否则终止循环。
do……while语句和while语句的区别在于do……while是先执行后判断,因此do……while至少要执行一次循环体。而while是先判断后执行,如果条件不满足,则一次循环体语句也不执行。
while语句和do……while语句一般都可以相互改写。我们还是用上面的代码来看在do……while下是怎么互写的:
例题3:
void main()
{
int a=1,b=0;
do
{
b+=a;
a++;
}
while(a<5); /*注意哦,这里的while后面是右分号的*/
printf(“%d “,b++);
}
呵呵,现在知道了吧,其实就是一个判断先后的问题。

for语句
for语句是C语言所提供的功能更强,使用更广泛的一种循环语句。个人认为for语句是最最灵活也是最强大的语句,同时代码段也少一点,比较方便阅读,所以强烈推荐多多用for循环。
其一般形式为:
for(表达式1;表达式2;表达3)
语句;
表达式1 通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语句外给循环变量赋初值,此时可以省略该表达式。
表达式2 通常是循环条件,一般为关系表达式或逻辑表达式。
表达式3 通常可用来修改循环变量的值,一般是赋值语句。
这三个表达式都可以是逗号表达式, 即每个表达式都可由多个表达式组成。三个表达式都是任选项,都可以省略。
一般形式中的“语句”即为循环体语句。for语句的语法含义是:
1.首先计算表达式1的值。
2.再计算表达式2的值,若值为真(非0)则执行循环体一次, 否则跳出循环。
3.然后再计算表达式3的值,转回第2步重复执行。在整个for循环过程中,表达式1只计算一次,表达式2和表达式,3则可能计算多次。循环体可能多次执行,也可能一次都不执行。
具体在程序中的格式为:
for(循环变量赋初值;循环条件;循环变量增值)
{
循环体语句;
}
我们还是看例题哈
例题4:求两个数相加为100:
main()
{   int  a,b,c;
    for(a=0,b=100;a<=b;a++,b–)
    {    c=a+b;
  printf(“%d+%d=%d\\n”,a,b,c);
    }
}  

例题5:用for语句计算s=13+…100
main()
{
int a,s=0;
for(a=1;a<=100;a++)
s=s+a;
printf(“s=%d\\n”,s);
}

怎么样呢?简单吧,估计大家也很奇怪,发现我给大家的例题都是很简单的,从来没有很长的代码段,或者是很难的题目,其实我怎么做主要是帮助大家理解每个概念和定义的用法,在把语句将完后我会给大家讲几个经典的题目,大家莫着急哈~~~~

循环的嵌套
本节是重中之重,一定要好好掌握,主要是针对以后写大型程序很方便。下面是几种循环语句的相互嵌套:
语句相互嵌套,构成多重循环。
<1>while(){
      …
      while()
       {…}
      …
     }

<2>do{
   …
  while()
   {…}
  …
  }while();
<3>for(){…
  while()
   {…}
  …
    }
<4>do{
   …
  for()
   {…}
  …
  }while();
<5>while(){
      …
      for()
       {…}
      …
     }
<6>for(){
    …
    for(){
    …
     }
    }
当然还会有很多的嵌套方法主要靠大家平时的积累和自己的使用习惯。我一般实施喜欢for和for的嵌套,主要是比较简洁.我比较懒,不喜欢写N多长的代码,只要能短我就尽量少写代码,嘿嘿~
我这里是以for的嵌套来做例子,其他的循环语句的嵌套大家可以自己练习,
例题6:写一个可以打印下列图形的程序
     *
    ***
   *****
呵呵有点发蒙了吧,其实这个最简单是在纸上把*的位子排列号在用printf(“*”);来让它输出,但是这样就太没有技术含量了,现在我们用循环来做:代码如下
void main(){
int i,j,k;
for(i=1;i<=3;i++)
{ for(j=1;j<=3-i+5;j++)
printf(” “);
for(k=1;k<=2*i-1+5;k++)
{
if(k<=5) printf(” “);
else printf(“*”);
}
printf(“\\n”);
}
}
这个是我从一个很经典的程序中演化出来的,原题是要求打印一个*的菱形,这个问题大家回去仔细考虑下,还是比较有意思的。为了加深理解我们来看个题目吧。
例题7:打印一个9*9的乘法表.这个好象也有不少的书讲到,推荐大家还是自己看下,代码如下
#include <stdio.h>
main()
{   int i,j;
    for(i=1;i<10;i++)
       printf(“%4d”,i);
    printf(“\\n—————————————\\n”);
    for(i=1;i<10;i++)
       for(j=1;j<10;j++)
    printf((j==9)?”%4d\\n”:”%4d”,i*j);
}
我们再来看个有趣的题:
例题7:在屏幕上打印出0~360度的余弦函数:
分析:其实这个题目要是用数组简直就是简单的不能再简单的题目,但是我们现在没有学习数组,所以这个题目还是有点难度的,毕竟还有个对称度的问题,我们可以把屏幕按照X,Y来做及比较方便理解了,代码如下:
#include<stdio.h>
#include<math.h>
main()
{
double y;/*为什么是double型,大家自己考虑*/
int x,m;
for(y=1;y>=-1;y-=0.1)/*y为列方向只从1到-1步长为0.1*/
  {
   m=acos(y)*10;  /*计算y的弧度,而后面乘上10为放大的倍数*/
   for(x=1;x<m;x++)
   printf(” “);
   printf(“*”);   /*控制打印左边的**/
   for(;x<62-m;x++)
   printf(” “);
   printf(“*\\n”);
  }
}            
现在大家考虑下0~360度的正弦函数字怎么写哈~
最后在给大家看个非常经典的题目估计也有朋友看过类似的题目,就是求素数的问题.
例题8:在0~100类有多少素数.
分析,这个题目在所有的C语言书中都会讲到。
#include “math.h”
main()
{
 int m,i,k,h=0,leap=1;
 printf(“\\n”);
 for(m=0;m<=100;m++)
  { k=sqrt(m+1);
   for(i=2;i<=k;i++)
     if(m%i==0)
      {leap=0;break;}
   if(leap) {printf(“%-4d”,m);h++;
        if(h%10==0)
        printf(“\\n”);
        }
   leap=1;
  }
 printf(“\\nThe total is %d”,h);
}
好了到此为止语句都讲完了,相信大家都能编写出自己程序,其实C语言还是很简单的,只要不考虑复杂性,理论上我们可以写出大部分的程序。

评论被关闭。