C语言博客作业02--循环结构
1.本章学习总结
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
- 首先就这段时间的学习情况提出自我检讨,这段时间中基本没有打代码,而pta题目的难度也有所提升,导致后面这几天
所要敲的代码量“空前提升”,也就会想对较累,所以在后面的学习中还是不能懈怠,坚持每天敲一些代码的习惯; - 因为pta题目难度有所提升,代码写错的次数也相对增加,调试寻找错误所花时间也就变长了很多,但从一次次调试中可以发现
一个个问题可以使我获得一些经验,再在最后一次提交正确是会有一种喜悦感,这是能推动我继续往下学习的动力; - 这段时间学习了循环结构和伪代码写法,以及while语句、do-while语句等新的循环语句,了解了几种语句的相应的使用情况;
并且通过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 算法分析
定义变量:rabbit表示兔子跑的路程;tort表示乌龟跑的路程;
time表示比赛中途的时间;T表示比赛时间
输入T
while time<=T do
tort=tort+3
rabbit=rabbit+9
if time%10==0
if rabbit>=tort //每十分钟判断兔子是否在乌龟前面,是的话兔子睡觉保持路程不变
if time+30>T
tort=tort+(T-time)*3; //若中途时间加上兔子要休息的三十分钟大于比赛总时间,则乌龟路程只要加上剩下时间走得路程
else tort=tort+90; //否者加上三十分钟乌龟要走的路程
end if
time=time+30 //每次兔子睡觉中途时间都加上三十分钟
end if
end if
time++ //乌龟和兔子都在跑时,时间加上一分钟
end while
if tort>rabbit then output "@_@ tort"
else if tort<rabbit then output"^_^ rabbit"
else if tort=rabbit then output"-_- tort" end if
3.1.2 代码截图
3.1.3 测试数据
3.1.4 PTA提交列表及说明
Q1:刚开始没有没有考虑到兔子睡中胜利情况;
A1:发现每十分钟一次的判断少了考虑兔子是否在乌龟之前,在十分钟的判断条件后加上一个判断兔子是否在睡觉的判断条件if(rabbit>=tort);(如图1)
Q2:更改完之后发现依旧有平局的错误情况;
A2:对运算代码等进行调整后发现依旧输出错误,后询问同学,发现平局输出理解有误,因为题目中说输出胜利者的跑的距离(如图2),
所以平局输出时候没有加入距离输出(如图3),对此再次进行修改后正确。
图1
图2
图3
3.2 PTA题目2
你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,
可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。
3.2.1 算法分析
定义:op用于输入英文字母字符和标点符号;
count用于计数单词长度;
flag用于判断输出的count前是否要空格;//注:满足flag=1时count前不带空格;若flag=0,则count前有空格
while 真 do
输入 op
if op!=' ' and op!='.'
count++ end if //遇到' '和'.'之前没输入一个字符,count计数都要加1
if op=='.' then
if flag==1 and count!=0
Output count end if //flag等于1,则输出的count前不带空格
if flag==0 and count!=0
Output count //输出的count前面有空格
break //终止循环
end if
end if
if op==' ' //若输入空格符则进行判断
if count!=0 //只有当count不等于0时才有下面的输出
if flag=1
Output count flag=0
else Output count //此时count前带有空格
end if
end if
end if
end while
3.2.2 代码截图
3.2.3 测试数据
3.2.4 PTA提交列表及说明
Q1:刚开始出现空句子输出错误 ;
A1:经过调试(如图4)发现输入空句子依旧会进入一个输出语句并输出" 0",进而发现没有给这个输出加上条件count!=0和flag=0;
Q2:再次提交后发现原来对的“一个单词”那项出现答案错误;
A2:从上面添加的条件上下找问题,发现上面那个if语句中将flag赋值0,导致继续进入下面的if语句再次输出count(如图5),更改把第二个if改成else if;
Q3:从测试数据中可以发现句子碰到像逗号一样分隔成两句的符号,程序会将逗号左右的单词和逗号都算成一个单词;
A3:所以为了解决这个问题可以在设置逗号的判断条件进行解决;
图4
图5
3.3 PTA题目3
在商业和科学研究中,人们经常需要对数据进行分析并将结果以直方图的形式显示出来,这会大大增加这些数据的直观性,
也便于数据的分析与对比。下面以顾客对餐饮服务打分为例,输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数n(1≤n≤20),表示有n个学生被邀请来给自助餐厅的食品和服务质量打分,
分数划分为1~5这5个等级(1表示最低分,5表示最高分),试统计调查结果,并用*打印出如下形式的统计结果直方图。
3.3.1 算法分析
定义:repeat用于表示进行打分的次数 ;
n用于表示每次参与打分的学生人数 ;
score用于表示学生所打的分数 ;
count1,count2,count3,count4,count5五个count用于计数学生所打的每个分数等级的个数;
输入 repeat
while repeat>1 do
输入 n
count1=0,count2=0,count3=0,count4=0,count5=0; //进行完一次打分五个计数count清零
for i=1 to n do
输入分数score
switch (score)
case (1):count1++;break;
…
//统计不同分数的人数
end switch
i++
输出1:
for: j=1 to count1
输出* //注:计数完一个等级的个数后,换行并输出下一个等级的符号并计数,以此类推,输出直方图
repeat--; //进行完一次打分后评分次数repeat减1
end while
3.3.2 代码截图
3.3.3 测试数据
3.3.4 PTA提交列表及说明
Q1:提交之前试过测试数据并且输出一样,但是提交后就是答案错误;
A1:检查发现有个问题是输出后面不用加换行符,进行删除;
Q2:再次提交依旧发现答案错误;
A2:询问同学发现涉及到题目理解错误,repeat大于1时两次打分应该分开输出且打分同学个数可以不同;
更改方法将输入n的语句移到while语句里的最上方,且一次打分之后将五个count重新赋值为0;(如图6更改前和图7更改后)
图6
图7
4.代码互评
4.1 代码截图
同学的代码
我的代码
4.2 二者的不同
- 1.同学的代码分为两部分进行,可读性更高,先用循环输出上部分,再进行下部分的输出;我的是先进行上下都用
同一个for语句来实现; - 2.同学的代码更容易理解但代码量相对较多,我的代码显得不那么容易理解,还有就是注释不足,代码量相对较少;