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