0.展示PTA总分

1.本章学习总结

1.1 学习内容总结

  • 指针与数组

数组名本身就是一个地址即指针值;
数组的基地址是在内存中存储数据的起始位置,它是数组中的第一个元素;
int a[];
int *p=a;

  • 字符指针

字符指针:指向字符型数据的指针变量。每个字符串在内存中都占用一段连续的存储空间,并有唯一确定的首地址。即将字符串的首地址赋值给字符指针,可让字符指针指向一个字符串。
字符数组的示例:char str[]="this is a string";
字符指针:char * str="this is a string";
字符指针只占用一个可以存放地址的内存单元,用来存放字符串首字符的地址;字符数组占用的是连续的存储单元,每个数组元素放字符串的一个字符;

  • 指针做函数参数

在c语言中实参和形参之间的数据传递是单向的“值传递”方式,调用函数不能改变实参变量的值;指针变量也相同;
要改变某个变量的值,要改变指针变量的值,即*p的值,指针变量所指内容的改变,改变地址是不行的;

  • 二级指针、行指针

二级指针:指向指针的指针,它存放的是一级指针的地址。
int p;
int **q;
q = &p;就是把一级指针p的地址赋值给二级指针q。
行指针:数据类型(
p)[m];
定义:指向由m个元素组成的一维数组的行指针变量

  • 指针数组及其应用

指针数组可以作为函数的参量使用,使用方式与普通数组类似。
指针数组常适用于指向若干字符串,这样使字符串处理更加灵活方便;
指针数组一般用于处理二维数组。指向一维数组的指针变量用于处理二维数组也很方便。
数组指针和指针数组在处理同一个二维数组时,数组指针的元素个数和指针数组的数组长度不相同,数组指针的元素个数和二维数组的列长度相同。 而指针数组的数组长度和二维数组的行长度相同。
在处理字符串的问题上,使用指针数组处理就比使用数组指针方便多了。因为多个字符串比用二维字符数组处理字符串更加方便,更加的节省内存空间。

  • 指针做函数返回值及其注意

用指针作为函数返回值时需要注意的一点是,函数运行结束后会销毁在它内部定义的所有局部数据,包括局部变量、局部数组和形式参数,函数返回的指针请尽量不要指向这些数据,C语言没有任何机制来保证这些数据会一直有效,它们在后续使用过程中可能会引发运行时错误。

1.2 本章学习体会

  • 学习感受:
    感觉有的地方有的知识点是学过之后再看才能看出感觉的,还有题目集的题其实有很多是简单但实际需要很严谨的题,正在努力ing
  • 周代码量:
第一周 第二周
213 145

2.PTA实验作业

2.1 6-2 jmu-c-二分查找

2.1.1 伪代码

定义左端点和右端点以及中间点
while 数组满足条件 then
    do  if 中间点和对应值相等 then
          do 输出中间点下标,提前结束循环 
        end if
        else if 对应值大于中间点 then
                do 左端点变成中间点右边一位
             end if   
        else 对应值小于中间点 then
                do 右端点变成中间点左边一位
            end if
end while

2.1.2 代码截图

2.1.3 总结本题的知识点

1.掌握了二分法查找数据:
找到中间值,不断循环判断是否找到对应点,缩小左端和右端,缩小范围,最终找到目的值。
2.注意中间点就和key相等的情况。
3.注意比较中间值和key后,左端和右端的缩入情况。

2.1.4 PTA提交列表及说明

  • 提交列表说明:
1.编译错误:又定义了一次count,还没加*号;
2.多种错误:(*count)忘了加括号;
3.部分正确:在mid=key的地方,找到了点没有加break;

2.2 6-5 字符串反正序连接

2.2.1 伪代码

要逆序排放,可以再另外设置一个辅助数组,也可以只用两个指针完成;
for i=0 to 指针数组结尾数
    do 计算元素数量count
end for
for i=0 to i=count-1
    do 将s[]中的元素逆序输入t[]中
end for
for i=0 to i=count
    do 将原数组的元素再衔接在逆序数组后
end for

2.2.2 代码截图

2.2.3 总结本题的知识点

1.掌握了数组元素正逆序排放以及数组连接的做法;
2.在将原数组连接到逆序数组后时,要注意数组最大下标的限定;
3.在数组结束时要添加t[]='0'的结束标志语句;

2.2.4 PTA提交列表及说明

  • 提交列表说明:
在网页上提交是答案正确,但是在编译器上改了很多次;
1.答案正确:用两个数组连接的方法做出,因为再添加辅助数组的方法比较麻烦;
2.在编译器上的错误:t[count]='\0';忘记写,存储空间的问题

2.3 7-2 藏尾诗

2.3.1 伪代码

定义诗句数组和尾字数组;
for i=0 to i=3
    do 输入诗句
end for
for i=0 to i=3
    do 将诗句的最后一个字提出
end for
输出最后的尾字数组

2.3.2 代码截图

2.3.3 总结本题的知识点

1.掌握了提取输出数组中汉字元素的方法
2.int length = strlen(ch[i]);
  因为一个汉字是两个字节,所以想要储存最后一个汉字,是要把最后的两个字节储存起来
3.要注意每次下标移动的数为2个字节。

2.3.4 PTA提交列表及说明

  • 提交列表说明:
1.编译错误:忘了写头文件#include <stdlib.h>。
2.部分正确:漏掉了输出语句;
3.答案正确:有注意了字节的问题后通过。

3.阅读代码


  • 代码评价:
    1.代码用了我熟悉的方式,我更倾向于选择它;
    2.还巧妙的使用了函数,减少代码,提高效率;