信仰青春 2023-05-05 11:10 采纳率: 16.7%
浏览 27
已结题

求一个C语言~~代码哪里有问题,数组合并不成功,求中位数也没有成功的原因。

大佬帮忙看看代码哪里有问题,数组合并不成功,求中位数也没有成功的原因。

```c
#include "stdio.h"
int main()
{
    int nums1[] = {1,2,3,4,5,6,7,8,9,10};
    int nums2[] = {11,12,13,14,15,16,17,18,19,20};
    //定一个空数组来装整个
    int array[]={};
    int Length_Size1 =  sizeof nums1  / sizeof nums1[0];
    int Length_Size2 =  sizeof nums2  / sizeof nums2[0];
    int Length_Size3 = ( sizeof nums1  / sizeof nums1[0]) + (sizeof nums2  / sizeof nums2[0]);
    printf("Length_Size1:%d\n",Length_Size1);
    printf("Length_Size2:%d\n",Length_Size2);
    printf("Length_Size3:%d\n",Length_Size3);
    //合并数组
    for(int i = 0; i< Length_Size1;i++)
    {
            array[i]= nums1[i];
        }
        for(int i = 0;i < Length_Size2;i++)
        {
            array[Length_Size1+i] = nums2[i];
        }
    for(int i = 0; i < Length_Size3;i++)
    {
        printf("array[%d] = %d\n",i,array[i]);
    }
    for(int i = 0; i <= Length_Size3;i++)
    {
        if((sizeof array) / 2 == 0)
        {
            printf("%d\n",array[(sizeof array / 2)] + array[(sizeof array / 2 )+1]);
        }
        else if((sizeof array) / 2 != 0)
        {
            printf("%d\n",array[(sizeof array / 2)+1]);
        }
    }
    return 0;
}

```

  • 写回答

3条回答 默认 最新

  • K·cloud 2023-05-05 11:21
    关注

    该程序存在以下问题:

    1. 数组定义时没有指定数组大小,导致在进行数组合并和访问数组元素时出现越界问题。

    2. 计算数组中位数时,使用了sizeof运算符计算数组大小,这其实是计算数组在内存中所占的总字节数,而不是数组的实际元素个数。

    下面是修改后的代码,使得数组合并和计算中位数都正确:

    #include <stdio.h>
    
    int main() {
        int nums1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int nums2[] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
        int array[20];
        int length1 = sizeof(nums1) / sizeof(nums1[0]);
        int length2 = sizeof(nums2) / sizeof(nums2[0]);
        int totalLength = length1 + length2;
    
        //合并数组
        for (int i = 0; i < length1; i++) {
            array[i] = nums1[i];
        }
        for (int i = 0; i < length2; i++) {
            array[length1 + i] = nums2[i];
        }
    
        // 输出合并后的数组
        printf("Merged array: ");
        for (int i = 0; i < totalLength; i++) {
            printf("%d ", array[i]);
        }
        printf("\n");
    
        // 计算中位数
        if (totalLength % 2 == 0) {
            int i = totalLength / 2 - 1;
            int j = i + 1;
            printf("Median: %d\n", (array[i] + array[j]) / 2);
        } else {
            int i = totalLength / 2;
            printf("Median: %d\n", array[i]);
        }
    
        return 0;
    }
    

    输出结果如下:

    Merged array: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
    Median: 10
    

    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月6日
  • 已采纳回答 5月5日
  • 修改了问题 5月5日
  • 创建了问题 5月5日

悬赏问题

  • ¥15 onlyoffice编辑完后立即下载,下载的不是最新编辑的文档
  • ¥15 求caverdock使用教程
  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。