C语言分支循环语句

本文介绍了C语言中的分支语句,包括if语句和switch语句,强调了if语句的执行流程、悬空else问题及良好的代码风格。同时,详细讲解了循环语句,如while、for和do...while语句,以及它们与break和continue的配合使用。文章还通过实例展示了循环的嵌套和素数判断问题,探讨了goto语句的使用及其注意事项。
摘要由CSDN通过智能技术生成
C语⾔是结构化的程序设计语⾔,能够实现的结构分为顺序结构、选择结构、循环结构这三种,本文将对分支语句和循环语句进行初步的介绍

分支语句

if语句

if语句的执行流程
通常结构:
if(表达式)
{
    语句1;
}

if(表达式)
{
    语句1;
}
else
{
    语句2;
}

//多分支
if(表达式)
{
    语句1;
}
else if(表达式)
{
    语句2;
}
else
{
    语句3;
}

        在C语言中,0为假,非0表示真,若表达式的结果是0则语句不执行,若不是0则语句执行。

        此外,if语句支持嵌套。if后的执行语句只有一句时,可以不用{ }括起来,但当存在多条语句需要执行时,如果不用{ }将语句括起来,就只有第一条语句会被执行,适当的使用{ }可以使代码的逻辑更加清楚。

悬空else

        我们知道else语句是与if语句配对的,但是当出现如下情况时:

#include <stdio.h>
int main()
{
    int a=0,b=2;
    if(a==1)
        if(b==2)
            printf("bingo");
    else
        printf("error");
    return 0;
}

        此代码运行的结果是什么也不输出,原因是什么呢?

        当多个if和else存在时,else总是跟最接近的if匹配,虽然上述代码排版看起来else是与第一个if配对的,实际上却是与第二个if配对,从这里我们也能看出,好的代码风格非常重要。

        若想让上述代码正常运行,我们可以将其修改为下面这两种形式:

//第一种

#include <stdio.h>
int main()
{
    int a=0,b=2;
    if(a==1)
    {
        if(b==2)
            printf("bingo");
        else
            printf("error");
    }
    return 0;
}
//第二种

#include <stdio.h>
int main()
{
    int a=0,b=2;
    if(a==1)
    {
        if(b==2)
            printf("bingo");
    }
    else
        printf("error");
    return 0;
}

        适当的添加大括号,就能有效的提升代码的可读性,让代码的逻辑性更清晰,从而养成良好的代码风格。

 switch语句

swtich语句的执行流程

        除了if语句以外,C语言还提供了switch语句来实现分支结构。

        switch语句是一种特殊形式的if……else……结构,用于判断条件有多个结果的情况。它把多重的else if改成更易用、可读性更好的形式。

swtich(整型表达式)
{
    case value1:语句1;
    case value2:语句2;
    default:语句3;
}
//case后的值必须是整型常量表达式

        需要注意的是,switch中的break语句是非常重要的,只有在case后添加break语句才能够跳出switch语句,否则在该case语句后的其它case语句也会执行,直至遇到其它break语句或switch语句结束,可以说是break语句实现了swtich语句的分支效果。

        当然,也不是所有case语句都需要break,应根据实际需求来判断是否加和何时加。

switch语句中的default

         在使用switch语句时,有可能会出现表达式的值无法匹配case语句的情况,如果想处理这种情况,就要在switch语句中添加default语句。

        顺带一提,在switch语句中,虽然我们通常将default语句放在最后,实际上,case语句和default语句是没有顺序要求的,只要满足实际需求就可以。

 循环语句

while语句

while​​​​​​语句的执行流程

         C语言提供了三种循环语句,while语句就是其中一种,while语句的语法结构与if语句非常相似,它们的区别就在于while语句能够实现循环。

通常结构:
while(表达式)
{
    语句;
}
while语句中的break和continue

break举例:

#include <stdio.h>
int main()
{
    int i=1;
    while(i<=10)
    {
        if(i==5)
            break;//i等于5时循环终止
        printf("%d ",i);
        i=i+1;
    }
    return 0;
}

        在添加break语句之前,运行的结果是打印1到10,添加之后的结果是只打印1到4,这是因为break终止了break外的第一层循环,也就是说,当我们想要在某种情况下终止循环时就可以使用break语句来实现终止。

continue举例:

#include <stdio.h>
int main()
{
    int i=1;
    while(i<=10)
    {
        if(i==5)
            continue;//i等于5时跳过本次循环直接回到判断
        printf("%d ",i);//由于continue后的代码也被跳过,所以i一直为5,程序陷入死循环
        i=i+1;
    }
    return 0;
}

        由此我们可以得知,continue能让我们跳过本次循环中continue语句后的代码,直接回到循环的判断部分进行下一个循环的判断。需要注意的是,如果循环的调整在continue语句后面,可能会造成程序的死循环。

