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 二者的不同
- 自己的代码中主要让数组重构,先找出需要插入的位置,然后让位置后的元素后移,前面的不动,插入数据,最后输出
- 同学的代码中定义了两个数组,先找到插入点,然后直接赋值,这样可能会导致失去原来的数据,所以这个时候再用上另一个数组,使插入位置的元素后移且数据不丢失,这也不失为一种方法。