您的位置:首页 > 其它

编写一个“banner”函数,该函数的输入为大写字母,输出为一个字符数组,该数组以图形化的方式表示该字母。

2020-07-27 12:15 176 查看

思路

每个字母是如何表示的?
以’I‘为例:

每次画图都感觉心累,关键是画出来效果还不是很好。(不信你看上边那个图,有些线粗有些线细)有什么好的画图办法快救救孩子吧。
I可以表示为:1910 6401 6110 1910具体含义如下:

千位 百位 十位 个位
1910 1表示1行 9表示9列 1表示1行9列用1填充 0表示同行没有其它填充

具体表示结果:

千位 百位 十位 个位
6401 6表示1行 4表示4列 0表示6行4列用0填充 1表示同行后面有其它填充
6110 6表示1行 1表示1列 1表示6行1列用0填充 0表示同行没有其它填充

具体表示结果:

最后一个1910和第一个1910表示的一样。
字母在文件中的存放
文件中每行代表一个字母,要显示某一个字母只需读取固定的行

代码

//编写一个“banner”函数,该函数的输入为大写字母,输出为一个字符数组,该数组以图形化的方式表示该字母。
//四位数分别表示:千:行  百:列    十:输出空格还是*   个位:后面是否有连续的输出
#include<stdio.h>
void print(int l)
{
int WhichLine = l;//指定要读取哪一行
int CurrentIndex = 0;//当前读取的行
int k, num;
int data[100];
FILE* fw = fopen("存放字母文件", "r");//根据自己的存放路径,进行修改。
//读取固定的某一行
while (!feof(fw))
{
if (CurrentIndex == WhichLine)
{
fscanf(fw, "%d", &num);
for (k = 0; k < num; k++)
fscanf(fw, "%d", &data[k]);
break;
}
fscanf(fw, "%d", &num);
for (k = 0; k < num; k++)
fscanf(fw, "%d", &data[k]);
CurrentIndex++;
}
fclose(fw);
//数据读取完毕,进行打印
int i, j;
for (k = 0; k < num; k++)
{
//打印*
if (data[k] / 10 % 10 == 1)//十位为1,打印*
{
for (i = 0; i < data[k] / 1000; i++)//打印的行(千位)
{
for (j = 0; j < data[k] / 100 % 10; j++)//打印的列(百位)
{
printf("%c", '*');
}
if (data[k] % 10 == 1)//个位,判断是否在同行打印。若为1在同行打印
{
for (j = 0; j < data[k + 1] / 100 % 10; j++)
{
if (data[k + 1] / 10 % 10 == 1)
printf("%c", '*');
else
printf("%c", ' ');
}

if (data[k+1] % 10 == 1)
//for (j = 0; j < data[k + 2] / 100 % 10; j++)
{
if (data[k + 2] / 10 % 10 == 1)
{
for (int t= 0; t< data[k + 2] / 100 % 10; t++)
printf("%c", '*');
if (data[k + 2] % 10 == 1)
for (int r= 0; r< data[k + 3] / 100 % 10; r++)
{
if (data[k + 3] / 10 % 10 == 1)
printf("%c", '*');
else
printf("%c", ' ');
}
}
else
{
for (int t = 0; t< data[k + 2] / 100 % 10; t++)
printf("%c", ' ');
if (data[k + 2] % 10 == 1)
for (int r= 0; r < data[k + 3] / 100 % 10; r++)
{
if (data[k + 3] / 10 % 10 == 1)
printf("%c", '*');
else
printf("%c", ' ');
}
}
}
}
printf("\n");
}
if (data[k] % 10 == 1)
k++;
if (data[k] % 10 == 1)
k++;
if (data[k] % 10 == 1)
k++;
}
//打印空格
if (data[k] / 10 % 10 == 0)//十位为0,打印空格
{

for (i = 0; i < data[k] / 1000; i++)//打印的行(千位)
{
for (j = 0; j < data[k] / 100 % 10; j++)//打印的列(百位)
printf("%c", ' ');
if (data[k] % 10 == 1)//个位,判断是否在同行打印。若为1在同行打印
{
for (j = 0; j < data[k + 1] / 100 % 10; j++)
{
if (data[k + 1] / 10 % 10 == 1)
printf("%c", '*');
else
printf("%c", ' ');
}

if (data[k + 1] % 10 == 1)
{
if (data[k + 2] / 10 % 10 == 1)
{
for (int t = 0; t< data[k + 2] / 100 % 10; t++)
printf("%c", '*');
if (data[k + 2] % 10 == 1)
for (int r = 0; r < data[k + 3] / 100 % 10; r++)
{
if (data[k + 3] / 10 % 10 == 1)
printf("%c", '*');
else
printf("%c", ' ');
}
}
else
{
for (int t = 0; t < data[k + 2] / 100 % 10; t++)
printf("%c", ' ');
if (data[k + 2] % 10 == 1)
for (int r = 0; r < data[k + 3] / 100 % 10; r++)
{
if (data[k + 3] / 10 % 10 == 1)
printf("%c", '*');
else
printf("%c", ' ');
}
}

}

}
printf("\n");
}
if (data[k] % 10 == 1)
k++;
if (data[k] % 10 == 1)
k++;
if (data[k] % 10 == 1)
k++;
}

}
}
void main()
{
char ch;
printf("请输入一个大写字母:");
scanf("%c", &ch);
if (ch >= 65 && ch <= 90)
{
printf("%d", ch);
printf("该字母对应的字符数组为:\n");
print(ch - 65);
}
else
printf("请输入大写字母!");
}

运行结果

部分字母表示表示:
15 1401 1110 1301 1111 1101 1110 1201 1510 1101 1111 1501 1110 1111 1701 1110 (A)
9 1410 2111 2201 2110 1410 2111 2201 2110 1410 (B)
8 1510 1301 1110 1201 1110 1101 1110 1510 (Z)
6 4111 4201 4110 1410 1301 1110(U)
6 1510 2110 1510 2401 2110 1510(S)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