C语言学习之旅————分支与循环

1.if语句与else语句

 1.1 if

if意为”如果、当“,如果表达式为,则执行if里的语句;如果表达式为,则if里的语句不执行

if(表达式){//if语句格式
    语句;
}

下面来看一个例子:输入两个数求其中最大值 

#include<stdio.h>​

int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    if (a > b)  printf("%d", a);//当语句只有一条时,可以省略{},按左边格式书写
    if (a < b) {
        printf("%d", b);//当语句有多条时,要按此格式书写
    }
    return 0;
}

 1.2 else

else语句一般跟在if语句的后方,与if语句配对,代表”否则“的意思

else { //else语句格式,当语句只有一条时,也可省略{}
    语句;
}

下面来看一个例子:输入两个数求其中最大值  

#include<stdio.h>

int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
        if (a > b)  printf("%d", a);//当语句只有一条时,可以省略{},按左边格式书写
        else  printf("%d", b);//当语句有多条时,要按此格式书写
    return 0;
}

注意!当没有{}时,else 永远与离它最近的if语句配对!!所以在多层if嵌套语句里最好把“{}”带上。

不然就会出现下面这种情况,乍一看else语句是跟语句一配对的,实际上else语句是跟语句二进行配对的,则当a不等于0的时候,任何文字都打印不出来。

int a = 0, b = 1;
if(a == 0)//语句一
    if(b == 1)//语句二
        printf("好好学习,天天向上");
else printf("努力学习,天天向上");

2.switch语句与case语句

2.1 switch

switch可以理解为开关,switch()中的表达式为一把钥匙,case后面的值为一把锁,当钥匙与锁匹配上时,就打开锁执行里面的语句。

switch语句是⼀种特殊形式的 if...else 结构,用于判断条件有多个结果的情况。

case后面必须跟常量表达式!!!且必须与之隔一个空格!!

