数组
一.PTA实验作业
题目一.7-2 求最大值及其下标:本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
1.本题PTA提交列表
2.设计思路
定义了子函数min(n),所以数组a[10]定义为全局变量。首先在主函数中输入数字个数n,用for循环输入n个数,并保存在数组a[10]中。调用子函数min(n),找出最大的数字,令其下标为index。输出下标为index的数和下标index。
3.本题调试过程碰到问题及PTA提交列表情况说明。
(1)段错误:从逻辑上看这段代码没有问题,一直不理解提交到PTA为啥就错了。后来自己用子函数重写了一遍,发现如果将定义中的a[n]改成a[10]就正确了。于是猜想应该是PTA的版本不支持数组括号中为变量,而不是一个常量。
为了验证上面的猜想,将第一次的代码中的a[n]转换成a[10],再次提交。
所以猜想大概是成立的。
4.代码截图。
如第3点中后两张图所示。
题目二.7-17 判断上三角矩阵:上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。
1.本题PTA提交列表
2. 设计思路
定义了子函数fact(n)和二维数组a[10][10](全局变量),主函数输入待测矩阵总个数t,而后输入t个数,为每个矩阵的行数(与列数相等)。每输入一个行数,就调用一次子函数fact(n)。子函数fact(n)实现n阶矩阵的输入与计算其对角线下有几个数为零。最终将实际为零数count与理论得零数n*(n-1)/2进行比较,若相等则输出YES,否则输出NO。
3.本题调试过程碰到问题及PTA提交列表情况说明。
本题错误出现在于过于马虎,在判断对角线以下数是否为零并计数时,在if中多了一句break,导致错误产生。提醒我以后做题排错时格外注意break与continue的使用是否妥当。
此外,参考同学的做法才发现我的思路虽然没错但是太过繁琐。她们的思路简化为:先定义一个flag=0,直接判断对角线以下的数是否不为零,若不为零则flag=1,break跳出循环直接输出NO,否则flag=0,输出YES。不可置否,这个方法比我的好多了,流程图也所简化,我也从中有所收获,即多开阔自己的思路,找到最佳方案做题。
4.代码截图。(左图为我的完整代码,右图为有所修改的部分)
题目三.7-22 求矩阵各行元素之和:本题要求编写程序,求一个给定的m×n矩阵各行元素之和。
1.本题PTA提交列表
2. 设计思路
定义了子函数fact(n,m)与二维数组全局变量a[6][6],在主函数中输入二维数组的数值后,调用子函数fact(n,m)。子函数fact(n,m)中第一层循环为行数,保证每一行开始计算元素之和时sum=0;第二层循环为列数,分别将a[i][j]加在sum上,则每次第二层循环结束后输出一个sum,为该行各元素之和。
3.本题调试过程碰到问题及PTA提交列表情况说明。
(1)这题算基础题目,第一次提交正确后改用函数,发现编译错误。经过研究发现,在子函数中运用了列数n,但其并未从主函数传递到子函数。随后修改,答案正确。
4.代码截图。(左图为一般程序,右图使用了函数)
二、同学代码结对互评
1.互评同学:陈冰艳
2.我的代码、互评同学代码截图
陈冰艳同学的代码:
我的代码:
3.我和陈冰艳同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?
不同在于:陈冰艳同学的思路是将题目要求插入的x当作已有数组的后一位组成新数组,而后通过排列得到有序的数组。而我的思路是将x与相邻的两个数比较,如果x恰好处于这两个数之间,则前面的数原封不动复制给新数组b[10],x顶替后一位的位置,从后一位开始,原来数组的数的位置后移一位。从而得到新数组。
此外,在子函数的传递中,陈冰艳同学处理的更好。她从主函数中传递了原来数组的首地址到子函数,而我定义的全局变量虽然也可行,但占据更多的内存,有失妥当。
各自优势:陈冰艳同学的代码更加简洁,也更有观赏性。
我更喜欢陈冰艳同学的代码。
三、截图本周题目集的PTA最后排名。
四、本周学习总结
1.我学会了运用数组去存储多位数据,在子函数与主函数形参与实参的传递中,用数组名称为数组首地址可传递,不要一直执着于全局变量。
2.本周的内容,你还不会什么?
简单的数组问题可以解决,但遇到稍难的数组总是会忘记先存储,再输出。使自己容易转牛角尖,出不来。
有些题目好不容易做出来,可是下一次再遇到又会陷入困境,感觉完全没有思路。思考题目不够细心,经常不能一次得满分,在PTA和Dev的调试下,才发现代码有漏洞。
3.数组考试总结
(1).哪题做错了,怎么改?
7-5,字符型数组要多留一个位置给\0,不然错误的很隐蔽。
(2).考试结果满意么,怎么改进?
不满意,有很多题目没做。一到考试就犯浑,有些题目平时在PTA上就打过交道,但一到考试就大脑一片空白,容易犯不该犯的错误,结果更紧张了,时间越来越少。当然,即使时间充足,我也不一定都能写出来,但好歹不会遗憾。