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()函数来处理数组,使整段代码更加简洁,效率更高(在课堂派的作业中有出现过这两种函数,但是当时只是为了做题,就只粗略的了解一下函数的功能,并没有掌握这两种函数,这段代码激起我要掌握这两种函数的想法)

原文地址:https://www.cnblogs.com/linwei18159070920/p/11875627.html