分享
 
 
 

献给初学编程的礼物⑴ C语言

王朝英语沙龙·作者佚名  2007-01-10
窄屏简体版  字體: |||超大  

献给初学编程的礼物

2000-4-5

见过许多初学编程者不停地在询问什么编程语言好,怎样学编程。

从现在的学校考试、等级考试及水平资格考试来看,即使是window在流行,但考的内容

还是Dos编程。但实用软件却是window编程。

在这里我就两个简单的程序分别用C语言及VB在谈一下怎样编程.

一个规范的程序在用户手中首先接触的就是界面及操作方式,一个好的界面能给人以一

个美的享爱,不管是Dos程序还是window程序,一个好的操作方式能让用户习惯于操作这个程

序。

以下是怎样学习C语言(源程序请直接下载rosesnow.heha.net/software/zfxl.zip)

这个程序讲述的是一个简单的指法训练的例子

分析:要在屏幕上画出一个字母键盘,由计算机随机要求用户按下哪个键,用户要及时响应

,并计分。

我们书上所学的,考试所考的,都没有要求一个很好的界面,并且输入输出都是纯文本

界面(即25行,并且只有黑白两种)

而图形界面是按640*480点阵来的,window就是一个典形的图形界面),对于这个程序我将代

你进入dos下如何写图形界面的世界。

如果你对C语言一无所知请看一下书的基础内容,这里是讲一个编写的实例,所有的成果

都要经过自己动手写实例才能证实,学习别人写的实例是学习编程的最有效,也可以说是最

好的方法。(但以下程序必须对编程有个基础的了解,至少要知道三种程序结构、函数、过程

的含义,少数常用函数的使用)

首先我们要画出这个键盘

事实上编程是一点一点的来填充屏幕的,用到line(),setcolor()等函数

先来做一个按钮(这样函数请在main()中调用才可运行)

void ztu(int x1,int y1,int color) //没按时的

{ int i,n=4,x2,y2;

x2=x1+leng;y2=y1+leng;

setcolor(7);

setfillstyle(1,7);

bar3d(x1,y1,x2,y2,0,0);

for(i=1;i<n;i++)

{

setcolor(15);

line(x1+i,y1+i,x2-i,y1+i);

line(x1+i,y1+i,x1+i,y2-i);

setcolor(8);

line(x1+i,y2-i,x2-i,y2-i);

line(x2-i,y2-i,x2-i,y1+i);

}

}

void zou(int x1,int y1,int color) //按下去了的

{ int i,n=4,x2,y2;

x2=x1+leng;y2=y1+leng;

setcolor(7);

setfillstyle(1,7);

bar3d(x1,y1,x2,y2,0,0);

for(i=1;i<n;i++)

{

setcolor(8);

line(x1+i,y1+i,x2-i,y1+i);

line(x1+i,y1+i,x1+i,y2-i);

setcolor(15);

line(x1+i,y2-i,x2-i,y2-i);

line(x2-i,y2-i,x2-i,y1+i);

}

setcolor(color);

}

看到了吧,一个图形的界面就是这样的简单

把qwertyuiopasdfghjkl;zxcvbnm,./这些按钮按键盘放置在屏幕上

我们还可以引入BMP图像(16色,可以用画笔完成它)

函数如下(这个函可以以后用在你的程序中的,事实上很多程序就是这样抄来抄去的,不过

说一点这个方法是非常正确的,引用别人的程序是一个很好的学习、编写方法,可以节约时

间,提高效益,并且因为这些函数都十分经典,一般比自己写的都好一些)

int xs(int x,int y,char n[50])

