C语言博客作业04--数组
0.展示PTA总分(0----2)
1.本章学习总结(2分)
1.1 学习内容总结
数组中如何查找数据,有哪些做法:
1.顺序查找法:假设要查找的数为x,在数组a[100]中逐个查找,立一个flag=0没找到的标志,在for循环中确定flag的值,if(flag1)找到,if(flag0)未找到。详细步骤:课本例7-3。
2.二分查找法:前提是数组元素必须是有序的。假设要查找的数为x,在数组b[100]中查找,定义mid为数组的中间位置,用while(low<=high)通过x与b[mid]的大小比较,决定左移或者右移或者找到x直接输出(也可以使用int型函数,返回结果)。详细步骤:课本例8-8。
数组中如何插入数据,怎么做,可以写个伪代码或动态图展示方法:
int 插入数x
假设原数组a[100],下标i
输入插入位n
for (i = 0; i < 100; i++)
{
if(i<x)
数组a[i]不变
if(i>=x)
数组a[i]右移一个位
将x插入a[i]移后多出来的空位
}
输出新数组a[i]
end
详细可看pta题集:一维数组7-3简化的插入排序
数组中如何删除数据,这个有多种做法,请一一展示。
详细可看pta一维数组7-6 数组元素的删除
数组中目前学到排序方法,主要思路?
1.选择排序:
课本例7-5
2.冒泡排序:
课本例8-5
数组做枚举用法,有哪些案例?
判断回文数:课本7-11,pta二维数组7-5 找鞍点,7-6阅览室。
哈希数组用法,目前学过哪些案例,举例展示。
字符数组:pta字符数组7-1 判断E-mail地址是否合法 、7-2 IP地址转换 、7-3 字符串转换成十进制整数 。
1.2 本章学习体会
通过本章的学习,对于函数和循环部分的掌握程度有所加深,做题速度提升了不少,思路也比较清晰,但是对于某些知识点还是欠缺(如哈希数组,数组枚举),对于数组删除、插入,以及字符数组切分表达式题型熟练度不够。
这两周代码量:1100左右
2.PTA实验作业
2.1 题目名1:二维数组:7-7螺旋方阵
2.1.1 伪代码
定义一个函数ArrangeArray用来处理数据
{
定义count用来表示填入的数
定义数组a[10][10]用来存放数值
i为行标,j为列标
while (count<N*N)
{
用while循环来对count进行转换,使其符合规律并填入数组
}
}
main
{
输入n
调用函数ArrangeArray(n)
for 循环输出数组
end
}
2.1.2 代码截图
2.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
1 | 1 | 正常数据 |
3 | 1 2 3 8 9 4 7 6 5 |
正常数据 |
0 | 无 | 数据越界 |
100 | 无法输出 | 数据越界 |
2.1.4 PTA提交列表及说明
部分正确和多种错误:不清楚如何正确表示出该规律,舍友做过这题,教我如何表达
格式错误:没有控制每个数所占的格数,把%d改为%3d;后面的两次提交正确是一次是正常不用函数,还有一个是用函数写的
2.2 题目名2:字符数组:7-4 删除重复字符
2.2.1 数据处理
使用gets()函数实现长字符串的读取
并用strlen()函数计算字符串的长度
通过选择排序进行对剩余字符按ASCII码顺序排序
通过for循环嵌套
if判断不相同直接输出, 相同的跳过
printf不相同的数组
实现去除重复字符
2.2.2 代码截图
2.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
sdsdgdhdfhdjfsdff | dfghjs | 正常数据 |
sdasandf asdsaoidjai | adfijnos | 正常数据 |
????dwjijfijiosjfisjjsd | ?dfijosw | 正常数据 |
2.2.4 PTA提交列表及说明
两次的部分正确:1,2两个测试点过不了(带空格)
解决方案:询问智凯大佬后得知,这题不能用scanf()函数需要用gets()函数,gets()函数可以读取整段字符,而且需要用strlen()函数来求长度。
这题有相似使用gets()和strlen()函数的还有7-1 判断E-mail地址是否合法 和7-5 切分表达式——写个tokenizer吧(这题是看超星平台上老师的讲解)
2.3 题目名3:7-1 判断E-mail地址是否合法
2.3.1 数据处理
使用gets()函数实现长字符串的读取
并用strlen()函数计算字符串的长度
立个flag用来判断是否是合法的地址
for循环逐个将字符输入判断
if str[i]符合条件进入下一个判断
if str[i]='@'的情况
或者进入if str[i]'.'的情况
判断'.'的后三位是否为"com"(用另一个数组进行一一对比)
最终得出flag的值
输出结果
end
2.3.2 代码截图
2.3.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
daojdsioaosia | NO | 未有@和".com" |
sjsijfi@dks.com | YES | 正常数据 |
akjdiw@@sdao.com | NO | 有两个@,错误 |
2.3.4 PTA提交列表及说明
部分正确:在'.'后的com答案错误,并且@@的测试点超时
3个编辑错误:均是在gets()函数的错误,在vs中gets()会出现错误,所以我改成了gets_s,但是在pta里这种形式就会出现错误,这三次是在vs里测过后,忘记更改get_s导致编辑错误
部分正确:@@和..的测试点超时,之后的几个非19分的都是这个原因
部分正确:针对19分的,在第12个测试点即(合法地址后有非法字符)错误,后来问了智凯大佬,在他的帮助下,我再设立一个数组,用来判断最后的".com"
答案正确:之后的几个答案正确,是我对原代码上做的一些小修改,想知道能不能过测试点
3.阅读代码(-2--1分)
31问答题
题目:
代码:
代码的优点及可学习的地方:
虽然看不太懂题目和代码,但是有几个很明显可以学习的地方:
1.巧妙地运用函数以及定义形参(在上一次的大作业中,很明显的感受到,在定义函数时,不知道该如何处理形参,所以大量的函数中的()都是无形参的,根据这段代码可对形参的定义以及使用有更深入的了解)
2.运用memset()和strcmp()函数来处理数组,使整段代码更加简洁,效率更高(在课堂派的作业中有出现过这两种函数,但是当时只是为了做题,就只粗略的了解一下函数的功能,并没有掌握这两种函数,这段代码激起我要掌握这两种函数的想法)