C语言--分支语句和循环语句

分支语句和循环语句作为C语言中的控制语句,在C语言中有着举足轻重的地位。


1.分支语句

1.1 if语句

 if语句的语法结构

语法结构:
//单分支
if(表达式)  //表达式中,当为0时,为假,不执行这个语句;当为非0时(1,2,-1...),为真,执行语句。
    语句;


//双分支
if(表达)
    语句1;
else
    语句2;


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

关于if语句的实例:

#include<stdio.h>

int main()
{
    int age = 0;
    scanf("%d", &age);
    if(age > 18)
        printf("成年啦");
    else if(age < 18)
        printf("未成年");
    return 0;
}

关于if语句有几点说明:

1.if可以单独出现,不一定要和else,else if同时出现。

2.if()括号中如果有多个条件,用&&或||操作符连接起来。当条件既要小于200又要大于100时,千万不能写成100<a<200,因为那样的话,当输入的a小于100时,100<a就为0(假),0又恒小于200,所以这个语句会被执行。应该写成 a>100 && a<200的。

3.当有多个语句时,一定要用代码块,类似于下面这样,因为这样会增加代码的可读性,而且最重要的是,else是会和与靠它最近的else if配对,并不是哪个else if与它对齐它才和哪个匹配

if(a<100)
    {
    printf("%d\n",a);
    printf........
    }

4.if后面的()中,如果表示的是某种相等的情况,那么一定是==,而不是=。如果不小心写成了=,程序以后会执行这个语句,不会报错,但就达不到我们预期的效果了。为了避免这种情况,我们可以将常量放在左边,右边是变量,例如:if(5 == b),因为这样我们一旦只打了一个=,编译器就会报错,因为不能给常量赋值。我们就可以很快的知道程序在哪里出错了,省去了找BUG的时间和精力。

 (这样他就会打印5,而我们并不想让它打印东西。)

1.2 switch语句

switch语句常运用于多分支语句时。switch的语法结构:

switch(整型表达式)
{
case 1:
    语句1;
case 2:
    语句2;
......
}

有如下的实例:

#include<stdio.h>

int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
    case 1:
        printf("周一");
    case 2:
        printf("周二");
    case 3:
        printf("周三");
    case 4:
        printf("周四");
    case 5:
        printf("周五");
    case 6:
        printf("周六");
    case 7:
        printf("周日");
    }
}

关于switch有如下说明:

1.switch后面括号应该是整型表达式,可以是int,char,long,short类型的。但不支持float类型。case后面也应为整型常量表达式。也就是说表达式要在之前声明初始化。

2.如上图实例,如果day为1,那么周一~周日都会被打印出来。我们只想打印一个的话,就要在每个语句后面写break。加不加break据情况而定。如果不加break,他会从进入的语句一直走下去,直到这个代码块结束:。

#include<stdio.h>

int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
    case 1:
        printf("周一");
        break;
    case 2:
        printf("周二");
        break;
    case 3:
        printf("周三");
        break;
    case 4:
        printf("周四");
        break;
    case 5:
        printf("周五");
        break;
    case 6:
        printf("周六");
        break;
    case 7:
        printf("周日");
        break;
    default:
        printf("出错了~");
    }
}

#include<stdio.h>

int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("weekday");
        break;//打印工作日
    case 6:
    case 7:
        printf("weekend");
        break;//打印周末
    default:
        printf("出错了~");
        break;
    }
}

3.switch语句中有default子句,它的作用和if中的break相类似,是为了给条件与case中都不匹配的语句所使用的,增加了程序的完整性。default语句没有位置限制。

#include<stdio.h>

int main()
{
    int day = 0;
    switch(day);
    {
    case 1:
        printf("周一")
    case 2:
        printf("周二")
    case 3:
        printf("周三")
    case 4:
        printf("周四")
    case 5:
        printf("周五")
    case 6:
        printf("周六")
    case 7:
        printf("周日")
    default:
        printf("出错啦,您输入的不在范围之内~")
    }
}

2.循环语句 

2.1 while循环

while的语法形式:

while(条件)
{
 循环部分
}

while的实例:

 当while后面的语句为真时(非0),就会一直循环下去。这段代码运行起来会打印0~9。我们可以根据我们的需要设计条件达到我们的需求。

while中的break,continue:

在这里我们需要注意,while中的break和continue出现时,往往是伴随着if语句的,if语句可以嵌入到while循环中。

break:

#include<stdio.h>

int main()
{
    int a = 0;

    while (a < 10)
    {
        printf("%d\n", a);
            if (5 == a)
                break;
        a++;
    }
}

