C语言博客05--指针
C语言博客05--指针
1.本章学习总结
1.1 思维导图

1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
在本周的学习过程中,我们学习了指针的用法。说实话,指针的用法有点绕,之前一直没搞懂指针的传参,不懂指针与数组之间的关系和用法,导致做PTA时很吃力,最后还是先静下心把课本和笔记再看了一遍,才分清楚他们的用法。但是对于指针的运用还是很不熟练,并且思想上第一时间不会去考虑使用指针,且觉得指针相对于数组比较麻烦,可能是我们现在接触的题目还没有体现出指针的优势吧。
1.2.2 代码累计

2.PTA总分
2.1截图PTA中函数题目集的排名得分

2.2 我的总分:
总分:125分
3.PTA实验作业
3.1 PTA题目1
给定程序中函数fun的功能是:求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。
函数接口定义:
char *fun (char *s, char *t );
其中 s和t 是用户传入的参数。函数求 t指针所指的字符串在s指针所指的字符串中最后一次出现的地址,并返回,若未找到,则函数值为NULL。
3.1.1 算法分析
- 定义i,j,k为循环变量
- 定义count=0来统计字符串的有效长度,flag来控制返回值
- 定义字符型指针p;
- 用for循环统计传入的字符串的有效长度
- for i=0 to s[i]=='\0' do
- count++;
- end for
- 遍历字符串数组(母串)for i=0 to s[i]='\0' do
- 用k来控制子串的序号k=0;
- for j=i to s[j]不等于t[k]或s[j]='\0' do
- if 子串结束t[k+1]='\0' then
- 令p指针指向s[j-count+1]所在的地址;
- 令flag=1;
- end if
- if 子串结束t[k+1]='\0' then
- end for
- end for
- 若找到子串,则返回在字符串中最后一次出现的子字符串的地址;
- 若找不到,则返回NULL;
3.1.2 代码截图

3.1.4 PTA提交列表及说明

- Q1:第一次做的时候,认为是用指针先指向母串,然后再到最后一个字串出现的地方停下来,再返回指针所在的位置,但是我发现这样很难实现.
- A1:按上面的思路来,指针会随着遍历母串移动,很难确定什么时候是最后一次出现子串,所以此路不通。思路是没有问题的,可以稍微换一下实现的方法,可以先找出子串出现的最后一次地址,再令p指向最后一次出现子串的地址。
- Q2:当找到最后一次出现子串时,令p=&s[j]为什么不对?
- A2:当时的s[j]表示的时子串的最后一个字符,应该再减去子串的有效长度。
4.大作业
题目:实现小学四则运算。
在函数那章,我们已经实现小学四则运算这份作业,现在要求大家把之前设计函数升级改造,原来的函数大家都是用全局变量实现不同函数参数传递,这次作业要求改地址传递,减少全局变量的使用。
题目要求:
题目有3个难度级别,分别为
第一级是1位数的一步加减乘除计算
第二级是2位数的2步加减运算
第三级是3位数的2步加减运算
改进内容:
1.构造字符数组存放算术表达式
2.表达式是否合法
对于不合法或者超出该级别小学生学习范围的表达式,视为不合法,需重造一个。不合法表达式体现有除数为0的表达式、1,2级别中出现不能整除的除法表达式或其他不合法情况
4.1.改造函数介绍
1.函数1
伪代码
传入num1,num2,op,指针posture;
定义算式的答案result;
定义一个临时数组temp,用于存放由数字转换成的字符;
利用_itoa函数,num1由整型转换成字符型; //_itoa函数的具体用法 ——itoa(num,str,base)将num按十进制转为字符串存在str中
将temp复制到posture;
通过判断op随机得到的值,来赋予op运算符号;
if op=0 then
result=num1+num2;
将posture与‘+’连接起来;
end if
if op=1 then
result=num1-num2;
将posture与‘-’连接起来;
end if
if op=2 then
result=num1*num2;
将posture与‘*’连接起来;
end if
if op=3 then
result=num1/num2;
将posture与‘/’连接起来;
end if
将num2转换为字符并存在temp中;
将posture与由num2转换后的temp连接;
将posture与‘=’连接;
返回result;
第二、三级一次相似
代码截图

2.函数2
伪代码
在等级1的除法运算若产生的表达式不合法,则重新产生一个表达式
代码截图

待上一个函数返回result的值之后
if result为小数 then
清屏
返回到等级1中,重新生成一个式子
end if
4.3 与原有函数代码比较
函数1:
先前的代码:

改进之后的代码:

1.改进前的代码是用数字进行输出,而改进之后的数组是用字符数组存放
2.改进前有多个输出口,而改进之后代码使每一个等级的式子的输出都只有单一出口,改进之后的代码提高了代码的运行速率和可读性
函数2:
(由于之前并没有实现这个功能,我就直接截图后来的代码)

