• C语言-第5次作业


    1.本章学习总结

    1.1思维导图

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

    1.2.1学习体会

    感受:和数组一样,这又是一个非常陌生的知识点——指针,刚刚开始学习的时候,被陌生的各种赋值方式搞得眼花缭乱,对于使用的方式一筹莫展,真的感觉到自己的代码能力真的很差啦,对自己一度挺失望的,通过老师的讲解和各种函数代码之中频繁出现指针,意识到指针是很重要的知识点。
    之后的学习:希望通过后面的自主学习能对指针的用法有所了解,逐渐运用自如,并且把前面的内容也好好复习,融会贯通,要自己多多写代码,减少对于同学的依赖,不要觉得一道题调试一两小时麻烦,对于自己陌生的知识点要做笔记,多多训练,pta上的不太熟练的题也要重新再做。可能是适应和学习能力的问题,觉得老师的上课强度较大,作业量也有点可怕,大作业做的不想其他同学那么轻而易举,由于四级考试和各种论文的压力之下,对于c语言的学习的确有所懈怠,要好好儿弥补,好好儿用心!

    1.1.2代码累计

    2.PTA总分

    2.1排名得分

    2.2我的总分

    指针:125分;

    3.PTA实验作业

    3.1PTA题目1

    说反话:将输入的一行字符串,以单词为整体倒叙输出,每个单词之间一个空格

    3.1.1 算法分析

    定义字符数组sen[500001],统计字符长;
    定义变量:flag表示输出过单词,word表示是单词,count统计单词字母数;
    逆向遍历数组 for i=len-1 to 0
              if sen[i] 不是空格
                word=1;
                 count++;
              end if
              if sen[i]是空格&&前面是单词(例如是pretty)
                  输出空格
               end if
               for j=i+1 to i+count        //输出该单词(pretty)
                flag=1;
                end for
                if i==0&&count!=0         //第一个单词后无空格单独判断
                先输出单词后输出空格
                end if
      end for
    

    3.1.2 代码截图

    3.1.3PTA提交列表及说明

    刚开始做这道题的时候以为很简单,不就是倒序输出单词嘛,但是实操之后,确实不太简单,简直是错误套餐
    Qs:1.没有想到逆向遍历,没啥思路,请教了同学;
    2.没有搞懂判断条件应该是 单词后是空格的话,就输出空格然后输出单词;
    3.忽略第一个单词后无空格需要特殊处理;
    4.由于有两个辅助判断的变量,容易搞混,错误出来的时候改的地方不对,导致反复错误,没有改正,反而越改越错

    4.大作业

    函数一览

    4.1函数1

    思路:【数字转化成字符和字符都存入字符数组】
    将主函数中的指针*exp、等级level和题量的选择repeat传递到函数1中
     定义char str[]存放 ‘+’、‘-’ 、‘*’ 、‘/’;
     switch语句等级划分
       switch(level)    //通过规律查找,三种情况可以做如下统一处理,通过if语句判断
          case 1: 
          case 2:
          case 3:
                    提醒题集名称 level==1  ->  小试牛刀
          产生随机数
                采用for循环 控制数字位数 存入exp[]
         产生随机运算符
               str[rand()%9+1]
         控制算式结构
               if语句控制是否增加一个数字和一个字符
               加上''便于输出表达式
       end switch
     用户输入非法题集后,提醒更换
    

    4.2函数二

    要求避免在除法运算中出现除数为0的情况,但是由于笔者认为在运算中出现0的计算意义不大,且在上一个函数中为了更简洁的同时保证两位数和三位数的生成,规避了数字出现0的情况,就没有设计函数二

    4.3函数三

    思路:【字符数字转化成数字形式进行运算】
    参考了老师的做法 
     do-while语句判断
     do
      if exp[i] 是字符数字
         将其转化成数字
      end if
      else        //是运算符
         oldq==‘+’ ->  做加法运算   
        while(不是等于号)
       导入 判断函数 检测答案是否正确,输入对应评价语句      
    

    4.4与原有函数比较

    在助教的提醒和阅读同学优秀代码之后,确实发现自己上一版本的大作业函数分装十分乱(虽然这次也不是很好),就没有在原来的基础上修改,而是选择重新写了一份,故而就不晒图做对比‘了
    函数一
    区别:经过重新写代码,对于指针的稍稍运用,与之前的代码完全不一样
    旧:之前是直接生成数字和字符,使用printf的方式直接输出,简单粗暴;
    新:对于表达式的生成,采用指针和数组的运用,将数字转化成字符数字,与运算符一同存入数组,输出字符数组,可见指针的便捷度;
    优点:旧代码的显而易见,对于初级码农十分简单,基本不会有bug,操作简单;
    对新代码来说,大大提高代码质量(虽然也不是很高),使代码看起来更简洁,更加高效,更稳定,避免无效运算0
    缺点:两个代码放在一块,旧代码效率低又冗长的缺点一览无遗,而新代码可阅读性不强,有点复杂,容易出现bug
    -函数二
    有点投机取巧的闪开这个0部分,不过的确是少了一部分需要考虑的东西,但会造成程序不完整
    -函数三
    区别:
    旧:之前的代码比较乱,函数分装的很随意很杂乱,直接在判断运算符时,计算出了结果;
    新:将函数一的数组传过来后,将字符数字转化成数字,进行运算
    优点:
    旧:之前的代码似乎只有好写、没啥阅读难度、不容易出现bug这些只能算方便的特点。。。。。。
    新:更加简洁,减少时间和空间,效率更高;
    缺点:
    旧:分装很差,只是用最基础的switch语句划分计算种类,直接算出结果,质量很低;
    新:采用字符数组转换还是有些显得不太灵活;

    4.4大作业总结

    刚开始知道这个作业的时候真的是一头雾水,可能有点不太能跟上老师的节奏,扑面而来许多知识点,学的有点晕,不太能相通为啥这么神奇,通过一个简单的指针有这么多的作用,所以一时无法下笔,先慢慢啃了一边书和视频,适当向同学请教之后才有所思路,指针的复杂度使整个函数太容易出现bug,让自己很烦躁,觉得专业能力真的太差了,后来在室友们的帮助下,才慢慢堆起来自己的函数,尽管自己也看出来,对于指针的运用还是太少,要好好再认真搞清楚指针的运用,代码能力真的很烂,要更加认真了。

    还有一个成绩单,我再优化一下

  • 相关阅读:
    Java工作中常用到的工具
    得到区块链直播记录
    如何高效的解决问题
    pgsql数据库应用两点注意
    flask如何使模板返回大文件,又不消耗大量内存
    python内存诊断
    pycharm整体缩进的快捷键
    gdb生成的core文件位置
    gdb源码安装,指定使用的python版本
    gdb源码安装过程中的问题:no termcap library found
  • 原文地址:https://www.cnblogs.com/victory0917/p/10127597.html
Copyright © 2020-2023  润新知