说明:当a为5时,执行break语句跳出while循环--循环终止。程序运行起来只会打印0~5,而不是像上面的程序一样打印0~9。break的作用就是如此。

continue:

#include<stdio.h>

int main()
{
    int a = 0;

    while (a < 10)
    {
        printf("%d\n", a);
            if (5 == a)
                continue;
        a++;
    }
}

说明:和上面的代码不同,break变成了continue。运行结果大有不同。它还会打印0~5,但打印到5后程序不会跳出while循环了,而是无穷尽地打印5。continue就是当满足条件时,跳过后面的语句重新回到循环头部,满足if的条件,又回到循环头部,从而不停地循环。

2.2 for循环

for循环语法形式:

for(初始化部分;判断部分;调整部分)
{
    循环内容
}

for循环的实例:

int main()
{
    int i = 0;
    for (i = 1; i < 10; i++)
    {
        printf("%d\n",i);
    }
    return 0;
}

在这里我们需要注意的是i++是每次代码块里的程序运行完后才会执行的。

for中的break,continue:

break:

int main()
{
    int i = 0;
    for (i = 1; i < 10; i++)
    {
        if ( 5 == i )
            break;
        printf("%d\n",i);
    }
    return 0;
}

和while中的break一样,当满足条件后,执行break语句,跳出循环,只打印出1~4。

continue:

int main()
{
    int i = 0;
    for (i = 1; i < 10; i++)
    {
        if ( 5 == i )
            continue;
        printf("%d\n",i);
    }
    return 0;
}

for循环中的continue与while中的continue不太相同。当while中开始执行continue时会一直死循环下去,而for中却不是,我们运行这段代码可以发现,他打印了1~9(中间没有打印5),这是因为当i等于5时,执行continue语句(下面的程序不再执行)回到for循环头部,又执行了i++,这时5加1等于6所以不满足if条件,可以往下循环。而while中的i++没有在循环头部,而在下面的程序中,所以一直满足条件死循环下去。

for循环的几点说明:

1.不推荐判断条件带等号(前闭后开),提高程序可读性;

2.不可在循环体内部修改循环变量,防止循环混乱;

3.for的初始化、判断条件、调整部分可以为空:for(;;);(不建议省略,理由如下)

int main()
{
    int i, j = 0;
    for (i = 0; i < 3; i++)
    {
        for(j = 0; j<3; j++)
            printf("hehe\n");
    }
    return 0;
}

在这时我们根据代码可知他打印出9个hehe。当我们把第二个for循环中的 j=0 省略时,他就只能打印三个hehe了。 这是因为在第一个for循环第一次时第二个for循环中j的已经变成了3,当我们去掉j=0的初始条件时,j就不会被初始化了,j就是3,所以在第二次进入循环时,不满足条件不再打印hehe。我们可以看到当我们随意省略for循环中的某一部分时,可能会得到与我们的期望不相符的程序,造成不必要的麻烦,所以最好不省略。

4.控制for循环的变量可以是多个。

来看个代码,各位老铁们可以看看它打印几次a。(可以在文章底部参与投票哦~)

int main()
{
    int a, b = 0;
    for (a = 0, b = 0; a = 0; a++, ++b)
        printf("%d\n",a);
    return 0; 
}

2.3 do...while循环

do...while循环语法形式:

do
{
循环内容
}while(判断条件);

do...while循环实例:

int main()
{
    int a = 0;
    do
    {
        printf("hehe\n");
        a++;
    }while(a < 10);
    return 0;
}

do...while中的break,continue:

break:

int main()
{
    int a = 0;
    do
    {
        if( 5 == a )
            break;
        printf("hehe\n");
        a++;
    }while( a < 10 );
    return 0;
}

 和while,for中的break相同,符合条件后终止循环。

continue:

int main()
{
    int a = 0;
    do
    {
        if( 5 == a )
            continue;
        printf("hehe\n");
        a++;
    }while( a < 10 );
    return 0;
}

道理和while中的continue相同,运行出来的结果是四行hehe后面还有一个光标不停地闪烁,这是因为程序仍然在不断执行。没有像while中的那个例子无穷地打印,是因为printf函数放的位置不同,一个在continue上,一个在continue下。这个在continue下,因此前面不满足条件时打印了四行hehe,当满足条件后,不再执行下面的语句,回到while,继续执行do里面的程序。因此程序仍在无休止地运行着只是我们看不到。

关于do...while循环的说明:do..while循环会先执行一次,无论符不符合while中的条件


  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_w_z_j_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值