{ int c1,c2=0,w1,ll,kuan,il,iw;

FILE *fp;

static int color[16]={0,4,2,6,1,5,3,7,8,12,10,14,9,13,11,15};

if ((fp=fopen(n,"rb"))==0)

{ printf("cannot open file\n");

return(0);}

fseek(fp,18,SEEK_SET);

fread(&kuan,4,1,fp);

w1=kuan;

fread(&kuan,4,1,fp);

ll=kuan;

fseek(fp,118,SEEK_SET);

for (il=0;il<ll;il++)

{ moveto(x,y+ll-il);

for(iw=0;iw<w1;iw++)

{ fread(&kuan,1,1,fp);

c1=(kuan & 0xf0) >>4;

if(c1!=c2 || iw==w1-1)

{ setcolor(color[c2]);

lineto(x+iw,y+ll-il);

c2=c1;}

iw++;

if(iw>=w1)continue;

c1=kuan & 0x0f;

if (c1!=c2 || iw==w1-1)

{ setcolor(color[c2]);

lineto(x+iw,y+ll-il);

c2=c1;

}}

for (iw=1;iw<(8-w1%8)%8;iw+=2)

fread(&kuan,1,1,fp);

} fclose(fp);

return (0);

}

用画图工具做一个16色背景,再把按钮放上去,这个程序的界面就完成了

这里反复地说到16色,为什么是16色,而不是256,16位真彩色呢,因为TC只提供了16色,当

然可以写出更多种颜色,但编起来要复杂得多。

我们还要在程序中运用汉字,记住Dos程序是一个西文环境,除非有ucdos等汉字平台的支持

,但我不赞成这种做法,不可能所有计算机上都装有这样的汉字平台,并且占用内存。下面

的函数是告诉你怎样在西文方式下写汉,同样地,你也可以在程序中引用这个函数。

int handle;

int openhzk()

{

handle=open("HZK16",0||5);

if(handle==-1)

{

cputs("error on open file!");

getch();

closegraph();

exit(1);

}

}

int puthz16(int x,int y,int z, int color,int m,int n,char * p)

{ unsigned int i,qu,wei,f=0;

int i1,i2,i3,i4,i5,rec,wordwi;

long relate;

char cbuf[32];

unsigned char tbuf[2];

settextstyle(SMALL_FONT,HORIZ_DIR,USER_CHAR_SIZE);

while((i=*p++)!=0)

{

if((i&128)==NULL){

setusercharsize(4*m,3,11*n,8);

tbuf[0]=i;

tbuf[1]=0;

setcolor(color);

outtextxy(x,y+8,tbuf);

setusercharsize(4,3,11,8);

x=x+8*m+z;

}

else{

if(i>=0xa1)

if(f==0)

{

qu=(i-0xa1)&0x07f;

f=1;

}

else

{

wei=(i-0xa1)&0x07f;

f=0;

rec=qu*94+wei;

relate=rec*32L;

lseek(handle,relate,SEEK_SET);

read(handle,cbuf,32);

for(i1=0;i1<16*m;i1=i1+m)

for(i4=0;i4<m;i4++)

for(i2=0;i2<2;i2++)

for(i3=0;i3<8;i3++)

if(getbit(cbuf[i1/m*2+i2],7-i3))

for(i5=0;i5<n;i5++)

putpixel(x+i2*8*n+i3+i5,y+i1+i4,color);

x=x+16+z;

}

}

}

return(x);

}

int getbit(unsigned char c,int n)

{

return((c>>n)&1);

}

不必太仔细的分析这几个函数,只要知道如何调用,怎样使用参数就行了。

以下是调用的实例。

openhzk();

puthz16(x1+17,y1+20,16,8,1,1," 指法训练");

close(handle);

(源程序请直接下载rosesnow.heha.net/software/zfxl.zip)

如果大家喜欢这篇文章,我将继续讲下去,请要求讲下去的读者回复一下。

::∴★∵**☆.∴★∵**☆

.█████.☆.∵★∵∴☆

.█田█田█.*☆.∴★∵

.█田█田█.★∵∴☆.★∵∴

.█田█田█.同一个星空下★..**

.█田█田█.望著天空的星星雨**☆

.█████.你可会想起我是你的好朋友?

◢██□██◣.此刻我送予你這一句“愿我们友谊永固”~~~~~*^_^*

::∴★∵**☆.∴★∵**☆

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有