C博客作业02循环结构

0展示PTA总分

1.本章学习总结

1.1学习内容总结

1.for循环 for(表达式1;表达式2;表达式3;)
表达式1只进行一次,表达式2条件成立时进入循环,循环体执行完再执行表达式3,然后再进行表达式2的判断,直到条件不成立循环结束。
2.while循环 while(表达式)
表达式成立时进入循环。
do{
循环体
}while(表达式);
do while循环至少进入一次循环,并且while后面有分号!
3.循环的结束
continue语句:作用是结束本次循环,可以用于跳过continue后面的语句
break语句:跳出当前循环或跳出switch语句,当两个用在一起,switch里面的break用来跳出当前case而不是整个循环。

1.2本章学习体会

  • 感觉学起来有点慢,老师布置的作业都要拖个好几天才能完成
  • 代码量1600+,达到预想的每天100行

2.PTA实验作业

2.1c-03念数字

2.1.1伪代码

定义x,y
定义m
定义flag=1
定义count
输入x
判断如果x=0,输出0的拼音
判断如果x<0,把x变为x的绝对值,输出负的拼音,把flag的值改为0
令y=x
当y不等于0时
循环,用m储存y,及x的位数的10的几次方的结果(这里因为代码不够好m比预想的多了10,后面解决了)
当x不等于0时
循环,用count记录x从左到右各个位上的数字,并输出对应的拼音
其中flag用于解决第一个拼音开头没有空格的问题
判断如果x,m的值不都为0,利用循环不断输出0的拼音,同时m每次除10,直至m变为0(尾数为0的特殊情况)
结束

2.1.2代码截图

2.1.3造测试数据

输入数据 输出数据 说明
1234 yi er san si 正常数据
1110 yi yi yi ling 尾部带0
1000 yi ling ling ling 尾部多个0
1010 yi ling yi ling 中间带零
0 ling 极端数据
1 yi 极端数据

2.1.4PTA提交列表及说明

1.部分正确:尾部为0的情况没有考虑,如:100输出yi
2.部分正确:尾部为0的情况没有正确认识,如:100输出yi ling,1000输出yi ling,只考虑了尾部为一个零的情况
3.答案正确:利用m/10不断循环以及输出ling解决问题

2.2c-04水仙花数

2.2.1伪代码

定义N(3<=N<=7)
定义各个位上的数的N次方之和sum,赋予初值0
定义三个中间变量temp1,temp2=1,temp3=1
定义i的最大值max
输入N
令max=10的N次方
进入循环,判断所有符合各个位上的数的N次方等于它本身的数,并输出

2.2.2代码截图

2.2.3造测试数据

输入数据 输出数据 说明
3 153 370 371 403 最小数据
4 1634 8208 9474 普通数据
5 54748 92727 93084 普通数据
6 548834 普通数据
7 1741725 4210818 9800817 9926315 最大数据
  • 为了让表格看上去美观,要换行的地方改成了空格

2.2.4PTA提交列表及说明

1.部分正确:运行超时
2.部分正确:引入之前没有的max代替原本i<后面的pow,在进入循环前就计算完毕,减少循环中对库中pow的调用以加快运行速度,但还是超时
3.部分正确:这里的情况与2.类似
4.答案正确:把所以循环里的pow调用全部替换成自己写的代码,加快运行速度,最终,最大数据运行速度946ms<2500

2.3c-04于龙又又遇见日期,叕哭了

2.3.1伪代码

定义年月日year,month,day
定义中间量temp
定义循环变量flag=1
定义计数变量count=0
定义字符型变量ch1,ch2,用于存放分隔符
输入年月日
进入月份判断,对<=12的月份再进入日期的判断,属于正常日期的话,count+1,否则不变
然后通过交换变成年日月再次进入循环判断
随后分别变成日年月,日月年,月日年,月年日
一共循环六次后退出循环,输出count的值,如果count=0,代表没有一个日期成立,输出Invalid Date!

2.3.2代码截图

2.3.3造测试数据

输入数据 输出数据 说明
9102.2.29 Invalid Date! 非闰年数据
2000.2.29 1 闰年数据
1996.2.29 1 闰年数据
2-3*1 6 不同分隔符数据
13.14.15 Invalid Date! 日期错误数据

2.3.4PTA提交列表及说明

1.答案错误:看错题目,以为是要输出正确的日期而不是个数
2.部分正确:flag结束的值错误,原本为6,仅循环5次,应该为7
3.部分正确:交换年月日的时候,忽视了上一次的年月日之间的交换,使得年月日排列出现重复,导致部分测试数据有误,但没有即时发现导致4.的时候错了同一个地方。例:一开始为年月日,交换第一次后为年日月,第二次交换却时以最开始的位置为基础交换而不是第一次交换后为基础交换,导致和预想的位置有偏差而出错
4.部分正确:同3.一样的错误
5.答案正确:通过监视发现了交换出错的问题,修改后正确
6.答案正确:一开始把闰年的判断写在前面,月份判断写在后面,导致代码有两端相似且冗长的地方,该次提交把闰年的判断仅放在2月,使代码更简洁

3.代码互评

3.1c-03二进制转十进制

  1. 我把getchar()放在while循环的判断条件里,他放在外面
  2. 我通过引入flag判断是否是二进制数,它通过switch的default处理不是二进制的数

3.2c-04梅森数

  1. if判断条件的使用不同
  2. 变量定义的方向不同
原文地址:https://www.cnblogs.com/bestACG/p/11706786.html