以下是小编为大家准备的C语言开发的一个画图程序(共含6篇),供大家参考借鉴,希望可以帮助到有需要的朋友。同时,但愿您也能像本文投稿人“风儿的前世”一样,积极向本站投稿分享好文章。
在开发县级电网调度自动化系统的过程中,碰到一个要绘制电力系统一次接线图的问题.由于电力系统一次接线图比较复杂,用一般的编程方法来绘制比较困难,因此,笔者用C语言开发了一个手工绘制电力系统一次接线图的键盘绘图程序,使用该程序绘制的一次接线图符合用户需求,效果良好.
一、使用方法
程序中定义了几个特殊键:
\“V”:画笔提起
\“W”:开始画图
\“R”:开始擦图
\“S”:当前图形存入文件
\“E”:调出已有文件
\“C”:画圆
程序一运行,屏幕上出现一个黄色的边框来设定画图的区域,区域中间出现提起的画笔符号 ,当按下“W”键时,画笔符号变为 ,此时可移动方向键(上、下、左、右、左上、左下、右上、右下)来画图;当按下“R”键时,画笔符号变为 ,此时可移动方向键来擦图;在画图过程中,按下“C”键,可画出一个半径为20个象素点的圆;当结束画图时,按下“S”键,将画好的图形存盘;按下“E”键可调出已有的图形进行编辑.
二、源程序清单
# include \“graphics.h\”
# include \“stdio.h\”
# include \“fcntl.h\”
# include \“stdlib.h\”
main
void save(),load();
void *wg,*rg,*vg,*fy;
int driver,mode;
int c=RED;
int x=320,y=225;
//www.baoluowanxiang.com
int x1,y1,x2,y2;
int k,k1,k2;
/* initialize grapher */
detectgraph(&driver,&mode);
initgraph(&driver,&mode,\“c:\\tc\”);
/* write the pen */
bar(200,10,206,16);
line(203,7,200,10);
line(203,7,206,10);
line(243,7,240,16);
line(243,7,246,16);
line(283,7,280,10);
line(283,7,286,10);
line(283,7,283,16);
/* save the pen */
wg=malloc(imagesize(200,7,206,16));
rg=malloc(imagesize(240,7,246,16));
vg=malloc(imagesize(280,7,286,16));
fy=malloc(imagesize(200,7,206,16));
getimage(200,7,206,16,wg);
getimage(240,7,246,16,rg);
getimage(280,7,286,16,vg);
cleardevice();
/* write the box */
setcolor(YELLOW);
rectangle(4,19,637,447);
x1=x-3;
y1=y+1;
x2=x+3;
y2=y+10;
getimage(x1,y1,x2,y2,fy);
putimage(x1,y1,vg,XOR_PUT);
/* receive the command */
for (;;)
while (bioskey(1)==0);
k=bioskey(0);
putimage(x1,y1,fy,AND_PUT);
if (((k&0x00ff)|0x00)==0)
k1=k&0xff?0:k>>8; /* k1 is the specialkey value */
else
k2=k&0x00ff; /* k2 is the non-specialkey value */
if (((k&0x00ff)|0x00)==0) /* Special key */
switch(k1)
case 45:
restorecrtmode();
exit(0);
case 72:
if (y>20)
y=y-1;
break;
case 75:
if (x>5)
x=x-1;
break;
case 77:
if (x<636)
x=x+1;
break;
case 80:
if (y<446)
y=y+1;
break;
case 71:
if ((x>5)&&(y>20))
x=x-1;
y=y-1;
break;
case 79:
if ((x>5)&&(y<446))
x=x-1;
y=y+1;
break;
case 73:
if ((x<636)&&(y>20))
x=x+1;
y=y-1;
break;
case 81:
if ((x<636)&&(y<446))
x=x+1;
y=y+1;
break;
x1=x-3;
y1=y+1;
x2=x+3;
y2=y+10;
getimage(x1,y1,x2,y2,fy);
/* non-special key */[Page]
switch(k2)
case 118: /* \'v\' */
case 86: /* \'V\' */
putimage(x1,y1,vg,OR_PUT);
break;
case 119: /* \'w\' */
case 87: /* \'W\' */
putimage(x1,y1,wg,OR_PUT);
putpixel(x,y,c);
break;
case 114: /* \'r\' */
case 82: /* \'R\' */
putimage(x1,y1,rg,OR_PUT);
putpixel(x,y,BLACK);
break;
case 115: /* \'s\' */
case 83: /* \'S\' */
save(\“pic.dat\”);
break;
case 101: /* \'e\' */
case 69: /* \'E\' */
load(\“pic.dat\”);
break;
case 99: /*\'c\'*/
case 67: /*\'C\'*/
setcolor(RED);
circle(x,y,20);
break;
default:continue;
/* function for screen picture save
*/
void save(char *fname)
FILE *fp;
int i;
register long j;
char far *ptr;
fp=fopen(fname,\“wb\”);
for(i=0;i<4;i++)
outportb(0x3CE,4);
outportb(0x3CF,i);
void clock(int t);
void main
{
int t,i,j,n;
for(t=0;t<10;t++)
{
clock(t);
sound(590);
for(n=0;n<4;n++)
{
delay(100000000);
}
nosound();
for(n=0;n<6;n++)
{
delay(100000000);
}
for(j=8;j<=18;j++)
{
for(i=1;i<=80;i++)
{
gotoxy(i,j);
putchar(0);
}
}
}
}
void clock(int t)
{
int i,j;
textcolor(11);
if(t==0)
{
for(i=0;i<11;i++)
{
gotoxy(60,8+i);
cprintf(“%c”,14);
}
for(i=0;i<11;i++)
{
gotoxy(51,8+i);
cprintf(“%c”,14);
}
for(j=0;j<11;j+=10)
{
for(i=0;i<8;i++)
{
gotoxy(59-i,8+j);
cprintf(“%c”,14);
}
}
}
if(t==1)
{
for(i=0;i<11;i++)
{
gotoxy(60,8+i);
cprintf(“%c”,14);
}
}
if(t==2)
{
for(j=0;j<2;j++)
{
for(i=0;i<6;i++)
{
gotoxy(60-j*8,8+i+j*5);
cprintf(“%c”,14);
}
}
for(j=0;j<11;j+=5)
{
for(i=0;i<9;i++)
{
gotoxy(60-i,8+j);
cprintf(“%c”,14);
}
}
}
if(t==3)
{
for(i=0;i<11;i++)
{
gotoxy(60,8+i);
cprintf(“%c”,14);
}
for(j=0;j<11;j+=5)
{
for(i=0;i<8;i++)
{
gotoxy(59-i,8+j);
cprintf(“%c”,14);
}
}
}
if(t==4)
{
for(i=0;i<11;i++)
{
gotoxy(60,8+i);
cprintf(“%c”,14);
}
for(i=0;i<6;i++)
{
gotoxy(52,8+i);
cprintf(“%c”,14);
}
for(i=0;i<8;i++)
{
gotoxy(59-i,13);
cprintf(“%c”,14);
}
}
if(t==5)
{
for(j=0;j<2;j++)
{
for(i=0;i<6;i++)
{
gotoxy(52+j*8,8+i+j*5);
cprintf(“%c”,14);
}
}
for(j=0;j<11;j+=5)
{
for(i=0;i<9;i++)
{
gotoxy(60-i,8+j);
cprintf(“%c”,14);
}
}
}
if(t==6)
{
for(j=0;j<2;j++)
{
for(i=0;i<6;i++)
{
gotoxy(52+j*8,8+i+j*5);
cprintf(“%c”,14);
}
}
for(i=0;i<6;i++)
{
gotoxy(52,13+i);
cprintf(“%c”,14);
}
for(j=0;j<11;j+=5)
{
for(i=0;i<9;i++)
{
gotoxy(60-i,8+j);
cprintf(“%c”,14);
}
}
}
if(t==7)
{
for(i=0;i<11;i++)
{
gotoxy(60,8+i);
cprintf(“%c”,14);
}
for(i=0;i<8;i++)
{
gotoxy(59-i,8);
cprintf(“%c”,14);
}
}
if(t==8)
{
for(i=0;i<11;i++)
{
gotoxy(60,8+i);
cprintf(“%c”,14);
}
for(i=0;i<11;i++)
{
gotoxy(52,8+i);
cprintf(“%c”,14);
}
for(j=0;j<11;j+=5)
{
for(i=0;i<8;i++)
{
gotoxy(59-i,8+j);
cprintf(“%c”,14);
}
}
}
if(t==9)
{
for(i=0;i<11;i++)
{
gotoxy(60,8+i);
cprintf(“%c”,14);
}
for(i=0;i<6;i++)
{
gotoxy(52,8+i);
cprintf(“%c”,14);
}
for(j=0;j<2;j++)
{
for(i=0;i<8;i++)
{
gotoxy(59-i,8+j*5);
cprintf(“%c”,14);
【程序61】
题目:打印出杨辉三角形(要求打印出10行如下图)
1.程序分析:
1
11
121
1331
14641
15101051
2.程序源代码:
main
{
inti,j;
inta[10][10];
printf(“\n”);
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<10;i++)
for(j=1;j<10;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf(“%5d”,a[i][j]);
printf(“\n”);
}
}
【程序62】
题目:学习putpixel画点,
1.程序分析:
2.程序源代码:
#include“stdio.h”
#include“graphics.h”
main()
{
inti,j,driver=VGA,mode=VGAHI;
initgraph(&driver,&mode,“”);
setbkcolor(YELLOW);
for(i=50;i<=230;i+=20)
for(j=50;j<=230;j++)
putpixel(i,j,1);
for(j=50;j<=230;j+=20)
for(i=50;i<=230;i++)
putpixel(i,j,1);
}
【程序63】
题目:画椭圆ellipse
1.程序分析:
2.程序源代码:
#include“stdio.h”
#include“graphics.h”
#include“conio.h”
/*欢迎访问C++Builder研究-www.ccrun.com*/
main()
{
intx=360,y=160,driver=VGA,mode=VGAHI;
intnum=20,i;
inttop,bottom;
initgraph(&driver,&mode,“”);
top=y-30;
bottom=y-30;
for(i=0;i
{
ellipse(250,250,0,360,top,bottom);
top-=5;
bottom+=5;
}
getch();
}
【程序64】
题目:利用ellipseandrectangle画图,
1.程序分析:
2.程序源代码:
#include“stdio.h”
#include“graphics.h”
#include“conio.h”
main()
{
intdriver=VGA,mode=VGAHI;
inti,num=15,top=50;
intleft=20,right=50;
initgraph(&driver,&mode,“”);
for(i=0;i
{
ellipse(250,250,0,360,right,left);
ellipse(250,250,0,360,20,top);
rectangle(20-2*i,20-2*i,10*(i+2),10*(i+2));
right+=5;
left+=5;
top+=10;
}
getch();
}
【程序65】
题目:一个最优美的图案。
1.程序分析:
2.程序源代码:
#include“graphics.h”
#include“math.h”
1.打印100-200之间的素数:
#include
#include
int main()
{
int i,a;
for(i=101;i<200;i++)
{for(a=2;a<=sqrt(i);a++)
if(i%a==0)
break;
if(i%a!=0)
printf(“%d\n”,i);
}
return 0;
}
2.输入乘法口诀:
#include
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf(“%d*%d=%d ”,j,i,j*i);
printf(“\n”);
}
return 0;
}
3.判断1000-之间的闰年:
#include
int main()
{
int i;
for(i=1000;i<=2000;i++)
if((i%4==0&&i%100!=0)||i%400==0)
printf(“%d\n”,i);
return 0;
}
在这为期半个月的时间内,通过我们小组各成员之间的相互讨论和合作,我们完成了学生信息管理系统的程序设计,更值得高兴的是我们的程序得到了大家的喜爱,在每次的简报中都得到了较好的成绩。
虽然在上个学期中,我们已经学习了《c语言程序设计》这门课,但是我所学的知识最多也就是在做作业的时候才会用到,平时没有什么练习的机会,这次的课程设计是我第一次通过自己构思,和同学讨论并且不断查阅资料来设计一项程序。这次设计,不仅巩固了我以前所学的知识,还让我对c语言有了更深一步的了解,掌握了更多的技巧和技能。
c语言是计算机程序设计的重要理论基础,在我们以后的学习和工作中都有着十分重要的地位。要学好这种语言,仅仅学习课本上的知识是不够的,还要经常自己动手,有较强的实践能力。只有多动手,经常编写程序,才能发现我们学习上的漏洞和自己的不足,并在实践中解决这些问题,不断提高自己转化知识的能力。
在我们小组有解决不了的.问题时,我们会主动查阅相关的资料,或向其他同学询问,这不仅丰富了我们的知识,还增进了我们同学之间的友谊。为了增大信息的安全性,需要用文件来存储信息,由于我们在上课时不注重对文件的运用,所以在这方面有较大的困难。我先将书本认认真真地看了一遍,又做了一下课后习题来验证和增进自己的理解,终于,经过我们的不懈努力,我们小组的程序有了突破,成功地实现了用文件来保存并查看学生的信息。
这次设计中,我的收获还有就是学会了用流程图来表达自己的想法,并根据流程图来逐步实现程序的功能。开始的时候,我画流程图很是困难,需要一个多小时才能清楚的根据自己的想法画出图来,后来画多了,就更加了解它的功能,十分得心应手,能够比较快而准确的画出来。
在这次课程设计中,我们首先对系统的整体功能进行了构思,然后用结构化分析方法进行分析,将整个系统清楚的划分为几个模块,再根据每个模块的功能编写代码。而且尽可能的将模块细分,最后在进行函数的调用。我们在函数的编写过程中,我们不仅用到了for循环、while循环和switch语句,还用到了函数之间的调用(包括递归调用)。由于我们是分工编写代码,最后需要将每个人的代码放到一起进行调试。因为我们每个人写的函数的思想不都一样,所以在调试的过程中也遇到了困难,但经过我们耐心的修改,终于功夫不负有心人,我们成功了!
当然,我们的程序还有一些不完善的地方,比如说,当输入的数据不符合我们定义的数据的格式的时候,程序会出现一些错误,有时会出现主菜单的死循环;在一次程序运行中,只能行使一种权限,要想再行使另一种权限,就只能退出程序,然后再运行程序。
三周的小学期即将结束,时间虽短,但是我收获了很多。最后,谢谢老师和同学们的指导,更要感谢我们小组成员之间的合作与交流。
在设计打字游戏的过程中,通过我们小组各成员之间的相互讨论和合作,我们完成了打字练习的程序设计。在这个学期中,我们已经学习了《C语言程序设计》这门课,但是我所学的知识最多也就是在做作业的时候才会用到,平时没有什么练习的机会,这次的设计是我第一次通过自己构思,和同学讨论并且不断查阅资料来设计一项程序。这次设计,不仅巩固了我以前所学的知识,还让我对c语言有了更深一步的了解,掌握了更多的技巧和技能。
C语言是计算机程序设计的重要理论基础,在我们以后的学习和工作中都有着十分重要的地位。要学好这种语言,仅仅学习课本上的知识是不够的,还要经常自己动手,有较强的实践能力。只有多动手,经常编写程序,才能发现我们学习上的漏洞和自己的不足,并在实践中解决这些问题,不断提高自己转化知识的能力。
在这次课程设计中,我们首先对系统的整体功能进行了构思,然后用结构化分析方法进行分析,将整个系统清楚的划分为几个模块,再根据每个模块的功能编写代码。而且尽可能的将模块细分,最后在进行函数的调用。我们在函数的编写过程中,我们不仅用到了for循环、while循环和switch语句,还用到了函数之间的调用。由于我们是分工编写代码,最后需要将每个人的代码放到一起进行调试。因为我们每个人写的函数的思想不都一样,所以在调试的过程中也遇到了困难,但经过我们耐心的修改,终于功夫不负有心人,我们成功了!
一学期的学习成果,都体现在了这次打字游戏的设计过程中。这个学期,我学得不算认真,一开始做感觉力不从心,但在几个同学的帮助和努力下,我翻阅课本,询问ACM大神,绞尽脑汁的情况下做完这个程序设计,我的自信一下子提高了。尽管对于有些人这种程序会很简单,可对我这个C语言初学者来说,已经很不容易了。这次体验为以后的学习计算机的我们增强了信心。享受劳动成果的滋味实在很美妙啊!
★ 初识画图(教案)
★ 画图教学反思
★ 小学画图教案
★ 画图员实习日记