1.本章学习总结#
1.1 思维导图##
1.2 本章学习体会及代码量学习体会##
1.2.1 学习体会###
循环结构这部分相比与前面的顺序结构和多分支结构较难些,做题的速度也慢很多,对有一些题目没有思路,但这周我也学到了while语句、do while语句,学会了不只会用for语句,也学到了用while语句来解决题目没指定出循环次数的问题,学会使用循环嵌套来解决九九乘法表、阶乘累加等多种循环的问题,循环嵌套能解决的问题更多。
1.2.2 代码累计###
2.PTA总分#
2.1截图PTA中循环结构2次题目集的排名得分##
2.2 我的总分##
循环单层:175
循环嵌套:115
总分:290
3.PTA实验作业#
3.1PTA题目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 算法分析###
定义变量猜测的最大次数N、随机数mynumber、用户输入的数yournumber、计算次数的count
输入mynumber,N,yournumber
while(yournumber>=0) do
count++;
if(count>N) then //超过N次没猜出结束程序
printf("Game Over");break;
else if(count==1&&yournumber==mynumber) //一次猜出该数
printf("Bingo!");break;
else if(count<=3&&yournumber==mynumber) //三次以内猜到该数
printf("Lucky You!");break;
else if(count>3&&count<=N&&yournumber==mynumber) //超过3次但是在N次以内猜到该数
printf("Good Guess!");break;
else if(yournumber<mynumber) //用户的数小于随机数
printf("Too small\n");
else if(yournumber>mynumber) //用户的数大于随机数
printf("Too big\n");
end if
scanf("%d",&yournumber);
end while
if(yournumber<0) //输入负数结束程序
printf("Game Over");
end if
3.1.2 代码截图###
3.1.3 测试数据###
3.1.4 PTA提交列表及说明###
-
Q1:输入的数和输出结果不太对应,但思路没什么毛病
-
A1:我在scanf内都加了换行符,导致结果有些错乱,不能一 一对应
-
Q2:break的使用出了问题
-
A2:仔细阅读题目,发现当count>N、count=1、count<=3、3<count<=N时要结束循环输出结果了,所以以上条件都要有break
3.2 PTA题目2
编程打印空心字符菱形
本题目要求读入菱形起始字母和菱形的高度,然后输出空心字符菱形。所谓“空心菱形”是指:每行由两端为字母、中间为空格的字符串构成,每行的字符串中心对齐;上半部分相邻两行字符串长度差2,且字母从给定的起始字母逐一递增;下半部分与上半部分对称。
3.2.1 算法分析###
定义菱形起始字母ch,菱形的高度n,行数i,j,中间数mid
输入ch,n
mid=n/2+1; //找出中间的数
for i=1 to n do
for j=1 to fabs(mid-i) do //确定字母前面的空格个数
输出空格
if i>mid then //下半部分的字母
num=n+1-i;
else //上半部分的字母
num=i;
end if
for j=1 to j<=2*num-1 do
if j==1||j==2*num-1 //控制只有在特定位置才输出字母
printf("%c",ch+num-1);
else
输出空格
end if
printf("\n");
3.2.2 代码截图###
3.2.3 测试数据###
3.2.4 PTA提交列表及说明###
-
由于是老师上课讲评完才做的所以提交列表比较简单
-
Q1:如何实现题目要求的字母前面的空格
-
A1:通过寻找各行数与中间的数之间的关系确定每行字母前面的空格数
-
Q2:如何输出空心的菱形
-
A2:因为1、2行和4、5行是对称的,输出的空格也是一样的,就把4、5行的行数转成和1、2行一样的,然后再找出字母的位数与行数之间的关系,使字母只在特定的位置输出
3.3 PTA题目3##
单词长度
你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。
3.3.1 算法分析###
定义字母ch,计数变量count,标记flag
while(scanf("%c",&ch))
if(ch!='.'&&ch!=' ') then //计算每个单词长度
count++;
else if(ch==' ')
if(count!=0)
if(flag==1) //控制第一个字母长度的数字前面没有空格
printf("%d",count);
flag=0;
count=0;
else if(flag==0) // 控制后面字母长度的数字前面有空格
printf(" %d",count);
count=0;
end if
else if(ch=='.')
break;
end if
if(count!=0&&flag==0) //遇'.'时字母长度的数字前面也要有空格
printf(" %d",count);
else if(count!=0&&flag==1) //只有一个单词的情况
printf("%d",count);
end if
end while
3.3.2 代码截图###
3.3.3 测试数据###
3.3.4 PTA提交列表及说明###
-
Q1:运行超时
-
A1:没有break语句,导致死循环
-
Q2:只有一个单词的时候输出错误
-
A2:再用一个else if语句判断count!=0且flag=1就可以解决只有一个单词的情况
4. 代码互评#
4.1 代码截图
同学的代码
我的代码
4.2 二者不同##
- 同学用了2个while语句,1个do while语句,使用了循环嵌套,我只用了一个while语句。
- 同学通过while语句来分类ch='.'和ch=' '时的情况,我用了多个if else语句来进行分类。
- 同学代码看起来较简洁,但我的代码更好理解一些。