zoukankan      html  css  js  c++  java
  • C语言第2次作业

    1.本章学习总结

    1.1思维导图

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

    1.2.1学习体会

    不同于前几周简单的条件语句等,这一周开始学习循环结构for,while语句,甚至是多种语句嵌套使用,让我直接感受到编程的难度,嵌套要求的不仅是基础代码的熟练使用、各个语句的掌握到位,更是对于思维的锻炼,在这一章的练习中,我发觉自己在循环嵌套方面十分生疏,有的题目很难得到思路,容易直接下笔,明白部分题需要动脑思考去简化进而提高代码质量,慢慢加油鸭,不能惧怕去写较为复杂的程序!
     首次接触continue和break语句以及flag变量的使用,方便将程序分为几种情况,不失为一种好工具。随着代码量的越来越大,程序调试为代码纠错提供了非常大的便利,调试十分有用的同时也十分有趣,林丽老师推荐的printf调试法也十分实用,在每一次错误之后,不要立马去问别人,而是学会自己调试,发现错误,自己思考,改正错误,养成独立思考的习惯;
     除去代码学习,这章还接触了在我看来如同列草稿的伪代码,写程序前使用伪代码将思路写下,进行算法分析十分有效,可以养成好习惯。
     不懂的地方:部分循环语句需要scanf两次
    

    1.2.2代码量

    2.PTA总分

    2.1循环结构题集1+2


    2.2我的总分

    总分:290
    

    3.PTA实验作业

    3.1题目一

    龟兔赛跑比赛
    乌龟每分钟前进3米,兔子每分钟9米;
    兔子每跑10分钟回头看一下乌龟,若发现自己超过乌龟就休息30分钟,否则继续跑10分钟,而乌龟不休息;
    假定乌龟与兔子在同一起点同一时刻开始起跑,比较T分钟后乌龟和兔子谁跑得快.
    

    3.1.1算法分析

    - 定义兔子路程distance1,乌龟路程distance2,休息时间restTime,(皆初始化为0),运动时间runTime=10,规定时间time;
    - 在规定时间范围内循环输入时间
       for from i=0 to i= time i++
    - 从开始每十分钟做一次判断
       if(runTime==0) then  runTime=10 ; if(restTime==0) then runTime--
    - if distance1>distance2 休息30分钟(即restTime=30),restTime--, distance2+=3
      else restTime=0 distance1+=9,distance2+=3 
      end for 
    - if(distance1<distance2)
      printf("@_@ %d",tortoise); 
      else if(distance1>distance2)
      printf("^_^ %d",rabbit); 
      else printf("-_- %d",rabbit); 
      end if
    

    3.1.2代码截图

    3.1.3测试数据

    3.1.4PTA提交列表及说明

    说明: 这道题是在Devc上做了很多次,测试多组数据后放到PTA上所以提交结果只出现一次错误;
    错误原因: 多个if分类讨论不清晰,造成答案错误,经过重新分析题目,列草稿,得出正确答案;
    值得汲取经验:描述较长的题目划出重点,即化文字直接转化为代码,运用多个条件语句时注意每一部分的逻辑是否清晰,括号的一一对应,注意休息时间和运动时间的特殊化,进而按情况赋予初始值。
    

    3.2题目二

    将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,计算有几种不同的换法
    

    3.2.1算法分析

    - 定义硬币种类:fen5,fen2,fen1(注意每一种都要有),初始化为零只是方便后面语句,零钱为x,硬币个数count=0;
    - 三种硬币同时存在,互不干扰但是各种可能互相搭配,故采用三个for循环嵌套,极限思想,
    

    for from fen5=1 to fen5=x/5,fen5++ {for from fen2=1 to fen2=x/2,fen2++ {for from fen1=1 to fen1=x,fen1++}
    - 当满足条件
    if fen55+fen22+fen1=x then printf(“”)count++ 最后输出count的值

    3.2.2代码截图

    3.2.3测试数据

    3.2.4PTA提交列表及说明

    说明:老师在课堂上详细讲解了一道类似的题,所以这一段代码非常顺畅,之所以记下来是因为解法较为特殊,值得记下来;
    值得汲取经验:本题要求算出各种可能的解,较为抽象,思路非常重要,首先要明白各种硬币的取数互不干扰但互相配合,应将各种硬币所有可取数自由组合,再从中挑选符合题意的,即根据极限思想,算出只用某一种硬币,需要的最大数量,嵌套循环,保证各种可能性
    

    3.3题目三

    输入一段文本,统计每个单词的字母数,以句号为结束标志(单词中的字符也算一个字母),每个单词之间以空格隔开
    

    3.3.1算法分析

    - 定义num为字母数,blank判断是否有空格 ,word是否存在单词,flag判断是否为单词,皆初始化为0;
    - 情况一:输入一句话,句末存在句号结束输入 while(ch!=“.”)
      是单词 if(ch!=“ ”)then flag=1,num++,word=1;
      第一个结果前无空格 if flag==1&&ch==' ' &&blank==0,直接输出字母数,
      之后的即在前加一个空格,printf(“ %d”)      
      每一次循环末端将flag和num归零便于下一次判断统计
      输入最后一个单词, if(word==1&&num!=0) blank!=0 printf(“ %d”)
    - 只输入一个单词,if(word==1&&num!=0) blank==0  printf(“%d”)
    

    3.3.2代码截图

    3.3.3数据测试

    3.3.4PTA提交列表

    说明:这道题不是非常难,但是由于考虑欠缺,在Devc上尝试了很多次加上同学的建议才做出来,值得记下来
     第一次做的时候忽略了flag和num的归零问题,改过来之后,发现自己还忽略了如果只输入一个单词的情况,应该记录下来,提醒自己以后要仔细    分析每一种情况,理清逻辑,内外for循环的变量名相同会导致程序错误!
    

    4.代码互评

    4.1代码截图

    同学代码

    我的代码

    4.2代码对比
    相同点:1.均采用for循环输入数据;
    2.采用五个for循环分别输出每一种结果的 *;
    不同点:1.对于每一种结果的统计方式:他采用数组的方式,不用输入每一种情况,对于整个程序来说较为简洁,我还没有接触数组,只能老老实 实将每一个情况输入,代码量太大,质量不高;
    2.对于结果的输出方式:他依旧借助数组,省去麻烦,不用编写五个for循环,整个程序简洁明了,代码质量较高,易于编写
    值得学习这位同学的提前学习,自主学习意识,有简化程序的意识,勤于思考,但是数组在一定程度上没有for语句清晰明了![]

  • 相关阅读:
    HDU 1269 迷宫城堡
    HDU 4771 Stealing Harry Potter's Precious
    HDU 4772 Zhuge Liang's Password
    HDU 1690 Bus System
    HDU 2112 HDU Today
    HDU 1385 Minimum Transport Cost
    HDU 1596 find the safest road
    HDU 2680 Choose the best route
    HDU 2066 一个人的旅行
    AssetBundle管理机制(下)
  • 原文地址:https://www.cnblogs.com/victory0917/p/9864000.html
Copyright © 2011-2022 走看看