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

    0.展示PTA总分

    1.本章学习总结

    1.1 学习内容总结

    指针做循环变量做法
    定义sum,*p,a[10]
    for(p=a;p<a+10;p++)
    {
    sum=sum+*p;
    }
    
    字符指针如何表示字符串
    另字符指针指向字符串的首地址
    eg.char *p,str[10];
    p=str;
    
    动态内存分配
    (强制转化(函数名(数量,sizeof(类型名)))
    eg.p=(int*(calloc(n,sizeof(int)))
    
    指针数组及其应用
    指针数组中的每一个元素都是一个指针,若为字符指针数组,则元素分别指向一个字符串
    定义:类型名 *数组名[];eg.char *color[]
    其中,color[i]是一个地址,而color[i+1]是下一个字符串的首地址,color[i]+1是此字符串的下一个字符
    用于字符串的排序
    定义指针数组str[]
    if(strcmp(str1[i]>str[i+1])
    用于比较字符串的长度大小
    if(strlen(str1[i]>str[i+1])
    
    二级指针、行指针
    二级指针是指向指针的指针
    eg.int *p,a;
    int **pp;
    p=a;
    pp=p;
    则pp中存放的是指针p的地址,p存放a的地址,所以*pp,p,&a相同,**pp,*p,a相同
    行指针
    定义:int (*p)[n];行指针是指向一维数组的指针
    行指针可以和数组名互换使用,p[i][j]=a[i][j]
    
    函数返回值为指针
    返回的值是一个地址,一般为NULL或某数组某个元素的地址
    接受函数的返回值的变量是一个指针
    定义:eg.char *(char *p);
    
    • 指针储存的是地址
    • *定义指针:类型名 指针变量名
    • 要用指针时,必须先赋值,eg.p=&a
    • 指针只能指向同种类型的变量
    • 数组名时一个地址常量,可以用指针直接指向数组名,p=a等价于p=&a[0]
    • 若指针p指向数组a,*(p+1)等于a[1]
    • 计算数组中两个元素之间的个数,可用两个指针先赋值再相减
    • 定义一个指针指向字符串,则该指针指向字符串的首字符
    • 字符串复制函数strcpy(str1,str2),将str2赋值给str1
      字符串连接函数strcat(str1,str2),将str2连接到str1后
      字符串比较函数strcmp(str1,str2),比较str1和str2的大小,若相等,值为0,若str1>str2,值为正数,否则为负数

    1.2 本章学习体会

    • 指针的知识难度大,掌握不熟,经常运行程序时发现程序无法运行,但又找不出原因,应该为课本的基本知识还不熟悉的原因,需要将课本知识多看以便更好掌握
    • 两周代码量为700行,达到目标

    2.PTA实验作业

    2.1 题目名1(指针做函数返回值) 查找指定字符

    2.1.1 伪代码

    定义函数查找位置char* search(char* str, char c)
    {
    定义字符变量c,字符数组s,指针*position
    输入查找字符c,给s赋值
    调用函数search
    if(position为0)
         表示找不到该字符
    else
        printf(输出下标)
    }
    函数search内容
    {
       定义指针*pos
       pos=NULL;
    while(遍历字符串)
    {
      if(相等)
         pos=str;
      str++;
    }
    

    2.1.2 代码截图


    2.1.3 总结本题的知识点

    **1.数组中两个元素之间元素的个数用两个指针相减表示,eg.position-s
    2.需要用到指针的地址时,要习惯性先将地址赋值NULL
    3.查找指定字符做法
    若pos还是NULL,则找不到,反之则找到
    pos =NULL;
    while (str != '')
    {
    if (
    str == c)
    {
    pos=str;
    }

    	str++;
    }**
    

    2.1.4 PTA提交列表及说明


    1.多种错误:忘记给pos赋初值,使pos=NULL
    2.部分正确:输出时直接输出position,position为地址,应该输出position-s
    3.部分正确:格式错误

    2.2 题目名2说反话

    2.2.1 数据处理

    {
        定义指针pEnd,pBegin,p;
        遍历输入的句子,求出其长度pEnd;
        p=pEnd-1;
        while (p != pBegin)
        {
           当*p!=' ',长度len++;
           当*(p-1)=' ',输出单词,并让len=0;
        } 
        输出最后一个单词
    }
    

    2.2.2 代码截图


    2.2.3 总结本题的知识点

    • **逆向遍历字符串方法
      while(p!=首地址)
      {p--}
    • printf("%.*s",len,p)可以输出从p开始的长度为len的字符串
    • 找单词,p是字母,而p的前一个或后一个是空格**

    2.2.4 PTA提交列表及说明

    • 错误:没有再输出一个单词后将length=0
    • 错误:没有输出第一个单词,因为循环结束时第一个单词在循环内部不会被输出。解决方法:if(*p=' ')输出第一个单词
    • 输出第一个单词时,直接输出length.解决:输出length+1

    2.3 题目名3字符串的冒泡排序

    2.3.1 数据处理

    {
       for()第一层循环i从0到k
          for()第二层循环j从0到n-i-1
               if (strcmp(a[j], a[j + 1]) > 0)
                         {
                              交换a[j]和a[j+1]
                         }
    }
    

    2.3.2 代码截图


    2.3.3 总结本题的知识点

    • 用二维数组来存储多个字符串
    • 输入方式for (i = 0; i < n; i++)
      scanf("%s", &a[i]);
    • 字符串之间的大小比较用strcmp(),复制用strcpy()
    • 冒泡排序法第一层循环若为for (i = 1; i <= k; i++),则第二层循环for (j = 0; j < n - i; j++)
    • 第一层循环若为for (i = 0; i < k; i++),则第二层循环for (j = 0; j < n - i-1; j++)

    2.3.4 PTA提交列表及说明

    • 错误1:冒泡法错误,两层循环为
      for (i = 1; i <= k; i++)
      for (j = 0; j < n - i-1; j++)
      将j<n-i-1改为j<n-i
    • 错误2:格式错误,没有换行,改为printf(".. ",..)

    3.阅读代码

    - **代码功能,删除a中出现的所有子串b后的结果字符串。**
    - *可学习地方:strstr(str1,str2)函数,若在str1中找到str2,则返回str2在str1中的首地址,否则返回NULL
                 strcat是从''的位置开始连接,该代码利用找到后另*p=''来制造连接点*
    
  • 相关阅读:
    SSH入门常用命令
    Charles基础
    经典测试用例
    Fiddler基础教程
    增、删、改、查
    一位软件测试工程师浅谈用户体验
    用户体验测试点
    IIS测试环境搭建
    禅道Bug管理工具环境搭建
    LineageOS源码定制手机系统
  • 原文地址:https://www.cnblogs.com/sym2446/p/11915547.html
Copyright © 2011-2022 走看看