C语言学习-流程控制

                                                                                  流程控制

1 C语言的基本逻辑结构

基本结构:顺序结构、选择结构和循环结构

1)顺序结构:所谓顺序结构,就是从上到下的所有语句都会依次执行
2)选择结构:选择结构中存在一条(或多条)分支语句,当满足分支的条件时语句才会执行,否则不会执行
3)循环结构:循环结构即是在某些条件的控制下重复执行一段代码语句,当满足循环条件时执行循环语句,否则不执行循环语句。

2   选择结构:if-else结构

⒈if(表达式)
{
    语句块
    ……
}


⒉if(表达式)
{
    语句块1
    ……
}
else
{
    语句块2
    ……
}


⒊if(表达式1)
{
    语句块1
    ……
}
else if(表达式2)
{
    语句块2
    ……
}
....
else 
{
    语句块n
}

4.if语句嵌套

if(表达式1)
{
    if(表达式2)
    {
        语句块1
        ……
    }
    else
    {
        语句块2
        ……
    }
}
else
{
    if(表达式3)
    {
        语句块3
        ……
    }
    else
    {
        语句块4
        ……
    }
}

3 选择结构:switch-case结构

if()-else语句只能判断2个分支,若要判断多个分支则需要if()-else的多次使用或嵌套使用,十分不便
switch()语句是多分支选择语句。通过switch()的多分支判断可以简便地实现多分支选择结构
switch()语句的一般形式如下:
switch(表达式)
{
    case 常量1:
    语句1;
    break;
    case 常量2:
    语句2;
    break;
    ……//多个case结构
    case 常量n:
    语句n;
    break;
    default:
    语句n+1;
}
说明:
1)switch(表达式)表达式的值应是一个整数(包括字符数据)
2)switch()下的{}是一段语句块,这段语句包含若干个以case开头的语句块和至多一个以default开头的语句块
3)case后需要一个常量(或常量表达式),case和default都是标号作用。首先判断switch(表达式)的表达式的值,之后与各个case之后的值进行比对,如果某个case后的值与表达式的值相同,则跳转到此case语句;如果所有的case都不匹配,则跳转到default后的语句
4)可以没有default语句。若没有default语句,则如果没有匹配的case,则程序不执行任何语句
5)各个case之间的先后顺序以及default的位置不影响程序执行结果,不过我们强烈推荐按一定顺序排列case语句,default语句放在最后
6)每个case语句后的常量值必须各不相同,否则会发生互相矛盾现象
7)break语句用来终止switch()语句。如果case语句后没有break语句

 

4 循环结构


在生活中我们常常遇到需要重复处理的问题,我们在编程时解决需要重复处理的问题需要使用循环语句
循环语句主要有3种:while()循环;do-while()循环和for()循环
1、while()循环
用法:
while(循环条件)
{
    循环体;
    ……
}
说明:
当程序遇到while()循环的时候,首先会判断while()的括号内的表达式,若为真(即满足循环条件)则执行循环,执行完循环体后再次返回到while();若为假则结束循环
 

若while()后没有{}限制,则循环只执行到while()后第一个分号处(即只执行一条语句),这点与if()-else相同

2、do-while()循环
用法:
do
{
    循环体;
    ……
}while(循环条件);
说明:
当程序遇到do,会首先执行do下面的语句(即循环体),之后执行到while(),判断while()的括号内的表达式是真/假,若为真(即满足循环条件)则返回do语句处再次执行循环体;若为假则结束循环。
 

while()与do-while()的区别:
while()循环是先判断循环条件,再进入循环体。而do-while()循环是先进入循环体,再判断循环条件。
while()循环有可能不执行循环体,而do-while()循环一定会执行一次循环体

3、for()循环
用法:
for(表达式1;表达式2;表达式3)
{
    循环体;
    ……
}
注意:for()括号内的3个表达式的分隔符是分号;不是逗号,
说明:
表达式1:循环的初始条件,只执行一次。可以为0个、1个或多个变量设置初值
表达式2:判断循环结束的条件。在每次执行循环体前判断此表达式,若表达式为真则进入循环,否则不执行循环
表达式3:作为循环的调整(即改变循环状态),在执行完循环体之后执行
for(表达式1;表达式2;表达式3)
{
    循环体;
}
等价于:
表达式1;
while(表达式2)
{
    循环体;
    表达式3;
}

若将3个表达式都省略(即for(;;)),则相当于设置了一个无限循环
若for()后没有{}限制,则循环只执行到for()后第一个分号处(即只执行一条语句),这点与if()-else相同

三种循环的比较:
1)如果使用while()或do-while(),需要注意在循环体内设置改变循环状态的变量。而for()循环则是在表达式3中设置
2)一般来说,for()循环的表达式3的位置甚至可以将循环体都放入,所以for()循环更常用
3)在知道循环次数的情况下,推荐使用for()循环;在不知循环次数的情况下推荐使用while()或do-while()循环
4)从C99版本开始,C语言支持以下用法:
for(int i=0;i<10;i++)
{
    循环体;
    ……
}
这样就可以不用事先特地定义一个用于循环的变量,随时使用随时定义即可。
注意1:这种使用方式循环变量i的生命周期仅仅是在for()循环中,当for()循环结束i即结束其生命周期。如果这样使用:
for(int i=0;i<10;i++)
{
    循环体;
    ……
}
printf("%d",i);//此时i的生命周期已经结束,企图访问不存在的变量i,非法
则编译会显示语法错误。
注意2:这种用法仅支持C99及以后C语言版本的编译器,如果这样使用出现语法错误则证明其编译器版本不支持这种语法,请不要使用这种语法而是在for()循环开始前就定义循环变量。

 

5 循环的嵌套使用


一个循环体内又包含一个循环体的结构称之为循环的嵌套。内嵌循环还可以再嵌套循环。3种循环都是可以互相嵌套使用的。例如下面的例子都是合法的:
1)
while()
{
    do
    {
        
    }while();
}
2)
for(;;)
{
    while()
    {
        
    }
}
3)
do
{
    for()
    {
        
    }
}while();

 

6 提前结束循环的语句 continue、break、return、exit()



1)continue
continue语句的用法是:
continue;
其作用是结束本次循环,即跳过所有continue下的语句,进入下次循环。

2)break
break语句的用法是:
break;
其作用是结束循环,执行循环体外的下一个语句
回顾:break在switch()语句中的作用
break在switch()语句中的作用是跳出switch()语句,执行switch()语句下一条语句。

可以看到,尽管在示例程序中while()循环使用了死循环,当出现break语句后,依然会跳出循环。
3)return
return语句的用法是:
return 需要的返回值;
其中需要的返回值由函数类型决定。如main()函数是int类型,则需要返回一个整数。如果函数是void类型则无需写返回值。
return语句的作用是结束当前函数,并将返回值返回给函数调用的位置。
有关return语句的用法我们将在函数的课程中详细讲解。
需要注意的是return不仅仅是结束了循环,更是结束了当前的函数。因此要慎用。
4)exit
exit语句的用法是:
exit(x);//x为0或正整数
当x为0时表示正常结束,不为0时表示异常结束(异常号)
exit()在头文件 stdlib.h 中
exit()不仅仅是结束循环,它的真正意义是退出当前程序。因此非常不推荐使用exit()结束循环
从效果来看,4个语句的效果如下:
exit() > return > break > continue
强<---------------------------->弱

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值