zoukankan      html  css  js  c++  java
  • C博客作业05--指针

    0.展示PTA总分

    1.本章学习总结

    1.1学习内容总结

    1.指针做循环变量做法

    基本做法如下:

    int a[10];
    int *p;
    p=a;//指针指向a数组的首地址
    fgets(a,10,stdin);
    for(p=a;*p!='0'&&*p!='
    ',p++)
    {
    循环结构;
    }
    

    2.字符指针如何表示字符串

    基本做法如下:

    char str[]="abc";
    char *p;
    for(p=str;*p!='0'&&*p!='
    ',p++)
    {
    循环结构;
    }
    

    3.动态内存分配

    1.动态内存分配的步骤
    (1)了解需要多少内存空间。
    (2)利用C语言提供的动态分配函数来分配所需要的储存空间。
    (3)使指针指向获得的内存空间,以便用指针在该空间内实施运算或操作。
    (4)当使用完毕内存后,释放这一空间。

    2.动态存储分配函数
    1.malloc()
    函数原型是 : void * malloc(unsigned size)
    2.calloc()
    函数原型是 : void * calloc(unsigned n,unsigned size)

    两者的区别仅在于calloc函数在分配后还把存储块里全部初始化为0,而malloc函数不会。

    3.动态存储释放函数free()
    函数原型为 : void free (void * ptr)

    这个函数十分关键却又经常被人遗忘,故最好在使用动态存储分配函数时,自动先在后面补上free函数。

    4.指针数组及其应用

    1.指针数组的定义
    一维指针数组定义的一般格式为:
    类型名 *数组名[数组长度];
    char * color [5];

    2.指针数组的应用
    可以用指针数组处理多个字符串
    如课本P269页char*pcolor[]={“red","blue","yellow","green","black"};

    4.二级指针、行指针

    1.二级指针
    二级指针,也称指向指针,一般定义为:

    类型名**变量名;
    

    2.行指针
    行指针出现在二维数组中
    如二维数组a[2][3];
    a[0]代表的是二维数组第零行的首地址相当于&a[0][0];
    a[1]代表的是二维数组第一行的首地址相当于&a[1][0];
    a[0]+1代表的是二维数组第零行,第一列的地址相当于&a[0][1];

    5.函数返回值为指针

    当函数返回值的类型是指针时,要返回某个指针,不过要注意的是,不能在实现函数时返回在函数内部定义的局部数据对象的地址,
    这是因为所有的局部数据对象在函数返回时就会消亡,其值不再有效。

    1.2本章学习体会

    1.由于最近各种考试扑面而来,有点顾不上C的学习,导致PTA也没怎么刷,现在线代已经考完了,接下来会全力投入C的学习当中。
    2.这两周的代码量:334行。

    2.PTA实验作业

    2.1 6-7 输出月份英文名

    2.1.1 伪代码

    定义一个指针数组months[13];
    months[0]表示wrong input!,其余的分别表示月份
    if (n < 1或n>12)n = 0;end if;
    return 英文月份;
    

    2.1.2代码截图

    2.1.3总结本题的知识点
    这题是指针数组的简单运用,但一开始我的做法不是指针数组,而是用二维数组,但是后来发现二维数组是在函数内部定义的,函数结束时,它的生存期只在函数内部,所以不能用二维数组。

    2.1.4PTA提交列表及说明

    1.部分正确:使用的是二维数组,如上总结,本题不能使用二维数组,要用指针数组。

    2.2 6-2 jmu-c-二分查找

    2.2.1 伪代码

    定义左右端点和中间点left,right,mid;
    while(left<=right)
    mid = (left + right) / 2;//二分
    (*count)++;
    if (中间值=key])return mid;end if
    else if (中间值>key)right = mid - 1;end else if
    else left = mid + 1;end else
    }
    

    2.2.2代码截图

    2.2.3总结本题的知识点
    形参*count是一个指针,函数中不能像之前那样count++,而是要(*count)++

    2.2.4PTA提交列表及说明

    答案错误:一开始写的是*count++,没有括号,后来发现及时改正。

    2.3 6-6 查找子串

    2.3.1伪代码

    主串s:The C Programming Language
    子串t:ram 
    char *search(char *s,char *t)
    {
    定义主串遍历指针sPtr,tPtr;
    while(*sPtr)
    {
    while(*sPtr== =*tPtr)
    {sPtr++,tPtr++; }// 相同字符,则2指针同时移动
    若子串在结束符,则返回子串在主串起始地址
    若子串不在子串起始地址,则tPtr=t,sPtr 不动
    sPtr++ ;
    }
    找不到,返回NULL
    }
    

    2.3.2代码截图

    2.3.3总结本题的知识点
    指针为NULL的状态,返回字符串所在位置:地址相减。字符相同,同时遍历2个字符串。

    2.3.4PTA提交列表及说明

    3.阅读代码

    1.代码功能:在 haystack 字符串中找出 needle 字符串出现的第一个位置,即实现strstr函数。通过两个标记对字符串进行遍历,进行边界处理之后,使用 k 进行角标标记,first 用于 拨正 i 循环的起点。
    2.代码优点:与PTA上做的查找子串不同,他进行了两次标记进行遍历,当needle是空字符串时,要返回0。

  • 相关阅读:
    测试结束的标准
    坚持“5W”规则,明确内容与过程
    单元测试过程各阶段的输入、输出是什么?
    集成测试过程各阶段的输入、输出是什么?
    系统测试过程各阶段的输入、输出是什么?
    Mybatis的优点和缺点?
    Hibernate中session有几种创建方式?都有那些区别?
    AQS结构
    JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
    Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?
  • 原文地址:https://www.cnblogs.com/yeanxxx/p/11965944.html
Copyright © 2011-2022 走看看