zoukankan      html  css  js  c++  java
  • 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)==''
    		如果*(s+i)d等于子串的首字符*t相等
    			for j=1 to *(t+j)!=''
    				如果*(s+i+j)和*(t+j)不相等了,跳出循环
    				   如果循环正常结束且*(s+i+j)!=''
    				     m=i,m存放子串在母串中开始位置
    				     i加上子串长度,存放循环后i的值
    				       当j==p,count++,count记录母串中子串出现次数
    	end for
    	for i=m,k=0  to *(s+i)!=''
    		*(s+k)=*(s+i)
            实现从最后一次子串出现位置到字符数组结束的复制
    	*(s+k)='';
    	 如果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

  • 相关阅读:
    AngularJs学习笔记Understanding Angular Templates
    AngularJs学习笔记Creating Services
    AngularJs学习笔记E2E Testing
    AngularJs学习笔记Using $location
    AngularJs学习笔记Injecting Services Into Controllers
    AngularJs学习笔记unittesting
    AngularJs学习笔记Guide教程系列文章索引
    C语言 自幂数
    C# 虚拟键盘核心方法 Tech
    [转]SQLite SQL语句结构详解 Tech
  • 原文地址:https://www.cnblogs.com/tajiyu/p/8047481.html
Copyright © 2011-2022 走看看