你真的懂break和continue吗?这篇文章让你明白
前言:
刚上大一初学C语言的同学们往往对break,continue感到陌生,在做学校实验题以及一些题目遇到循环没有很好的利用或者想到使用这两个语句。其实,如果能用好他们,往往能省很多事。
知识点:
先简单解释一下这两个语句分别的作用
一般来说,进入循环体(分别为for循环,while循环,do..while循环)之后,在下次循环判断之前程序
执行循环体中的所有语句。而continue和break可以根据循环体内部进行的判断结果来忽略部分循环甚至终止它。
Continue:当执行这条语句的时候,continue之后的语句都会被忽略。直接跳到下一次循环,
如果continue是在双重循环的内层循环,那么它只会影响包含它最里层的结构。
第二个用途是continue充当占位符,最过于典型的例子就是这个
while((ch = getchar()) != '\n'){continue;
}
如果整个循环只是用来读取字符而不做其他处理,使用continue来代替原本的空语句';',会使代码更加整洁可读。
注意:continue语句执行后,对于while和do..while下一个要执行的是循环的判断条件。
而对于for循环来说,下一个要执行的是更新部分,然后再求循环判断条件
Break:break是相对与continue而言的,与其的区别是break是跳出循环,而continue是跳到下一次循环。在双重循环的嵌套使用中,常用于跳出内层循环
for(int i = 0 ; i < m ; i++){for(int j = 0 ; j < n ; j++){if(j == m)break;}
}
执行break后,关于j的loop将被跳过,更新一次i的值,判断是否再进入i的loop。
语法错误:break,continue只能在循环或开关中使用
错误原因:循环体加了“;”
下面是道例题去看看continue和break在循环里的运用,你们也可以自己先动手做做看能不能实现。
寻找鞍点
编写一个C程序,实现以下功能:
输入一个二维整数数组(n行, m列),则该二维整型数组中可能存在以下特征的数组元素:它在其所在的行中值是最大的,它在其所在的列中的值是最小的。我们称之为鞍点
如果数组中存在这样的数组元素,请输出该元素的行号和列号;如果数组中不存在这样的数组元素,则输出“不存在该特征的元素”。
这题说难不难,但很多刚刚接触C的同学往往会把打印printf放在循环内部去执行。这样会导致打印多次,但如果把printf放在外面,又不知如何把循环内的值传到外头。
思路就是在一行中寻找最大的值,然后记录该点的纵坐标,执行完之后把flag标记成true。再去寻找该纵里是否这个点为最小。如果存在更小,flag更新成false。
通过一个flag的bool状态量来不断确定是否目前的值属于鞍点。之后用if(flag)判断打印鞍点
但是,怎么让if判断只执行一次呢?之前找我问这道题同学想到了定义一个计数变量来统计if执行的次数,如果if执行0次,就证明了不存在鞍点。这种想法很好,但如果转换思维,想到if(flag)是在循环内部执行的。只要在if(flag)里面写入一个break语句,就能在执行之后跳出循环,达到只打印一次。
答案
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdbool.h>
#define MAX 20
int main()
{int n, m, max,maxj,i,j;int arr[MAX][MAX];bool flag;scanf("%d%d", &n, &m);for (i = 0; i < n; i++) {for (j = 0; j < m; j++) {scanf("%d", &arr[i][j]);}}for (i = 0; i < n; i++) {max = arr[i][0]; maxj = 0;//初始化;for (j = 0; j < m; j++) {if (arr[i][j] > max) {max = arr[i][j];maxj = j;//最大组号和列号保存;}}flag = true;for (int k = 0; k < n; k++) {if (max > arr[k][maxj]) {flag = false;continue;}}if (flag) {printf("%d %d", i, maxj);break;}}if(!flag)printf("不存在该特征的元素");
}
这段代码最为细节的点就是将一个打印函数
if(flag)
{printf("%d %d",i,maxj);break;
}
放在循环内部,如果if条件符合,则执行printf ,之后break跳出i的loop结束循环。
如果我们把这段话的break删去会怎样
if(flag)
{printf("%d %d",i,maxj);
}
执行结果
鞍点打印出来了,但为什么把外层循环的if(!flag)也执行了呢?,此时flag不应该为真吗?
其实此flag非flag,如果没有break来跳出循环,if执行了之后依然在循环里,程序会一直执行到最后结束循环才能执行下面的
if(!flag)printf("不存在该特征的元素\n");
而此时当然flag为假拉,除非鞍点刚好就在最后一行最后一列。
新手常犯的错误有:把判断打印放在循环内部
for (i = 0; i < MAXi; i++) {max = arr[i][0]; maxj = 0; //初始化;for (j = 0; j < MAXj; j++) {if (arr[i][j] > max) {max = arr[i][j];maxj = j;//最大组号和列号保存;}}flag = true;for (int k = 0; k < MAXi; k++) {if (max > arr[k][maxj]) {flag = false;}}if (flag) {printf("%d %d\n",i + 1, maxj + 1);break;}elseprintf("不存在该特征的元素\n");}
结果
所有知识点都不能一下子就掌握,都是需要大量的练习和受挫才能学会的,我也在不断的成长,在这个平台传输一点自己的挫见。如果有错误,希望大佬们在评论区谬误,十分感谢。
你真的懂break和continue吗?这篇文章让你明白相关推荐
- 彻底清楚搞懂toRef和toRefs是什么,也许你知道toRef和toRefs,一直有点蒙蔽,一直没搞懂它,看完这篇文章你彻底清楚
首先我们知道为什么要用toRef和toRefs,这篇文章让你彻底搞懂 比如我们使用 reactive来创建一个对象 <script> import {reactive} from &quo ...
- elasticsearch获取一个字段的值_Elasticsearch,你觉得自己懂了多少,看看这篇文章吧...
Elasticsearch分析与检索功能实操 虽然通过文档_id可以获取到文档,但_id字段一般都是一个无意义的值,在实际应用中更多地是使用文档其它有意义字段做检索.Elasticsearch提供一个 ...
- 搞懂TVS管,有这篇文章就够了
摘要:本文主要介绍TVS的工作原理.关键参数和选型. TVS(Transient Voltage Suppressors,瞬态电压抑制器)又称雪崩击穿二极管,是一种高效电路保护器件,主要是保护电路不受 ...
- 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截...
程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构 .要想在之后的江湖历练中通关,数据结构必不可少.数据 ...
- 2万字,看完这篇才敢说自己真的懂线程池!
前言 线程池可以说是 Java 进阶必备的知识点了,也是面试中必备的考点,可能不少人看了一些文章后能对线程池工作原理说上一二,但这还远远不够,如果碰到比较有经验的面试官再继续追问,很可能会被吊打,考虑 ...
- Python循环语句代码逐行详解:while、for、break和continue
来源:大数据DT 本文约3200字,建议阅读9分钟 循环语句是指重复执行同一段代码块,通常用于遍历集合或者累加计算.Python中的循环语句有while语句.for语句. 01 while循环 循环语 ...
- C语言 —— 关键字(C语言标准定义的32个关键字:auto、register、static、sizeof、signed、unsigned 、break 、 continue 、void)
C语言标准定义的32个关键字:(列出每个关键字的意义) 关键字 意 义 auto 声明自动变量,缺省时编译器一般默认为 auto int 声明整型变量 double 声明双精度变量 long 声明长整 ...
- 你真的懂Redis的5种基本数据结构吗?
摘要: 你真的懂Redis的5种基本数据结构吗?这些知识点或许你还需要看看. 本文分享自华为云社区<你真的懂Redis的5种基本数据结构吗?这些知识点或许你还需要看看>,作者:李子捌. 一 ...
- python开发之四--break和continue用法
break 和continue的用法 一.break和continue用法介绍: 1.Python break语句,就像在C语言中,打破了最小封闭for或while循环. break语句用来终止循环语 ...
最新文章
- linux下使用source /etc/profile保存配置后,新的环境变量只能在一个终端里面有效
- DOM manipulation
- 机器学习这四个东西,你知道吗?
- windows10 环境下的amqp安装步骤(图文)
- zabbix安装与使用
- Webpack 学习记录
- 微电子专业要学c语言吗,微电子技术专业学什么?
- 投资理财书籍推荐 理财书籍排行榜前十
- mysql 统计新增用户_Mysql 查询:统计某月每日新增用户在新增当天的充值笔数、当天新增用户充值的总人数和充值总金额...
- Java设计模式鸭子模式_[JS设计模式]:鸭子类型与多态
- 高危行业?程序员不仅秃得早,还会死的早!
- 三星 OMNIA7/I8700 刷机 ROM集合
- DIV布局末大作业:美食网站设计——餐饮美食-咖啡(5页) HTML5网页设计成品_学生DW静态食品网页设计_web课程设计网页制作
- 《心流》| 精神熵和负熵
- 大数据应用“情感趋同现象”伦理风险问题刍议
- Github优秀Android开源项目,值得引用与学习(注意!里面有巨图! )
- python 爬虫request ssl_Python request SSL证书问题
- 初体验 | 购买激活Typora软件
- python——基础3
- 公羊优链蜘蛛池【高权重】(白狐 公羊seo)