C++通过键盘输入不定个数的数据作为数组元素
时间: 2023-06-24 13:04:36 浏览: 152
可以使用动态内存分配来实现不定个数的数组元素输入。具体步骤如下:
1. 通过 `cin` 获取数组元素个数 `n`。
2. 使用 `new` 运算符在堆内存上分配 `n` 个元素的空间。
3. 通过循环语句 `for` 或 `while` 逐个输入数组元素。
举个例子,下面的代码演示了如何通过键盘输入不定个数的整数作为数组元素:
```cpp
#include <iostream>
using namespace std;
int main() {
int n;
cout << "请输入数组元素个数:";
cin >> n;
// 动态内存分配
int *arr = new int[n];
// 输入数组元素
cout << "请输入数组元素:";
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
// 输出数组元素
cout << "数组元素为:";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
// 释放内存
delete[] arr;
return 0;
}
```
需要注意的是,使用完动态分配的内存后,需要使用 `delete` 运算符手动释放内存,避免内存泄漏。
相关问题
一维指针和数组,键盘输入若干整数到一个数组中,将其调整为所有质数在前,和数在后,输入的正整数个数不定2000个只取前2000个,以-99999结束,用C++写
好的,这道题可以使用双指针的方法,定义一个指针指向数组的开头,同时定义一个指针指向数组的结尾,然后不断向中间靠拢,将质数放在前面,和数放在后面。
下面是代码实现:
```c++
#include <iostream>
using namespace std;
// 判断是否是质数
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
int main() {
const int MAXN = 2005;
int arr[MAXN];
int n = 0; // 输入的正整数个数
int num;
while (cin >> num) {
if (num == -99999) break;
arr[n++] = num;
if (n >= MAXN) break;
}
int left = 0, right = n - 1;
while (left < right) {
// 从左往右找到第一个和数
while (left < right && isPrime(arr[left])) {
left++;
}
// 从右往左找到第一个质数
while (left < right && !isPrime(arr[right])) {
right--;
}
// 交换左右两个数
swap(arr[left], arr[right]);
}
// 输出调整后的数组
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
输入示例:
```
3 8 1 7 4 6 2 5 -99999
```
输出示例:
```
5 7 3 2 4 6 1 8
```
c++实现一维数组与指针,题目如下,键盘输入若干正整数到一个数组中(个数不定,以-1结束,超过2000个数据则只取前2000个),将其调整为所有奇数在前,偶数在后。要求建立三个子函数通过调用的方式来完成
好的,下面是具体的实现。
首先,我们需要创建一个一维数组,并从键盘读入若干个正整数。在读入的过程中,我们需要判断是否已经读入了超过2000个数据或者读入了-1,如果是则退出读入。代码如下:
```c++
#include <iostream>
using namespace std;
const int MAXSIZE = 2000;
void input(int* arr, int& n) {
cout << "请输入若干正整数,以-1结束:" << endl;
n = 0;
while (n < MAXSIZE) {
int x;
cin >> x;
if (x == -1) break;
arr[n++] = x;
}
}
```
接下来,我们需要将数组中的元素按照奇数和偶数分别放到数组的前面和后面。我们可以采用双指针的方式,一个指针从数组的前面开始扫描,另一个指针从数组的后面开始扫描,当两个指针相遇时,排序完成。具体的实现代码如下:
```c++
void adjust(int* arr, int n) {
int i = 0, j = n - 1;
while (i < j) {
while (i < j && arr[i] % 2 == 1) i++;
while (i < j && arr[j] % 2 == 0) j--;
if (i < j) swap(arr[i++], arr[j--]);
}
}
```
最后,我们需要输出排序后的数组。代码如下:
```c++
void output(int* arr, int n) {
cout << "排序后的数组为:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
```
将上述三个函数组合起来,完整的代码如下:
```c++
#include <iostream>
using namespace std;
const int MAXSIZE = 2000;
void input(int* arr, int& n) {
cout << "请输入若干正整数,以-1结束:" << endl;
n = 0;
while (n < MAXSIZE) {
int x;
cin >> x;
if (x == -1) break;
arr[n++] = x;
}
}
void adjust(int* arr, int n) {
int i = 0, j = n - 1;
while (i < j) {
while (i < j && arr[i] % 2 == 1) i++;
while (i < j && arr[j] % 2 == 0) j--;
if (i < j) swap(arr[i++], arr[j--]);
}
}
void output(int* arr, int n) {
cout << "排序后的数组为:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int arr[MAXSIZE];
int n;
input(arr, n);
adjust(arr, n);
output(arr, n);
return 0;
}
```
希望对你有所帮助!
阅读全文