c语言博客作业02--循环结构
1.本章学习总结
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
这两周学习了循环结构,现如今已经学了三种循环语句,for语句,while语句,do while语句;for语句适用于已知循环次数;
while语句适用于未知循环次数,先判断再循环,然而for可以表达的while语句也可以;do while也使用于未知循环次数,先循环再判断。
上周还了解了伪代码,运用代码中夹杂着一些文字来解释,可以让不懂代码的人读懂代码。
还学习到break和continue,break在循环中的作用是直接结束循环,而continue是跳过语句继续循环。
1.2.2 代码累计
2.PTA总分
2.1截图PTA中循环结构2次题目集的排名得分
2.2 我的总分:
总分:290分
3.PTA实验作业
3.1 PTA题目1
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;
兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;
而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
3.1.1 算法分析
定义 时间:time 兔子:rabbit 乌龟:tortoise 标志flag=0,i,j=0,k=0;
输入时间
for i=1 to time do
if flag==1 then //设置兔子睡觉30分钟,乌龟继续行走
k++;tortoise+=3;
if k==30 then//时间累加到30结束
flag=0
end if
end if
else do
j++;rabbit+=9;tortoise+=3;
if j==10 then//设置判断时间
if rabbit>tortoise then
flag=1;k=0;//令k归零,避免使if语句成立时出错
end if
j=0;
end if
if tortoise==rabbit then printf("-_- %d\n",rabbit); end if
else if tortoise>rabbit then printf("@_@ %d\n",tortoise); end if
else then printf("^_^ %d\n",rabbit);end else//进行三种比较
3.1.2 代码截图
3.1.3 测试数据
3.1.4 PTA提交列表及说明
Q1:一开始没有考虑兔子睡觉中获胜和兔子不足10分钟获胜
A1:后来设置了一个判断来存放兔子睡觉时乌龟走多少,这样既能运用循环来叠加时间,而且不用在循环中自己加30分钟
3.2 PTA题目2
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
3.2.1 算法分析
定义 零钱数:money,5分的个数:fen5=1,
2分的个数:fen2=1,1分的个数:fen1=1,
1分最大个数:max1,2分最大个数max2,总个数:total,种数:count=0;
输入零钱数
max1=money/5;//计算在这个money的情况下至多可以有多少个5
for fen5=money to 1 do
max2=(money-5*fen5)/2;//在money减去fen5个5后,至多可以有多少个2
fen2=max2;
while fen2 to 1
fen1=money-5*fen5-2*fen2;//得到fen1的个数
if fen1 >= 1 then
total=fen5+fen2+fen1;
printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",fen5,fen2,fen1,total);
count++;//计算有多少种情况
end if
fen2--;
end while
end for
printf("count = %d",count);
3.2.2 代码
3.2.3 测试数据
3.2.4 PTA提交列表及说明
Q1:出现格式错误
A1:检查发现输出的格式与题目不懂
A2:选这题原因是作为两个循环和三个循环的区别,能用两个,就不用三个
3.3 PTA题目3
在商业和科学研究中,人们经常需要对数据进行分析并将结果以直方图的形式显示出来,这会大大增加这些数据的直观性,也便于数据的分析与对比。
下面以顾客对餐饮服务打分为例,输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数n(1≤n≤20),表示有n个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~5这5个等级(1表示最低分,5表示最高分),
试统计调查结果,并用*打印出如下形式的统计结果直方图。
3.3.1 算法分析
定义 次数:repeat=0,个数:num=0,循环控制变量:i=1,j=1;
定义 grade,g1=0,g2=0,g3=0,g4=0,g5=0,g;
输入repeat的值
while(i<=repeat) do
//设置大循环来规定有几个直方图
输入num
for j=1 to num do
//用内循环来计算每个数的次数
输入grade
if grade==1 then g1++; end if
else if(grade==2) g2++;
else if(grade==3) g3++;
else if(grade==4) g4++;
else if(grade==5) g5++;
printf("1:");
for g=1to g1 do
printf("*");
printf("\n");
接着与上面相同
3.2.2 代码
3.3.3 测试数据
3.3.4 PTA提交列表及说明
Q1:一开始不知到num要输入多次
A1:问了同学后,就把输入num放在循环内
Q2:助教的要求简化代码
A2:通过简化输出来简化了代码
4.代码互评
4.1 代码截图
同学:
自己:
1,二者均为该题的解法,该同学的解法更为简便。
2,虽然解法都是找规律,我的解法是以中间行为标志来解题,而该同学则是以上半部分对称到下半部分的想法解题。