1.本章学习总结(2分)

1.1 思维导图

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

1.2.1 学习体会

本章主要学习了数组的相关内容,其中掌握好一维数组是掌握好其他类型数组的基础,特别是要掌握好选择排序法和冒泡法
本章需要特别注意和熟练掌握的点有:
1.有关数组的初始化,其中可以针对部分元素初始化,二维数组在全部赋值或者分行赋值的情况下可以省略行长度
2.掌握多种输入字符数据的方法,包括gets,fgets以及scanf函数
3.特别注意字符数组的字符串结束符\0,还有区分“a”和‘a’的区别

1.2.2 代码累计

2.PTA总分(2分)

2.1截图PTA三次题目集:



2.2 我的总分:

395

3.PTA实验作业(6分)

3.1 PTA题目1

给定两个整型数组,本题要求找出不是两者共有的元素。

3.1.1 算法分析



定义整型变量n1 数组a[20],n2,b[20];
定义整型变量i,j;
输入n1
for i=0 to i<n1do
输入a[i]
end for
输入n2
for i=0 to i<n2
输入b[i]
end for
定义 flag,count=0;定义数组a[20]
for i=0 to i<n1 do
flag=0;
     for j=0 to j<n2 do
     if  a[i]==b[j]
     flag=1;
     break;
     end if
     if flag==0
     c[count]=a[i];
     count++;      //将a数组中不同的数放入c中   
     end if
     end for
end for
for j=0 to j<n2 do
flag=0;
    for i=0 to i<n1do
    if b[j]==a[i]
    flag=1;
    break;
    end if
    if  flag==0
    c[count]=b[j];
    count++;
    end if
end for           //将b数组中不同的数放入c中   
定义 num=0;
定义数组  d[20];
d[num]=c[0];
num++;
for i=1 to i<count do
      for j=0  j<num
      if c[i]==d[j]
      break;
      end if
      if  j==num
      d[num]=c[i];
       num++;
       end if
end for  
for i=0  to i<num do
   if i<num-1
   输出d[i]+空格
   else
   输出d[i]
end for
}

3.1.2 代码截图

3.1.3 PTA提交列表及说明

  • Q1:开始没有思路,想按照两个数组分开来遍历
  • A1:将两个数组中其他数组中未出现的元素保存到另一个数组c中
  • Q2:数组c中存在重复的元素,要把重复的元素删除并且保持顺序不变
  • A2:开始时,用往后遍历的方法,若重复则不输出,若不重复则输出,但是怎样重复数字的输出顺序是输出后一个的顺序,会导致输出顺序的改变。后来定义了一个数组,向前遍历,这样保证了输出的顺序不改变。

3.2 PTA题目2

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

3.2.1 算法分析


    定义整型变量 n;
    输入n
    定义整型变量 i,j;
    定义数组a[10][10]  //主要思路四个方向,上下左右
     定义 num=1;
    for i=0 to i<n/2 do
             for j=i to j<n-i-1 do//横着从左往右
        a[i][j]=num;
        num++;
         end for
         for j=i to j<n-i-1 do
            a[j][n-i-1]=num;
         num++;    //竖着从上到下
             end for
           for j=n-i-1 to  j>i  do
       a[n-i-1][j]=num;
       num++; //横着从右到左
      end for
           for j=n-i-1 to j>i
       a[j][i]=num;
       num++;//竖着从下到上
            end for
       end for
       if n%2==1 
    a[n/2][n/2]=n*n;
    for i=0 to i<n  do
        for j=0 to j<n do
           输出a[i][j]
           if j==n-1
           输出\n"
            end for
       end for

3.2.2 代码

3.2.3 PTA提交列表及说明

  • Q1:刚开始看到这样的题目有点害怕,看起来挺复杂的
  • A1:后来考虑了下从四个方向慢慢分析,然后循环至最里边,问题就解决了,虽然分析过程复杂了一些,但是总体思路还是蛮清晰的。

3.3 PTA题目3

一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。

3.3.1 算法分析


定义字符数组 a[32];
定义整型变量 i;
定义整型变量 num=0;
for i=0 to i<32 do
输入a[i]
end for
for i=0 to i<32 do
    num=num*2+(a[i]-'0');
    if i%8==7
	if(i==31)	
	输出num
	else
	输出num加.
                end if
	num=0;
  end if
end for

3.3.2 代码

3.3.3 PTA提交列表及说明

  • Q1:主要是字符型数据怎样转化为数的问题
  • A1:因为输入的是字符型的数据,所以将字符转为数字通过他们ascii码的差值来转化,问题就解决了

4.代码互评

从同学中找一篇优秀代码,和自己写的代码比较下,说明下自己和同学代码区别,各自优势是什么?

4.1 代码截图

4.2 二者的不同

  • 自己的代码中主要让数组重构,先找出需要插入的位置,然后让位置后的元素后移,前面的不动,插入数据,最后输出
  • 同学的代码中定义了两个数组,先找到插入点,然后直接赋值,这样可能会导致失去原来的数据,所以这个时候再用上另一个数组,使插入位置的元素后移且数据不丢失,这也不失为一种方法。
 posted on 2018-12-08 19:54  张瑀鑫  阅读(448)  评论(0编辑  收藏  举报