for语句

for语句的执行流程

         for语句是三种循环中使用最多的,for循环的语法形式如下:

for(表达式1;表达式2;表达式3)
{
    语句;
}

        其中,表达式1用于循环变量初始化;

                   表达式2用于循环结束条件的判断;

                   表达式3用于循环变量的调整。

        在整个循环过程中,表达式1(初始化部分)只执行一次,然后由表达式2、执行语句、表达式3进行循环。

while循环和for循环的对比
//while循环
#include <stdio.h>
int main()
{
    int i=1;               //①初始化
    while(i<=10)           //②判断
    {
        printf("%d",i);
        i=i+1;             //③调整
    }
    return 0;
}
//for循环
#include <stdio.h>
int main()
{
    int i=0;
//      ①初始化 ②判断 ③调整
    for(i = 1;i <= 10;i++)
    {
        printf("%d",i);
    }
    return 0;
}

         由此可见,相较于while循环,for循环的初始化、判断、调整三部分更集中,更方便后期进行代码维护,因此for循环是要优于while循环的。

for语句中的break和continue

        for循环中的break与while循环中的break所起的作用相同,都是直接终止循环,但for循环中的continue与while循环就有所不同了

#include <stdio.h>
int main()
{
    int i=1;
    for(i=1;i<=10;i++)
    {
        if(i==5)
            continue;//i等于5时跳过本次循环,来到本次循环的调整部分
        printf("%d ",i);
    }
    return 0;
}

上面代码的执行结果是:1 2 3 4 6 7 8 9 10

        由于for循环中的调整部分并不写在循环体内,所以continue跳过本次循环的后续语句时返回到的是本次循环的调整部分,然后再进入下一个循环,不会像while循环一样可能导致死循环。

do while语句

do while语句的执行流程

         在循环语句中,do while语句的使用是最少的,它的语法如下:

do{
    语句;
}while(表达式);

         while循环和for循环都是先判断再执行,而do while循环是先执行再判断,在do while语句中循环体是至少执行一次的,这是do while语句较为特殊的地方,也是do while语句较少被使用的原因。

do while语句中的break和continue
        do while语句中的break和continue与while语句中的作用几乎一模一样,大家可以自行测试。

循环的嵌套

        单独的循环语句掌握起来并不难,但解决实际问题时往往是无法只用一次循环就解决的,C语言不仅支持选择语句的嵌套,也支持循环语句的嵌套。在实际应用中,两种嵌套往往是结合使用的。

        输出素数便是一道比较经典的例题:

找出100~200之间的素数并打印在屏幕上。

注:素数又称质数,只能被1和本身整除。

        要解决这个问题,首先,我们可以通过循环来遍历100到200之间的数;

        然后,要判断i是否为素数,需要用2~i-1之间的数来试除,这些数也可以通过循环来产生;

        最后,如果2~i-1之间有数字能被i整除,则i不是素数,反之则i是素数。

以下为代码实现:

#include <stdio.h>
int main()
{
	int i=0,j=0;
	for(i=100;i<=200;i++)
	{
		for(j=100;j<=i-1;j++)
        {
            if(i%j==0)
                break;
        }
        if(j>i-1)
            printf("%d ",i);
	}
	return 0;
}

其实素数的判断并不需要遍历到i-1,只需要遍历到根号i就可以了,代码实现如下:

#include <stdio.h>
#include <math.h>
int main()
{
	int i=0,j=0;
	for(i=100;i<=200;i++)
	{
		for(j=100;j<=sqrt(i);j++)
        {
            if(i%j==0)
                break;
        }
        if(j>sqrt(i))
            printf("%d ",i);
	}
	return 0;
}

goto语句

        C语言提供了一种很特别的语法,即goto语句和跳转标号。goto语句可以实现在同一函数中跳转到设置好的标号处。例如:

#include <stdio.h>
int main()
{
    printf("1");
    goto next;
    printf("2");

next:
    printf("跳过了2的打印");
    return 0;
}

        需要注意的是,goto语句如果使用不当,就会造成函数内部胡乱调转,所以一般不建议使用,不过goto语句也有它的优点,比如在多层循环嵌套中想要快速跳出循环时,虽然break可以实现跳出循环,但一个break只能跳出一层循环,多层嵌套的情况下,使用goto语句最为便捷。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值