控制语句

< 上一页 函数调用语句 空语句 下一页 >

控制语句用于控制程序的流程, 以实现程序的各种结构方式。它们由特定的语句定义符组成。C语言有九种控制语句。可分成以下几类:

4.7.1if语句

if语句是最常见的一种条件判断语句。当对应的条件成立,则执行对应的代码。if语句的格式如下:

if(条件1)

{

       语句;

}

或者:

if(条件1)

{

       语句1;

}

else

{

       语句2;

}

或者:

if(条件1)

{

       语句1;

}

else if (条件2)

{

       语句2;

}

else

{

       语句3;

}

 

4.7.2switch语句

switch语句的格式为:

switch(变量)

{

case 变量值1

     语句;

     Break

case 变量值2

     语句;

     Break

default:

     语句;

}

switch语句的每个case分支,都应该有break语句,这样就不会执行break下面的其它语句了,否则,程序在执行完一个case的所有语句后,会紧接着执行下一个case语句。switch中间哪些类型的变量可以?char,short,int,long可以,但指针和浮点数不可以。Switch语句中当变量的值为下面case中某个值的时候,就会执行该case下的语句,直到遇到break语句。如果所有case的值都不相等,就执行default下面的语句。

下面是一个具体的switch语句的例子:

 

char  c;

scanf_s(“%c”,&c,1);//从键盘输入一个字符作为变量c的值。

switch(c)

{

       case ‘A’://输入A

              语句;

              break;

       case ‘B’://输入B

              语句;

              break;

       case ‘C’://输入C

              语句;

              break;

       default:

              ;

}

 

4.7.3for循环语句

for语句的书写格式如下:

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

{

       语句;

}

第一次执行的时候,先执行表达式1,然后判断表达式2的值,如果为真,则执行{}里的语句,接下来,执行完{}语句之后,只要没有退出循环(如执行了break或者return语句),就会执行并计算表达式3的值。从第二次开始之后,表达式1将不会再执行,而直接计算表达式2的值,如果为真继续执行{}里的语句,否则,就退出循环。

比如:

for(int i=0;i<10;i++)

{

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

}

  for语句的三个表达式都可以缺省,如下:

for(;;)

{

 

}

这个时候,for循环是一个死循环,需要在循环里使用break语句或者return语句来退出循环。

下面是一些常见的for循环写法的例子:

当i==5时,忽略continue之后的所有语句的执行,继续进入循环下一次迭代;当i==9时,循环退出

循环嵌套,二重循环

4.7.4while循环语句

while语句的书写格式如下:

while(条件)

{

       语句;

}

计算顺序:先计算while()里的条件表达式的值,如果为真,再执行{}里的语句。

while(1)

{

}

while(1)循环因为条件为1,恒为真,所以是一个死循环,需要在循环内部使用break或者return语句跳出循环。

下面是一个while循环的例子,只要i>0,那么循环就会继续执行,而当i<=0的时候,循环就会退出。

 

4.7.5do-while循环语句

do-while语句的书写格式如下:

do

{

 

       语句;

 

}while(条件);//注意此处需要有分号,否则编译会报错

 

do-while()循环是先执行语句,再进行条件判断,所以无论条件是否成立,语句都会执行至少一次。

上面的例子中,只要i>0,那么循环就会继续执行里面的语句,打印出i的值。而当i<=0之后,循环条件并不满足,所以循环会退出。注意,因为do-while循环是先执行,再判断,所以:

i=0;

do

{

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

}while(i>0);

或者:

do

{

    printf("hello world\n"); 

}while(0);

尽管循环的条件都为假,但因为是先执行,再判断,所以循环都会执行一次,再退出。

 

各种结构的循环常见写法:

前几节中,几乎每个算法都用到了循环语句。以循环语句为核心,循环语句把其他语句联系起来。

下面把常用的循环语句列出,方便大家在编程的时候使用:

1.数组

 

for (int i = 0; i < n; i++)

{

     printf(“%d\n”, a[i]);

}

 

