0.展示PTA总分(0----2)##
1.本章学习总结(2分)#
1.1 学习内容总结##
- 数组中查找数据一般有顺序查找法和二分查找法。顺序查找法就是把数组中的每一个元素依次和要查找的数据相比较,二分查找法就是每次和中间的一个数据比较,逐渐缩小范围。
- 数组中插入数据
定义一个数组a,一个要插入的数x,数组的长度n,要插入的位置m。
输入一个数组
输入插入的数和位置
for(i=n;i>m;i--)
a[i]=a[i-1];
end for
a[m]=x;
输出一个新的数组
- 数组中删除数据
定义一个数组a,要删除的数据num,数组长度n。
输入一个数组
输入要删除的数据
for(i=0;i<n;i++)
{
if(a[i] == num)
{
for(j=i;j<n-1;j++)
a[j]=a[j+1];
end for
n--;
}
end if
}
end for
输出删除了num后的数组a
-
数组中目前学到排序方法有冒泡排序法和选择排序法。冒泡排序法的思路是外循环经过n-1次循环,内循环主要是第一个和第二个数比较,第二个和第三个比较,以此类推,相邻两个数比较,并作交换;选择排序法的主要思路是外循环也经过n-1次循环,而内循环是找到最小的,让它和第一个元素交换。
-
数组做枚举用法:计算一年中的某一天在该年的天数。
-
一维数组的定义一般形式为:类型名 数组名 [数组长度],下标取值范围是[0,数组长度-1],初始化一般形式为:类型名 数组名 [数组长度]={初始值}。
-
二维数组的定义一般形式为:类型名 数组名 [行长度][列长度]={初值表}。
-
学到了怎么判断一个字符串是否回文,输入一行字符串是,一般以回车结束,而在数组中则是以' '结束,学到了怎么把回车转换成数组中的' '。字符数组的定义,比如char ch[有效长度],对字符数组初始化时,比如char ch[6]="Happy";其中"Happy"的有效长度为5,但因为含有' ',所以数组长度为6,字符串由有效数字和字符串结束符' '组成。学到了进制的转换,对于n 进制,数字字符时,number = number * n + a [i]-'0',字母时,number = number *n+ a [i]-'A'+10或者number = number *n+ a [i]-'a'+10。
1.2 本章学习体会##
- 经过对本章的学习,发现很多问题用数组来解决会变得特别方便简单,也很巧妙,就拿以前在pta上做过的一道题来说,就是那道某天在一年中的天数的题,没学数组前,方法特别笨,写了很长很宽,但学了数组后,巧妙运用数组很快就写出来了,代码量也很少。从数组开始,好像题量有些增加,又加上我做题速度特别慢,因为还有其他的事情,就有点跟不上了,很乏力,越来越抽不出时间了,我也不知道为什么别人就可以做那么快,思路和飞了一样,突然就想,有些东西好像不单单只靠努力就行的,还要有天赋,我就是可能没计算机这方面的天赋,接受起来就很慢,别人一个小时接受的,我可能要一天,就好比别人数学比我差点,大概我就是数学方面有些天赋吧,真的有时候想要放弃,感觉再怎么努力也没用,因为我没天赋啊,但我又想不能放弃,如果放弃了,就白白浪费了前面十几年的努力,所以我还要坚持,把所有零碎时间都挤出来,放假不休息,虽然追上别人很难现在看来,但我能追一点是一点,也有可能一点都追不上,但起码会比以前的自己好点,默默给自己加油!加油!加油!加油!(好累)
- 代码量大概只有736行。
2.PTA实验作业(7分)#
2.1 7-4 数组循环左移##
2.1.1 伪代码###
定义一个数组a,数组长度n,行为i,记录移动次数的变量j,移动次数m,存放数据变量item。
输入数组长度和移动次数
输入一个数组
for(j=1;j<=m;j++)
{
item = a[0];
for (i = 1; i < n; i++)
{
a[i - 1] = a[i];
}
end for
a[n - 1] = item;
}
end for
输出新数组
2.1.2 代码截图###
2.1.3 造测试数据###
输入数据 | 输出数据 | 说明 |
---|---|---|
8 3 1 2 3 4 5 6 7 8 | 4 5 6 7 8 1 2 3 | 一般情况 |
3 6 1 2 3 | 1 2 3 | m比n大,且刚好是n的倍数 |
4 5 1 2 3 4 | 2 3 4 1 | m比n大 |
2.1.4 PTA提交列表及说明###
提交列表说明:###
1.部分正确:少考虑了m比n大时。
2.答案正确:重新设计了一下代码,再结合超星平台讲解,把所有情况都考虑了,就正确了。
2.2 7-3 判断上三角矩阵##
2.2.1伪代码###
定义二维数组a用来存放矩阵,一维数组b用来输出YES和NO,行和列为i和j,flag作为判断是否结束循环,矩阵的个数为T,t来存放T,k用来输出数组b,n为几阶矩阵。
输入矩阵个数
t=T;
while (T--)
{
输入矩阵阶数
输入一个矩阵
for (i = 0; i < n; i++)
{
flag = 1;
for (j = 0; j < n; j++)
{
如果行大于列时,元素不等于零,flag等于0,结束次循环
}
end for
如果flag等于0,结束次循环
}
end for
if (flag == 0)
b[k] = 0;
end if
k++;
}
end while
根据b数组中的元素,输出YES或NO,为1则输出YES,为0则输出NO
2.2.2代码截图###
2.2.3造测试数据###
输入数据 | 输出数据 | 说明 |
---|---|---|
sample等价,重复若干遍 |
2.2.4 PTA提交列表及说明###
提交列表说明:###
1.答案错误:因为没换行输出。
2.答案错误:因为放在循环里面了,输出了多个YES或NO。
3.答案错误:因为在外面输出YES或NO的时候,循环条件错了。
4.答案错误:还是没注意到循环条件错误,以为是最后一次输出换行导致的错误。
5.部分正确:因为我以为对角线不能等于0。
6.答案正确:把对角不等于0的条件去掉了,然后就对了。
**2.3 7-1 判断E-mail地址是否合法 **##
2.3.1伪代码###
定义字符数组char,和判断输出的变量flag。
输入一串字符
flag=1;
for (int i = 0; str[i]; i++)
{
判断字符是'@'时的情况,根据情况改变flag的值
判断字符是'.'时的情况,根据情况改变flag的值
判断字符是否为所要求的字符,根据情况改变flag的值
}
end for
if (flag == 1)
输出YES
else
输出NO
end if
2.3.2代码截图###
2.3.3造测试数据###
输入数据 | 输出数据 | 说明 |
---|---|---|
adf12@qw213.com | YES | 样例 |
198@qq.comk | NO | .com后有多余字符 |
19 8@qq.com | NO | 字符中有空格 |
198@qq.com% | NO | 合法地址后有非法字符 |
2.3.4PTA提交列表及说明###
PTA提交列表及说明###
1.段错误:我用的是while循环产生的一个字符数组,根据pta的段错误规定,可能是递归调用层数太多。
2.编译错误:改了一下数组产生的方式,但函数调用时,函数写错了。
3.部分正确:少考虑了.com后面不能有多余字符。
4.编译错误:还是有个函数写错了。
5.部分正确:加的一个条件不正确,没能过测试点。
6.答案正确:改了一下条件,然后就对了,改成了str[i+4]!=' ';。
3.阅读代码(-2--1分)#
- 这段代码的功能是给定两个整数M,N,生成一个M*N的矩阵,矩阵中元素取值为A至Z的26个字母中的一个,A在左上角,其余各数按顺时针方向旋转前进,依次递增放置,当超过26时又从A开始填充。
- 优点是巧妙运用了while循环,并且外层循环条件控制的非常好,我们pta中就有一道类似的题,我差不多就是用这种方法做的,但又不一样,我的看着比较不好理解,而他的循环里面用的四个while比较清晰。