钟海清

导航

第四次作业-----------数组

1.本章学习总结

1.1 思维导图

1.2 本章学习体会及代码量学习体会

1.2.1 学习体会

     数组,没前面的那么容易学。一开始觉得嵌套循环难,后来觉得函数调用什么的一脸蒙蔽,现在数组又总是各种错误,尤其在螺旋方阵那一题,简直无从下手。初学指针,还竟然上课都听得傻了,于是赶紧去见见翁凯老师,让他给我补补。很多知识点,其实书上也都有,老师也提过,遇到不会,只能百度一下,看是有什么知识点不知道,不然,就会不知道自己在学什么了。
   数组的学习,一个星期就可以结束,pta题集一个接一个地出,每次总是自己还没动手,大佬就已经打完了。很多时候其实看着挺慌的。自己也很想像以前一样,布置的题集马上写完,但是,现在的处境是,上课都有点蒙蔽,要马上刷完题都很困难的。然而,慌也没用,要想不慌只能花时间去把代码给敲完。
   发现自己做题的进度虽然很慢,做了总是有效果的,有空就琢磨琢磨不会的题目,这样也是一种进步吧。刷题刷多了,自然就不会觉得数组难。编程是锻炼人的逻辑思维,所谓熟能生巧,多做做,多想想,就会有感觉,自然,也就没有我想象中的那么难。
   细想一下,前期学习比较轻松,除了知识点比较容易,还有很大一部分是因为暑假自学了,再次拾起的时候,自然就一讲就会,自信也就油然而生。然后,现在的我想的是要好好利用寒假,自学数据结构那一块。题集的话,在之前王俊玲老师说谁要的时候,也申请了,不怕没有题目练手。业精于勤荒于嬉,拼搏过是会有收获的。
    后面的学习不会越来越轻松,只会越来越难,我能做的就是多花些时间,一分耕耘,一分收获,要想让自己变得强大,就要多花些精力去做。

1.2.2 代码累计

2.PTA总分



2.2 我的总分:

一位数组:175
二维数组:99
字符数组:135
数组总分:409

3.PTA实验作业

3.1 PTA题目1

7-8 找出不是两个数组共有的元素 (20 分)
给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。

3.1.1 算法分析

- int cnt=0;            //控制空格,保证行末无多余空格 
- for(j=0 to n1)
       scanf读入a中元素
end for
- for(j=0 to n2)
       scanf读入b中元素
end for
- int n3=n1+n2;
- int c[n3];        //定义第三个数组存放所有元素 
- static int flag[40];           //初始化数组元素全为0,发现共有赋值为1 
- for(i=0 to n3)     // 将两数组元素放入C中 
       - if(i<n1) c[i]=a[i];
         else c[i]=b[i-n1];  //b紧接着放入a后面
       end if
- for(i=0 to n3)
	- for(j=i+1 to n3)
		- if(c[i]==c[j]&&j<n1)  //两元素都在a中,后一个不输出
			flag[j]=1;
                end if
		- if(c[i]==c[j]&&i>=n1)  //两元素都在a中,后一个不输出
			flag[j]=1;
                end if
		- if(c[i]==c[j]&&i<n1&&j>=n1)  //两元素分居于a,b中,则都不输出
			flag[i]=1;flag[j]=1;
                end if
         end for
end for
- for(i=0 to n3)
	- if(flag[i]==0)     //不是共有的元素
		- if(cnt==0)
			输出该数   //第一个元素前面无空格
			cnt=1;
		  else输出空格加上该数组元素
                end if
        end if
end for
		

3.1.2 代码截图

3.1.3 PTA提交列表及说明

Q1:发现相同元素就删除,代价比较大,输出会乱掉
A1:构建新的数组c存放a,b中元素,再定义flag[i]控制输出情况
Q2:b中有相同元素,a中没有时会重复输出
A2:n1是b中元素的第一个,判断时应加上等号

3.2 PTA题目2

