C博客作业--指针

Posted 王宵莹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

以上是关于C博客作业--指针的主要内容,如果未能解决你的问题,请参考以下文章

C博客作业--指针

C博客作业--指针

C博客作业--指针

C博客作业--指针

C博客作业--指针

C博客作业--指针