C语言博客作业05--指针

第五次作业

1.本章学习总结.

1.1 思维导图

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

1.2.1学习体会

  这周学习了指针相关的知识,一周的学习下来我觉得指针比前面任何一章的知识都要难理解,再加上上一周的数组题量比较大也比较难,所以关于指针的预习没有做到位,上课时很多知识点讲的比较快跟不上,下来做题发现很多都不懂;
  指针的题目不多,最开始做指针的函数题之前我重新看了一遍课本,看完也还有一些无法理解的地方,所以在做函数题时感觉自己的思路和方法都和数组差不多,但到做编程题时就发现只有用指针的方法才可以简洁明了地完成题目,所以在编程题上花的时间比函数题要多,但通过编程题也对指针的内容更加了解了。

1.2.2 代码累计

2.PTA总分

2.1截图PTA中指针的排名得分

2.2 我的总分

  • PTA总分:125分;

3.PTA实验作业

3.1 PTA题目1

给定一句英语,编写程序,将句中所有单词的顺序颠倒输出。

3.1.1 算法分析

定义字符数组a存放单词串,定义空指针p,i=0
gest(a)
定义len计算数组a的长度
for i=len-1 to i=0
do
if 某个字符不是空格且前面不是空格或者该字符为字符串第一个
then  for p指向该字符即单词首字母 to *p指向空格或*p指向结束符'\0'
do 输出这个字符
end for
if 该字符不是首字符且第一个单词前无空格
输出一个空格
end if
end for

3.1.2 代码截图

3.1.3 测试数据

3.1.4 PTA提交列表及说明


*Q1:数据的第一个单词不会在最后输出;
*A1:输出字符的循环条件是前一个字符为空格且字符本身不是空格,但循环到第一个单词时它的首字母前面无空格,所以无法输出,加了一个i=0的条件后解决了。
*Q2:如果输入的数据为一个单词且前面有一个空格时我的代码将会输出那个单词和空格,过不了测试点;
*A2:在控制输出空格的条件中加a[0]不等于空格,就是如果第一个单词前有空格的话,倒序后输出的单词后面也不会有空格,解决这个问题改的地方不多但确实是试了很多方法。

4.大作业

4.1.改造函数介绍

1.函数1

void CreateExp(char *exp,int level)
定义字符数组存放运算符
level作为switch语句的条件
if level=1
生成随机数,运算符,随机数储存在数组中
end if且跳出循环
if level=2 
生成对应随机式储存在数组中 
end if且跳出循环
if level= 
生成对应随机式储存在数组中 
end if且跳出循环
then 输出随机式

2.函数2

定义m储存随机数,sum储存计算结果,i为循环变量
定义字符变量oldc储存为数组中的运算符
do
if 字符为1-9中的数字 
then 将字符转为数值 并存到赋值给m
i++
end if
else 
if oldc为运算符'+'
将m累加到sum中
数组中下一个字符赋值给oldc
i++
end else
读到字符数组结束符中end do
返回运算结果sum

4.2 与原有函数代码比较

改造前函数1和改造后的函数1:
改造前用于生成随机运算式的函数我用了两个个,一个生成随机数,一个生成随机运算符,并且每一个随机数和运算符都定义为了全局变量,在主函数中也写了很长一串,用指针改造后,原本的两个函数的功能用一个函数就实现了,随机数和运算符的生成都通过储存到字符数组中来实现输出,减少了很多全局变量的使用,而且代码也简洁了很多,函数的功能没有重复。

改造前函数2和改造后的函数2:
改造前计算正确结果的函数传入了6个参数,用if来判断等级和switch语句来判断运算符,不同的运算符进行不同的计算,改造后的函数通过判断字符的类型来直接进行计算,省去了用switch语句中重复的部分,虽然改造后的函数没有比改造前函数的代码量少很多,但内容比原先的函数精简很多,但原先的函数更容易理解一点。

4.3 改进大作业总结

   这次的大作业虽然是在上次的作业基础上做修改,但难度不比上次的作业小,首先是因为我对指针的使用还不太熟练,很多地方在修改的时候我都会看一下做过的pta和课堂派的指针题目去了解一些指针的用法,然后再修改自己的代码,所以改造还是花了挺多时间的,也仍然存在bug,但相较与第一次的大作业确实减少了将近十个的全局变量的使用,代码量也减少了很多。
   上一次作业存在的优先级的问题还暂时没有完全解决,接下来也会继续思考完善要解决优先级问题的代码,希望在下一次的改进中程序的功能有更好的拓展性。
posted @ 2018-12-17 22:08  NOH8  阅读(231)  评论(2编辑  收藏  举报