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

    一、PTA实验作业

    题目1:输出月份英文名

    1. 本题PTA提交列表

    2. 设计思路

    3.代码截图

    4.本题调试过程碰到问题及PTA提交列表情况说明。

    选择这一题是因为这道题的通过率较低。为什么会这样定义呢“char *month[]”,当时只是随便尝试一下输入十二个月份,没想到可以,于是上网查找一下,这种用法叫指针数组,数组中的每一个都是指针,具体介绍我将写在总结中。

    题目2:字符串串动变化

    1. 本题PTA提交列表

    2. 设计思路

    Begin
    
    定义整型变量max,i,j;定义字符型变量temp;
    max赋值为0;
    for i=1 自增到 *(p+i)为0
        if *(p+max)小于*(p+i)
            那么max赋值为i;
    temp赋值为*(p+max);
    for j=max to j=1
        *(p+j)赋为*(p+j-1);
    *p赋值为temp;
    
    End
    

    3.代码截图

    4.本题调试过程碰到问题及PTA提交列表情况说明。

    一开始让j=i开始复制,导致错误,应该从max开始移动,后把i改成max

    题目3:求子串在母串中最后一次出现的地址

    1. 本题PTA提交列表

    2. 设计思路

    Begin
    
    定义整型变量i,k,p,count;
    
    for i=0 自增直到s[i]为0
        if s[i]等于t[0]
        then { k赋值为i;
                 count赋值为1;
                 for p=1 自增直到t[p]为0
                     if s[i+p]不等于t[p]
                     then { count 自减;
                        break;} }
    if count不等于0 then 返回 (s+k);
    else 返回 NULL;
    
    End
    

    3.代码截图

    4.本题调试过程碰到问题及PTA提交列表情况说明。

    这是原来的部分代码

    但是这样不能保存子串最后一次出现在s字符串中的首地址,而且不能做到在s字符串中多次判断子串是否存在,于是添加了k来保存i,当s[i]==t[0]时count=1,如果后面的字符串与子串不同,则令count自减,这里其实用flag也可以,最后如果count为0,则说明s字符串中不存在子串。

    二、截图本周题目集的PTA最后排名。

    三、阅读代码

    判断合法字符

    题目

    代码

    这篇是梦冰的代码。当时我怎么写也不对,梦冰利用自定义函数来做,代码看起来更加整齐简洁,判断是否是合法字符,先判断首字符是否符合条件,如果符合再进入循环判断是否全部符合,思路简单清晰。

    输出GPLT

    题目

    代码


    原本以为这道题很难,但是其实只要数出GPLT的个数然后按顺序输出就可以了,简单有效的方法!

    四、本周学习总结

    1.自己总结本周学习内容。

    结构

    结构是C语言中一种新的构造数据类型,能把有内在联系的不同类型的数据汇聚成一个整体,使它们相互关联。同时,结构又是一个变量的集合,可以按照对基本数据类型的操作方法单独使用其成员的变量。

    (1)结构类型定义的一般形式:

    struct 结构名{
        类型名 结构成员名1;
        类型名 结构成员名2;
        ...
        类型名 结构成员名n;
    };
    

    (2)关键字struct和它后面的结构名一起组成一个新的数据类型名。C语言中把结构的定义看做一条语句,所以结构的定义以分号结束。

    (3)在结构定义成员时所用的数据类型也可以是结构类型,例如:

    struct address{
        char city[10];
        int code;
        int zip;
    };
    struct nest_student{
        char name[10];
        struct address addr;
        int computer,english,math;
        double average;
    };
    

    (4)注意:在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。

    (5)无类型名定义变量的方式:

    struct {
        类型名 结构成员名1;
        类型名 结构成员名2;
        ...
        类型名 结构成员名n;
    } 结构变量名表;
    

    需要注意的是,由于没有给出结构名,在此定义语句后面无法再定义这个类型的其他变量,除非把定义过程再写一遍。

    (6)一个结构类型变量所占的内存空间是其各个成员所占内存空间之和,可以直接用sizeof计算,如 sizeof(struct student),sizeof的运算对象可以是结构类型名,也可以是结构变量名,计算结果以字节为单位。

    (7)如果两个结构变量具有相同的类型,则允许将一个结构变量的值直接赋给另一个结构变量,如 s1=s2 。

    (8)结构成员操作符为“.”

    (9)使用结构指针时,假如指针p=&s1,要用p访问的结构成员进行赋值,则 (p).num=100,另,注意“.”的优先级高于“*”的优先级;还可以用->进行访问,如 p->num=100。

    (10)结构指针作为函数参数,如:

    自定义函数 int update_score(struct student *p,int n,int course)
    调用语句    pos=update_score(students,n,num)   /*students为结构数组名*/
    

    指针数组与数组指针

    • 数组指针是指向数组地址的指针,其本质为指针
    • 指针数组是数组元素为指针的数组(例如 int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。
    • 指针数组可以作为函数的参量使用,使用方式与普通数组类似。
    • 指针函数与二维数组的对比
      • 二维数组:如char string_1[10][10]只要定义了一个二维数组,无论赋不赋值,系统都会给它分配相应空间,而且该空间一定是连续的。其每个元素表示一个字符。可以通过指定下标对其元素进行修改。
      • 指针数组:如char *str_B[5] 系统至少会分配5个连续的空间用来存储5个元素,表示str_B是一个5个元素的数组,每个元素是一个指向字符型数据的一个指针。
      • 如这样定义:
    char a[3][8]={"gain","much","strong"};
    char *n[3]={"gain","much","strong"};
    
    那么系统给数组a分配了3×8的空间,而给n分配的空间则取决于具体字符串的长度。此外,系统分配给a的空间是连续的,而给n分配的空间则不一定连续。

    由此可见,相比于比二维字符数组,指针数组有明显的优点:一是指针数组中每个元素所指的字符串不必限制在相同的字符长度;二是访问指针数组中的一个元素是用指针间接进行的,效率比下标方式要高。 但是二维字符数组却可以通过下标很方便的修改某一元素的值,而指针数组却无法这么做。

    (参考自百度百科)

    2.罗列本周一些错题。

    课堂派5.

    应该选D. A中的“p++”也是地址,与p的用法相同。

    课堂派2.

    不能直接对*(p+2)全部赋值,改正:

    *(p+2).num=102030;
    *(p+2).name[80]="数据结构";
    *(p+2).price=40;
    
  • 相关阅读:
    57-java 开发环境配置,mysql解压版安装
    56-MyBatis关联映射之一对多映射
    55-mybatis dao 和 映射xml
    54-jquery发送请求 json 转化等
    58-wxPython 嵌入html页面
    57-2015-第六届蓝桥杯国赛 java B组真题与解析
    【读书笔记】Effective Modern Cpp(二)
    【读书笔记】Effective Modern Cpp(一)
    【剑指offer】汇总
    【剑指offer】序列化二叉树
  • 原文地址:https://www.cnblogs.com/wwwwxy128/p/8051929.html
Copyright © 2011-2022 走看看