2.字符串

 

while (*str !=’\0’)

{

     str++;

}

 

3.链表

 

while (p)

{

     p = p->next;

}

 

4.栈空/栈满/队空/队满

 

while(栈非空)

{

     出栈;

     操作出栈元素

}

 

5.指针大小比较

 

while (pStart < pEnd)

{

     pStart++;

}

 

6.数为正

 

while (size--)

{

}

do

{

}while(size--)

 

7.反复循环直到条件成熟

 

while(1)

{

     if (something is true)

         break;

}

 

    熟练各种循环语句的写法,为实现各种复杂的算法奠定了基础。因此,要在各种循环语句上下功夫,达到熟练书写,灵活运用的程度。

4.7.6转向语句:continue/break/goto/return

1break语句

break语句的格式为:

break;

break语句一般用在循环语句来退出循环,或者用在switch语句中,用来退出switch语句的执行。

2goto语句

C语言中的goto语句是用来控制程序执行从一个地方跳转到另外一个地方执行的。其应用格式为:

 

LabelA:

    语句3;

……

语句1;

goto LabelA;

语句2;

在上面的伪代码中,程序在执行完语句1之后,继续执行goto语句,程序就会跳转到标签 LabelaA下面继续执行语句3

一般会看到C语言代码里出现了goto语句,让人觉得很奇怪。因为几乎所有的人都会告诉你,在程序里尽量少用goto语句。Goto语句为什么人见人恨呢?先看看goto语句的一些典型的缺点:goto语句可以实现无条件跳转,如果不加限制,它的确会破坏结构化程序设计风格。其次,goto语句经常带来错误和隐患。它可能跳过某些对象的构造,变量的初始化,重要的计算等语句。

那么goto语句是不是就一无是处了呢?也不是这样的。比如goto语句还可以用在下面2种情况下:

l         跳出循环

for(int i=0;i<10;i++)

{

       for(int j=0;j<10;j++)

       {

              for(int k=0;k<10;k++)

              {

                     if(k==5)

                     {

                            goto out;

                     }

              }

       }

}

out:

l         出错处理

char *p1=(char *)malloc(128);

if(p1==NULL)

    goto exit;

char *p2=(char *)malloc(16);

if(p2==NULL)

    goto exit;

exit:

    if(p1)

       free(p1);

    if(p2)

       free(p2);

3continue语句

语句continue用于在循环语句中,结束本次循环,即跳过循环体中continue下面尚未执行的语句,紧接着进行下一次是否再进行循环的判断,也就是说当语句执行到continue,立即结束本次循环,重新去判断循环条件是否为真,如果为真,那么就会继续执行下一次循环;如果为假,循环就退出。。

while循环为例子,语句continue在循环中的使用格式为:

while(条件1)

{

       if(条件2)

       {

              continue;//当条件2位真,那么循环后面的其它语句就不会再执行

//而重新判断条件1是否为真

       }

    其它语句;

}

int i=10;

while(i>0)

{

    i--;

    if(i==7)

    {

//i等于7的时候,下面的printf函数语句会被忽略

//所以不会打印出7这个数字

continue;

    }

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

}

 

4return语句

return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定,return返回的值类型由函数声明中的返回类型确定。比如:

    1)在返回类型是char的函数中,return后应该是char类型的值;

2)在返回类型是int的函数中,如果是要停止函数的调用,最好应该为0;其他的按照你的目的而定,只要是int 类型就行了;

3)在返回类型是结构类型的函数中,return后应该是结构的一个实例对象;

4return后面也可以跟表达式,比如函数调用等;

4)如果函数无返回类型,而是void,则无需要返回任何类型的值。

return语句的使用格式:

类型 func(参数列表)

{

       类型 value;

       ……

       ……

       return value;

}

int func(参数列表)

{

       int result = 0;

 

       ……

      

       return result;

}

在汇编语言里,返回值一般都是放在ax寄存器中。

< 上一页 函数调用语句 空语句 下一页 >

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注