1 目前自己学习中存在的薄弱的知识点具体有哪些?每个薄弱的知识点都是如何获知的,每个薄弱的知识点需要列举具体的例子说明。(5分)
答:最薄弱的地方应该是指针这一块内容,觉得搞不懂为什么要应用指针的形式来编写代码,感觉到十分复杂,有点晕乎乎的,能弄清楚指针的大概含义但是不习惯用它,感觉在内容和地址之间绕来绕去有点懵;
对于数组名作为函数实参还不太熟练,还需要花长时间去理解代码(eg.冒泡法排序)
对于这些出现的问题,我觉得应该花更多的时间去理解课本上的基础内容然后自己再练习,尽量做到能熟悉掌握运用,指针是C++的一大难点,有问题应该比较正常,要慢慢去解决自己的问题,不会多问同学和老师。
2 从第五章函数到第七章数组的函数题和编程题(主要是在PTA)中选出至少一道你觉得比较有挑战的题(已解决且不是奇奇的题)。写出解题报告包括:(1)题目大意;(2)解题思路;(3)代码思路,比如画出流程图;(4)核心技术总结;(5)解题过程中存在的问题,以及如何得到解决的。(5分)
7-1 数组元素循环右移问题
(1) 题目大意:将数组中的元素按顺序往右移动位置,并把开始时位于移动位置之前的数顺序放到末尾
(2) 解题思路:在输入的时候就判断移动之后每个元素的位置,直接输入到指定位置之后输出
(3) 代码思路:自定义一个函数,将具有n个元素的数组元素循环右移m位。N是数组大小 ,m是循环右移的位数。将原数组看成两部分,一部分下标从0到n-m-1,进行数组元素的反转,另一部分下标从n-m到n-1,进行数组元素的反转;最后进行整个元素的反转。
#include <iostream>
int main(){
int m=0,n=0,i=0,t=0,j=0;
int a[100]; //定义变量,数组
cin>>n>>m;
for(i=0;i<n;i++){
cin>>a[i];
} //输入
m=m%n; //特别注意有可能有M>N的情况
for(i=0;i<m;i++){
t=a[n-1]; //把最后一位赋给t, 向后推m位就是进行m次循环
for(j=n-m;j>=0;j--){
a[j+1]=a[j];
}
a[0]=t; //剩余的依次向后推以为
}
Cout<<a[0]; //保证行末没有空格,先把a[0]输出
for(i=1;i<n;i++)
cout<<a[i];
return 0;}
(4) 核心技术:找到元素位置对应关系
(5) 存在问题:找不到最简洁的方法,找不到移动部分位置间的关系。
解决方法:学习借鉴网络上的代码,根据结果跟自己已经写出的代码进行对比改正,特别是注意m%n这个问题,还有最后输出的空格问题,最后就是不断地编译改正,小心的写代码了。
原文:https://www.cnblogs.com/zhangling0814/p/10085539.html