C博客作业05—指针
1.本章学习总结
1.1思维导图

1.2本章学习体会及代码量学习体会
1.2.1 学习体会
- 理解了指针在代码中的使用方法,学会使用指针进行参数操作
- 学会了结构体的定义方式与结构体的使用
- 经过持续一个周末的大作业重写,加强了指针在函数中的应用,学会利用数组与指针的关系进行操作
1.2.2 代码累计

2.PTA总分
2.1截图PTA中的排名得分

2.2 我的总分
指针:125
总分:125
3. PTA实验作业
3.1 PTA题目1
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
3.1.1 算法分析
输入字符串a
mark=strlen(a)
for i=mark-1 to 0
if a[i]!=空格 且 ( a[i-1]=空格 或 i = 0) //a[i]为单词首字母
p=&a[i]
flag++
if flag!=1
输出空格
end if
do
{
输出*p
p++ //指针移到下一位
}while *p!=空格 且 *p!=\0
end if
end for
3.1.2 代码截图

3.1.3 测试数据

3.1.4 PTA提交列表及说明

说明:
Q1:数组范围不够大造成越界
A1:数组范围加大至500001
Q2:发现最开始的思路出现了大量重复的无用判断
A2:修正后运行时间大幅缩短
4.大作业
4.1 介绍改进函数
4.1.1 函数CreateExp
mk标记数组初始位置
if level=1
mark=1 //一个操作符
else
mark=2 //二个操作符
end if
指针移动至第一个操作符
do
{
do
{
//调用CreateOp函数填入运算符,同时指针向前移动
//调用CreateNum函数填入运算数,同时指针向前移动
//指针移动到下一个操作符的位置
mark--
}while(mark)
*exp='='
*exp+1='\0' //结束字符串
调用CreateNum函数填入最后一个运算数
exp=mk //指针回到字符串起始位置
}while(调用IsExp函数查错)
输出字符串

下级函数CreateNum
根据level生成随机数
do
{
p-- //指针前移
*p=a[i]%10+'0'
a[i]=a[i]/10
}while(a[i]!=0)
返回指针位置

关于函数CreatNum中为什么不使用rand()%100和rand%1000
- 使用rand()%100和rand%1000时发现了神奇的bug
- 计算式出现了不可能存在的4位数字
- 输出三个运算数查错
- 发现运算数没有问题
- 观察输出的计算式 发现bug所在
- 由于使用以下式子移动指针
- 导致指针移动时留下了 红色标记的空位 并被随机填充
- 将这类情况一一用IsExp函数剔除,感觉不如直接在生成时直接避免
下级函数CreateOp
根据level生成除数num
flag=rand()%num
根据flag生成相应运算符
*q=生成的运算符
返回指针位置

4.1.2 函数IsExp
if level=1 且 操作符 为 /
if 运算数2 为 0
return 1
if 计算式不能整除
return 1
end if
return 0

在CreateExp函数中的使用方法

4.1.3 函数ComputeExp
定义数组a存放运算数和得数
定义字符数组op存放运算符
for (i=0 ,j=0;(exp+i)!='=';i++) //遍历计算式
if *(exp+i)为数字
a[j]=a[j]*10+*(exp+i)-'0' //将数字字符存入a[i]中
else
op[j]=*(exp+i) //运算符存入op
j++
end if
根据运算符进行计算
将结果存入a[3]
if a[2]存在
进行第二步运算
将结果存入a[3]
end if
return a[3] //返回正确答案

4.2 和原版的比较
4.2.1 函数CreateExp
原版代码:


