c语言使用点阵输出数字

到目前为止,我们编写的C程序,其人机交互的提示或菜单都是英文的。

可以,那么如何在Turbo C的集成开发环境下编写一个显示汉字的程序而不汉化呢?

要解决这个编程问题,首先要了解关于汉字编码和字体的知识。根据汉字

随着对频率的研究,汉字可以分为高频词(100个左右)、常用词(3000个左右)和次常用词(4000个左右)。

生僻字(约8000个)和死字(约45000个),即正常使用汉字15000个。中国在1981年宣布。

介绍了GB2312-80《通信用汉字字符集(基本集)》方案及其交换码标准,将高频词、常用词和

次常用字归入汉字基本字符集(共6763个),在这个集中,汉字按使用频率分为一个。

一级汉字3755个(按拼音排序),二级汉字3008个(按部首排序),外加西文字母、数字、图片。

700个符号等。

汉字编码:

区域位置代码

国家标准汉字集(GB 2312-80)在汉字操作系统中以汉字库的形式提供。汉朝/汉族/汉语/人类

字体的结构是统一的,即字体分为94个区域,每个区域有94个汉字。

每个汉字在汉字库中都有一个确定的区号和区号(两个字节),称为区号。

(位置码的第一个字节表示区号,第二个字节表示位置号,所以只要知道位置码,就能知道。

字体中汉字的地址,每个汉字都以点阵的形式存储在字体中,比如一般是16×16。

在点阵的形式中,每个点用一个二进制表示,存储的是带1的点。当显示时,可以在屏幕上显示亮点。

0,不在屏幕上显示,这样直接用某个字的16×16点阵信息在显示器上按原文。

会显示出来,并出现相应的汉字。

内部代码

汉字用两个字节表示,国家制定了统一的标准,叫做国标代码。国家标准代码规定使用每个字节。

后7位,第一位是0。为了与英文ASCII码相区别,在计算机上使用国标码时,规定

汉字每个字节的第一位设为1,表示这两个字节是汉字,称为内码。以“大”字为例:

国家标准代码3473h: 001101000110011。

内部代码b4f3h: 1011010011110011

国标码和内码之间有一定的转换公式,即十六进制区号。两个字节各加80H,就成了。

国家标准代码。

汉字字体在字库中的位置是根据汉字的位置码确定的,内码是汉字在机器中的表示。经过

位置码和内码之间有固定的转换关系,所以当在系统中支持汉字输入时,汉字由键盘输入

代码存在于程序中,将其转换成位置代码,然后从字体库中找到相应的汉字字体,再使用相关的

位操作和循环语句,对每个字节的每一位进行判断,就像过滤一样。如果某个位为1,则该位被置位。

在屏幕上相应的位置设置颜色来画点(利用graphics.h中显示像素点的函数,putpixel()),如果有点

如果为0,则不画点,使汉字按照预设的颜色显示在相应的位置。

从内部代码到区号的转换

如果汉字的内码是十六进制数H2 h12 l 1,区号qh相数wh分别为:

qh = H2 h0xa 0;

wh = l2l 0xa 0;

如果以十进制表示的内部代码是dld2,则

qh = dl-l60;

wh = D2-160;

也就是说,位置代码qw是:

Qw=100*(d160)十(D2-160);

反过来,如果你已经知道位置代码qw。您还可以获得区号和位置号码:

qh = qw/100;

wh = qw-100 * qh;

因此,汉字在汉字库中从起点的偏移位置(以字节为单位)可以计算为:

offset =(94 *(qh-1)(wh-1))* 32;

注意:字体中每个区域有94个字符。

这样就可以找到文件的偏移量,读取一个char字节,用C语言写一个程序,可以把txt文件中的所有汉字用点阵输出。 这基本上是不可能完成的任务。按照改造的思路,你要给每个单独的man写一个对应的函数,然后读txt文档,每个字对比一下。简单来说,你可以按照五笔的思路分解汉字,但是你读进去的汉字需要结构识别,这也很麻烦。

如何用C语言显示和移动8*8的点阵数字和字母? 第一,没有硬件连接、单片机类型、晶振参数等描述。

第二,既然是点阵,显示的内容需要自己编辑,也就是字体;

第三,没有说明什么样的运动叫全字母运动或单列运动;整屏动是什么情况?

c语言在字符界面上以点阵形式显示数字,带图片? #包含stdio.h

// 7*70数组(包括数字后的空格)

char a[7][70]={

'*','*','*','*','*',' ',' ',' ',' ',' ',' ','*',' ',' ','*','*','*','*','*',' ',' ','*','*','*','*','*',' ',' ','*',' ',' ',' ','*',' ',' ','*','*', '*','*','*',' ',' ','*','*','*','*','*',' ',' ','*','*','*','*','*',' ',' ','*','*','*','*','*',' ',' ','*','*','*','*','*',' ',' ',

'*',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ','*',' ',' ',' ','*',' ',' ','*',' ', ' ',' ',' ',' ',' ','*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','*',' ',' ',' ','*',' ',' ','*',' ',' ',' ','*',' ',' ',

'*',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ','*',' ',' ',' ','*',' ',' ','*',' ', ' ',' ',' ',' ',' ','*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','*',' ',' ',' ','*',' ',' ','*',' ',' ',' ','*',' ',' ',

'*',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ','*','*','*','*','*',' ',' ','*','*','*','*','*',' ',' ','*','*','*','*','*',' ',' ','*','*', '*','*','*',' ',' ','*','*','*','*','*',' ',' ',' ',' ',' ',' ','*',' ',' ','*','*','*','*','*',' ',' ','*','*','*','*','*',' ',' ',

'*',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ','*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ',' ',' ', ' ',' ','*',' ',' ','*',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ','*',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ',

'*',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ','*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ',' ',' ', ' ',' ','*',' ',' ','*',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ','*',' ',' ',' ','*',' ',' ',' ',' ',' ',' ','*',' ',' ',

'*','*','*','*','*',' ',' ',' ',' ',' ',' ','*',' ',' ','*','*','*','*','*',' ',' ','*','*','*','*','*',' ',' ',' ',' ',' ',' ','*',' ',' ','*','*', '*','*','*',' ',' ','*','*','*','*','*',' ',' ',' ',' ',' ',' ','*',' ',' ','*','*','*','*','*',' ',' ','*','*','*','*','*',' ',' '

};

int main(){

int n;

scanf("%d ",n);

int b[100];

for(int I = 0;I n;i ){

scanf("%d ",b[I]);

}

for(int I = 0;I n;i ){

printf("%d:\n ",b[I]);

int t = b[I];

int p;

//在x[5]中以逆序放置一个[i]

int x[5],j = 0;

做{

p = t;

x[j]= p;

j;

}while((t = t/10)!= 0);

int l = j;

//打印b[i]

//每个数字占7行。

for(int k = 0;k7;k ){

//逐行打印单个数字(共L个数字)

for(j-;j = 0;j - ){

//每个数字占7列(包括空格)

for(int m = 0;M7;m ){

printf("%c ",a[k][x[j]* 7m]);

}

}

j = l;

//换行

printf(" \ n ");

}

}

返回0;

}

附图:

运行结果:

c语言输出数字模式 这会帮助你理解计算机显示字符的方法和原理。

首先要存储每个数字字符的点阵信息,每个点用一个1位的二进制数表示,表示有点0,没有点。

分析一下,你的每个数字每行有12个字符,也就是12个点,一共18行,可以存放在一个16位的二进制数组中。

然后我们会打开一个数组存储无符号短整型num 1[18];

以人物1为例。每行的点阵被转换成十六进制数据并被记录:

000000000000 0x00

000000000110 0x06

000000011110 0x1e

000000011110 0x1e

000000000110 0x06

000000000110 0x06

000000000110 0x06

000000000110 0x06

000000000110 0x06

000000000110 0x06

000000000110 0x06

000000000110 0x06

000000000110 0x06

000000000110 0x06

000000000110 0x06

000000000110 0x06

000000000000 0x00

它是这样存储的:无符号short int num 1 [18] = {0,6,0x1E,0x1E,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0 };

显示这类字符时,程序需要逐行取这些点阵,逐位判断是否为1,根据显示要求看1代表字符0还是空格;一行多个数字需要同时显示第一行所有数字,才能处理第二行,直到处理完18行。

相关文章

发表新评论