C博客作业--指针

Posted 那就这个名字

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C博客作业--指针相关的知识,希望对你有一定的参考价值。

一、PTA实验作业

题目1(6-5)

(1).本题PTA提交列表

(2)设计思路

(3)代码截图

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

  • 头一次的段错误,是因为循环条件写成了*f<=*l,而不是f<=l
  • 当只输入一个字符时,出现了问题
  • 原因在于当只有一个字符时j就为负数,不进入循环
  • 所以就改换为用strlen函数,去除无用的flag变量,使循环正常结束时输出1,在循环里如果满足条件的话就返回0

题目2(6-8)

(1).本题PTA提交列表

(2)设计思路

//定义循环变量i
//输入t字符串
for i=0 to *(t+i)!=\'\\0\';//遍历字符串
//判断m和i的关系
if m > i
    for i=0 to MAXN
        *(s+i)=\'\\0\';
    end i
else
    for i=0 to *(t+m-1)!=\'\\0\'  //赋值
        *(s+i)=*(t+m-1);
        m++;
    end i
*(s+i)=\'\\0\';//加上结束符

(3)代码截图

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

  • 这里我看错了题目,以为是找到和m相同的数,于是整个写错了。之所以拿到了一分,是因为当m的值超过t的长度时输出的是空。
  • 并且试了几次之后发现要在自定义函数里输入t字符串的值,于是加上了gets(t)一句
  • 这两个的错误原因是一样的,都是因为我把输出空字符串的条件设为m>=i,而题目要求的是在这种情况下要输出第m位字符

题目3 (6-10)

(1).本题PTA提交列表

(2)设计思路

//定义循环变量i,最大值所在的下标k,存放最大值的max
max=*p//给max一个初始值
//遍历寻找max,并记录其下标
for i=0 to *(p+i)!=\'\\0\'
    if *(p+i) >= max
        max=*(p+i);
	k=i;
    end if
end i
//循环后移
for i=k to i=1
     *(p+i)=*(p+i-1);
end i
*p=max;//把max放在第一位

(3)代码截图

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

  • 这里的错误就是在于把i--写成了i++,于是字符串开始无限增长,所以就段错误了

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

PTA排名

三、阅读代码

1)strstr函数

const char *mystrstr (const char *s, const char *sub_s)
{
    int i, j;
    int tmp = 0;
    for (i = 0; s[i] != \'\\0\'; i++) { // i遍历主串,包含子串即返回i下标位置
        j = 0; // 子串位置每次从头开始
        while (s[tmp++] == sub_s[j++]) { // tmp遍历主串,主做判断下标0到字符串末尾\\0
            if (sub_s[j] == \'\\0\')
                return &s[i];
        }
    }   
    return NULL;
}
  • 从代码可看出,其功能为返回第一次子串的下标。
  • 遍历主串,找到子串的首字符,并开始判断,若完全符合子串,就直接返回下标的位置;若循环正常结束,就返回空。
  • 优点就是使用自增的方式让下标变化,以及对主串遍历的处理方式。

2)strcpy函数

char *mystrcpy (char *dest, char *src)
{
    char *p = dest;
    while (*dest++ = *src++);
    return p;
}

  • 巧妙的使用字符串的结束符和自增,使得只用一行就可以完成指针自增,将字符串src赋值到字符串dest里,最后返回指向字符串dest开头的指针p,简洁巧妙的风格。

四、本周学习总结(3分)

1、学习总结

  • 结构体的运用——尤其是结构体数组和指针的运用在解决一部分编程题目(像是多个事物的不同属性都要用到)时对我们有极大的帮助。
  • 结构体数组或是指针都可以像普通变量一样被使用
  • 将结构体作为函数的形参时实际上是再次创建了一个结构体,所以不如直接使用结构指针指向结构体所在的内存来的方便。
  • 如何设置结构体使得题目难度降低也是一个要学习的地方

2、罗列本周一些错题

  • 错误原因是对于循环的边界条件没有想清楚
  • 错误原因在于没有完全理解结构体的使用方式,然后就没有发现d选项的错误:它的下标超出了数组长度。

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

C博客作业--指针

C博客作业--指针

C博客作业--指针

C博客作业--指针

C博客作业--指针

C博客作业--指针