- 原版的生成运算符方式头异常的铁,使用嵌套二层switch把所有可能的情况全部列举出来,形成大量重复代码
- 新版代码采用指针移动的方法输入字符,简化了整个函数
- 原版直接输出计算式的符号与数字
- 新版将计算式存入字符串后输出,同时也将计算式保留,使函数ComputeExp可以使用该计算式
4.2.2 函数IsExp
emmm原版根本没有这个函数
4.2.3 函数ComputeExp
原版代码:(见4.2.1图)
- 原版代码在生成运算符后立即对前后两个运算符进行运算,思路过于直白,重复代码过多
- 新代码将输出的字符串逆向转换为数字和运算符,并计算出正确答案
4.3 改进大作业总结
- 原版的大作业只用了183行代码/三个函数完成了四则运算的操作,而且检查输入错误的方法异常诡异,完全没有半点改的空间
- 主要是因为某位老哥在他上次的作业完美重现了我诡异的代码,事实证明改了变量名代码查重就没用了,我想看一下那位老哥要厉害到什么程度才能改我上次做的神奇玩意
- 所以本次大作业除了输入提示和上次长得一样,其它全盘推翻重写
- 学会细化函数的分工,使main函数尽可能简洁
- 用输入字符串代替输入字符,防止程序出错
- 用指针代替了全局变量实现函数间参数改变
- 用查错函数IsExp解决了小学生四则运算中出现的我也不会做的题,如:3/7
- 有多处使用了字符串转数字/数字转字符串的操作,一时半会没法整出一个统一的函数进行转换,下次将再改进
C博客作业05—指针的更多相关文章
- C语言博客作业05——指针
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量 1.2.1学习体会 可能因为之前数组那块儿的作业拖得太久了,以至于我觉得指针学的好快,还没反应过来就教完了,然后一开始做题的时候,就是一脸 ...
- C语言l博客作业05
问题 回答 这个作业属于哪个课程 C语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/9830 我在这 ...
- C语言I博客作业05
内容 答案 这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 C语言I作业05 我在这个课程的目标是 更熟练的运用编译函数问题 这个作业在哪个具体方面帮助我实现目标 PTA实验作业 参考文 ...
- C语言|博客作业05
这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/9825 我在这个课程的 ...
- c语言1博客作业05
一.本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/9831 我 ...
- C语言Ⅰ博客作业05
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/9827 我在这个课程的目 ...
- C语言博客作业05
这个作业属于哪个课程 C语言程序设计II 这个作业要求在那里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/9827 我在这个课程的目 ...
- DS博客作业05——树
1.本周学习总结 1.1思维导图 1.2学习体会 学习:相比于之前的数据结构,树多了很多性质,相应的也多了很多计算题,不得不说,专有名词也是颇多.觉得树最独特的地方就是它的兄弟.孩子结点,用以组成了它 ...
- DS博客作业05—树
1.本周学习总结 1.1思维导图 1.2学习体会 本周学习了树的相关知识,了解了树结构体的应用和基本操作 学习了二叉树的遍历,创建以及哈夫曼树的相关操作 通过树的构建等操作熟练了递归的使用 2.PTA ...
随机推荐
- leetcode116
class Solution { public: void connect(TreeLinkNode *root) { if (root != NULL) { queue<TreeLinkNod ...
- How do I list subversion repository's ignore settings
If it is Windows and you are using TortoiseSVN, then right-click on a folder of the working copy, go ...
- idea提示,格式化代码,清除不使用的包快捷键,maven自动导jar包
一.提示快捷键 idea默认快捷键是ctrl+space,通常和别的软件快捷键冲突,所以将快捷键修改为alt+/ 二.格式化快捷键ctrl+alt+l,通常和qq.tim快捷键冲突,请修改qq或者ti ...
- IrisBlur - 虹膜模糊
[IrisBlur - 虹膜模糊] IrisBlur模拟人眼的虹膜,本质上是一个控制程度更高的FieldBlur,在FieldBlur的基础上暴露了更多的参数. Choose Filter > ...
- 录制手机的视频,转换成gif
Android: 通过adb命令去进行录屏,然后将录制的视频转换成gif图片: 前提:确保电脑上安装了adb,且Android的level高于19. 1.adb shell screenrecord ...
- LinuxC编程怎么MakeFile
在linux下我们都知道可以利用命令gcc hello.c -o hello 命令来变异c语言程序.其中gcc hello.c -o hello中 hello是给这个编译后生成的可执行文件取个别名 再 ...
- 解决opacity属性在低版本IE浏览器下失效的方法
以前,一直都以为ie9以下的版本不支持opacity属性.所以就同时使用 opacity和ie独特的filter蒙版.但是有些时候需要一些动态的效果,就比如层的渐渐消失,隐藏,就需要使用动态变化的op ...
- Halcon中缩放Region或XLD的方法研究
在Halcon中,Region和XLD之间可以彼此转换.但这种转换并不是“无损”的,XLD可以是不闭合的,但是Region一定是闭合的.因此,如果将不闭合的XLD转为Region,然后再转回XLD,那 ...
- 电脑清缓存(C盘占空间)
电脑缓存目录: 1.取消文件隐藏 2.找到C:\Users\lwx351192\AppData\Local\Temp目录下的三个子文件夹local,locallow,roaming里面的文件都可删除, ...
- BI失败的原因
最最重要的, 要有个清晰的目标和范围. 有些客户, 完全脑袋一热开始上BI, 连根本上要BI来解决什么问题都不知道.作为企业的CIO, 首先要知道上BI项目是不是符合企业的战略目标, 是不是能给企业带 ...



