Arehen 发表于 2023-10-2 22:58:24

c

今重复输入正数,按照升序规律把这个数插入到数组中,输出这个数组的所
有数,直到输入一个负数停止。

isdkz 发表于 2023-10-2 22:58:46

以下是C语言的代码实现:

#include <stdio.h>

int main() {
    int arr; // 声明一个长度为100的数组
    int num, i, j;

    // 循环输入正数并插入数组中
    for (i = 0; ; i++) {
      scanf("%d", &num);
      if (num < 0) {
            break; // 输入负数停止循环
      }
      // 从后往前遍历数组,找到第一个比当前输入数小的位置
      for (j = i; j > 0 && arr > num; j--) {
            arr = arr;
      }
      arr = num; // 插入当前输入数
    }

    // 输出数组中的所有数
    for (i = 0; i < j; i++) {
      printf("%d ", arr[ i]);
    }
    printf("\n");

    return 0;
}


代码的思路是:首先声明一个长度为100的数组,然后循环输入正数并插入数组中,直到输入负数停止循环。在插入数组时,从后往前遍历数组,找到第一个比当前输入数小的位置,然后将这个位置后面的数都往后移一位,最后将当前输入数插入到这个位置。最后输出数组中的所有数。

陶远航 发表于 2023-10-2 22:59:04

以下是一个用C语言实现的将输入的正数按升序插入数组中并输出的示例代码:

#include <stdio.h>

#define MAX_SIZE 100 // 数组最大容量

int main() {
    int arr;
    int n, i, j, temp;

    printf("请输入一个正数:");
    scanf("%d", &n);

    // 循环读入并排序输出
    for (i = 0; n >= 0; i++) {
      arr[ i] = n; // 把输入的数插入到数组中
      // 排序
      for (j = i; j > 0 && arr > arr; j--) {
            temp = arr;
            arr = arr;
            arr = temp;
      }
      // 输出当前数组
      printf("当前数组的元素有:");
      for (j = 0; j <= i; j++) {
            printf("%d ", arr);
      }
      printf("\n");
      // 继续读入下一个数
      printf("请输入下一个正数:");
      scanf("%d", &n);
    }

    return 0;
}


运行上述程序时,首先会要求用户输入一个正数,该数会被插入到数组中。然后,每次读入一个正数,在把它插入到数组中之前,都会先对数组进行升序排序,并输出当前的数组元素。当用户输入的数是负数时,程序就会停止。

需要注意的是,上面的示例代码中只能处理最多 MAX_SIZE 个数,如果输入的正数数量超过了数组的容量限制,程序就会出现错误。为了避免这种情况,可以使用动态数组或链表等数据结构来代替固定大小的数组。
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 2023-10-2 22:59:10

您可以按照以下方式实现这个功能:

1. 首先,需要定义一个数组来保存输入的正数。您可以选择使用C++标准库中的std::vector容器,这样可以方便地进行动态内存分配。


#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> arr;// 定义一个vector数组保存输入的正整数
    int n;

    cout << "请输入正整数:" << endl;
    while (cin >> n && n >= 0) {
      // 将n插入到数组中的合适位置(升序)
      bool inserted = false;// 标记是否已经插入
      for (int i = 0; i < arr.size(); i++) {
            if (n < arr) {// 找到第一个大于n的数,插入到它的前面
                arr.insert(arr.begin() + i, n);
                inserted = true;
                break;
            }
      }
      if (!inserted) {// n比数组中所有数都大,插入到末尾
            arr.push_back(n);
      }

      // 输出当前数组中的所有数
      for (int i = 0; i < arr.size(); i++) {
            cout << arr << " ";
      }
      cout << endl;

      cout << "请输入正整数:" << endl;
    }

    return 0;
}


上述代码中,在每次从标准输入中读入一个正整数n后,遍历当前数组并找到它应该插入的位置。如果找到第一个大于n的数,我们就将n插入到它的前面。否则,我们就将n插入到数组的末尾。

2. 最后,如果遇到输入的数字为负数,则终止输入并退出程序。


while (cin >> n && n >= 0) {
    // 将n插入到数组中的合适位置(升序)
    // ...

    cout << "请输入正整数:" << endl;
}


这样,当输入一个负数时,循环就会结束,程序也就结束了。

希望这个示例代码能够对您有所帮助!如果您有任何其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: c