循环结构

1.本章学习总结

1.1 思维导图

1.2 本章学习体会及代码量学习体会

1.2.1 学习体会

  • 这周学习了循环结构,对循环结构使用的选择有的一定理解,知道循环次数一般用for,反之一般用while(能用for都能用while),而do-while用于至少要执行一次。
  • 加深对语法的理解,学语句时感觉学会,但是考察方式变换时思路又会谜之走偏,总是把握不住关键点。
  • 因为PTA2840分的题没有刷很多,所以做题的思路比较贫乏,掌握知识点却不知从何入手,所以听取老师建议争取多看代码,多积累经验,还能学习规范的代码格式。
  • 随着学C的深入,解题的代码量越来越多,保证质量的同时还要高效率,所以决定逐步提高自己打字等方面的操作速度。

1.2.2 代码累计

2.PTA总分

2.1截图PTA中循环结构2次题目集的排名得分


2.2 我的总分

循环的嵌套:115分
循环结构(单层) :175分
总分:290分

3.PTA实验作业

3.1 PTA题目1

模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。

3.1.1 算法分析

 定义number放输入的数  ,ch放输入的运算符,result放结果
while  ch != ‘=’时
    输入number
ch是 '+':result = result + number; break; //进行计算
ch是 '-':result = result - number; break;
ch是 '*':result = result * number; break;
ch是 '/':
 if  number!=0      then               //分母不可为零
		
           result = result / number;break;
 else
           输出 ERROR    //结束运行
 end   if
 default  do 
          输出ERROR    //结束运行
end switch
   输入ch
 end  while
输出result      结束运行

3.1.2 代码截图


3.1.3 测试数据

3.1.4 PTA提交列表及说明

 Q1:一开始没办法实现所有输入的运算(读入数据问题)
 A1:然后调整了输入number和ch的位置
 Q2:没有判断非法运算符和分母为0
 A2:引入if语句判断分母,用default判断非法运算符

3.2 PTA题目2

形如2​n​​−1的素数称为梅森数(Mersenne Number),本题要求编写程序,对任一正整数n(n<20),输出所有不超过2n−1的梅森数。
输入在一行中给出正整数n
按从小到大的顺序输出所有不超过2​n−1的梅森数,每行一个。如果完全没有,则输出“None”

3.2.1 算法分析

定义i   定义flag   定义result用于放2的n次方-1的数 
for i=2 to n  do
          result=pow(2,i)-1;     //是梅森数条件之一
      if result是素数(调用素数函数)   then 
	            输出result
	    flag=1	      //flag==1就是有素数 
      end if 
   end for 
     if   flag=0    then         //没有梅森数
     输出  None	
     end if				
结束运行 
 定义判断素数的函数

3.2.2 代码

3.2.3 测试数据

3.2.4 PTA提交列表及说明

 Q1:当没有梅森数时没有输出None,并且输出是从大到小(题意是从小到大)
 Q2:调用pow次数太多,最大n时运行超时
 A1:通过定义函数等简化代码,用for语句实现从小到大输出,同时减少了调用pow语句的次数

3.3 PTA题目3

你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。

3.3.1 算法分析

定义count放单词长度 定义flag=1;定义 ch放输入字符
    do
    {
        count=0
        do
           {
		输入ch
		if ch != ' '且 != '.'  then      //满足一个单词或一个句子                
		    count++ 
		end if 
	} while ch!=' '且!='.' 继续循环
            end  while      
  if    count !=0  then               //count==0不用输出 
	
	 if   flag=1  then               //此处为调整输出格式,最后没有空格     
		输出count
		flag=0
	 else
		输出 空格count
	 end if	
 end if	
}while ch != ' . ' 继续循环         //一个句子结束
     end  while
结束运行 

3.3.2 代码

3.3.3 测试数据

3.3.4 PTA提交列表及说明

 Q1: 开头多了一个空格
 Q2:空句子和连续多个空格时输出0导致错误
 A1:用 IF语句判断count是否为0,当count不为0时才输出

4. 代码互评

同学代码:

我的代码:

4.2 两者的不同

1.同学:是先通过while循环计算出目标数的位数,然后得 first=pow(10,cnt-1),number%=first; first/=10;就可以顺序输出读音。(要念的数在此称目标数)
我:使用for循环把目标数放在数组中,然后再使用for循环把放数组的数按顺序输出读音。
2.同学:通过if语句(把空格独立出来输出)处理结尾空格
我:我是第一个不带空格,之后每个输出前带空格

posted @ 2018-10-28 09:11  codedawn  阅读(413)  评论(1编辑  收藏  举报