C语言博客作业02--循环结构
0.展示PTA总分
1.本章学习总结
1.1 学习内容总结
1.1.1.while语句以及do-while语句的用法:
- while(这里放循环的判断条件)
{
这里面放循环体。如果有另外的判断条件可在这里面另加一条break语句,使循环提前结束。
} - do
{
这里面跟while语句一样,放循环体。用法基本和while语句一致。
}while(这里面放循环的判断条件);
+ 二者的区别:
1.while语句是先判断条件再执行循环体,如果条件不满足的话就不会进入循环体。
2.do-while语句是先执行一次循环体后再进行循环条件的判断。
3.也就是说,不管条件如何,do-while语句中的循环体至少要执行一次,而while语句如果条件不满足的话则循环体一次都不执行。
1.1.2.嵌套语句的用法:
- 嵌套语句:
就如字面意思一样,一层 套一层。例如while语句或者if语句、if-else语句中再加一个while语句或者if语句,if-else语句之类的。
举例:if()
{
if()
{
while()
{
中间还可以嵌套好多语句,但需要注意各语句之间的对应。例如if和else的匹配情况。
}
}
}
1.1.3.break语句和continue语句的区别: - break:
break语句是放在循环体里面用来结束本次循环的语句,当遇到break语句时,直接结束循环。如果没有break语句的话则会继续执行下面的全部语句。
continue语句也是放在循环体里面用来结束本次循环的语句,但是不同于break语句,当遇到continue语句时,直接跳过下面循环体内的所有语句,重新开始循环,不会再去执行continue后面的语句。
从某种程度上来讲,break语句和continue语句在某些情况下是一样的,例如当恰好在最后一次循环时break语句和continue的语句的作用是一样的。
1.2 本章学习体会
- 感觉上课所教授的知识量越来越大了,上课必须得认真听,否则一
走神的话就会漏掉很多知识点。 - 明显感觉作业量变大了,有点力不从心,可能是因为我的代码量还是不够大。
- 提一点教学建议:建议老师在每次课堂派测试后的课上专门留一点时间来讲解一下最后一题我们所提的不懂不理解的地方或问题,这样更能加深我们对该问题的印象。
- 这两周我的代码量大概在1000行左右,有点少,今后会加大代码量的。
2.PTA实验作业
2.1 7-2 梅森数
2.1.1 伪代码
Begin
函数声明
输入正整数n
初始化count=0
for(i=1;i<=n&&n>=2&&n<20;i++)
item=pow(2,i)-1;
if item是梅森数,输出item并且count++;
else 用continue重新开始循环
循环结束后
if count=0的话,输出“None”
函数定义
if n小于等于0的话,return -1
else if n小于2的话,return 1
else 开始判断是不是素数,如果是素数的话就return 0
,否则return 1
End
2.1.2 代码截图
2.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
6 | 3\n7\n31 | 正常数据 |
1 | None | 正常数据 |
21 | 无输出数据 | 范围之外的数据 |
2.1.4 PTA提交列表及说明
- 提交列表说明:
1.部分正确:一开始没看清楚题目,没考虑梅森数的前提是素数。后面自定义了一个判断素数函数解决这个问题。
2.部分正确:没有考虑1和2这两个特殊情况。后面加了一条if语句来针对两个特殊值,解决了这个问题。
3.全部正确:解决了上面两个问题之后就完事了。
2.2 7-7 换硬币
2.2.1 数据处理
- 定义x,count1,count2,count5,total,count均为整型。x为待换零钱数;count1,2,5分别为一分硬币,二分硬币和五分硬币的数量;total为总硬币数;count为换法种类数。
- 先用if语句判断输入x的值是否符合题目所给范围;然后运用三个for语句分别对一分,二分,五分硬币的数量进行循环,每循环一次判断一次三种硬币数额加起来是否等于待换零钱数,如果是的话就输出此时三种硬币各自的数量和总数量然后换行,然后换法种类数count加一。
- 待循环结束后输出总换法种类数。
2.2.2 代码截图
2.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
13 | 正常数据 | |
7 | 无输出数据 | 范围之外的数据 |
200 | 无输出数据 | 范围之外的数据 |
2.2.4 PTA提交列表及说明
- 提交列表说明:
1.这题其实提交列表不只三个,因为我是在VS上做的并且测试也是在VS上测的,我是等做到用题目所给数据输入后输出正确才拿来pta提交的,结果还是过不了。
2.在部分正确之前其实有过多次编译错误,均是因为我打代码的时候太粗心,忘记在语句后加分号。
3.后来部分正确的原因是因为我没有考虑输出要求按5分、2分和1分硬币的数量依次从大到小的顺序。然后我调换了三个for语句的顺序之后就答案正确了。
2.3 7-8 查询水果价格
2.2.1 数据处理
- 定义choice和count为整型,定义price为双精度。
- 自定义一个菜单函数
Manu()
,用以输出菜单。 - 初始化count的值为0,用来计算用户查询的次数。
- 用一个
while(1)
的恒真语句来反复输入用户的选择,再运用一个if语句来判断用户输入的数是不是0,如果是的话就结束循环,否则进入switch语句来判断用户输入的选择,并输出价格。 - 在每一次循环结束前,都将count的值加一,当count的值大于5时,结束循环。
2.2.2 代码截图
2.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
3 | price = 4.10 | 正常数据 |
-1 | price = 0.00 | 错误数据 |
0 | 无输出数据 | 结束数据 |
2.2.4 PTA提交列表及说明
- 提交列表说明:
1.部分正确:一开始没有考虑到用户输入菜单之外的数,比如-1,导致部分正确。后稍作修改。
2.部分正确:做完上述修改后还是部分错误,经检查发现我没有考虑到用户查询的次数大于五次,导致程序过不了。后稍作修改。
3.答案正确:做完上述修改后,答案就正确了。
3.代码互评
- 同学代码截图:
- 我的代码截图:
- 不同点:
1.第一个同学的代码比较简洁,虽然定义的变量数量跟我的一样,但是他只运用了两个for语句就完成了题目要求,简单粗暴。
2.第二个同学的代码相比第一个同学多一点点,定义的变量的数量也多了一个,同样也是只运用了两个for语句就完成了题目要求。但是第一个同学将结果运算并入到printf语句中,使程序更为简洁。
3.我的代码相较与两个同学的代码,我的代码考虑了用户输入范围之外的数时的错误提示,而且比两位同学的代码多了一条if语句,用于判断将要输出结果是否符合大小顺序。
4.总而言之,我认为我的代码还不够好,可以做得再简洁一点,像两位同学一样。今后我会再接再厉,争取把代码写好。