用点阵的形式在字符界面上显示数字。数字按如下形式显示。每个数字占5列7行,数字和数字之间用2个空格隔开
输入
输入的第一行含一个正整数k,表示测试例的个数,后面紧接着k行,每行对应一个测试例,包含一个正整数x (0 \le x \le 9999)x(0≤x≤9999)。
输出
每个测试例,先输出x和冒号(英文字符,半角),换行后输出x的点阵显示形式,每位数字之间用2个空格隔开。如果行末有空格,请保留。
数码管数字,运行结果:
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
typedef struct _digit
{
char dt[7][6];
}Digit;
//将数字转成单个数字,并返回位数
int nmb2str(int n, int nmb[])
{
int i = 0;
if (n == 0)
{
nmb[0] = 0;
return 1;
}
while (n)
{
nmb[i++] = n % 10;
n /= 10;
}
return i;
}
//字符串拷贝
void copystr(char p[][30], Digit d, int start)
{
int i, j;
for (i = 0; i < 7; i++)
{
for (j = 0; j < 5; j++)
p[i][j + start] = d.dt[i][j];
}
}
int main()
{
Digit nmb[10] = {
{"*****",
"* *",
"* *",
"* *",
"* *",
"* *",
"*****"},
{" *",
" *",
" *",
" *",
" *",
" *",
" *"},
{"*****",
" *",
" *",
"*****",
"* ",
"* ",
"*****"},
{"*****",
" *",
" *",
"*****",
" *",
" *",
"*****"},
{"* *",
"* *",
"* *",
"*****",
" *",
" *",
" *"},
{"*****",
"* ",
"* ",
"*****",
" *",
" *",
"*****"},
{"*****",
"* ",
"* ",
"*****",
"* *",
"* *",
"*****"},
{"*****",
" *",
" *",
" *",
" *",
" *",
" *"},
{"*****",
"* *",
"* *",
"*****",
"* *",
"* *",
"*****"},
{"*****",
"* *",
"* *",
"*****",
" *",
" *",
"*****"}
};
char points[7][30]={0};//最多4个数字,每个数字5列,加上(4-1)*2个空格,最多不超过30列
int i, j, k, n, ws, x;
int shift = 0;
int tmp[6]={0}; //接收数字
scanf("%d", &n); //测试数据个数
for (k = 0; k < n; k++)
{
scanf("%d", &x);
printf("%d:\n", x);
shift = 0; //重置
ws = nmb2str(x, tmp);
//拷贝字符
for (i = ws - 1; i >= 0; i--)
{
copystr(points, nmb[tmp[i]], shift);
shift += 5 + 2;
}
//输出
for (i = 0; i < 7; i++)
{
for (j = 0; j < shift - 2; j++)
{
if (points[i][j] == 0)
printf(" ");
else
printf("%c", points[i][j]);
}
printf("\n");
}
}
return 0;
}
#include <stdio.h>
int main()
{
char a[][10][5]={
{
"****",
"* *",
"* *",
"* *",
"* *",
"* *",
"****",
},
{
" *",
" *",
" *",
" *",
" *",
" *",
" *",
},
{
"****",
" *",
" *",
"****",
"* ",
"* ",
"****",
},
{
"****",
" *",
" *",
"****",
" *",
" *",
"****",
},
{
"* *",
"* *",
"* *",
"****",
" *",
" *",
" *",
},
{
"****",
"* ",
"* ",
"****",
" *",
" *",
"****",
},
{
"****",
"* ",
"* ",
"****",
"* *",
"* *",
"****",
},
{
"****",
" *",
" *",
" *",
" *",
" *",
" *",
},
{
"****",
"* *",
"* *",
"****",
"* *",
"* *",
"****",
},
{
"****",
"* *",
"* *",
"****",
" *",
" *",
"****",
},
};
int n,i,j;
char b[5];
scanf("%d",&n);
while(n--)
{
scanf("%s",b);
printf("%s:\n",b);
for(i=0;i<7;i++)
{
for(j=0;b[j];j++)
{
printf("%s ",a[b[j]-'0'][i]);
}
printf("\n");
}
}
}
完整代码实现和注释如下,望采纳
#include <stdio.h>
#define NUM_COUNT 10 // 数字个数
#define NUM_WIDTH 5 // 数字宽度
#define NUM_HEIGHT 7 // 数字高度
// 定义每一个数字的点阵形状
const char NUMBERS[NUM_COUNT][NUM_HEIGHT][NUM_WIDTH] = {
{
"****",
"* *",
"* *",
"* *",
"* *",
"* *",
"****",
},
{
" *",
" *",
" *",
" *",
" *",
" *",
" *",
},
{
"****",
" *",
" *",
"****",
"* ",
"* ",
"****",
},
{
"****",
" *",
" *",
"****",
" *",
" *",
"****",
},
{
"* *",
"* *",
"* *",
"****",
" *",
" *",
" *",
},
{
"****",
"* ",
"* ",
"****",
" *",
" *",
"****",
},
{
"****",
"* ",
"* ",
"****",
"* *",
"* *",
"****",
},
{
"****",
" *",
" *",
" *",
" *",
" *",
" *",
},
{
"****",
"* *",
"* *",
"****",
"* *",
"* *",
"****",
},
{
"****",
"* *",
"* *",
"****",
" *",
" *",
"****",
},
};
int main(void)
{
int num_cases;
scanf("%d", &num_cases);
while (num_cases--)
{
char number[5];
scanf("%s", number);
printf("%s:\n", number);
for (int row = 0; row < NUM_HEIGHT; row++)
{
for (int digit_index = 0; number[digit_index] != '\0'; digit_index++)
{
int digit = number[digit_index] - '0'; // 将字符转换为数字
for (int column = 0; column < NUM_WIDTH; column++)
{
putchar(NUMBERS[digit][row][column]);
}
if (number[digit_index + 1] != '\0')
{
putchar(' '); // 数字之间用 2 个空格隔开
putchar(' ');
}
}
putchar('\n');
}
}
return 0;
}