一个长度为48的8位数数组,数组前面10个单元固定为'0'..'9',后面随机赋值,按16进制显示这个数组,每10个数一行并且显示时可清晰看出数组中每个单元的16进制值(怎么才能输入8位数呢…)
按照题意,应该说的是2进制的八位而不是十进制的八位。char即可。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
// 初始化随机数种子
srand((unsigned)time(NULL));
// 初始化数组前 10 个元素
char arr[48] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
// 随机生成数组后面 38 个元素
for (int i = 10; i < 48; i++) {
arr[i] = rand() % 256; // 生成 0-255 之间的随机数
}
// 每 10 个数一行显示数组
for (int i = 0; i < 48; i += 10) {
for (int j = 0; j < 10; j++) {
printf("%02X ", (unsigned char)arr[i+j]);
}
printf("\n");
}
return 0;
}
可以使用for循环遍历数组,并使用printf函数以16进制格式输出数组元素。具体代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
// 初始化随机数生成器
srand(time(NULL));
// 定义长度为48的数组
int arr[48];
// 前10个单元固定为'0'..'9'
for (int i = 0; i < 10; i++) {
arr[i] = i;
}
// 后面随机赋值
for (int i = 10; i < 48; i++) {
arr[i] = rand() % 256; // 0~255之间的随机数,即8位二进制数
}
// 按16进制显示数组,每10个数一行
for (int i = 0; i < 48; i++) {
printf("%02X ", arr[i]); // %02X表示至少两位16进制数,不足前面补0
if ((i + 1) % 10 == 0) {
printf("\n");
}
}
return 0;
}
输出结果如下:
00 01 02 03 04 05 06 07 08 09
F9 9E 9D 21 0F 57 53 1A 8B 6D
C7 7A 0B C7 9B 1F F7 3D F2 50
F3 87 8B 9B B8 C8 C7 54 74 30
其中,前10个数为0~9,后面的数为随机生成的8位数。每10个数一行,并且每个单元的16进制值都清晰可见。