C语言博客作业04--数组
第四次作业
1.本章学习总结.
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1学习体会
- 这周学习了有关数组的知识,感觉数组是储存数据的一种新的方式,和之前循环嵌套和函数的知识都有些不同的地方,所以学习难度也比前几周的大;
- 数组这一章要学习的内容比前面的多,一维和二维数组还有后面的字符数组,感觉自己上课时还是有些知识没有掌握,所以课后刷题的效率太慢呢了,难一点的题要想好久才能开始写;
- 开始做二维数组的时候有些题觉得无从下手,完全没有思路,会问做好的同学或者百度一下,然后才能知道这题大概的解决思路是什么,所以还是要更熟悉课本的内容和老师课堂讲的知识点,学习更多不同类型题目的大概解决思路与方法;
- 这几周下来感觉到了c语言学习的难度,基本上每个知识的难度都是越来越大,越到后面学习难度越大,所以自己还是要抓紧时间,在课后的时间里面认真预习和码代码,做题的速度跟上题集发布的进度,以免再出现一章多个题集而自己做题跟不上的情况;
1.2.2 代码累计
2.PTA总分
2.1截图PTA中一维数组,二维数组,字符数组的排名得分
2.2 我的总分
- PTA总分:225分;
3.PTA实验作业
3.1 PTA题目1
给定两个整型数组,找出不是两者共有的元素
3.1.1 算法分析
int 三个整形数组和两个数组中元素的个数
for i=0 to i<m ; for j=0 to j<n
给两个数组赋初值
for i=0 to i<m //寻找数组a中的非公有元素
for j=0 to j<n
if a[i]=b[j] then flag=1
if flag=0 c[k]=a[i] //将非公有元素存放到新的数组c中
then k++
for i=0 to i<n //寻找数组b中的非公有元素
for j=0 to j<m
if b[i]=a[j] then flag=1
if flag=0 c[k]=b[i] //将非公有元素存放到新的数组c中
then k++
then 输出数组c[]
3.1.2 代码截图
3.1.3 测试数据
3.1.4 PTA提交列表及说明
- Q1: 想用删除共有元素的方法来做这题,但无法完成;
- A1: 上课老师提到删除数组中的元素很难实现,所以重新定义了一个新的数组c来存放非公有元素。
- Q2:某个数组中有两个元素相同且是非公有元素时重复输出了;
- A2: 在最后输出数组c[]时在进行一次比较,如果前后两个元素相等的话就只输出后一个,保证重复的非公有元素只输出一次。
3.2 PTA题目2
指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。
3.2.1 算法分析
int 给定整数N和存放方阵的数组a
int k为螺旋方阵的圈数
for k=0 to k<=N/2 //N/2为N阶螺旋方阵的总圈数
then 四个循环分别将元素填入每一圈的四个面
for j=k to j<=N-k-1 //N-k-1为一圈中每一面要填入的元素个数
for i=k+1 to i<N-k-1
for j=N-k-1 to j>k
for i=N-k-1 to i>k
end
for j=0 to j<N //输出螺旋方阵
3.2.2 代码
3.2.3 测试数据
3.2.4 PTA提交列表及说明
- Q1:循环一行一列来给数组赋值无法实现螺旋;
- A1:最开始的思路是先赋值一行,然后行下标不变改变列下标来赋值一列,但是试了很久都没有打出螺旋方阵,所以百度看了别的思路,其中一个就是按方阵的圈数来赋值;
- Q2:开始不知道处于最中央也就是最后一个数怎么打出来;
- A2控制循环条件,最后一圈的时候只进入第一个循环打出最后一个数,不会再进入下面三个循环;
3.3 PTA题目3
计算A−B,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。
3.3.1 算法分析
char 定义字符数组a,b
int 字符数组a,b长度
int flag=0
then 输入字符数组a,b
then alength=strlen(a)
blength=strlen(b) //得到字符数组a,b长度
for i=0 to i<alength
for j=0 to j<blength
if a[i]=b[j] flag=1
if flag=0 输出数组a中字符
3.3.2 代码
3.3.3 测试数据
3.3.4 PTA提交列表及说明
- Q1:不知道判断是否有相同字符的循环条件怎么写;
- A1:最开始想再用一个循环来计算要判断几次,后来仔细看了书发现可以直接用strlen()来得到字符数组的长度;
- Q2:重新定义一个字符数组来存放非重复的字符;
- A2:重新定义一个字符数组c来存放两个字符串中的字符时代码量比现在的大,所以选择用flag控制字符数组a的输出;
4.代码互评
4.1 代码截图
-
同学代码
-
我的代码
4.2
不同
1.她的代码在判断是否重复时的循环条件是i=0 to a[i]!='\0',而我的则是先得到字符数组的长度,然后用得到的长度控制循环结束,i=0 to i<alength;
2.她的代码定义了一个新的数组来存放两个字符串中不同的字符;
相同
1.使用相同的循环方式来判断字符是否重复,都在循环里使用flag来判断是否相同时的条件;