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


    1.本章学习总结


    1.1 思维导图

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

    1.2.1 学习体会

     这两周主要学习了循环结构。包括三种比较基本的循环,while、do-while、for,再通过一些嵌套,解决一些更为复杂的数学问题,需要对于循环条件有更清晰的认识与把控;同时学习通过引入一些中间变量,如flag来控制输出;再者还学习了break&continue两种特殊的语句,便于控制循环。总的来讲学习的内容需要更灵活地运用到题目的计算当中。但是也出现了不少的问题,如对于变量的初始化的不注意,可能会导致错误答案的输出或者死循环。因此在进入循环结构之后,更需要养成手动调试程序判断程序错误的好习惯。除了最基本的调试方式,还学习了printf的调试方式,通过一次性地输出循环的全部答案,便于找出循环量较大时的问题所在。在本周尝试更正自己的做题步骤,先分析题目,通过伪代码来缕清思路,写出基本的代码框架,再逐步进行调试。因为代码量较上周更多,更复杂,就需要通过注释的形式,增强阅读性。本周的刷题速度较慢,正确率较低,望下周能扎实基础,复习巩固
    

    1.2.2 代码累计


    2.PTA总分

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


    2.2 我的总分:

    总分:290


    3.PTA实验作业

    3.1 PTA题目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 算法分析

    定义 num被猜数,guessNumber猜数,i可猜的次数,n已猜的次数,flag控制循环
    输入 num被猜数,guessNumber猜数
    do
    {
        输入guessNumber
        if guessNumber<0 输出游戏结束
        else if guessNumber==num 
        {
    	flag=1 
    	if(n==1)输出Bingo!
    
    	else if(n==2||n==3)输出Lucky you!
     
    	else 输出 Good Guess!
    
        } 
        else if guessNumber>num&&flag==0&&i<n未猜中 
        输出Too big!
    
        else 
        if n<=i&&flag==0偏小 输出Too small!
     
        if n>i&&flag==0 //超出次数 未猜中 输出游戏结束 
        } while(guessNumbe>=0);
    end while
    

    3.1.2 代码截图

    3.1.3 测试数据

    3.1.4 PTA提交列表及说明

    • Q:第n次输入错误后,直接gameover 答案错误
    • A:题意的理解出现偏差,在第n次输入数据,如判断错误,仍要输出偏大偏小,而第n+1次无论正确与否,都输出gameover。
    • Q:猜中后,直到输入一个负值结束循环,其他数值正常输入不输出。出现输入其他数值,还会判断是否偏大偏小。
    • A:引入flag,控制输出条件,如输出正确后,给flag赋值,再用if语句控制输出条件,即可解决问题。

    3.2 PTA题目2

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

    3.2.1 算法分析

    定义 length=0单词长度,blank=0有无空格(区分第一个单词和后面单词的区别)exsit=0存在单词,用于输'.'前的最后一个单词长度,flag=0计入非空格字符,ch字符
    while ch!='.'//输入句号前的所有字符
        if ch!=' ' length++,exsit=1,flag=1//开始计数过滤空格
        if flag==1&&ch==' ' 
        if blank==0 输出长度 blank=1//自此后的数字前面要输出空格
        else 输出 长度 length=flag=0
        end if
        ch=getchar()//循环输入 
    end while
    if exsit==1&&length!=0 输出 长度 //单独判断最后一个单词
    

    3.2.2 代码

    3.2.3 测试数据

    3.2.4 PTA提交列表及说明

    • Q:while条件为(ch!=’.’)时,最后一个单词的长度无法输出
    • A:在测试数据时发现这个问题,因此增加了一个变量exsit,单独控制最后一个单词长度的输出。
    • Q:对于多空连续空格的过滤出现问题
    • A:在这个问题解决上花费了比较长的时间,听取同学的建议,多设置了一个变量flag,来控制if条件语句,当输入为空格时,flag=0,避免空格的重复计数,当真正输入字符后,flag=1,在遇到下一个空格前进行length++,计算长度,实现了空格的过滤。

    3.3 PTA题目3

    3.3.1 算法分析

    定义 time时间,rabbit兔子跑过的路程,tortoise乌龟跑过的路程,i经过的时间,rest休息时间,run跑步时间
    输入 time时间,定义rest=0,run=10
    for  i=0;i<time;i++ 每分钟循环一次
        tortoise+=3;乌龟 一直跑 3m/min 
        if run==0;run=10;
        if rabbit>tortoise rest=30//跑10分钟做一次比较,判断是否休息
        if rest==0//非休息时间
           rabbit+=9;run--;end if// 兔子跑 跑步时间减少 
        if rest>0 rest--; 
    end for
    if(rabbit<tortoise)
    printf("@_@ %d",tortoise); 
    else if(rabbit>tortoise)
    printf("^_^ %d",rabbit); 
    else printf("-_- %d",rabbit); 
    end if
    

    3.3.2 代码

    3.3.3 测试数据

    3.3.4 PTA提交列表及说明

    • Q:对于休息时间和跑步时间的划块。
    • A:这道题在dev c上尝试了两种做法,一种是老师上课说的利用time%10来划块,一种是上述代码,利用时间的递减循环来判断。在代码量上,第一种方法会简便些;但是直观上,第二种方法便更具可读性。

    4.代码互评

    4.1 代码截图

    • 同学代码截图via.范华

    • 自己的代码截图

    4.2 二者的异同

    1. 相同: 两段代码唯一的相同点,在于算法思路的相同。都是先统计各分数段打分的人数,再通过for循环逐个输出
    2. 不同:范华同学采用了数组(我还不会)简便了代码,而我采用了比较基础的for循环对于人数进行累加;在控制输出时,范华同学直接使用嵌套的for循环,逐个输出1.2.3.4.5.对应的人数,在这个地方我选择的是更为直观的手动输出
    • 范华同学:嵌套循环和数组的结合使代码简洁,变量少。
    • :代码量多,但是思路在现阶段更为明朗,在最后a手动输出则使代码有些赘余,可以学习范华同学的for循环
  • 相关阅读:
    Android将TAB选项卡放在屏幕底部(转)
    unix进程间通信
    C优先级顺序(转)
    C/C++ 内存补齐机制
    Android Sqlite ORM 工具
    类型安全性测试
    反射手册笔记 2.程序集,对象和类型
    CLR笔记:15.委托
    反射手册笔记 4.创建对象
    反射手册笔记 1.灵活的编程方法
  • 原文地址:https://www.cnblogs.com/salcious/p/9866094.html
Copyright © 2020-2023  润新知