1.本章学习总结 ![1474783-20181114004833975-1927060709.gif](https://i-blog.csdnimg.cn/blog_migrate/f70f9a1bfcdeb9c0ca3ab07d59aa31f5.gif)
1.1思维导图
1.2 本章学习体会及代码量学习体会 ![1474783-20181114005012925-913953183.jpg](https://i-blog.csdnimg.cn/blog_migrate/fc47e604740048fe81d7bbd67475c2e4.jpeg)
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.大作业 ![1474783-20181114005144885-212040063.jpg](https://i-blog.csdnimg.cn/blog_migrate/0c771bd7d886401ef10a989e3961fa0d.jpeg)
函数一览
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
用户输入非法题集后,提醒更换
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,让自己很烦躁,觉得专业能力真的太差了,后来在室友们的帮助下,才慢慢堆起来自己的函数,尽管自己也看出来,对于指针的运用还是太少,要好好再认真搞清楚指针的运用,代码能力真的很烂,要更加认真了。
还有一个成绩单,我再优化一下