鱼C论坛

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

c

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

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

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

x
今重复输入正数,按照升序规律把这个数插入到数组中,输出这个数组的所
有数,直到输入一个负数停止。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

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

    return 0;
}

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

使用道具 举报

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

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

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

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

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

    return 0;
}

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

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

使用道具 举报

发表于 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[i]) {  // 找到第一个大于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[i] << " ";        }        cout << endl;        cout << "请输入正整数:" << endl;    }    return 0;}
上述代码中,在每次从标准输入中读入一个正整数n后,遍历当前数组并找到它应该插入的位置。如果找到第一个大于n的数,我们就将n插入到它的前面。否则,我们就将n插入到数组的末尾。

2. 最后,如果遇到输入的数字为负数,则终止输入并退出程序。
while (cin >> n && n >= 0) {    // 将n插入到数组中的合适位置(升序)    // ...    cout << "请输入正整数:" << endl;}
这样,当输入一个负数时,循环就会结束,程序也就结束了。

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 23:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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