C语言博客作业02--循环结构
1.本章学习总结
1.1 思维导图
关于循环结构的思维导图如下图所示:
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
说实话,这一周的学习难度和上一次比起来提高了很多,我自己写PTA的时候明显感觉到。比起还有我发现,在对一道题真的没有思路的时候,别人的思路可以参考,但前提应该是在你完全理解和熟悉题目的基础上进行,并且应该以理解思路为主,其他的详细步骤还要靠自己打代码。若是一直想按别人的思路来,一字不变的全部写下来,那可能到头来得不偿失,该没思路还是没思路。
还有要对自己这一周进行反思,太拖沓。遇到难题,想了半个小时想不动就会犯困,PTA都是断断续续的写,并且,是在老师下达最后时限后才疯狂赶上去。就是之前一直给自己找借口说题目太难,所以做不动,但在面临交作业的前几天,什么借口都没了。写完之后才发现,是自己平时太散漫了。真的得改改了,要不然迟早凉凉。
1.2.2 代码累计
2.PTA总分
2.1截图PTA中循环结构2次题目集的排名得分
循环结构(单层)
循环结构(嵌套)
2.2 我的总分:
循环结构(单层):175
循环结构(嵌套):115
总得分:290
3.PTA实验作业
3.1 PTA题目1
乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
3.1.1 算法分析
- 定义变量乌龟走的路程tortoise,兔子的路程rabbit,总时间T;
- 输入总的比赛时间T;
- 计算乌龟跑的路程tortoise=3*T;
- 定义变量t=T%90; //t表示最后一个循环中剩的时间
- 定义变量multiple=T/90; //用multiple表示有多少个完整的循环
- if t<=10 then
- rabbit=multiple270+t9; //10min里兔子跑的路程
- end if
- if 10<t<=40 then
- rabbit=multiple*270+90; //10<t<=40里兔子跑的路程
- end if
- if 40<t<=50 then
- rabbit=multiple270+90+(t-40)9; //40<t<=50里兔子跑的路程
- end if
- if 50<t<=80 then
- rabbit=multiple*270+180; // 50<t<=80里兔子跑的路程
- end if
- if 80<t<=90 then
- rabbit=multiple270+180+(t-80)9; //t<=90里兔子跑的路程
- end if
- if rabbit>tortoise tnen
- 输出"_ 兔子跑的路程";
- end if
- if rabbit<tortoise tnen
- 输出""@_@ 乌龟跑的路程";
- end if
- if rabbit=tortoise tnen
- 输出"-_- ",兔子跑的路程“;
- end if
3.1.2 代码截图
3.1.3 测试数据
输入点 输出点
T
242 @@ 726
20 _ 90
90 -- 270
3.1.4 PTA提交列表及说明
(我又是在Dev C++上得出了答案再复制粘贴的)
- Q1:从提交列表可以看出来,我第一次写的时候完全没思路!不懂要怎么处理兔子跑的路程。然后就就把它晾在一边了。
- A1:其实写的时候隐隐知道这题应该有规律,然后某一天就每十分钟每三十分钟的交换去算,发现每90分钟兔子和乌龟又会在同一个起点,也就是每90分钟一个循环。然后用级联的方法写出正确答案。
- Q2:虽然写出来了,但是我知道用if-else语句写这题肯定不是最好方法(毕竟老师不会在循环专题里放条件结构的题目吧!),想了解用循环的做法。
- A2:上课看了老师的做法,都跟的上。然而,我自己回来写。。。。。绝望!我写不出来!!!所以决定就看同学的博客了。
3.2 PTA题目2
输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!
3.2.1 算法分析
- 定义输入的字符ch,存储转为十进制后的值num;
- 输入字符ch;
- while ch!='\n do
- switch(ch) do //对于输入为1,0,和其他字符这三种情况做判断
- case ‘1’:
- num=num*2+1;
- break;
- case '2':
- num=num*2+0;
- break;
- default:
- 输出“Error Input”;
- 直接结束
- case ‘1’:
- end switch;
- 再输入ch;
- switch(ch) do //对于输入为1,0,和其他字符这三种情况做判断
- end while;
- 输出num.
3.2.2 代码截图
3.2.3 测试数据
3.2.4 PTA提交列表及说明
- Q1:说起来有点尴尬,刚开始的时候我没有意识到每提高一个位次只要*2就可以了,所以不知道该怎么累加计算一个多个数字的值。
- A1:后来上课听到老师讲,就盯着那个*2想了一会,差点没把自己拍死。(丢人)
- Q2:对若输入1123这种相互混合的数该怎么处理,因为它要只输出”error input!“,不能输出前面11算出来的值。
- A2:机智的赖慧颖同学教会了我return的巧用,可以结束全部语句。(return 0真的超级好用!!!)
3.3 PTA题目3
本题目要求读入菱形起始字母和菱形的高度,然后输出空心字符菱形。所谓“空心菱形”是指:每行由两端为字母、中间为空格的字符串构成,每行的字符串中心对齐;上半部分相邻两行字符串长度差2,且字母从给定的起始字母逐一递增;下半部分与上半部分对称。
3.3.1 算法分析
- 定义起始字母ch,菱形的行数n;
- 输入ch,n
- 定义中间一行的行数=n/2-1;
- 定义变量i为行数,第一个字母到最后一个字母里面的所有字符num,i,j为控制循环的循环变量,第一个字母前的全部空格space
- for i=1 to n do:
- fornspace=1 to |middle-i do
- 输出空格。
- end for;
- if i<=middle then //上半部分
- num=i;
- end if;
- if i>middle then //下半部分
- num=n-i+1;
- end if;
- for j=1 to 2*num-1 do:
- if j=1且j=2*num-1 then
- 输出字母ch+num-1
- end if
- else tnen
- 输出空格
- end else
- if j=1且j=2*num-1 then
- end for
换行
- fornspace=1 to |middle-i do
- end for
- 结束
3.3.2 代码截图
3.3.3 测试数据
3.3.4 PTA提交列表及说明
- Q1:没有弄清楚字母前空格数,同一行字母之间的空格与行数之间的关系,不懂得将图形分为两半去计算输出。
- A1:上课听老师的讲评,以B 5为例,算出来字母前的空格=|中间一行的行数-所求行|;同一行从第一个字母到最后一个字母=2*行数-1;
所以可以用for循环来控制同一行从第一个字母到最后一个字母之间的空格。 - Q2:最开始,我把space的初始值定义为0,图形输出来就是不对。
- A2:从B 5的例子可以看出第一行的A前有一个空格,所以space的初始定义值应该为1.
4.代码互评
4.1 代码截图
关于龟兔赛跑一题
下面是范华同学的代码:
下面是我自己的代码:
4.2 二者的不同
- 1.我是用if-else的条件通过不同段时间判断兔子的路程,而范华同学使用for循环记录兔子的路程。
- 2.范华同学的代码巧用sign来缓冲兔子休息的时间。虽然找规律花费了不少时间,但我觉得我的代码比较直观。