鱼C论坛

 找回密码
 立即注册
查看: 1762|回复: 3

c

[复制链接]
发表于 2023-10-2 22:58:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今重复输入正数,按照升序规律把这个数插入到数组中,输出这个数组的所
有数,直到输入一个负数停止。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-2 22:58:46 | 显示全部楼层
以下是C语言的代码实现:

  1. #include <stdio.h>

  2. int main() {
  3.     int arr[100]; // 声明一个长度为100的数组
  4.     int num, i, j;

  5.     // 循环输入正数并插入数组中
  6.     for (i = 0; ; i++) {
  7.         scanf("%d", &num);
  8.         if (num < 0) {
  9.             break; // 输入负数停止循环
  10.         }
  11.         // 从后往前遍历数组,找到第一个比当前输入数小的位置
  12.         for (j = i; j > 0 && arr[j-1] > num; j--) {
  13.             arr[j] = arr[j-1];
  14.         }
  15.         arr[j] = num; // 插入当前输入数
  16.     }

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

  22.     return 0;
  23. }
复制代码


代码的思路是:首先声明一个长度为100的数组,然后循环输入正数并插入数组中,直到输入负数停止循环。在插入数组时,从后往前遍历数组,找到第一个比当前输入数小的位置,然后将这个位置后面的数都往后移一位,最后将当前输入数插入到这个位置。最后输出数组中的所有数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-2 22:59:04 | 显示全部楼层
以下是一个用C语言实现的将输入的正数按升序插入数组中并输出的示例代码:

  1. #include <stdio.h>

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

  3. int main() {
  4.     int arr[MAX_SIZE];
  5.     int n, i, j, temp;

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

  8.     // 循环读入并排序输出
  9.     for (i = 0; n >= 0; i++) {
  10.         arr[ i] = n; // 把输入的数插入到数组中
  11.         // 排序
  12.         for (j = i; j > 0 && arr[j-1] > arr[j]; j--) {
  13.             temp = arr[j];
  14.             arr[j] = arr[j-1];
  15.             arr[j-1] = temp;
  16.         }
  17.         // 输出当前数组
  18.         printf("当前数组的元素有:");
  19.         for (j = 0; j <= i; j++) {
  20.             printf("%d ", arr[j]);
  21.         }
  22.         printf("\n");
  23.         // 继续读入下一个数
  24.         printf("请输入下一个正数:");
  25.         scanf("%d", &n);
  26.     }

  27.     return 0;
  28. }
复制代码


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

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

使用道具 举报

发表于 2023-10-2 22:59:10 | 显示全部楼层
您可以按照以下方式实现这个功能:

1. 首先,需要定义一个数组来保存输入的正数。您可以选择使用C++标准库中的std::vector容器,这样可以方便地进行动态内存分配。
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int main() {
  5.     vector<int> arr;  // 定义一个vector数组保存输入的正整数
  6.     int n;
  7.     cout << "请输入正整数:" << endl;
  8.     while (cin >> n && n >= 0) {
  9.         // 将n插入到数组中的合适位置(升序)
  10.         bool inserted = false;  // 标记是否已经插入
  11.         for (int i = 0; i < arr.size(); i++) {
  12.             if (n < arr[i]) {  // 找到第一个大于n的数,插入到它的前面
  13.                 arr.insert(arr.begin() + i, n);
  14.                 inserted = true;
  15.                 break;
  16.             }
  17.         }
  18.         if (!inserted) {  // n比数组中所有数都大,插入到末尾
  19.             arr.push_back(n);
  20.         }
  21.         // 输出当前数组中的所有数
  22.         for (int i = 0; i < arr.size(); i++) {
  23.             cout << arr[i] << " ";
  24.         }
  25.         cout << endl;
  26.         cout << "请输入正整数:" << endl;
  27.     }
  28.     return 0;
  29. }
复制代码

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

2. 最后,如果遇到输入的数字为负数,则终止输入并退出程序。
  1. while (cin >> n && n >= 0) {
  2.     // 将n插入到数组中的合适位置(升序)
  3.     // ...
  4.     cout << "请输入正整数:" << endl;
  5. }
复制代码

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

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

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-12 00:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表