zoukankan      html  css  js  c++  java
  • C语言博客作业—2019-指针

    0.展示PTA总分

    1.本章学习总结

    1.1学习内容总结

    • 指针做循环变量:即将指针作为循环变量,在指针移动到某一个位置的时候,达到了循环结束的条件,循环结束。

    for (p = a; p <= a + 9; p++)//即指针p作为循环变量 { sum = sum + *p; }

    • 字符指针如何表示字符串:字符指针指向了字符数组的首地址。

    定义指针*p,字符数组a[] p=a[]//字符指针表示字符数组a[]的首地址

    • 动态内存分配:利用malloc或calloc(区别:malloc动态申请的内存不会自动赋初值,而calloc则会自动赋予初值0;相同点:都需要在结束时释放动态分配的内存)
      if ((p = (int*)malloc(或calloc)(n * sizeof(int))) == NULL)//动态申请内存 { printf("Not able to allocate memory. "); exit(1); } free(p);//释放申请的内存

    • 二级指针、行指针:二级指针指指向一级指针是指针,即指向地址的指针。行指针是指指针本身就指向某一行。
      二级指针:int **p//二级指针
      行指针:int(*p)

    • 指针数组及其应用:利用指针数组存放指针地址,使用时利用指针数组中的元素来输入或者输出某地址的内容。

    char* str[100]; //开辟指针数组 for (i = 0; i < n; i++) { str[i] = (char*)malloc(10 * sizeof(char));//申请空间 scanf("%s", str[i]);//输入字符串 str[1]=10;//利用指针数组改变某地址存储的数据 }

    • 指针做函数返回值及其注意:不能在函数实现时返回函数内定义变量的地址,因为函数结束时这些对象在函数返回时就会消亡。
      因此,函数指针的函数一般都返回全局数据对象或者主调函数中数据对象的地址。

    1.2本章学习体会

    • 学习较困难,在使用指针作为返回值是时常出问题。
    • 大概1400行左右(反复研究教材上的题目),我个人感觉达标。

    2.PTA实验作业

    2.1合并两个有序数组

    2.1.1 伪代码

    定义整形flag并赋值为1 定义整形循环变量i 定义整形M,N用来暂存a,b数组的长度 while m,n都不等于0 do flag=2 if( *(a + m - 1) < *(b + n - 1)) *(a + m + n - 1) = *(b + n - 1) n减一 else if ( *(a + m - 1) > *(b + n - 1)) then *(a + m + n - 1) = *(a + m - 1) m减一 if (*(a + m - 1) = *(b + n - 1)) then *(a + m + n - 1) = *(a + m - 1); *(a + m + n - 2) = *(b + n - 1); m,n都减一 end if if(m==0且flag==2) 将b数组剩下的数字都交到a数组前端 if(m==0且flag==1) 将b数组全部直接移入a数组

    2.1.2代码截图

    2.1.3 总结本题的知识点

    • 可以通过指针来处理数组,来改变数组某元素所存储的内容。
    • 指针可以作为参数实现函数数据的传递。

    2.1.4 PTA提交列表及说明


    因为上课讲过,所以一遍过。

    ***2.2 (指针做函数返回值) 查找指定字符

    2.2.1 伪代码

    定义len为读入字符串的长度,index初值为 - 1(只要小于0都可以) 读入需要查找的字符ch 读入字符串 for (i = 0; i < len, i++) if (找到) index=i; end for if index不等于初值 输出找到的i else 输出Not Found end if

    2.2.2 代码截图

    2.2.3 总结本题的知识点

    使用scanf时字符串末尾要加上' ',否则无法输出。
    使用for循环寻找时要注意连续多空格的判断。

    2.2.4 PTA提交列表及说明


    部分正确:未考虑到多空格问题。

    2.3 填充矩阵

    2.3.1 伪代码

    定义整形变量 i; 定义整形变量 j; for (i = 0; i < n; i++) for (j = 0; j < n; j++) if (i + j == n - 1) p[i][j] = 1; else if (i + j < n - 1) p[i][j] = 3; else p[i][j] = 2; end for

    2.3.2 代码截图

    2.3.3 总结本题的知识点

    使用行指针是要注意(*p)

    2.2.4 PTA提交列表及说明


    答案错误:填充的数值位置不正确。
    运行超时:循环出现错误,循环无法结束。

    3.阅读代码


    使用bool函数,返回真假。而我一般使用flag或者是1/0判断真假,这个函数可以学习一下。
    使用递归函数dog,刚好我们前两天也学了递归函数,学习该代码的优秀地方,dog函数是一个void函数类型,但是有一些判断语句后,加了return,直接结束了该函数的运行,方便而且节省时间
    给a[0]=-100000,b[0]=1灵活赋值,然后代入dog函数里面,完成函数功能。

  • 相关阅读:
    eth私有节点搭建
    angularjs 文件类型格式校验
    Windows Server 2019, 2016 or 2012 安装telnet
    Oracle导致Redo日志暴增的SQL语句排查
    log4j waf 绕过技巧
    jtemplate使用笔记
    NPOI2.0
    关于java同一个类互相调用,spring事务失效问题
    java 将redis的数据批量取出来的时候遇到json格式转换异常
    超级好用的文档转换工具
  • 原文地址:https://www.cnblogs.com/whb1/p/11962117.html
Copyright © 2011-2022 走看看