C语言汉字的显示与放大程序.docx
《C语言汉字的显示与放大程序.docx》由会员分享,可在线阅读,更多相关《C语言汉字的显示与放大程序.docx(9页珍藏版)》请在冰豆网上搜索。
C语言汉字的显示与放大程序
电子信息与电气工程系
课程设计报告
设计题目:
汉字的显示与放大程序
系别:
电子信息与电气工程系
年级专业:
2006级电气大类专业
学号:
学生姓名:
指导教师:
二零零七年三月十七日
C语言课程设计任务书
论文题目
汉字的显示与放大程序
导师姓名
设计技术参数
1用二维字符型数组来接汉字点阵信息。
2采用UCDOS下的基本汉字库,为16点阵。
3本程序要求在图形化界面下作出汉字图形,需要相应的图形化驱动。
设计要求
设计完成一个能够从字库文件中调出汉字点阵信息并把它显示放大的程序,该程序能够根据需要放大倍数,显示在屏幕上。
本程序由一人独立完成。
应完成的内容
1第一周,熟悉汉字字符中信息的摆放方式。
汉字内码与区位码的转换关系。
编写部分程序实现汉字字库信息的取出。
2第二周,继续字库的取出,汉字的放大,程序的调试、完善。
完成任务报告。
参考文献
①谭浩强《C语言程序设计》清华大学出版社
②刘振安《C语言程序设计课程设计》机械工业出版社
③朱剑平《工程问题C语言求解》清华大学出版社(第三版)
④任志宏《C语言经典范例50讲》北京希望电子出版社
摘要
用C语言编写一个汉字显示与放大程序,设计完成一个能够从字库文件中调出汉字点阵信息并把它显示放大的程序,该程序能够根据需要放大倍数,显示在屏幕上。
使用UCDOS下的基本汉字库(16点阵)和graphic.h库中的作图函数,在TC2中用二维字符型数组来接汉字点阵信息,最终在图形化界面下作出汉字图形。
关键词:
汉字库作图函数二维字符型数组
目录
一、需求分析…………………………………………………05
二、功能分析…………………………………………………05
三、数据类型分析与设计………………………………………06
四、任务分配…………………………………………………06
五、程序设计…………………………………………………07
六、调试分析…………………………………………………10
七、实习心得…………………………………………………11
一、需求分析:
《C语言程序设计》作为计算机类的专业基础课,目的是使学生掌握程序设计的基本方法并逐步形成正确的程序设计思想,能够熟练地使用C语言进行程序设计并具备调试程序的能力,为后继课程及其他程序设计课程的学习和应用打下基础。
对于非计算机专业来说,该课程有实际应用价值,为用计算机解决实际问题提供了方法,是后续理论和实践教学的基础和重要工具,同时也是计算机二级考试所统一要求的课程之一。
本次课程设计实践培养学生正确的程序设计思想,增加软件设计的实践经验,将所学知识与生产结合,训练并提高学生在分工合作、理论计算、结构设计、查阅设计资料等方面的能力,为往后进一步的学习打好基础。
二、功能分析:
本程序能够利用相应的图形化驱动在图形化界面下作出汉字图形。
具体来说,使用graphic.h库中的作图函数,从字库文件(UCDOS下的基本汉字库)中调出汉字点阵信息,实现内码与区位码的转换并把它显示在屏幕上,另外,程序还能够根据用户需要对放大倍数作出修改。
三、数据类型分析与设计
定义整型变量“intx,y”来进行位置设置;
用字符型变量“charbuffer[32]”来存储一个汉字;
定义“FILE*fp”,文件指针fp指向文件FILE,实质是指向其中的结构体变量,从而通过结构体变量中的文件信息能够访问该文件;
定义寄存器变量“registerm,n,i,j,k”(仅适用于整型变量和字符型变量);
分别定义无符号的字符类型和偏移量“unsignedcharqh,wh”“unsignedlongoffset”。
另外,在main函数前做出声明“defineROW1”和“defineCOL2”分别控制纵、横坐标的放大倍数。
四、任务分配
“汉字的显示与放大程序”程序并不同于其他程序,它不是由多文件组成,整个程序为一个单文件,仅有一个函数。
所以,我组的三名成员无法分出数据模块,或每人做某一函数,全程序均由三人一起完成。
五、程序设计
#include//TC图形库
#include//标准输入输出头文件
#include//open库函数
#include//即iostream.h
#include//库函数,提供应用运算、类型转换、程序环境处理等
#include//控制台输入与输出,字符屏幕处理函数
#defineROW1//纵坐标放大倍数
#defineCOL2//横坐标放大倍数
voidmain()
{
intx,y;
char*s="我";
FILE*fp;//定义文件指针fp指向文件FILE,访问该文件
charbuffer[32];//buffer来存储一个汉字
registerm,n,i,j,k;//寄存器变量(仅适用于整型和字符型变量)
unsignedcharqh,wh;//无符号的字符类型
unsignedlongoffset;//无符号的偏移量
intgd=DETECT,gm;//图形屏幕初始化;gd=graphdriver是指向图形驱动序号变量的指针;gm=graphmode是在gd选定后,指向图形驱动序号变量的指针
initgraph(&gd,&gm,"");//图形显示器和显示模式的路径的自动检测
if((fp=fopen("hzk16","rb"))==NULL)//打开汉字库,该字库可以在ucdos中找到
{printf("Can'topenhaz16,Pleaseaddit");//输出语句
getch();closegraph();exit(0);
}
x=20;y=100;//汉字显示位置设置
while(*s)//利用死循环
{qh=*(s)-0xa0;//汉字区位码
wh=*(s+1)-0xa0;
//算出汉字的区位码,一个汉字两个字节,分别用0、a0合成它的区位码
offset=(94*(qh-1)+(wh-1))*32L;//计算该汉字在字库中偏移量,汉字有94个区对应所在字库的位置,一个汉字点32字节
fseek(fp,offset,SEEK_SET);//将fp向前移动offset
fread(buffer,32,1,fp);//取出汉字32字节的点阵字模存入buffer中(一个汉字)
for(i=0;i<16;i++)//将32位字节的点阵按位在屏幕上打印出来(1:
打印,0:
不打印),显示汉字
for(n=0;nfor(j=0;j<2;j++)
for(k=0;k<8;k++)
for(m=0;m
if(((buffer[i*2+j]>>(7-k))&0x1)!
=NULL)
putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,GREEN);//按字节分解,相加对应的坐标,将对应的0和1进行画点,1画、0不画则显示阳型汉字,反之阴型
s+=2;//因为一个汉字内码占用两个字节,所以s必须加2
x+=30;//进行相应的放大和偏移
}
getch();
closegraph();
}
结果如下图:
六、调试分析
原先,我们在TC3中进行程序编写,结果TC3根本无法调用图形库graphic.h,所以改用TURBOC2,在虚拟DOS中编写。
不同于C++的是,DOS环境下不承认汉字,于是我们又插入“天汇”汉字系统,其运行方式如图6.1所示。
随后有两大麻烦:
一个是路径设置问题导致程序无法运行,改进方法是将文件全部安装于一个盘(如C盘),然后在DIRECT中改变默认路径为所用盘符;另一个是如何将汉字放大,记得我们组一再地在主函数中调试,结果完全不变,最后发现竟然是在主函数前的声明中改变初始化赋值。
6.1
七、实习心得
由于这次课程设计并不是像以前停课两周专门去做,而是一边上课一边做的,所以说实话很累,但当我可以随便调整黑屏上绿字的大小时,我由衷得感到一切都是那么值得。
过程中我们遇到了无数的困难,记得刚开始我们参考的是网上的废程序,结果竟然显示“toomanyerrors”!
后来编写对了源代码确又发现不能在TC3下运行,碰了好多此壁,才知道应该在TC2下运行。
庆幸的是我们都从未想过放弃,最终取得了成功
两周来,我第一次利用图书馆的资源来解决我所遇到的难题,第一次利用互联网来学习,这才感觉到我的知识是多么的匮乏。
现在我觉得经过这次C语言课程实践,我培养了c语言综合应用能力,养成了良好的编程风格,学会编写中小型程序,掌握了所学的程序设计思想,增加了软件设计的实践经验,增加了分析和解决工程技术问题的能力。
对以后的进一步深入学习具有良好的启蒙和推动作用。
另外,这次C语言课程实践让我知道了怎样和搭档一起合作,相互帮助,相互学习,为了共同的目标而努力,使我们小组成员之间的感情进一步加深,而且也提高了成员的独立思考和动手能力以及如何与他人配合,为了共同的目标而努力。
最后,感谢在实习中一直给予我们指导的李樱老师,他对我们的程序提出了宝贵的建议。
也谢谢其他小组成员对我们在程序中出现的错误予以纠正。
参考文献:
1谭浩强《C语言程序设计》清华大学出版社
②刘振安《C语言程序设计课程设计》机械工业出版社
③朱剑平《工程问题C语言求解》清华大学出版社(第三版)
④任志宏《C语言经典范例50讲》北京希望电子出版社
|