C语言博客作业02--循环结构

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”;
        • 直接结束
    • end switch
    • 再输入ch;
  • 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
    • end for
      换行
  • 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来缓冲兔子休息的时间。虽然找规律花费了不少时间,但我觉得我的代码比较直观。
posted on 2018-10-28 22:42  杨鸿漾  阅读(1089)  评论(1编辑  收藏  举报

levels of contents