C博客作业02--循环结构
1.展示PTA总分
循环结构
嵌套循环
2.本章学习总结
2.1学习内容总结
本章主要学习了关于循环的一系列问题,由上一章学习的基础语法及for循环过度到本章学习的while循环和do-while循环以及它们之间相互的嵌套,自此循环的种类多样化,更能解决生活中对应的繁杂嵌套的一些问题,这也要求我们掌握循环的本质:解决规律性的,重复的工作.并能够看透各种题目背后的可循环性.当然,我们也不能落入了循环的圈套,有些题目应用暴力破解法更佳.下面我们就来看一下本章我们具体学了哪些内容.
1.适用面更广的while语句
其一般形式为
while(表达式) { 循环体语句; }
具体使用方法和特点:
(1)while语句中的表达式可以是任意合法的表达式,循环体语句只能是一条语句.
(2)构成简单.只有一个表达式和一条循环语句,分别对应循环的两个核心要素:循环条件和循环体,可以直接把循环问题的分析设计转换为语句实现.
(3)while的循环体语句中必须包含能最终改变循环条件真假性的操作.
例如:
2.可灵活应用的do--while语句
其一般形式为:
do { 循环体语句; } while(表达式);
具体使用方法和特点:
(1)其基本用法与while一致.
(2)但其第一次进入循环体语句时是先执行后判断,for语句和while语句都是在循环前先判断条件,只有条件满足才会进入循环,如果一开始条件就不满足,则循环一次都不执行,所以无论循环条件的值如何,do--while至少会执行一次循环体语句.也因此do--while适合于先循环后判断的情况.
应用举例:
3.掌控循环的力量----break,continue,
首先我们知道,循环的结束是由循环条件来确定的,即只有循环全部结束之时才能继续操作,但有时,我们需要在循环满足特定条件时就退出,这时强制结束循环的break语句与跳过后面语句继续循环的continue语句就能满足我们的需求.
具体使用指南:
(1)break:它不仅可以跳出“循环体”,还可以跳出 switch。但事实上,break 也只能用于这两种情况。break 语句不能用于循环语句和 switch 语句之外的任何其他语句中。
(2)不管是 for 循环,还是 while 循环,或者是 do…while 循环,都可以用 break 跳出来,但是 break 只能跳出一层循环。当有多层循环嵌套的时候,break只能跳出“包裹”它的最里面的那一层循环,无法一次跳出所有循环。
同样,在多层 switch 嵌套的程序中,break 也只能跳出其所在的距离它最近的 switch。但多层 switch 嵌套实在是少见。
(3)continue 语句和 break 语句的区别是,continue 语句只结束本次循环,而不是终止整个循环。break 语句则是结束整个循环过程,不再判断执行循环的条件是否成立。而且,continue 只能在循环语句中使用,即只能在 for、while 和 do…while 中使用,除此之外 continue 不能在任何语句中使用。
例如:
输出结果是:
请输入您想去的楼层:4
该层不存在, 请重新输入:3
3层开!
此时在 default 中如果不使用 continue 的话,那么最后的“该层不存在,请重新输入:”仍然不起作用。它虽然能输出,但输出之后直接就执行后面的 break 了,用户仍然没有重新输入的机会。而加 continue 之后就会结束本次 while 循环,即后面的 break 语句本次就不会执行,而是直接进入 while 循环,这样用户就有“重新输入”的机会了。
4,解决复杂嵌套问题----循环嵌套
循环结构跟分支结构一样,都可以实现嵌套。对于嵌套的循环结构,执行顺序是从内到外:先执行内层循环,再执行外层循环。
对于嵌套问题,由于每个循环都相当于一个变量,所以在循环时要注意各个循环之间的数学关系和逻辑关系,最好在面对较为复杂的嵌套关系时先用流程图过一遍,在大脑中形成清新的关系,这样在编写代码时才能做到掌控全局,收放自如.
应用举例:
正三角形 “*”的输出
2.2
本章学习总结
通过这两周的生活与学习,渐渐意识到C语言要学习的地方还有很多,自己还没有适应大学的学习节奏,C语言乍一看是编程语言,但它涵盖的面是非常广的,要想真正学好用好C语言就要在逻辑,数学方面严格要求自己,同时必须保证有效代码量的积累,在做题中不断总结,记忆,积累一些重要的节点,技巧.不然就会越学就越会感到吃力,越学越糊涂,以至于到后来编程时只知其一不知其二.接着在这里我还想反思一下自己:确实从开学以来过多的去关注社团,交际等方面,忽视了作为一个大学生的基本就是要搞好学习,没有学习习惯的积累和养成,不仅到后面学习跟不上,生活肯定也会受到一定的影响,这样雪球越滚越大,恶性循环,于自己于他人都是不好的,所以,在今后的学习生活中我将一点一点转变自己轻浮的学习态度,Never,never,never give up!越变越好.
代码量统计
PTA实验作业
1.求n以内最大的k个素数以及它们的和
- 算法分析
- 代码截图
- 造测试数据
- PTA提交列表及说明
-
部分正确,逻辑运算符&&和||混淆
-
部分正确,循环内部的判断出错,致使循环进入了错误的分支
2.单词长度
- 算法分析
- 代码截图
- 造测试数据
- PTA提交列表及说明
首先这道题老师是有讲过的,但这道题还是错了很多次,其一上课不认真,其二这道题确实需要注意细节,具体每次错的原因我并不记得很清晰 -
部分正确,开始使用的是scanf()语句循环条件不能很清楚的表达
-
部分正确,后来室友告诉我说getchar()语句更加简洁适用,就改为getchar()语句,但具体各个循环之间的关系依旧不是很清楚
-
部分正确,最后一个字符后不能有空格
-
部分正确,语句之间的顺序,逻辑关系错误
3.水仙花数
- 算法分析
- 代码截图
- 造测试数据
- PTA提交列表及说明
虽然没写出来,我也知道是pow函数的问题,但我还是想把这一题贴过来,暂时没想到其他做法. -
部分正确,第一次单用循环结构运行超时
-
部分正确,第二次使用函数依旧运行超时但比单用循环划算
4.1代码互评
1
- 同学代码
- 我的代码
代码异同 - 思路大不相同,同学步步分析,循序渐进,水到渠成.而我的这个较为简洁,利用数学函数.
- 虽然都能完成,但二者的思考切入点不同,同学使用分析法步步紧逼,环环相扣,得出答案,这边使用综合法一气呵成.
- 同学代码清晰易懂,注释全面,而这边没有注释,不太好懂,可读性较差
2
- 同学代码
- 我的代码
代码异同 - 同学使用while语句中嵌套switch语句来实现选择和控制,十分精巧
- 而我的单一使用while语句并内嵌多个控制语句,也有一战之力
- 运用switch语句更加清晰明了,我的同上可读性较差
总结:发现每个同学的代码都各有各的风格,有的差别很大,而有的虽然看上去相似,但具体细节又是用不同的方法处理的.所以说每个同学的代码都是值得学习的.自己今后要多多虚心向同学们学习.