一维数组的增删查改练习

#include <stdio.h>
#include <stdlib.h>

/* 学习数组的增删改查操作 */

int main()
{
    double nums[] = {23, 43, 98, 57, 83};
    int i, j;//循环变量
    int numsLen;//数组长度
    int index = -1;//待查找的元素下标
    double element;//待查找的值

    /* 计算数组长度 */
    numsLen = sizeof(nums) / sizeof(nums[0]);

    /* 一维数组的查找
    通过数组下标实现对数组的循环访问操作,将数组元素与待查找的值进行比对
    */

    /* 打印数组 */
    for (i = 0; i < numsLen; i++)
    {
        printf("%-8.2lf", nums[i]);
    }
    printf("\n");

    /* 提示用户输入待查找的值 */
    printf("请输入待查找的值:");
    scanf("%lf", &element);

    for (i = 0; i < numsLen; i++)
    {
        if (element == nums[i])
        {
            index = i;
            break;
        }

    }

    if (-1 != index)
        printf("找到了待查找的元素:%lf,他是数组的第%d个元素\n", element, index + 1);
    else
    {
        printf("没有找到待查找的元素:%lf\n", element);
        return 0;
    }
    printf("\n");


    /* 数组的修改元素操作
       思路:①通过下标直接修改
       ②给出待修改的值,则先查找再修改
    */
    /* ①通过下标直接修改 */
    /* 打印数组 */
    for (i = 0; i < numsLen; i++)
    {
        printf("%-8.2lf", nums[i]);
    }
    printf("\n");

    printf("请输入你要修改的元素序号(1-%d):", numsLen);
    scanf("%d", &index);

    /* 对用户输入的值进行合法性判断 */
    if ((index < 1) || (index > numsLen))//输入的数据非法
    {
        printf("\n输入的序号非法.\n");
        return 0;
    }
    else
    {
        printf("\n请输入修改后的值:");
        scanf("%lf", &element);
        nums[index - 1] = element;//进行数值替换

    }

    /* 打印替换后的数组 */
    printf("修改后的数组为:\n");
    for (i = 0; i < numsLen; i++)
    {
        printf("%-8.2lf", nums[i]);
    }
    printf("\n\n");

    /* ②给出待修改的值,则先查找再修改
    思路:先查找该值再替换
     */
    /* 打印数组 */
    index = -1;
    for (i = 0; i < numsLen; i++)
    {
        printf("%-8.2lf", nums[i]);
    }
    printf("\n");

    printf("请输入待修改的值:");//提示用户输入待修改的值
    scanf("%lf", &element);

    /* 查找该值 */
    for (i = 0; i < numsLen; i++)
    {
        if (element == nums[i])
        {
            index = i;
            break;
        }

    }
    if (-1 != index)//找到了该值
    {
        printf("\n请输入修改后的值:");
        scanf("%lf", &element);
        nums[index] = element;//进行数值替换
    }
    else
        printf("数组中没有改元素\n");

    /* 打印替换后的数组 */
    printf("修改后的数组为:\n");
    for (i = 0; i < numsLen; i++)
    {
        printf("%-8.2lf", nums[i]);
    }
    printf("\n");

    /*
    数组的删除操作
    思路:先查找待删除元素在数组中的下标,从该下标开始下标后的元素循环覆盖前一个元素,数组长度减一
     */
    index = -1;
    /* 提示用户输入待删除的值 */
    printf("请输入待删除的值:");
    scanf("%lf", &element);

    /* 查找用户待删除元素在数组中的索引下标 */
    for (i = 0; i < numsLen; i++)
    {
        if (element == nums[i])
        {
            index = i;
            break;
        }

    }

    if (-1 != index)//找到了待删除元素的下标
    {
        for (i = index; i < numsLen - 1; i++)
        {
            nums[i] = nums[i + 1];//后一个替换前一个
        }
        numsLen--;

        /* 打印删除后的数组 */
        printf("删除后的数组为:\n");
        for (i = 0; i < numsLen; i++)
        {
            printf("%-8.2lf", nums[i]);
        }
    }
    else
        printf("没有找到待删除的元素:%lf\n", element);

    printf("\n");

    /*
    数组的增加操作
    ①插到数组的尾部;
    ②插到指定序号
    */
    /* 插到数组的尾部 */
    /* 提示用户输入待增加的值 */
    printf("请输入待增加的值:");
    scanf("%lf", &element);
    nums[numsLen] = element;
    numsLen++;

    /* 打印增加后的数组 */
    printf("增加后的数组为:\n");
    for (i = 0; i < numsLen; i++)
    {
        printf("%-8.2lf", nums[i]);
    }

    return 0;
}

 

posted @ 2017-11-27 13:41  freryc  阅读(519)  评论(0编辑  收藏  举报