题目1:
7-1 数组元素循环右移问题
一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
1. 本题PTA提交列表
2. 设计思路
将输入的数储存在数组中,右移后a[0]=a[3],a[1]=a[4],a[2]=a[5]。
故需要设计循环使a数组中数字下标进行循环。
3.本题调试过程碰到问题及PTA提交列表情况说明
碰到问题:1.如何输入数组2.如何输入数组3.如何将下标进行加减。
第一次提交,答案错误,输入后数字之间无间隔,但同时无法用“ %d ”输出,因为行末不能有间隔。故根据程序分析在第一循环中如果当i>n-1,则不需要输出空格。在第二个循环中,i=n-m-1时不需要输出空格,固将程序改动正确。
题目2.
7-2 求最大值及其下标(20 分)
本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
1. 本题PTA提交列表
本题代码
2. 设计思路
将相邻量两个数进行比较,如果顺序错误则进行交换。如是循环。
3.本题调试过程碰到问题及PTA提交列表情况说明
碰到问题:如何比较大小,互相交换后找到最大值下标。
第一次提交时定义数组错误,不能直接定义a[n],查找书本翻看程序后纠正。
第二次提交时没有令max=0,所以无法运行,反复试验多次无果后进行询问同学改正。
题目3.
7-6 冒泡法排序
将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。
本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。
本题提交列表
本题代码
2.设计思路
一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
3.
3.本题调试过程碰到问题及PTA提交列表情况说明
碰到问题:循环逻辑不通,不知道如何使格式正确
第一次提交输出格式错误,行末存在多余空格,分析后可以根据数组中元素下标判断该元素是否为最后一个元素,若不是,则输出空格,若是,则不输出。
#二
排名
互评同学名称:李彦婵
2.代码对比
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
结构不同,彦婵直接将下标从最大值往前输,而我定义了一个子函数,使用下标的对换来实现。比较之下,彦婵的程序更加简洁明了,运用了技巧,而我的程序过于复杂,容易出错并且不容易发现错误。我更喜欢彦婵的风格,简单易懂。
四、本周学习总结
1.你学会了什么?
1).学会了如何定义一维数组,二维数组
2).学会了如何将数组中的元素运用下标进行处理。
3).学会了不同输入输出数组的几种不同方式
4).关于str系列函数的用法与原型
2.本周的内容,你还不会什么?
不知道如何分别进行行与列的查找并比较大小。
3.循环结构考试总结
1.哪题做错了,怎么改?
所定义数组范围过小,导致答案部分错误,定义足够大的数组char a[1000000]
2.考试结果满意么,怎么改进?
不满意,应该多回归书本,并且在听完课之后立马进行温习并自己尝试写一遍,若有不懂应该立马标注并及时解决。
3.其他总结。
多多练习,端正态度。