#include<iostream> #include<ctime> using namespace std; void move(int* p,int m,int n); int main(){ cout<<" "<<endl; int m,n,i,a[30]={1,1}; cout<<"请输入m: "; cin>>m; srand(time(NULL)); for(i=2;i<m;i++) a[i]=a[i-1]+a[i-2]; cout<<"移动前的数据:"<<endl; for(i=0;i<m;i++) cout<<a[i]<<" "; cout<<endl; cout<<"请输入左移的位数n: "; cin>>n; move(a,m,n); cout<<"移动后的数据为: "<<endl; for(i=0;i<m;i++) cout<<endl; system("pause"); return 0; } void move(int* p,int m,int n){ int i,t; for(i=0;i<n%m;i++){ int* f=p; t=*p; for(p=p;p<p+m-1;p++) *p=*(p+1); *p=t; p=f; } }哪里出错了
时间: 2023-06-19 20:05:05 浏览: 86
在您的代码中,有一个问题是您在最后的输出循环中没有正确的放置循环变量 i,导致输出的每个数字都在新的一行中。此外,如果您输入的左移位数 n 大于数组长度 m,则需要对 n 取模操作。最后,您可以将 srand() 函数的调用从 main() 函数中移动到 move() 函数中,以避免在短时间内多次调用时生成的随机数相同。以下是修改后的代码示例:
```
#include <iostream>
#include <ctime>
using namespace std;
void move(int* p, int m, int n);
int main() {
cout << "请输入m: ";
int m, n;
cin >> m;
int a[30] = {1, 1};
srand(time(NULL));
for (int i = 2; i < m; i++) {
a[i] = a[i - 1] + a[i - 2];
}
cout << "移动前的数据:" << endl;
for (int i = 0; i < m; i++) {
cout << a[i] << " ";
}
cout << endl;
cout << "请输入左移的位数n: ";
cin >> n;
n %= m; // 对 n 取模操作
move(a, m, n);
cout << "移动后的数据为:" << endl;
for (int i = 0; i < m; i++) {
cout << a[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
void move(int* p, int m, int n) {
srand(time(NULL)); // 将 srand() 函数的调用移动到 move() 函数中
for (int i = 0; i < n; i++) {
int temp = p[0];
for (int j = 0; j < m - 1; j++) {
p[j] = p[j + 1];
}
p[m - 1] = rand() % 100; // 最后一个元素随机生成
}
}
```
阅读全文