2201_75349532 2023-01-08 17:45 采纳率: 57.1%
浏览 38
已结题

关于一维数组的问题呃呃

给定类型为float长度为N的一维数组 array,通过rand()产生随机浮点数进行赋值, seed 是123。

  1. 打印每个数组下标的内存地址(注:使用%p进行打印)
    输出要求,每个地址为16进制打印,显示为0x…,固定为4byte。如地址0x123显示为0x00000123(PC及可能是64bit)
    Array数组元素的地址如下:
    a
    d
    d
    (
    0
    )

    a
    d
    d
    (
    N

    1
    )
  2. 打印数组在内存中占用的字节数
  3. 找出其中的最大值和最小值,并计算平均值
  4. 试着用冒泡法对这些数据进行排序输出要求:每个数宽度10,精度为4。
  • 写回答

3条回答 默认 最新

  • 关注

    (1)对于64位机器,需要得到地址后用%08X输出,如果用%p,输出的是8byte长度的地址。32位机器直接用%p输出就可以。64位的写法32位也可以用,所以直接用64位PC下的写法就可以了。
    (2)最后一题,宽度10,精度为4的写法是 %10.4f
    运行结果:

    img

    代码:

    #define _CRT_SECURE_NO_WARNINGS 1
    
    #include <stdio.h>
    #include <stdlib.h>
    #define N 10
    int main()
    {
        float array[N];
        int i, j;
        float maxv, minv, ave = 0;
        float tmp;
        unsigned long long a1;
        unsigned int a2;
        srand(123);//随机数种子123
        //给数组赋值
        for (i = 0; i < N; i++)
            array[i] = rand()/(float)RAND_MAX;
    
    
        //1.输出16进制地址,固定4byte
        printf("array数组元素的地址如下:\n");
        for (i = 0; i < N; i++)
        {
            a1 = (unsigned long long)(&array[i]);
            //printf("add(%d):0X%p\n", i, &array[i]); //32位PC可以直接用这个,
            printf("add(%d):0X%08X\n", i, a1 & 0xFFFFFFFF); //64位机器必须用这一句,32位机器也可以用这一句。截取4byte
        }
        //2.打印数组再内存中占用的字节数
        printf("数组在内存中占用的字节数:%d字节\n", sizeof(array));
    
        //3.找出最大值和最小值,并计算平均值
        maxv = array[0];
        minv = array[0];
        for (i = 0; i < N; i++)
        {
            if (array[i] > maxv)
                maxv = array[i];
            if (array[i] < minv)
                minv = array[i];
            ave += array[i];
        }
        printf("最大值:%f\n", maxv);
        printf("最小值:%f\n", minv);
        printf("平均值:%f\n", ave / N);
    
        //4.冒泡排序
        printf("从小到大冒泡排序后的数组内容:\n");
        for (i = 0; i < N - 1; i++)
        {
            for (j = 0; j < N - 1 - i; j++)
            {
                if (array[j] > array[j + 1])//从小到大排序
                {
                    tmp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = tmp;
                }
            }
        }
        //输出,宽度10位,精度为4
        for (i = 0; i < N; i++)
            printf("%10.4f ", array[i]);
        return 0;
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月12日
  • 已采纳回答 1月12日
  • 创建了问题 1月8日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看