C语言数组增加、删除实战

需求:

根据要求操作排行榜战力值

  1. 删除战斗力42322
  2. 插入战斗力41000并保持降序

删除逻辑

42322        45771        40907        41234        40767

42322        45771        41234        40767

    0                1                2                3                4

  1. 查找要删除数字的下标,比如2
  2. 从下标开始,后面一个覆盖前面一个数字
  3. 删除一个元素过后,数组总长度-1。不减总长度,后面那个数会重复
#include <stdio.h>
#include <stdlib.h>
//查找要删除数字的下标,42322
//从下标开始,后面一个覆盖前面一个数字
//删除一个元素过后,数组总长度-1。不减总长度,后面那个数会重复
//插入41000
int main()
{
    double nums[] = {42322,45771,40907,41234,40767};
    int count = 5;       //数组长度,定义这个方便后面使用
    double del;          //输入要删除的数字
    int del_index = -1;  //要删除数字的下标初值,要不存在的
    int insert_index;    //需要插入位置的下标
    double insert_num;      //需要插入的数字

    printf("请输入需要删除的数字:");
    scanf("%lf",&del);
    for(int i = 0;i < count;i++) //第一个for循环查找下标
    {
        if(del == nums[i])
        {
            del_index = i;
            break;       //找到了要删除的下标,直接跳出循环
        }
    }

    // 判断如果下标恒等于-1,就是没有找到
    if(del_index == -1)
    {
        printf("很遗憾,没有找到需要删除的值\n");
    }
    else
    {
        // 从找到的下标开始覆盖,后面的覆盖给前面的
        // 循环条件,小于最后一个值的角标位置结束循环
        for(int i = del_index;i < count- 1;i++)
        {
        nums[i] = nums[i + 1];
        }
        // 删除成功,这个时候数组总长度-1
        count-=1;
    }
    // 删除结束,使用循环打印结果
    for(int i = 0;i < count;i++)
    {
        printf("%.1lf\t",nums[i]);
    }

    // 按输入的目标位置插入数字
    printf("\n请输入需要插入的下标:");
    scanf("%d",&insert_index);
    printf("请输入需要插入的数字:");
    scanf("%lf",&insert_num);
    //从后向前遍历,将元素整体向后移动一位,空出来目标位置
    for(int i = count;i >= insert_index;i--)
    {
        nums[i] = nums[i -1];
    }
    // 目标位置空出来了,插入我们的目标数字
    nums[insert_index] = insert_num;
    // 插入成功,数组长度加1
    count+=1;
    // 插入结束,使用循环打印结果
    for(int i = 0;i < count;i++)
    {
        printf("%.1lf\t",nums[i]);
    }
    return 0;
}

#include <stdio.h>
#include <stdlib.h>
int main()
{
    double array[] ={1.1, 2.2, 3.3,4.4,5.5,6.6,7.7,8.8};
    // 计算数组长度,类似于 总价/单价=数量
    int len = sizeof(array) / sizeof(array[0]);
    // 删除下标
    int index = -1;
    // 插入数字
    double insert_num;
    // 插入位置
    int insert_index;

    printf("原始数组内容为:\n");
    for(int i = 0; i< len; i++){
        printf("%.1lf\t", array[i]);
    }
    printf("\n请输入删除的下标(0-%d):", len-1);
    scanf("%d", &index);
    // 下标范围判断是否合法
    if(index > len-1 || index < 0){
        printf("您输入的下标不合法!");
        exit(0);
    } else {
        for(int i = index; i < len;i++){
            array[i] = array[i+1];
        }
    }
    // 数组长度减1
    len--;
    // 打印删除过后的结果
    printf("删除过后的结果:\n");
    for(int i = 0; i < len; i++){
        printf("%.1lf\t", array[i]);
    }

    // 指定位置插入数据
    printf("\n请输入插入的下标(0-%d):", len-1);
    scanf("%d", &insert_index);
    printf("请输入插入的数字:");
    scanf("%lf", &insert_num);
    // 从后向前遍历,将元素整体向后移动一位,空出来目标位置
    for(int i = len - 1;i >= insert_index;i--){
        array[i + 1] = array[i];
    }
    array[insert_index] = insert_num;
    // 放入目标元素,数组长度加1
    len++;
    printf("插入过后的结果:\n");
    for(int i = 0; i < len; i++){
        printf("%.1lf\t", array[i]);
    }

    printf("\n");
    return0;
}

 (^_-) 我的学习之路任重道远,咱们下期见~~~

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值