第二次作业
学习指针的时候,预习部分做的不够充分,课上存在的知识漏洞也没有及时弄懂,导致指针这一章节的学习走了许多弯路。
如cpp9编程第三题
7-3 数组元素循环移动 (15 分)
在主函数中输入10个整数到数组中,调用函数完成将数组循环移动k位(要求函数参数为⑴数组名 ⑵数组元素的个数 ⑶循环移动的位数k)。当K>0时,实现循环右移;当K<0时,实现循环左移。循环右移一位的意义是:将数组全体元素向后一个下标位置移动一个元素的位置,原数组最后一个元素移动到数组最前面第0个元素的位置。提示:当K<0时,转换成等价的循环右移。要求函数的形参是指针变量。
以下是代码。
#include<iostream>
using namespace std;
void swap(int a[],int k)
{
if(k<0)
{
int n=(-k);int b[10];int j=0;
for(int i=0;i<n;i++,j++)
b[j]=a[i];
for(int i=0;i<9-n+1;i++)
a[i]=a[i+n];
j=0;
for(int i=9-n+1;i<10;i++,j++)
a[i]=b[j];
}
if(k>0)
{
int b[10];int j=0;
for(int i=9-k+1;i<10;i++,j++)
b[j]=a[i];
for(int i=9;i>=k;i--)
a[i]=a[i-k];
j=0;
for(int i=0;i<k;i++,j++)
a[i]=b[j];
}
}
int main()
{
int a[10],k;
for(int i=0;i<10;i++)
cin>>a[i];
cin>>k;
swap(a,k);
for(int i=0;i<10;i++)
{
if(i==9) {cout<<a[i];break;}
cout<<a[i]<<" ";}
return 0;
}
关键一:关于数据右移和左移问题,已经在前面章节出现过详细讲解。可当时没有及时消化,导致思路卡顿了很长时间,但是这样的基础问题是应该立刻想出解法并打出代码的。这也给我准备期末考试敲醒了警钟。
关键二:没有看清输出格式的要求。循环输出时直接
for(int i=0;i<10;i++)
{ cout<<a[i]<<" ";} 这样的结果是最后一个数字后多打了一个空格。但是就是这样一个小问题,让我检查了许久以为是中间的思路出现了问题,这也给了我提示:考试的时候切记审题,务必注意输出格式。