前言
上一篇文章中,我们运用之前学到的知识解决了一些实际问题。但是,条件判断和循环语句只有这点用处吗?那可未必。
今天,我们就来了解一下这些语句的进阶运用。
循环内语句
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,自然是很方便的写法,但不推荐大量使用。
好了,以上就是这节课的全部内容了。最后,如果你觉得这篇文章还不错或者对你有帮助,麻烦点个收藏点个赞,这是免费的,你随时可以取消。你的支持是作者最大的动力,谢谢!