C语言分支、循环语句和转向语句

目录

C语句分类

一、分支语句

if

switch

二、循环语句

while

for

do……while

三、转向语句

break

continue

return

goto

区别

以下是我的一点小总结,若有错误请指出 ,谢谢。


C语句分类

表达式语句

函数调用语句

控制语句

复合语句

空语句


控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言是面向过程的语言,也是结构化程序设计,有三种基本结构:顺序结构,选择结构,循环结构)。C语言有9种控制语句。

可分为3类:

分支语句:if   switch

循环语句:while   for    do……while

转向语句:break  continue   return   goto


一、分支语句

1.  if语句

if语句可分为单分支,双分支,多分支

单分支:

#include <stdio.h>
int main()
{
    ……
    if(表达式)
        语句;
    ……
    return 0;
}

双分支:

#include <stdio.h>
int main()
{
    ……
    if(表达式)
      语句;
    else
      语句;
    ……
    return 0;
}

 多分支:

#include <stdio.h>
int main()
{
    ……
    if(表达式)
        语句;
    else if(表达式)
        语句;
    else
        语句;
    ……
    return 0;
}

其中,表达式结果为真(在C语言中0表示假,非0表示真),才会执行语句;为假则跳过。 

若只有一条语句,可直接写;若2条及以上,则要加{  } (因为是复合语句,也就是代码块);

比较值得注意的是,else只与最近的不在{}中的if是一对,也就是就近原则,与是否对齐无关

(对齐是代码风格,为了好看和方便阅读)

 下面是一个简单的例子:

#include <stdio.h>
int main()
{
    int a=1,b=2;
    if(a==3)
        if(b==2)
            printf("hi\n");
    else
        printf("ha\n");
    return 0;
}

输出结果是 没有输出,因为a==1——>a!=3 ,表达式结果为假,自动跳过。这很好的证明了第二个if和else才是一对。另外他们不在{ }中,是因为if ……else……是一条语句。 

但为了方便他人理解和阅读,我们最好不要写出这种会令人误会的代码。

2.  switch语句

常常用于多分支情况。

#include <stdio.h>
int main()
{
    ……
    switch(整型表达式)
    {
        case 整型常量表达式:
               语句;
        ……
        default:
               语句;
    }
    ……
    return 0;
}

 首先,带着整型表达式的值进入,按从上到下的顺序与case后的整型常量进行比对,若相同则进入case执行语句,若没有break则接着进入下一个case执行语句,直到遇到break,跳转出来。

字符常量也属于整型家族,因为以ASCII码值进行存储。

default子句:所有case不能匹配的值都到这里来处理,在没有特殊要求的情况下它的位置任意,也就是说可以放在case前面。若对你处理的问题没有用,可以不写。

if语句和switch语句都支持嵌套。


二、循环语句

1.  while

#include <stdio.h>
int main()
{
    ……
    while(表达式)
        语句;
    return 0;
}

与if语句一样,表达式结果为真,执行;为假,不执行(跳出循环)。

若表达式永远成立,则是死循环(没有break、goto、return等)。

2.  for

#include <stdio.h>
int main()
{
    ……
    for(初始化部分;条件判断部分;调整部分)
        语句;
    return 0;
}

 ()中的3个表达式都可以省略,但会产生不一样的效果。

条件判断部分省略会导致判断恒成立,会造成死循环(没有break、goto、return等)。

初始化部分省略:可能导致再次进入这个for语句时,默认变量是上一次进入后的最终值。

下面我们举一个简单的例子:嵌套for循环

#include <stdio.h>
int main()
{
    int i=0,j=0;
    for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++)
        {
            printf("hi ");
        }
    }
    return 0;
}

 输出结果:打印100个hi

#include <stdio.h>
int main()
{
    int i=0,j=0;
    for(;i<10;i++)
    {
        for(;j<10;j++)
        {
            printf("hi ");
        }
    }
    return 0;
}

输出结果: 打印10个hi

因为i=0进入第一层循环,j=0进入第二层循环,打印10个hi,此时j的值为10跳出第一层循环,i++,i的值变为1再次进入第一层循环,但此时j==10,不满足第二层循环的判断条件,无法进入第二层循环,也就无法打印hi,以此类推,后面都无法打印,所以输出结果是这样的。

另外可以使用多个变量来控制循环。

3.  do……while

#include <stdio.h>
int main()
{
    ……
    do
    {
        语句; //至少执行一次
    }while(表达式);
    return 0;
}

三、转向语句 

1.  break和continue

2.  return

用作返回值,遇到直接返回值,后面的代码都跳过。只能返回一个值,若遇到 return 3,4; 这种返回4,因为是逗号表达式。

在主函数中 return 0;表示程序结束正常退出。

若是调用函数无返回值 ,那么可以直接写return;即可。 

3.  goto

可随意滥用,可随意跳转,最常见的用法:终止程序在某些深度嵌套的结构,一次跳出两层或多层循环。

但最好不要使用,因为不安全。

下面用一个可以用来整蛊的小程序体会一下它的用法: 

4.  区别

break只能从最内层循环退出到上一层循环。

return使函数直接结束,返回。

 goto任意跳转。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值