C语言-第5次作业

1.本章学习总结 1474783-20181114004833975-1927060709.gif

1.1思维导图

C语言-第5次作业_第1张图片

1.2 本章学习体会及代码量学习体会 1474783-20181114005012925-913953183.jpg

1.2.1学习体会

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

1.1.2代码累计

1474783-20181219193246505-111268824.png

2.PTA总分

2.1排名得分

1474783-20181219192553807-1858521693.png

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 代码截图

C语言-第5次作业_第2张图片

3.1.3PTA提交列表及说明

C语言-第5次作业_第3张图片

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

4.大作业 1474783-20181114005144885-212040063.jpg

函数一览
C语言-第5次作业_第4张图片
C语言-第5次作业_第5张图片

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语句控制是否增加一个数字和一个字符
           加上'\0'便于输出表达式
   end switch
 用户输入非法题集后,提醒更换

C语言-第5次作业_第6张图片

4.2函数二

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

4.3函数三

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

C语言-第5次作业_第7张图片

4.4与原有函数比较

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

4.4大作业总结

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

转载于:https://www.cnblogs.com/victory0917/p/10127597.html

你可能感兴趣的:(c/c++)