7-3 判断上三角矩阵 (15 分)
上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。

本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。

3.2.1 算法分析

- 定义次数repeat定义static int flag[1000]判断是不是上三角矩阵
- for(k=1 to repeat)
        -for(i=0 to n-1)
             -for(j=0 to n-1)
                   scanf读入数组元素
              end for
         end for
//判断该矩阵是不是上三角矩阵
- for(i=0 to n-1)
     - for(j=0 to n-1)
            - if(i>j)
                - if(a[i][j]!=0)
                     flag[k]=1; 
                 end if
      end for
end for
//遍历flag[k]输出yes或者no
- for(k=1 to repeat)
   - if(flag[k]==0)输出yes
    else 输出no
   end if
end for

3.2.2 代码

3.2.3 PTA提交列表及说明

Q1:开始以为题目是如果要输入多个矩阵,先判断一个矩阵判断是不是上三角矩阵后再输入下一个判断
A1:参考同学思路,定义flag[k],记录每个矩阵最后是不是上三角矩阵,是就为1,否则为0。最后对flag[k]进行遍历,如果值为1就输出yes,否则输出no

3.3 PTA题目3

7-3(字符数组做) 切分表达式——写个tokenizer吧 (20 分)
[正题]

四则运算表达式由运算数(必定包含数字,可能包含正或负符号、小数点)、运算符(包括+、-、*、/)以及小括号((和))组成,每个运算数、运算符和括号都是一个token(标记)。现在,对于给定的一个四则运算表达式,请把她的每个token切分出来。题目保证给定的表达式是正确的,不需要做有效性检查。

输入格式:
在一行中给出长度不超过40个字符的表达式,其中没有空格,仅由上文中token的字符组成

输出格式:
依次输出表达式中的tokens,每个token占一行。

3.3.1 算法分析

- int flag=0;//判断正负号是连接两数还是代表正负
- 先输出第一个字符
- if(ch[i]=='-'||ch[i]=='+') //第一个字符为正负号
       flag=1;
  end if
- if(ch[i])
     - if(0<=ch[i]<=9)
           - if(0<=ch[i-1]<=9或者ch[i-1]='-','+'&&flag=1或者ch[i-1]='.')   //大于一位的数字,有正负号和小数点的情况不用换行
                   printf("%c",ch[i]);
              else 换行输出
              esd if
            flag=0;      //重新归零,不影响后面计算
        end if
     - else if(ch[i]=='-')  //字符为负数的情况
             - if(ch[i-1]=='(')  //该运算符为负号 
                    flag=1;
                end if
             换行输出'-'
        end else if
     - else if(ch[i]=='.')  //有小数点时,不要换行输出
     - else  //其他情况,换行输出
     i++
   end if

3.3.2 代码

3.3.3 PTA提交列表及说明

Q1:‘-‘是负号不是连接两数字的运算符时,不能和数字一起输出
A1:定义一个flag判断该字符是不是正负号,初值为0,是就令为1,即可连着输出
Q2:第一个字符是正负号时格式错误
A2:在判断一个数字前面有正负号,不换行输出后,还应该将flag的值重新归零

4.代码互评

7-5 螺旋方阵 (20 分)
所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

输入格式:
输入在一行中给出一个正整数N(<10)。

输出格式:
输出N×N的螺旋方阵。每行N个数字,每个数字占3位。

4.1 代码截图

同学的代码

自己的代码截图

4.2 二者的不同

  • 1.同学代码是根据螺旋矩阵递增的规律,对向右,向下,向左,向上四种递增情况做循环分析,得出对应的值并放入数组中
  • 2.我的代码是根据每个数对应圈数与边长的关系建立关系式,然后计算得出相应的值
  • 3.同学代码整体看起来符合思考问题的思路,比较清晰,条例分明,我的代码则比较绕,数学逻辑性比较强

posted on 2018-12-08 20:31  haiqingz  阅读(619)  评论(0编辑  收藏  举报