一位高中竞赛蒟蒻的大学学习日记第二篇程序三大基本结构olo

这就是一个典型的顺序结构 程序在主函数中,先打印了 变量a 的数值,然后以十进制打印了 变量a 的内存地址,最后以十六进制打印了 变量a 的内存地址 不难看出,代码是以至上而下,逐个语句在运行

顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构

分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序

如同你玩游戏,不同的条件就可以解锁不同剧情,使得游戏体验增加,在代码中也是这样,合理的使用分支语句,同样可以使我们代码功能更加丰富,以便适应不同需求(适应不同数据来骗分[狗头])

在分支结构中,if…else…是最基础的实现方式,其基本语法如下:

不难看出,在 if 后面我们需要加入一个判定的条件,当这个条件满足时,程序便会执行紧跟 if 的 代码块1 中的内容,如果不满足条件,便会执行紧跟 else 的 代码块2 中的内容

细心的同学肯定会发现,我们的条件是 如果a等于300 ,但是在代码中,我们写入的却是 if ( a == 300 ) 而不是 if ( a = 300 ) ,这是为什么呢?

究其原因就是 a == 300 是判定语句,而 a = 300 叫做赋值语句。前面一句表示判断a的值是否等于300,如果等于,返回1(true),如果不等于则返回0(false)。后面一句表示将300这个赋值给a这个变量,使a的值等于300,然后对a判定,如果a不等于0,着执行 代码块1 ,如果等于0则执行 代码块2

这里,我列出以下常用的判定符

我上面这份代码,看似精妙,但其中却有着一个重要的漏洞,一个很简单的例子就是,当你输入一个大于300的数据时(明显在IOI比赛中不可能实现),但程序依然输出 “还有提升空间” ,这显然是不合理的,虽然你可以在else中再次套入一个 if…else… 语句,但是这样却会显得你的代码十分不简洁

于是乎,else if()语句应运而生,帮助我们解决了这个问题(本质和直接套一模一样) 标准代码样式和图解如下:

除了if引导的分支与判断,C++还提供了switch条件语句

语法规则如下:

但是在使用switch时需要十分注意,必须满足以下规则

只能针对基本数据类型中的整型类型使用switch,这些类型包括int、char、bool等。对于其他类型,则必须使用if语句 switch()的参数类型不能为实型 case标签必须是常量表达式(constantExpression),如42或者 ‘4’、'A’等 case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值 当case中没有满足条件的,则执行default语句 除去特殊情况,结尾的break语句时十分必要的

break语句必要的原因 switch就如同它的名字一样,是一个相当于开关的语句,且只可以打开,不可以关闭 而每一个case都是一个独立的开关 当任意一个case开启(即符合条件),那么从当前行开始,代码将严格按照顺序结构来运行,因为其不可关闭的特性,无论后面的case是否满足,switch都将保持开启特性,逐行运行代码,所以,我们在多数情况下,在执行完一个case的内容后,需要及时使用break语句来跳出swtch,以免后续不必要的语句被运行

在上面这个代码中,当我们输入300 可以看到程序输出为

显然,第二句是不被我们需要的 那么我们加上break后,再次运行

当我们再次输入300,可以看到,程序输出了

而这才是我们需要的答案

试想一下,我们需要对成千上万,乃至上亿组的数据进行分析,或者对某些数据以同样的规则进行多次变换,我们现有的顺序和分支结构就显得苍白无力了 于是,我们万能的C++为开发者们提供了强大的循环结构,使得我们的一些运算可以被多次反复的执行

在此,我们以一个数学问题引入:求1+2+3+4+…+100的和,由于你不够聪明,所以不知道简便的公式,只能一个一个累加

在上述代码中,核心部分是

在这里,我们的循环条件为变量i的值小于等于100时,则执行循环内部的语句 当i的值不再满足条件时,跳出循环,执行后续的语句

特别注意 对于循环的判定条件,一定要再能够满足可以在经过运算后能够跳出循环体或者在循环体内能结束程序 否者会出现所谓的死循环,这样的死循环是十分危险的,它会持续的、高强度的占用系统性能 其不但又时会被系统检测到并强制结束,甚至能够导致电脑的崩溃 不怕死的同学可以试试下列代码,并打开任务管理器查看cpu占用

在这个代码中,我创建了4个线程,每个线程包含一个死循环 理论上可以使你CPU的4个逻辑处理器达到几乎100%的占用 代码的写法大家可以不用了解,现在我们还没有学习的这么深入

还是先来一份代码