这段代码可以有效的避免出现不符合用户做题的式子,提高了用户的体验感。但是从代码上看,因为用了goto out,所以是代码的可读性下降了。并且,若过多是使用goto out很容易造成混乱。但是我还没想到怎么用指针来实现该功能。
4.4 改进大作业总评
因为在对指针的用法不熟悉,所以这次的大作业我做的非常吃力。并且并没有将整个大作业全部改为指针,主要是我认为,在这些部分,直接传参就可以解决了,不需要硬用指针。
还有就是在改的过程中,卡在了不知道如何将整型转换为字符串。后来,,,,上网问完百度之后,发现用一个——itoa函数就可以轻轻松松解决,所以,学会利用百度这个巨大的资源库是一个非常重要的技能。
C语言博客05--指针的更多相关文章
- c语言博客作业-指针
一.PTA实验作业 题目1: 1. 本题PTA提交列表 2. 设计思路(用代码表示扣分) 定义整型变量i,count记录平均分,实型变量sum保存总分 for i=0 to n sum = sum+* ...
- C语言博客作业指针
一.PTA实验作业 题目1:统计大于等于平均分人数 本题PTA提交列表 设计思路 定义形参s存放s的首地址,n存放人数m的值,aver存放平均分aver的地址 定义i控制循环,count用来统计高于等 ...
- C语言博客作业—指针
一.PTA实验作业 题目1: 求出数组中最大数和次最大数 1. 本题PTA提交列表 2. 设计思路 定义max表示范围数组中的最大数(初值设为a[0]),z表示找到的元素在数组中的位置: 定义指针*b ...
- C语言博客作业6---结构体&文件
C语言博客作业6---结构体&文件 1.本章学习总结(2分) 1.1思维导图 请以思维导图总结本周的学习内容.如下图所示: 1.2.学习体会 描述本周学习感受,也可以在这里提出你不理解地方.对 ...
- C语言博客作业5--指针
C语言博客作业5--指针 1.本章学习总结(2分) 1.1思维导图 请以思维导图总结本周的学习内容,如下图所示: 1.2本章学习体会及代码量学习体会 1.2.1学习体会 描述本周学习感受,也可以在这里 ...
- C语言博客作业06——结构体&文件
C语言博客作业06--结构体&文件 1.本章学习总结 1.1思维导图 1.2.本章学习体会 在本周的学习中,我们学习了关于结构体和文件的内容.结构体的本身并不难,但以结构体为基础的链表还是让我 ...
- C语言博客作业4--数组
C语言博客作业4--数组 1.本章学习总结 1.1思维导图 请以思维导图总结本周的学习内容,如下图所示: 1.2本章学习体会及代码量学习体会 1.2.1学习体会 描述本周学习感受,也可以在这里提出你不 ...
- C语言博客作业3--函数
C语言博客作业3--函数 1.本章学习总结 1.1思维导图 请以思维导图总结本周的学习内容,如下图所示: 1.2本章学习体会及代码量学习体会 1.2.1学习体会 描述本周学习感受,也可以在这里提出你不 ...
- C语言|博客作业10
问题 回答 C语言 博客作业10 这个作业要求在哪里 作业要求 我在这个课程的目标是 熟练循环语句的用法 这个作业在哪个具体方面帮助我实现目标 pta作业 参考文献 <C语言程序设计> 1 ...
随机推荐
- java集合介绍(List,Set,Map)
前言 介绍java的常用集合+各个集合使用用例 欢迎转载,请注明作者和出处哦☺ 参考: 1,<Java核心编程技术(第二版)> 2, http://www.cnblogs.com/Litt ...
- SSM —— 注解解析
@Component是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用. @Controller通过@Controller注解说明该类非 ...
- 我的第一个python web开发框架(37)——职位管理功能
对于职位管理,我们可以理解它为角色权限的管理,就像前面所说的一样,有了职位管理,后台管理系统绑定好对应的权限以后,新进员工.离职或岗位调整,管理员操作起来就非常的便捷了,只需要重新绑定对应职位就可以做 ...
- 算法学习之BFS、DFS入门
算法学习之BFS.DFS入门 0x1 问题描述 迷宫的最短路径 给定一个大小为N*M的迷宫.迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动.请求出从起点到终点所需的最小步数.如果不能到 ...
- React 精要面试题讲解(一) 单向数据流
react 单向数据流概念 'react框架是怎样的数据流向?'||'react单向数据流是怎样的概念 ?' 解答这个问题之前,我们首先得知道,js框架是个怎样的概念. 框架:具备一定**编程思想** ...
- F2 - Spanning Tree with One Fixed Degree - 并查集+DFS
这道题还是非常有意思的,题意很简单,就是给定一个图,和图上的双向边,要求1号节点的度(连接边的条数)等于K,求这棵树的生成树. 我们首先要解决,如何让1号节点的度时为k的呢???而且求的是生成树,意思 ...
- (light oj 1024) Eid (最小公倍数)
题目链接: http://lightoj.com/volume_showproblem.php?problem=1024 In a strange planet there are n races. ...
- Python----多元线性回归
多元线性回归 1.多元线性回归方程和简单线性回归方程类似,不同的是由于因变量个数的增加,求取参数的个数也相应增加,推导和求取过程也不一样.. y=β0+β1x1+β2x2+ ... +βpxp+ε 对 ...
- vscode 打开多个标签页
默认只打开2个,按如下设置可以支持多开: 路径C:\Users\admin\AppData\Roaming\Code\User下的settings.json添加一条配置:"workbench ...
- 使用redis可能出现的问题
1)缓存与数据库双写不一致 2)缓存雪崩 3)缓存穿透 由于缓存中不存在某个key,所有的请求都会落到数据库上,会对数据库造成很大压力,甚至崩溃 一个简单的方案是将不存在的数据也缓存起来(value值 ...