关于一维数组的问题呃呃

给定类型为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。

(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;
}




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

int main(){
    float array[10];
    srand(123);
    printf("Array数组元素的地址如下:\n");
    for(int i=0;i<10;i++){
        array[i] = rand()/(float)(RAND_MAX);
        printf("add(%d)=%p\n",i,&array[i]);
    }
    printf("打印数组在内存中占用的字节数:%d\n",sizeof(array));
    float min = array[0],max = array[0];
    float sum = array[0];
    for(int i=1;i<10;i++){
        sum += array[i];
        if(array[i] < min){
            min = array[i];
        }
        if(array[i] > max){
            max = array[i];
        }
    }
    printf("最大值为:%f\n最小值为:%f\n平均值为:%f\n",max,min,sum/10);
    for(int i=0;i<10;i++){
        for(int j=0;j<9-i;j++){
            if(array[j] > array[j+1]){
                float temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }
    for (i = 0; i < N; i++)
        printf("%.10f ", array[i]);
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632