do…while() 与 while() 十分相似

但是需要注意的是, while() 是当型循环,而 do…while() 是直到型循环

相信for循环一定是我们以后的代码中用到的最多的了,从最简单的数据读入到图论前向星建图,for都拥有其与生俱来的简洁优势 一个标准的for循环如下列代码所展示

相似的,我们上面的代码也可以以for的方式来实现,代码如下

相比while,使用for循环,我们的代码变得更加美观简洁了

为了方便大家理解,我们还是一句一句来分析for的构造和其运行情况

在一个for中,语句1仅会在最开始被执行一次,在这里,你可以对需要的变量定义、赋值乃至其他骚操作 然后,for循环会执行语句2并对其进行判定,如果为真,继续执行,如果为假,跳出循环 接下来,for循环会执行我们在循环内部写入的语句,完成一次循环 当该次循环结束,程序执行语句3,完成后再次执行语句2、循环内部代码。。。如此往复直到再语句2中的条件不再满足或人为跳出循环

运用goto语句,也可以实现循环的操作,这里就简单的放上代码就好,不另外做详细解析

这里的实现方式其实和do…while是极其相近的 注意,在编写程序过程中,极其不建议大家使用goto语句,因为其违反了代码的逻辑性,但是有时合理的使用,可以大大提高我们代码的编写难度

