C博客作业04--数组
1.本章学习总结
1.1思维导图
1.2本章学习体会及代码量学习体会
1.2.1 学习体会
- 本周在C语言学习上用的时间较少,导致PTA题集进度滞后,数组上机考试分数极低
- 数组题目掌握较差,之后的学习中会加大这一部分的练习量
- 学会了一维数组、二维数组、字符数组的部分使用方法,了解了冒泡法排序,螺旋方阵的操作方法,学会使用字符串函数
1.2.2 代码累计
2.PTA总分
2.1截图PTA中的排名得分
2.2 我的总分
一维数组:200
二维数组:105
字符数组:150
总分:455
3. PTA实验作业
3.1 PTA题目1
在一大堆数据中找出重复的是一件经常要做的事情。现在,我们要处理许多整数,在这些整数中,可能存在重复的数据。
你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“YES”这三个字母;如果没有,则输出“NO”。
3.1.1 算法分析
定义数组a[n]
定义数组hash[10001]
for i=0 to n
输入a[i]
hash[a[i]]++
if hash[a[i]]>1
输出YES
break
end if
end for
if i=n
输出NO
end if
3.1.2 代码截图
3.1.3 测试数据
3.1.4 PTA提交列表及说明
说明:
Q1:未将hash数组作为static数组初始化
A1:在同学指出后改正
3.2 PTA题目2
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。
3.2.1 算法分析
输入n
for i=0 to n
for j=0 to n
输入a[i][j]
end for
end for
for i=0 to n
mk1=i
point=a[i][0]
for j=0 to n
if a[i][j]>=point
point=a[i][j]
mk2=j
end if
end for
for k=i to n
if point>a[k][mk2]
break
end if
end for
if k=n
found=1
break
end if
end for
if found=1
输出mk1,mk2
else
输出NONE
3.2.2 代码截图
3.2.3 测试数据
3.2.4 PTA提交列表及说明
说明:
Q1:遍历数组找行最大值时忽视本身等于最大的情况
A1:a[i][j]>point改为a[i][j]>=point,答案正确
3.3 PTA题目3
输入一个字符串,判断是否是合法邮箱(格式正确即可,不管是否真的存在)输入的只能是字母、数字、下划线、@以及.五种, @前后只能是字母或者数字,而且.后只能是com, 是则输出YES ,否则输出NO。
3.3.1 算法分析
定义字符串email[]
gets(email)
n=strlen(email)
for i=0 to n
if email[i]=@
break
end if
end for
temp=i
if i=0或i=n
error=1
end if
if email[i-1]=_||email[i+1]=_
error=1
end if
在@前找非法字符
在@与.之间找非法字符
if i=temp+1 或 i=n
error=1
end if
判断.后是否为com
if error=1
输出NO
else
输出YES
3.3.2 代码截图
3.3.3 测试数据
3.3.4 PTA提交列表及说明
说明:
Q1:将@前后只能是字母或者数字理解错误误以为不能有_
A1:加入特判修正@前后一位为_
Q2:试了一个晚上还是有1分拿不到
A2:最后发现bug差点当场去世,啊啊啊!!!!
4.代码互评
4.1 代码截图
4.1.1 自己:
4.1.2 他人:
4.2 二者的不同:
- 4.1.1的代码使用了函数进行加法运算,4.1.2直接使用if-else将两种情况代码全部列出
- 4.1.2创建了字符数组c存放结果,4.1.1直接将短字符串加到长字符串上输出
- 4.1.1使用printf("1")输出最高位的1,4.1.2无需考虑最高位1是否越界