C++零基础入门教程 #6 循环内语句和判断分支的进阶运用

前言

上一篇文章中,我们运用之前学到的知识解决了一些实际问题。但是,条件判断和循环语句只有这点用处吗?那可未必。

今天,我们就来了解一下这些语句的进阶运用。

循环内语句

break

写for或while循环时,经常碰到需要跳出的情况,例如找一个数找到了,怎么办呢?

int a[10086], n, x;
//在a数组中找x这个数的位置
cin >> n >> x;
for(int i = 1; i <= n; i++) cin >> a[i];
int ans = -1;
for(int i = 1; i <= n; i++){
    if(a[i] == x){
        ans = i;    //找到了,就不需要再继续,直接跳出
        break;
    }
}
cout << ans;

上面的代码里,我们读入n, x和数组a,在a中找x最开始出现的位置。

如果找到一次后不退出,那么之后可能还会再找到,更新位置,但我们要找的是最开始的位置。

于是,我们在第9行使用了break语句。

break语句只能用于for或while循环中,用于跳出当前一层循环。例如:

while(1){
    for(int i = 0; i <= 10086; i++){
        if(i == 10085) break;
    } 
} 

这里,我们用while循环套了一个for循环,其中while循环始终运行(非0数表示真)。

但第3行的break语句只能跳出for循环,while循环依然会正常运行。

continue

同样,有了break,自然要有continue(什么鬼逻辑)好吧就是我不想说了

continue也只能在for循环或while循环内使用,表示跳过这次循环,但仍然继续:

for(int i = 1; i <= 100; i++){
    if(i == 50) continue;
    cout << i << ' ';
}

 上面的代码会输出1-100内除了50以外的整数(因为i=50时跳过了下面的语句)

多重判断分支

以往,我们如果要写一个多重判断,通常要写一大串if-else:

int a;
cin >> a;
if(a == 1){
    ...
} else if(a == 2){
    ...
} else if(a == 3){
    ...
}
...
else if(a == 10086){
    ...
}else {
    ...
}
//我绝对不是在水字数

实际上,用这样的代码就可以解决:

int a;
cin >> a;
switch(a){
    case 1:
        ...
        break;    
    case 2:
        ...
        break;
    .......
    case 10086:
        ...
        break;
    default:
        break;
}

我们使用了switch关键字,将a传进去,表示我们要判断a的值(这里只能传入int或char类型)

在下面的大括号里,有若干个case语句,可以理解为判断的值(仅仅是可以理解为)

最后的default可加可不加,可以理解为else语句,当a不等于上面所有case后面的值时执行语句。

每个case后边一般都要加break跳出,不然的话...就像这样:

int a;
cin >> a;
switch(a){
    case 1:
        cout << 1;
    case 2:
        cout << 2;
    case 3:
        cout << 3;
}

当输入为1时,输出123;输入2,输出23;输入3,输出3。

怎么样,是不是很奇怪?实际上,case语句只是代表了“入口”。

即,当a为1时,程序会从case 1后面的语句进入,一直执行:管你有没有case,我全都要!直到遇见break才“认怂”退出。

因此,不加break的风险是很大的。当然,你也可以这样:

int a;
cin >> a;
switch(a){
    case 1: case 2:
        cout << 1;
        break;
}

上面的代码表示如果a为1或2输出1,自然是很方便的写法,但不推荐大量使用。

好了,以上就是这节课的全部内容了。最后,如果你觉得这篇文章还不错或者对你有帮助,麻烦点个收藏点个赞,这是免费的,你随时可以取消。你的支持是作者最大的动力,谢谢!

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

起床气233

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

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

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

打赏作者

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

抵扣说明:

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

余额充值