switch (b表达式) {//switch语句基本格式
case 值1: 语句;
case 值2: 语句;
default: 语句;

下面来看一个例子输入数字1-7,打印出对应的星期几

#include<stdio.h>

int main()
{
    int n = 0;
    scanf("%d", &n);
    switch (n) {
    case 1://当n=1时,就会打印星期一,然后跳出switch
        printf("星期一\n");
        break;
    case 2:
        printf("星期二\n");
        break;
    case 3:
        printf("星期三\n");
        break;
    case 4:
        printf("星期四\n");
        break;
    case 5:
        printf("星期五\n");
        break;
    case 6:
        printf("星期六\n");
        break;
    case 7:
        printf("星期日\n");
        break;
    default://当n匹配不上任何一个case表达式时,就执行default语句
        printf("输入错误\n");
        break;
    }
    return 0;
}

2.2 switch语句中的break

可以发现,上面代码每一个case语句里面都配了一个break,在此代码中break的作用是跳出switch语句,没有break,上面代码就无法实现其功能!无break执行结果如下图

可见,执行结果就变成了:与哪个case匹配成功后,后方的语句也都会执行

2.3 default

switch()中表达式无法匹配到case后的表达式时,要么不做处理,要么就在switch语句中加入一个default语句,所以default语句就是当所有case无法匹配上时才执行的!

default语句并不是一定要放在所有case语句的最后,只是放在最后更美观易读,而且可以选择不带break;也可以放在开头中间,但放在开头中间default语句中一定要带一个break!!某则就会多执行后面一个case的语句!!

当我把default语句放case 4前,且有break,也可实现之前的功能

#include<stdio.h>

int main()
{
    int n = 0;
    scanf("%d", &n);
    switch (n) {
    case 1://当n=1时,就会打印星期一,然后跳出switch
        printf("星期一\n");
        break;
    case 2:
        printf("星期二\n");
        break;
    case 3:
        printf("星期三\n");
        break;
    default://当n匹配不上任何一个case表达式时,就执行default语句
        printf("输入错误\n");
        break;
    case 4:
        printf("星期四\n");
        break;
    case 5:
        printf("星期五\n");
        break;
    case 6:
        printf("星期六\n");
        break;
    case 7:
        printf("星期日\n");
        break;
    }
    return 0;
}

 但当我把default语句放case 4前,且无break时,执行结果如下

3.while循环语句

while语句执行流程(先判断再执行:先判断表达式,若为假,结束循环。若为则执行语句,然后进入下一轮的判断,若又为则再次执行语句,然后一直循环直至判断表达式为

while(表达式){ //while语句的基本格式
    语句;
}

下面来看一个例子: 输入1-10之间的数字

#include<stdio.h>

int main()
{
    int i = 1;
    while( i <= 10 ){ //判断i是否小于等于10,真则执行{}内语句
        printf("%d ",i); 
        i++;//用来调整i的值,如果没有此语句,此代码将会陷入死循环
    }
    return 0;
}

4.for循环语句

for语句执行流程(先判断再执行:先执行表达式1,然后判断表达式2,若为,则结束循环;若为,则执行语句,然后执行表达式3,再判断表达式2,若又为,则再次执行语句,然后一直循环直至判断表达式2为。由此可得出,表达式1只执行一次

for(表达式1;表达式2;表达式3)//for语句基本格式
{
    语句;
}

 下面来看一个例子: 输入1-10之间的数字

#include<stdio.h>

int main()
{
    int i = 1;
    for( i = 1; i <= 10; i++ )//表达式中的i也可以在for语句中表达式1进行创建
    {
        printf("%d ",i);
    }
    return 0;
}

表达式1表达式3一般情况下也可以空着(其实可以看作是移到其他地方去了),但表达式2必须在!!!如下面的代码:

//虽然表达式1与表达式3位置空着,但打印在屏幕的结果跟上面代码是一样的
#include<stdio.h>

int main()
{
    int i = 1;//表达式1
    for( ; i <= 10; )
    { 
        printf("%d ",i);
        i++;//表达式3
    }
    return 0;
}

5.do...while循环语句

do..while语句执行流程(先执行再判断):先执行一次语句,再判断表达式,若为,则结束循环;若为,则继续执行语句,再判断,若又为,则再执行语句,然后一直循环直至判断表达式为。由于do...while语句是先执行再判断,所以语句至少会执行一次

do{ //do...while语句基本格式
    语句;
}while(表达式);

 下面来看一个例子: 输入1-10之间的数字

#include<stdio.h>

int main()
{
    int i = 1;
    do {
        printf("%d ", i);
        i++;//用来调整i的值,防止陷入死循环
    } while (i <= 10);
    return 0;
}

6.break与continue

 6.1 break

break语句的作用就有跳出switch结束循环这两个,跳出switch在上面讲switch语句时已经讲了,现在讲break结束循环

下面来看一个代码

#include<stdio.h>

int main()
{
    for( int i = 1; i <= 10; i++)
    {
        if(i == 6){
            break;//当i的值为6时跳出循环
        }
        printf("%d ",i);
    }
    return 0;
}

执行结果如下 ,可以发数字5以后的数字都没有被打印出来,在此语句中break的作用为当i的值为6时跳出这个循环

6.2 continue

continue语句的作用是跳过本次循环

还是来看一个代码

#include<stdio.h>

int main()
{
    for (int i = 1; i <= 10; i++)
    {
        if (i == 6) {
            continue;//当i的值为6时跳过本次循环
        }
        printf("%d ", i);
    }
    return 0;
}

执行结果如下,可以发现数字6并没有被打印出来 ,在此语句continue作用为当i的值为6时跳过本次循环,直接进入下次循环

 6.3 break与continue的区别

根据上面两个代码,我们可以清楚地知道break直接跳出这个循环,而continue跳过本次循环,直接进入下次循环。 

7.goto

goto语句可以实现在同一个函数中跳转到设置好的标号处

    goto 名字;//这个是goto语句的基本格式,名字随我们取,但必须是英文的
    ...
名字:
    ...

下面来看一个代码

#include<stdio.h>​

int main()
{
    printf("Love ");
    goto next;//跳过了You的打印
    printf("You ");
next:
    printf("Me ");
    return 0;
}

代码执行结果如下,将打印“You”的代码跳过了

一般情况下较少使用goto语句,但在跳出多层循环嵌套时使用goto语句就非常方便

    for(){
        for(){
            for(){
                if(){
                    goto next;
                }
            }
        }
    }
next:
    ...

以上内容若有错误请指出,谢谢

  • 28
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值