去年计算机基础课上,老师在上到汉字编码时展示了著名的胡万进印并称如果哪位同学可以输出所有汉字并将之放大、空心即可得到总评满分。当然事实证明计算机基础只要保证出勤和作业,总评过90分比起完成该任务要轻松得多。
程序思路:因为汉字占两字节,所以借助汉字编码表,通过ASCII输出。实际编写中因C中Char占8位,其中1位为符号位,因此超出127部分将变成负数,因GB2312高低两位都大于127则通过减去256补足。
汉字编码表:
| 名称 | 第一字节 | 第二字节 |
| GB2312 | 0xB0-0xF7(176-247) | 0xA0-0xFE(160-254) |
| GBK | 0×81-0xFE(129-254) | 0×40-0xFE(64-254) |
| Big5 | 0×81-0xFE(129-255) | 0×40-0x7E(64-126) |
| 0xA1-0xFE(161-254) |
Source:
#include "stdio.h" void main() { int i,j; char ch[3]; FILE *out; out=fopen("output.txt","wt"); for (i=-80;i<=-9;i++) for (j=-96;j<=-2;j++) { ch[0]=i; ch[1]=j; fprintf(out,"%c%c\n",ch[0],ch[1]); } fclose(out); } |
PS:原先打算使用graphics.h描点输出汉字,C++引用graphics.h请移步EasyX库受挫后才意识到胡万进同志使用的字库不可能被这种方法描点。
PPS:印象中借助WPS可以比较容易的解决放大、空心化等问题,最后我也只是交了一个半成品。
COMMENT