求以下问题的完整代码

用点阵的形式在字符界面上显示数字。数字按如下形式显示。每个数字占5列7行,数字和数字之间用2个空格隔开

输入
输入的第一行含一个正整数k,表示测试例的个数,后面紧接着k行,每行对应一个测试例,包含一个正整数x (0 \le x \le 9999)x(0≤x≤9999)。

输出
每个测试例,先输出x和冒号(英文字符,半角),换行后输出x的点阵显示形式,每位数字之间用2个空格隔开。如果行末有空格,请保留。

img

数码管数字,运行结果:

img

代码:

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