1.本章学习总结


1.1 思维导图

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

1.2.1 学习体会

 这两周主要学习了循环结构。包括三种比较基本的循环,while、do-while、for,再通过一些嵌套,解决一些更为复杂的数学问题,需要对于循环条件有更清晰的认识与把控;同时学习通过引入一些中间变量,如flag来控制输出;再者还学习了break&continue两种特殊的语句,便于控制循环。总的来讲学习的内容需要更灵活地运用到题目的计算当中。但是也出现了不少的问题,如对于变量的初始化的不注意,可能会导致错误答案的输出或者死循环。因此在进入循环结构之后,更需要养成手动调试程序判断程序错误的好习惯。除了最基本的调试方式,还学习了printf的调试方式,通过一次性地输出循环的全部答案,便于找出循环量较大时的问题所在。在本周尝试更正自己的做题步骤,先分析题目,通过伪代码来缕清思路,写出基本的代码框架,再逐步进行调试。因为代码量较上周更多,更复杂,就需要通过注释的形式,增强阅读性。本周的刷题速度较慢,正确率较低,望下周能扎实基础,复习巩固

1.2.2 代码累计


2.PTA总分

2.1截图PTA中循环结构2次题目集的排名得分


2.2 我的总分:

总分:290


3.PTA实验作业

3.1 PTA题目1

猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。

3.1.1 算法分析

定义 num被猜数,guessNumber猜数,i可猜的次数,n已猜的次数,flag控制循环
输入 num被猜数,guessNumber猜数
do
{
    输入guessNumber
    if guessNumber<0 输出游戏结束
    else if guessNumber==num 
    {
	flag=1 
	if(n==1)输出Bingo!\n
	else if(n==2||n==3)输出Lucky you!\n 
	else 输出 Good Guess!\n
    } 
    else if guessNumber>num&&flag==0&&i<n未猜中 
    输出Too big!\n
    else 
    if n<=i&&flag==0偏小 输出Too small!\n 
    if n>i&&flag==0 //超出次数 未猜中 输出游戏结束 
    } while(guessNumbe>=0);
end while

3.1.2 代码截图

3.1.3 测试数据

3.1.4 PTA提交列表及说明

  • Q:第n次输入错误后,直接gameover 答案错误
  • A:题意的理解出现偏差,在第n次输入数据,如判断错误,仍要输出偏大偏小,而第n+1次无论正确与否,都输出gameover。
  • Q:猜中后,直到输入一个负值结束循环,其他数值正常输入不输出。出现输入其他数值,还会判断是否偏大偏小。
  • A:引入flag,控制输出条件,如输出正确后,给flag赋值,再用if语句控制输出条件,即可解决问题。

3.2 PTA题目2

你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。

3.2.1 算法分析

定义 length=0单词长度,blank=0有无空格(区分第一个单词和后面单词的区别)exsit=0存在单词,用于输'.'前的最后一个单词长度,flag=0计入非空格字符,ch字符
while ch!='.'//输入句号前的所有字符
    if ch!=' ' length++,exsit=1,flag=1//开始计数过滤空格
    if flag==1&&ch==' ' 
    if blank==0 输出长度 blank=1//自此后的数字前面要输出空格
    else 输出 长度 length=flag=0
    end if
    ch=getchar()//循环输入 
end while
if exsit==1&&length!=0 输出 长度 //单独判断最后一个单词

3.2.2 代码

3.2.3 测试数据

3.2.4 PTA提交列表及说明

  • Q:while条件为(ch!=’.’)时,最后一个单词的长度无法输出
  • A:在测试数据时发现这个问题,因此增加了一个变量exsit,单独控制最后一个单词长度的输出。
  • Q:对于多空连续空格的过滤出现问题
  • A:在这个问题解决上花费了比较长的时间,听取同学的建议,多设置了一个变量flag,来控制if条件语句,当输入为空格时,flag=0,避免空格的重复计数,当真正输入字符后,flag=1,在遇到下一个空格前进行length++,计算长度,实现了空格的过滤。

3.3 PTA题目3

3.3.1 算法分析

定义 time时间,rabbit兔子跑过的路程,tortoise乌龟跑过的路程,i经过的时间,rest休息时间,run跑步时间
输入 time时间,定义rest=0,run=10
for  i=0;i<time;i++ 每分钟循环一次
    tortoise+=3;乌龟 一直跑 3m/min 
    if run==0;run=10;
    if rabbit>tortoise rest=30//跑10分钟做一次比较,判断是否休息
    if rest==0//非休息时间
       rabbit+=9;run--;end if// 兔子跑 跑步时间减少 
    if rest>0 rest--; 
end for
if(rabbit<tortoise)
printf("@_@ %d",tortoise); 
else if(rabbit>tortoise)
printf("^_^ %d",rabbit); 
else printf("-_- %d",rabbit); 
end if

3.3.2 代码

3.3.3 测试数据

3.3.4 PTA提交列表及说明

  • Q:对于休息时间和跑步时间的划块。
  • A:这道题在dev c上尝试了两种做法,一种是老师上课说的利用time%10来划块,一种是上述代码,利用时间的递减循环来判断。在代码量上,第一种方法会简便些;但是直观上,第二种方法便更具可读性。

4.代码互评

4.1 代码截图

  • 同学代码截图via.范华

  • 自己的代码截图

4.2 二者的异同

  1. 相同: 两段代码唯一的相同点,在于算法思路的相同。都是先统计各分数段打分的人数,再通过for循环逐个输出
  2. 不同:范华同学采用了数组(我还不会)简便了代码,而我采用了比较基础的for循环对于人数进行累加;在控制输出时,范华同学直接使用嵌套的for循环,逐个输出1.2.3.4.5.对应的人数,在这个地方我选择的是更为直观的手动输出
  • 范华同学:嵌套循环和数组的结合使代码简洁,变量少。
  • :代码量多,但是思路在现阶段更为明朗,在最后a手动输出则使代码有些赘余,可以学习范华同学的for循环
posted on 2018-10-28 17:56  Salcious  阅读(373)  评论(1编辑  收藏  举报