墨滴

第二次作业,反思

针对中段测试的结果、新手赛的比赛情况,以及之前的课前预习、课中学习、和课后作业情况,回答如下问题:

1  目前自己学习中存在的薄弱的知识点具体有哪些?每个薄弱的知识点都是如何获知的,每个薄弱的知识点需要列举具体的例子说明。(5分)

我认为,我目前的知识薄弱点主要有数组的引用,以及一些基本概念没有理清。

数组的引用:

主要是写pintia时,想引用一些二维数组,发现算法过于复杂,引用过程中容易把数组内容改变,通过课本上的例题可以把二维数组转换为一维数组,虽然函数变得复杂,但是更容易理解,方便编辑。而且,最新学的contest可以起到保护数组的作用

基本概念:

主要是写选择题的错误率较高,解决办法主要是多看课本,不单单要会编程,还要理解其中的内涵和原理。

2  从第五章函数到第七章数组的函数题和编程题(主要是在PTA)中选出至少一道你觉得比较有挑战的题(已解决且不是奇奇的题)。写出解题报告包括:(1)题目大意;(2)解题思路;(3)代码思路,比如画出流程图;(4)核心技术总结;(5)解题过程中存在的问题,以及如何得到解决的。(5分)

(1) 题目大意:在主函数中输入10个整数到数组中,调用函数完成将数组循环移动k位(要求函数参数为⑴数组名 ⑵数组元素的个数 ⑶循环移动的位数k)。当K>0时,实现循环右移;当K<0时,实现循环左移。循环右移一位的意义是:将数组全体元素向后一个下标位置移动一个元素的位置,原数组最后一个元素移动到数组最前面第0个元素的位置。提示:当K<0时,转换成等价的循环右移。要求函数的形参是指针变量。

(2) 解题思路:

将函数主要分为两大部分,一部分向左移动,另一部分向右。第一种思路是将数组重新赋值,然后按顺序输出。第二种思路是直接将数组输出。第三种是利用指针将数组输出,不过容易改变数组内的数值,且回归0数组后,

(3)代码思路

#include<iostream>

#include<cmath>

using namespace std;

int main()

{

int a[10],n,k,*p;

for(int i=0;i<10;i++) cin>>a[i];

cin>>k;

p=a;

if(k<=0)//判断k小于0的情况

{

k=abs(k);//将k变成正数

for(int i=0;i<10;k++,i++)//循环输出

{

if(k>=10) k=k%10;

cout<<a[k];

if(i!=9) cout<<" ";

}

}

else

{

if(k>=10) k=k%10;

k=10-k;

for(int i=0;i<10;k++,i++)//循环输出

{

if(k>=10) k=k%10;

cout<<a[k];

if(i!=9) cout<<" ";

}

}

 

return 0;

}

(4)核心技术总结

也没什么东西,就是几个循环,最后一个括号比较复杂,要加多一个if判断。直接将数组输出可以让数据更加简单,没那么复杂。

(5)解题过程中存在的问题:

主要是几种方法之间的选择,还有是否使用函数。个人认为应该可以把两个循环合并成一个循环,不过写成两个比较直观。其他问题主要是输出的第一个数组如何确定以及怎么跳回a【0】开始输出。

posted on 2018-12-06 23:57  墨滴  阅读(190)  评论(0编辑  收藏  举报

导航