THE END
0.我院赵鑫教授共同带队参加国际信息学奥林匹克竞赛(IOI2021)斩获4全国青少年信息学奥林匹克竞赛(NOI)科学委员会委员、中国人民大学高瓴人工智能学院赵鑫教授担任IOI2021中国队副领队,领队由NOI科学委员会委员、清华大学韩文弢博士担任。 受新冠疫情的持续影响,由新加坡主办的第三十三届国际信息学奥林匹克竞赛(IOI 2021)于6月19日-28日在世界各地以线上比赛形式同步举行,共有来自88个jvzq<84ck0xve7jfw0io1wjyunotv8sgyujfvjnn146329<242620qyon
1.清华大学计算机系与国际信息学奥林匹克大赛IOI竞赛属于智力与应用计算机解题能力的比赛。题目有相当的难度,而且有趋势越来越难。解好这类题目,需要有相当强的数理化文史地的基础,具备很强的全面素质与综合能力。更具体地说,包括如下六条: · 读题能力,英语和语文好的当然占先; · 观察和分析问题的能力,一下就能切入主题抓住本质者占先; jvzquC41yy}/e|3vukthj~f0gf{/ew4kphu03:;;1666:7mvo
2.全国青少年信息学奥林匹克竞赛(NOI)介绍NOI是全国青少年信息学奥林匹克竞赛,是面向全国中学生的全国性质的编程最高级比赛,每年经各省省选产生5名选手,由中国计算机学会在计算机普及较好的城市进行比赛。 国际中学生比赛:IOI IOI是国际信息学奥林匹克竞赛,是面向全世界中学生的的信息学竞赛,每个国家可选派四名选手参加。 jvzq<84o0kz737hp1g|fp}x15:;10qyon
3.美高中国学生不再有资格入选美国奥数国家队?细数要求特殊身份的美国信息学奥林匹克竞赛(USA Computing Olympiad,简称USACO)目的是为 IOI (国际信息学奥林匹克竞赛)和 ICPC (国际大学生程序设计竞赛)美国队输送人才。中国学生(无论是否在美高)可以参加四次线上的月赛,最高可以打到铂金组别。但是想要成为USACO finalist进入集训营,最后代表美国参加IOI比赛,必须为美国公民或永久居民jvzquC41yy}/wyrkpi~jcx3eqo5xgwic16;37?3jvor
4.ACM排行榜说明ACM赛制OI赛制IOI赛制介绍acm罚时规则编程比赛三大赛制介绍(ACM赛制、OI赛制、IOI赛制) 参考:编程比赛三大赛制介绍(ACM赛制、OI赛制、IOI赛制)—— 知乎 ACM 排名 1.先看通过的题目数量 单独绿色+表示通过 2.然后看罚时,罚时短的靠前 罚时规则 罚时=黑色数字累加+绿色数字和*20 绿色+后面的数字表示错误提交次数 jvzquC41dnuh0lxfp0tfv8vsa6994@:;71gsvrhng1jfvjnnu1715A>784?
5.IOI2015中国队再创佳绩CCF老网站两届IOI金牌选手、北京师范大学附属实验中学的胡伟栋博士参与了IOI2015的命题,并受邀参加本次活动。 国际信息学奥林匹克竞赛(IOI)由联合国教科文组织发起,旨在向中学生普及计算机科学知识。1989年,第一届IOI在保加利亚成功举办。中国队参加了迄今为止举办的全部27届比赛,总共获得金牌72枚、银牌23枚、铜牌12枚,金牌数和jvzq<84{qeyfh7heh0usi7hp1e532::/2:3158;694:40|mvon
6.周雨扬IOI2020参赛总结首先,我非常荣幸能够成为中国国家队的一员,并且参加在线上举行的第32届IOI。在这里我想要特别感谢王宏老师,赵启阳老师,蒋婷婷老师以及其他所有为我们参加IOI作除努力和贡献的老师。他们为我们准备了舒适整洁的比赛环境,为我们辛苦的翻译题目,与新加坡的技术人员进行充分的交流,让我们在赛场上能心无旁骛地做题。我们取得jvzquC41pqo/elk0qtm/ew4lnh~04973/2:.2A49478277xjvor
7.姚班学霸陈立杰:16岁保送清华,18岁拿下IOI世界冠军,现摘得FOCS2019最但初三那次比赛,陈立杰还是名落孙山。因为耽误了大量其他科目的学习时间,连父母都曾劝他放弃。 在之后回顾这场一个人的战斗时,陈立杰却淡定许多,坦言自己也曾想过放弃,失败了后悔,总比啥都不做光后悔好得多。 于是,陈立杰不上课了,把时间都花费在了计算机房,每天7点到晚自修结束,都在自学信息学有关的知识。 jvzquC41vgii0|npc0ipo7hp1eyk1;53;/71/:>1fqi.krhg||xs5<66529/uqyon
8.区别大盘点:信息学竞赛、信息学奥赛、NOIP、NOI和IOI傻傻分不清楚在这些竞赛中,我们很多学生和家长经常被一些看起来差不多的词汇所疑惑。信息学竞赛、信息学奥赛、NOIP、NOI和IOI,傻傻分不清楚。没关系,下面我们就来区分一下吧! 1、信息学竞赛 信息学竞赛就像是一个总称。它包含了信息学所有名目的比赛,比如信息学奥赛、蓝桥杯、各省市的信息学竞赛等。jvzquC41dnuh0lxfp0tfv8vsa6657<>691gsvrhng1jfvjnnu1719A>5;4=
9.王展鹏IOI2020参赛总结不过里面有华为的广告,做的挺好的,不想有的广告一直就是一个人在那管自己说话。不过话说回来,不得不说CCF对IOI还是非常上心的,不管是技术方面还是生活方面都做了全面的准备,让我们没有什么后顾之忧。 我们的比赛场地在中科院计算所的一个小房间里,环境布置得舒服整洁。但不知道主办方新加坡怎么想的,明明跟我们一jvzquC41yy}/pxn0ep5kno}14282/99/2:584>7380yivvq
10.ACM算法竞赛入门——算法竞赛赛制题目形式常见评测状态本文详细介绍了算法竞赛的赛制(ACM、OI和IOI),包括计分规则、罚时机制和常见比赛。还剖析了题目形式,包括描述、输入输出要求以及评测状态。提醒参赛者注意策略选择和个人学习方法。 xcx:学完C++基础语法之后,已经迫不及待的打比赛了,算法竞赛到底是什么? jvzquC41dnuh0lxfp0tfv8|gkzooa>79:6:628ftvkimg8igvcomu86587?93:5
11.罗煜翔IOI2020参赛总结非常荣幸能够代表中国参加2020年第32届国际信息学奥林匹克竞赛(IOI2020)。受新冠疫情影响,IOI2020首次采用了全部线上比赛的形式,赛制仍为两试6道题目(满分为600),于9月13日至9月23日在主办国新加坡以及世界各国同步举行,共有来自87个国家(地区)的343名选手参赛。 jvzquC41yy}/pxn0ep5kno}14282/99/2:584>73:0yivvq
12.C++竞赛简述从校内赛到 IOI/ICPC,C++ 比赛的含金量逐级提升,对应不同的备赛策略。初学者可从在线周赛起步,而顶尖选手需长期投入高强度训练。选择合适的比赛,持续精进技术,是脱颖而出的关键。 校级或区域性编程竞赛 许多学校或地区会举办编程比赛,通常面向初学者或中级水平的学生。这类比赛可能使用C++作为主要语言,题目难度较低jvzquC41dnuh0lxfp0tfv8REV\Y0c{ykenk0fnyckny03>7788878