C语言---指针
一、PTA实验作业
题目1:使用函数实现字符串部分复制
1. 本题PTA提交列表
2. 设计思路
主函数:
定义字符数组t,s
定义整型变量m,表示从第m个字符开始复制
输入m
调用函数
输出新的字符数组s
被调函数:
定义循环变量k,赋初值m-1
循环结束
只要满足*(t+k)不是终止符
将*(t+k)赋给*s
k++;
s++;
数组t遍历结束
给新数组s添终止符
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
这一题一开始想的是遍历数组,记录原数组长度j,在比较m和j的大小,如果m<j,从第m个元素开始赋给新数组,但是编译器一直运行不了,提交也先显示错误,设的变量也比较多。后来发现循环条件其实就有考虑今m超出数组长度的情况了,因为不会进入循环,所以干脆直接就让循环从第m个元素开始,只设置了一个循环变量。虽然编译器还是运行不了,但PTA通过了。
题目2:求子串在母串中最后一次出现的地址
1. 本题PTA提交列表
2. 设计思路
主函数
定义字符数组s, t, 指针变量*p;
输入字符数组s(母串)
输入字符数组t(子串)
调用函数
如果找到了子串在母串中最后一次出现的地址,输出新的字符数组
如果没找到输出Not found !
被调函数
定义循环变量i,j,k
定义变量m;
定义变量count,并赋初值0;
定义变量p,并赋初值0;
只要满足*(t+p)不是终止符
p++;
for i=0 to (s+i)=='\0'
如果*(s+i)d等于子串的首字符*t相等
for j=1 to *(t+j)!='\0'
如果*(s+i+j)和*(t+j)不相等了,跳出循环
如果循环正常结束且*(s+i+j)!='\0'
m=i,m存放子串在母串中开始位置
i加上子串长度,存放循环后i的值
当j==p,count++,count记录母串中子串出现次数
end for
for i=m,k=0 to *(s+i)!='\0'
*(s+k)=*(s+i)
实现从最后一次子串出现位置到字符数组结束的复制
*(s+k)='\0';
如果count==0
说明母串中没有出现子串
返回 NULL;
否则返回 s;
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
这一题寻找母串中子串,我用到了欧阳上课分享的方法,出现的一次错误是返回值弄反了,问题的话,寻找子串不是很熟练,主要照着欧阳的方法类似写出来的。
题目3:字符串串动变化
1. 本题PTA提交列表
2. 设计思路
(没选好题目,一不小心就画不下了,画了好久。。。)
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
一开始把max 赋给*p,运行结果总是开头是e,但是整个字符串没有A,删除这一语句,又有了,说明A被e覆盖了,改了几次没有改正确。只能采用很笨的办法,把max赋给最后一项,再冒泡到第一项(写这一题是想评论里可以分享这题他们的简便做法)
二、截图本周题目集的PTA最后排名
三、阅读代码
找两篇优秀代码贴图展示,并说明该代码功能是什么,优点是什么?
代码功能:删除母串中子串,并且删除后如果新的母串中还有子串继续删除
优点:比较简单好懂,利用了库函数。先找母串中子串,如果没有,返回NULL,如果有,注意记录母串中子串中开始位置,因为后面要将子串后元素接到这部分后面形成新的母串,然后重复上面步骤,最后输出删除完毕后最后的母串
代码功能:实现逆序输出
优点:其实这种方法上课老师也有分享过,适合数组比较大的,效率会高很多,因为常规方法就是遍历数组,记录数组长度,然后从最后一个开始输出,数组越大,效率越低。而这种方法,直接将最后一个数和第一个对调,第二个和倒二个对调,,,,,,循环次数少了很多
四、本周学习总结
1.自己总结本周学习内容。
1.1结构体类型定义一般形式
struct 结构名{
类型名 结构成员名1;
类型名 结构成员名2;
···
类型名 结构成员名n;
};
注意:不要忘记}后的;
数据类型名是struct和它后面的结构名一起组成的
1.2 结构体的嵌套定义
注意:先定义成员结构类型,再定义主结构类型
1.3结构类型的初始化
(1)采用初始化表的方法,大括号内各项用逗号隔开,按顺序赋给结构变量内各个成员,且要求数据类型一致
(2)结构变量的储存布局按照类型定义中成员的先后顺序排列
(3)一个数据结构变量所占内存空间是各个成员所占内存空间之和,用sizeof计算,单位是字节
1.4结构变量的引用
(1)格式: 结构变量名.结构成员名
(2)嵌套定义的结构变量中,每个成员按从左到右,从外到内的方式引用
1.5补充用法
(1)结构运算符优先级高于一般运算符
(2)如果俩个结构变量具有相同的类型,允许将一个结构变量的值直接赋给另一个
(3)结构变量可以作为函数参数,可以传递多个数据且参数形式较简单,但是传参时进行的结构数据复制使得效率较低。
1.6结构数组
与普通数组类似,不同之处在于每个数组元素都是一个结构类型的数据
对结构数组元素成员的引用一般格式: 结构数组名【下标】.结构成员名
1.7结构指针
(1)结构指针的值实际是结构变量的首地址,即第一个成员的地址
(2)访问结构成员的俩种方法
1.用p 如(P),num=101 括号不可少
2.用指向运算符-->访问指针指向的结构成员 如 p-->num=101
1.8结构指针作为函数参数
当结构成员众多的时,参数传递过程中就需要消耗很多空间,而使用指针作为函数参数只要传递一个地址值,极大提高了效率
2.罗列本周一些错题。
上面总结有如何引用结构体变量成员,要么用(*p)要么用指向运算符,所以选D
空1,根据主函数知道应该传给一个指针变量,结合被调函数,应该是将m的值传给n,所以填int n
空2,是数组元素与x值相同的情况,应填a[i]==x
空3,是循环条件,应填j<n-1
空4,表示从i开始,后面的元素往前移一位,所以字符数组长度缩短,填n=n-1