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语句来进行分类。
  • 同学代码看起来较简洁,但我的代码更好理解一些。