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.同学的代码更容易理解但代码量相对较多,我的代码显得不那么容易理解,还有就是注释不足,代码量相对较少;
原文地址:https://www.cnblogs.com/vanishzeng/p/9860906.html