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

1.本章学习总结

1.1思维导图

1.2 本章学习体会及代码量学习体会

1.2.1学习体会

本章内容较前一章学习的内容要难,在PTA上花费的时间也更多,尤其是在循环结构(单层)的题集上花费的时间太多了,经常纠结在一个题目,导致自己的进度比其他人落下很多,今后会加快速度,改进学习方法。学习循环结构到现在,我体会到了逻辑思维能力的重要性,尤其是在循环的嵌套这方面要多多做题,锻炼自己的思维灵活度。还有就是再写代码的时候一些细节问题要时时注意,不然等到最后是很难发现这些小错误的!还有,在写代码的时候,变量要尽量设得少一点,不然等后面代码量变长了,会让代码的可读性降低,看的眼花缭乱,并且应该合理运用注释。

1.2.2代码累计


2.PTA总分

2.1截图

2.2我的总分

我的总分:285


3.PTA实验作业

3.1PTA题目一

乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

3.1.1算法分析

定义rabbit为兔子的路程,tort为乌龟的路程,time为累计时间,T为输入的总时间
while (time<=T)
    tort=tort+3;
    rabbit=rabbit+9;
    time++;
    if  tort<rabbit &&  time%10==0 && (T-time)>=30 then
    tort=tort+90;
    time=time+30;
    end if
    if time==T then
   break // 退出循环
    if  tort<rabbit && time%10==0 && (T-time)<30  then
    tort=tort+(T-time)*3;
    break; //退出循环
    
    if tort>rabbit then 输出 @_@ tort;
    else if tort<rabbit then 输出 ^_^ rabbit;
    else 输出 -_- rabbit;
    end if 

3.1.2代码截图

3.1.3测试数据

3.1.4PTA提交列表及说明

  • Q1 第一次打的代码过于复杂,花了很久的时间都没过。

  • A1 后来在课上听老师讲了解法,回去把代码重新编了一遍,将循环条件设成time<=T,然后再一分钟判断一次,改完后代码简洁了。

  • Q2 没把兔子在睡觉时获胜的可能性搞懂。

  • A2 多加了一个if的条件,把乌龟和兔子的距离以及时间的剩余量都考虑进去,最后正确了。

3.2PTA题目二

将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?

3.2.1算法分析

定义wu为五元硬币的个数,er和yi分别是二元和一元硬币数,time为兑换方式的数量,total为输入的总金额
for x=(n-1-2)/5 to x>0 do
    for y=(n-1-5*x)/2 to y>0 do
    z=n-5*x-2*y;
    time=time+1;
    total=x+y+z;
    输出 fen5:wu, fen2:er, fen1:yi, total:total 换行
    if  x==1&&y==1 then 输出 count=time

3.2.2代码截图

3.2.3测试数据

3.2.4PTA提交列表及说明

  • Q1 第一次编写的时候,把二进制数当做一个整数输入,再一个一个得到数字,然后才算十进制。代码过于复杂,虽然答案看上去正确,但和题目要求不符。

  • A1 重新改写代码,使二进制作为字符输入,输出的答案正确。

3.3PTA题目三

输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!

3.3.1算法分析

 定义变量ch,使输入数字为字符,sum为十进制的数,digit为输入的数字(看作余数),flag判断是否输出错误。
while((ch=getchar())!='\n')
    if (ch=='1'||ch=='0') then
    digit= ch - '0';
    sum=sum*2+digit;
    end if
    else if ((ch=getchar())!='\n')
    flag=1;
    end if
if flag==1 then
    输出error input!
else
    输出sum
    

3.3.2代码截图

3.3.3测试数据

3.3.4PTA提交列表及说明

  • Q1 刚开始想这道题目的时候没有头绪,不知道怎么用嵌套。

  • A1 后来经提醒,知道了大致过程。

  • Q2 难以理解怎么至少留有一个二元和一个一元。

  • A2 百度后知道了方法,要在第一个选出五元硬币个数的循环中“留下”一个一和一个二,在第二个选出二元硬币数量的循环中“留下”一个一元。


4.代码互评

4.1代码截图

  • 同学

  • 自己

4.2二者的不同

  • 相同:1.都是每个分钟都进行判断。
    2.最后都是先判断龟兔移动的路程大小再输出。
    3.每每跑十分钟判断一次。

  • 不同: 1.对方设了休息时间和跑步时间,而我只有一个累积的时间。应该学习,那样看起来更清晰。
    2.对方兔子休息的时候,休息时间减一,开始跑的时候,跑步时间减一;而我是在判断时间剩余大于三十后再将累计时间加
    三十,并只让乌龟跑。
    3.对方的判断语句都是围绕时间,而我判断时既考虑兔子乌龟的距离又考虑时间。她的算法更简洁。

posted @ 2018-10-28 22:45  chianun  阅读(236)  评论(0编辑  收藏  举报