• 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语句清晰明了![]

  • 相关阅读:
    compiere简易介绍及个人看法
    js数字金额转换为英文金额(数字的中英文转化) 修正版
    eval和document.getElementById
    关于netsuite编辑单据页面默认打开某tab的办法
    js 抛出异常 throw
    Training Agenda netsuite
    js 多维数组 应用
    AJAX提交数据时 中文处理 以及js url 中文处理
    监视所有 HTTP 请求和响应的工具 Fiddler工具介绍 (转载)
    关于netsuite创建组合按钮的方法,合并按钮,netsuite API
  • 原文地址:https://www.cnblogs.com/victory0917/p/9864000.html
Copyright © 2020-2023  润新知