C语言博客作业02循环结构

1.本章学习总结

1.1 思维导图

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

1.2.1学习体会

通过这一章的学习,感受到和第一章很不一样,很多题目更加的复杂起来,循环结构一个或多个的嵌套,很容易在写题目中无头绪,或者被绕晕。一个星期的学习,让我觉得在处理多个循环的问题的时候,要使用草稿,弄好思路,如果脚踩西瓜皮,一步滑到一步,很难顺利写出。把思路写清楚后在进行编写,会顺利很多。还有,很多题目的思想方法,很多都是类似。可以起到举一反三的效果。要自己多总结。摸索出每个题目可以给自己写代码用的优点,然后多去实践。
本周学会了很多语句的使用。while ,do-while break, continue。以及多个语句的基本嵌套,还有加上第一章的分支结构,顺序结构的嵌套,多种嵌套,可以灵活处理多种问题,要多实践,才能将它们运用的更加的娴熟!

1.2.2代码累计

2.PTA总分

2.1

2.2我的总分:

单层循环:175
嵌套循环:115
总分 :290

3.PTA实验作业

3.1题目介绍

乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

3.1.1算法分析

定义:乌龟跑动距离tort;兔子跑动距离rabbit;总时间T; 中间时间time。
读入总时间T;

  • do while time=1 to T
    • tort= tort+3 rabbit= rabbit+9;//正常跑动距离累加
    • if time%10==0 &&(rabbit>tort) then//每跑10分钟回头判断
      • if time+30>T then tort=tort+(T-time)*3;//如果最后30分钟相加超过总时间,用该方法计算乌龟最后30分距离
        else tort=tort+90 time=time+30//否则就进行这个运算乌龟运行距离,和时间。
  • end if
    • if rabbit>tort then
      • printf("_ %d",rabbit);
  • else if rabbit==tort then
    printf("-_- %d",tort);
  • else
    printf("@_@ %d",tort);
    end do while

3.1.2代码截图

3.1.3测试数据

3.1.4PTA提交列表和说明

Q1:没有注意到最后30分钟加起来是否会超过总数。
A1:加一个if判断,如果time+30>T.乌龟最后一段时间的距离用(T-time)*3.来计算。

Q2:输入测试数据乌龟的数据和兔子相同,而且乌龟数据比正确数据多3
A2:初始值time=0,错误,把time初值改为1.结果正确。

3.2题目介绍

3.2.1算法分析

定义输入整数n;外层循环j;内层循环i;符合梅森数形式数num;统计梅森数个数count;

  • 输入n;

  • for j=1 to n

    • num = pow(2,j)-1//符合梅森数形式
    • for i=2 to num/2
    • if num%i==0 break //判断找出数字是否为素数
  • end for

    • if i>num/2&&num!=1 then
    • count++
    • printf ("num")//i程序执行完一个循环,说明num是素数
  • end if

  • end for //结束外循环

3.2.2代码截图

3.2.3测试数据

3.2.4PTA提交列表和说明

Q1:思路不可取,一开始想先找出素数,在试这个素数是否满足梅森数形式,2的19次方数太大,编译器不能正常运行到这么大的数。
多次更改未发现这个问题,最后询问同学,倒换思路。
A1:把思路倒过来,先判断形式,满足形式的数选出来,后判断选出来的数是否为素数 ,成功解决。

3.3题目介绍

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

3.3.1算法分析

定义字符op;判断变量flag=0;判断变量count=0计算循环次数; 累加单词变量num=0;
输入字符op

  • do while
  • if op!=' ' then num++;//非空格累加
    • else op ==‘ ’ //输入空格
    • if num>0 then flag=1 //如果num的值大于0,说明程序已经开始计算字符数,此时空格要起到打印num的作用,flag=1;
  • end if
  • 重新读入下一个字符
  • if flag=1 || op==‘.' then print(" num")//可以打印num
    • if count==0 then printf("%d") //第一次打印输出num不带空格
    • num=0//打印完后num归0
    • else count !=0 then printf(" %d")//第2次打印以后开始,输出num前带空格
    • num=0 //归0
    • count++ //打印一次,累加一次
  • end if
  • end do while

3.3.2代码截图

3.3.3测试数据



3.3.4PTA提交列表和说明

Q1:空句子,运行超时
A1:开头加入判断if op==‘ ’,break;解决

Q2:开头结尾多个空格,不能解决
A2:用count和flag判断,混合使用,count判断开头,flag判断结尾。

Q3:末尾空格,会输出0;
A3:用if判断,如果num==0,不打印num,当num!=0,则打印num。

4代码互评

4.1代码截图

同学代码

我的代码

4.2二者不同

1.首先复杂程度上,我的代码明显比同学的复杂,同学的代码没有使用很多的判断量,只用了一个,我的用了2个。
2.同学的代码用了双层while复合,而且用1使循环进入。
3.同学代码和我一样使用 了变量判断程序是否读入了字符,他使用num,我使用count,这一点思路类似,
4.同学的代码在打印后,在根据上一个字符的结果判断是否结束,我的是使用if来多分支情况,这一点上同学的思路会容易点。
5.同学的代码不需要进行尾数0的判断,我的代码要进行位数0的判断,这一点比我的代码更简单。

原文地址:https://www.cnblogs.com/zhouqb/p/9864097.html