C语言图形函数

时间:2022-11-08 09:12:51

C语言帮助文档

函数:

文字处理

1函数名: remove

头文件:#include <stdio.h>

功  能: 删除一个文件

用  法: int remove(char *filename);

2函数名: rename

头文件:#include <stdio.h>

功  能: 重命名文件

用  法: int rename(char *oldname, char *newname);

3函数名: perror

头文件:#include <stdio.h>

功  能: 系统错误信息

用  法: void perror(char *string);

函数说明:perror ( )用 来 将 上 一 个 函 数 发 生 错 误 的 原 因 输 出 到 标 准 错误 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno 的值来决定要输出的字符串。

  在库函数中有个error变量,每个error值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了error的值。perror函数只是将你输入的一些信息和现在的error所对应的错误一起输出。

 

菜单管理

1 函数名: textbackground

头文件#include <conio.h>

功  能: 选择新的文本背景颜色

用  法: void textbackground(int color);

2 函数名: textcolor

头文件#include <conio.h>

功  能: 在文本模式中选择新的字符颜色

用  法: void textcolor(int color);

3 函数名: gotoxy

头文件#include <conio.h>

功  能: 在文本窗口中设置光标

用  法: void gotoxy(int x, int y);

4 函数名: cprintf  

头文件#include <conio.h>

功  能: 送格式化输出至屏幕

用  法: int cprintf(const char *format[, argument, ...]);

5函数名: window

头文件:#include <conio.h>

功  能: 定义活动文本模式窗口

用  法: void window(int left, int top, int right, int bottom);

6函数名: kbhit

头文件:#include <conio.h>

功  能: 检查当前按下的键

用  法: int kbhit(void);

函数说明:kbhit() 在执行时,检测是否有按键按下,有按下返回键值

没有按下返回0;是非阻塞函数

getch() 在执行时,检测按下什么键,如果不按键该函数不返回;是阻塞函数

7函数名: bioskey

头文件:#include <stdio.h>

功  能: 直接使用BIOS服务的键盘接口

用  法: int bioskey(int cmd);

函数说明:当cmd为1时,bioskey()检测是否有键按下。没有键按下时返回0;有键按下时返回按键码(任何按键码都不为0),但此时并不将检测到的按键码从键盘缓冲队列中清除。 是非阻塞参数。

当cmd为0时,bioskey()返回键盘缓冲队列中的按键码,并将此按键码从键盘缓冲队列中清除。如果键盘缓冲队列为空,则一直等到有键按下,才将得到的按键码返回。是阻塞调用。

8函数名: puttext

头文件:#include <conio.h>

功  能: 将文本从存储区拷贝到屏幕

用  法: int puttext(int left, int top, int right, int bottom, void *source);

9 函数名: gettext

头文件:#include <conio.h>

功  能: 将文本方式屏幕上的文本拷贝到存储区

用  法: int gettext(int left, int top, int right, int  bottom, void *destin);

图形设计

直线和线型函数

   有三个画直线的函数,即line(),lineto(),linerel()。这些直线使用整型坐标,并相对于当前图形视口,但不一定受视口限制,如果视口裁剪标志clip为真,那么直线将受到视口边缘截断;如果clip为假,即使终点坐标或新的当前位置在图形视口或屏幕极限之外,直线截断到屏幕极限。

   有两种线宽及几种线型可供选择,也可以自己定义线图样。下面分别介绍直线和线型函数。

 

1. line() 画线函数

功能: 函数line()使用当前绘图色、线型及线宽,在给定的两点间画一直线。

用法: 该函数调用方式为void line(int startx,int starty,int endx,int endy);

说明: 参数startx,starty为起点坐标,endx,endy为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可见)当前位置不改变。

       此函数相应的头文件为graphics.h

返回值: 无

例: 见函数60.linerel()中的实例。

 

2. setlinestyle() 设置线型函数

功能: setlinestyle() 为画线函数设置当前线型,包括线型、线图样和线宽。

用法: setlinestyle() 函数调用方式为void setlinestyle(int stly,unsigned pattern,int width);

说明: 参数style为线型取值,也可以用相应名称表示,如表1-10中所示。

       参数pattern用于自定义线图样,它是16位(bit)字,只有当style=USERBIT_LINE(值为1)时,pattern的值才有意义,使用用户自定义线图样,与图样中“1”位对应的像素显示,因此,pattern=0xFFFF,则画实线;pattern=0x9999,则画每隔两个像素交替显示的虚线,如果要画长虚线,那么pattern的值可为0xFF00和0xF00F,当style不为USERBIT_LINE值时,虽然pattern的值不起作用,但扔须为它提供一个值,一般取为0。

    参数wigth用来设定线宽,其取值见表1-11,表中给出了两个值,即1和3,实际上,线宽取值为2也是可以接受的。

    若用非法参数调用setlinestyle()函数,那么graphresult()会返回错误代码,并且当前线型继续有效。

    Turbo C提供的线型与线宽定义在头文件graphics.h中,表1-10和1-11分别列出了参数的取值与含义。

 

表1-10  线型

-----------------------------------------------------

   名        称      取 值         含    义

-----------------------------------------------------

   SOLID_LINE          0             实线

   DOTTED_LINE         1             点线

   CNTER_LINE          2             中心线

   DASHED_LINE         3             虚线

   USERBIT_LINE        4             用户自定义线型

-----------------------------------------------------

 

表1-11 线宽

-----------------------------------------------------------

   名         称            取  值      说   明

-----------------------------------------------------------

   NORM_WIDTH(常宽)           1         一个像素宽(缺省值)

   THICK_WIDTH(加宽)          3         三个像素宽

-----------------------------------------------------------

 

这个函数的头文件是graphics.h

返回值: 无

例: 下面的程序显示了BC中所提供的线型图样:

#i nclude<graphics.h>

void main()

{

   int driver,mode;

   driver=DETECT;

   mode=0;

   initgraph(&driver,&mode,"");

   for(i=0;i<4;i++)

   {

      setlinestyle(i,0,1);

      line(i*50,200,i*50+60,200)

   }

   getch();

   restorecrtmode();

}

 

arc()

画圆弧函数

arc()

功能: 函数arc()使用当前绘图色并以实线画一圆弧。

用法: 函数调用方式为void arc(int x,int y,int startangle,int endangle,int radius);

说明: 参数x,y为圆心坐标,startangle与endangle分别为起始角与终止角,radius为半径。圆心坐标和半径以像素个数给出,起始角和终止角以度为单位,0度位于右边,90度位于顶部,180度位于左边,底部是270度。同往常一样,360度与0度重合。角度按逆时针方向增加,但并不要求终止角一定比起始角大。例如指定300度和90度分别为起始角和终止角,与指定300度和450度分别为起始角和终止角可画出相同的弧。大于360度可作为参数,它将被化到0度 ̄360度范围里。函数arc()能画封闭圆,只要取起始角为0度,终止角为360度即可。此函数中,屏显纵横比可自动调节。

   arc()函数对应的头文件为graphics.h

返回值: 无

例: 以(200,200)为圆心,100为半径,从0度到120度画圆弧:

#i nclude<graphics.h

void main()

{

   int driver,mode;

   driver=DETECT;

   mode=0;

   initgraph(&drivwer,&mode,"");

   setcolor(WHITE);

   arc(200,200,0,120,100);

   getch();

   restorecrtmode();

}

 

屏幕颜色的设置和清屏函数

    对于图形模式的屏幕颜色设置, 同样分为背景色的设置和前景色的设置。在Turbo C中分别用下面两个函数。

    设置背景色:        void far setbkcolor( int color);

    设置作图色:        void far setcolor(int color);

其中color 为图形方式下颜色的规定数值, 对EGA, VGA显示器适配器, 有关颜色的符号常数及数值见下表所示。

清除图形屏幕内容使用清屏函数, 其调用格式如下:

     voide far cleardevice(void);

实现动画的两个函数

void far getimage(int xl,int yl, int x2,int y2, void far *mapbuf);

   void far putimge(int x,int,y,void * mapbuf, int op);

    这两个函数用于将屏幕上的图像复制到内存,然后再将内存中的图像送回到

屏幕上。首先通过函数imagesize()测试要保存左上角为(xl,yl), 右上角为(x2,

y2)的图形屏幕区域内的全部内容需多少个字节, 然后再给mapbuf 分配一个所测

数字节内存空间的指针。通过调用getimage()函数就可将该区域内的图像保存在

内存中, 需要时可用putimage()函数将该图像输出到左上角为点(x, y)的位置上,

其中getimage()函数中的参数op规定如何释放内存中图像。

  关于这个参数的定义参见表8。

 

  表8. putimage()函数中的op值

   ━━━━━━━━━━━━━━━━━━━━━━━━━━

      符号常数   数值   含  义

   ──────────────────────────

      COPY_PUT     0    复制

      XOR_PUT     1    与屏幕图像异或的复制

      OR_PUT      2    与屏幕图像或后复制

      AND_PUT     3    与屏幕图像与后复制

      NOT_PUT     4    复制反像的图形

   ━━━━━━━━━━━━━━━━━━━━━━━━━━

 

关于图形的驱动程序的初始化

函数名: initgraph

功  能: 初始化图形系统

用  法: void far initgraph(int far *graphdriver, int far *graphmode,

    char far *pathtodriver);

其中graphdriver=DETECT,graphmode=0; char far *pathtodriver为驱动程序的路径名。

数值计算

1.函数名: sound

功  能: 以指定频率打开PC扬声器

用  法: void sound(unsigned frequency);

程序例:

/* Emits a 7-Hz tone for 10 seconds.

   Your PC may not be able to emit a 7-Hz tone. */

#include <dos.h>

int main(void)

{

   sound(7);

   delay(10000);

   nosound();

   return 0;

}

2.函数名: delay

功  能: 将程序的执行暂停一段时间(毫秒)

用  法: void delay(unsigned milliseconds);

程序例:

/* Emits a 440-Hz tone for 500 milliseconds */

#include <dos.h>

int main(void)

{

   sound(440);

   delay(500);

   nosound();

   return 0;

}

3.音乐频率

N1,N2,N4,N6,N8,N16分别代表

一拍,二分之一拍,四分之一拍,

八分之一拍,十六分之一拍。*/

C10=131,D10=147,E10=165,F10=175,G10=196,A10=220,B10=247,

/*低度音调分别是:1,2,3,4,5,6,7*/

C0=262, D0=286, E0=330, F0=349, G0=440, A0=440, B0=494,

/*中度音调分别是:1,2,3,4,5,6,7*/

C1=523, D1=158, E1=659, F1=698, G1=784, A1=880, B1=998,

/*高度音调分别是:1,2,3,4,5,6,7*/

C2=1047,D2=1175,E2=1319,F2=1397,G2=1568,A2=1760,B2=1976

/*高八度音调分别是:1,2,3,4,5,6,7*/

4.用矩形法求定积分的通用函数

double   intergal(double   (*p)(double),double   a,double   b,int   n)  

  {  

  double   s,x,h;  

  x=a;  

  s=0;  

  h=(b-a)/s;  

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

  {  

  x=x+h;  

  s=s+(*p)(x)*h;  

  }  

  return   s;  

  }

 

音乐函数

#include<stdio.h>
#include<dos.h>
#include<bios.h>
#include<time.h>
#define N1 32
#define N2 16
#define N4 8
#define N8 4
#define N16 2
#define END 0

enum NOTES
{
C10=131,D10=147,E10=165,F10=175,G10=196,A10=220,B10=247,

C0=262, D0=286, E0=330, F0=349, G0=440, A0=440, B0=494,
C1=523, D1=158, E1=659, F1=698, G1=784, A1=880, B1=998,

C2=1047,D2=1175,E2=1319,F2=1397,G2=1568,A2=1760,B2=1976

}
song1[]={
G0,N16,G0,N8,A0,N8,G0,N8,C1,N8,B0,N4,G0,N16,
G0,N8,A0,N8,G0,N8,D1,N8,C1,N4,G0,N16,G0,N8,G1,N8,
E1,N8,C1,N8,B0,N16,B0,N8,A0,N4,F1,N16,F1,N8,E1,
N8,C1,N8,D1,N8,C1,N4,END,END

};
song2[]={
C10,N1,D10,N1,E10,N1,F10,N1,G10,N1,A10,N1,B10,N1,
C10,N2,D10,N2,E10,N2,F10,N2,G10,N2,A10,N2,B10,N2,
C10,N4,D10,N4,E10,N4,F10,N4,G10,N4,A10,N4,B10,N4,
C10,N8,D10,N8,E10,N8,F10,N8,G10,N8,A10,N8,B10,N8,
C10,N16,D10,N16,E10,N16,F10,N16,G10,N16,A10,N16,B10,N16,
C0,N1,D0,N1,E0,N1,F0,N1,G0,N1,A0,N1,B0,N1,
C0,N2,D0,N2,E0,N2,F0,N2,G0,N2,A0,N2,B0,N2,
C0,N4,D0,N4,E0,N4,F0,N4,G0,N4,A0,N4,B0,N4,
C0,N8,D0,N8,E0,N8,F0,N8,G0,N8,A0,N8,B0,N8,
C0,N16,D0,N16,E0,N16,F0,N16,G0,N16,A0,N16,B0,N16,
C1,N1,D1,N1,E1,N1,F1,N1,G1,N1,A1,N1,B1,N1,
C1,N2,D1,N2,E1,N2,F1,N2,G1,N2,A1,N2,B1,N2,
C1,N4,D1,N4,E1,N4,F1,N4,G1,N4,A1,N4,B1,N4,
C1,N8,D1,N8,E1,N8,F1,N8,G1,N8,A1,N8,B1,N8,
C1,N16,D1,N16,E1,N16,F1,N16,G1,N16,A1,N16,B1,N16,
C2,N1,D2,N1,E2,N1,F2,N1,G2,N1,A2,N1,B2,N1,
C2,N2,D2,N2,E2,N2,F2,N2,G2,N2,A2,N2,B2,N2,
C2,N4,D2,N4,E2,N4,F2,N4,G2,N4,A2,N4,B2,N4,
C2,N8,D2,N8,E2,N8,F2,N8,G2,N8,A2,N8,B2,N8,
C2,N16,D2,N16,E2,N16,F2,N16,G2,N16,A2,N16,B2,N16,END

};
song3[]= {
C0,N8,C0,N8,G0,N8,G0,N8,A0,N8,A0,N8,G0,N4,
F0,N8,F0,N8,E0,N8,E0,N8,D0,N8,D0,N8,C0,N4,
G0,N8,G0,N8,F0,N4,E0,N8,E0,N8,D0,N4,G0,N8,
G0,N8,F0,N8,F0,N8,E0,N8,E0,N8,D0,N4,C0,N8,
E0,N8,G0,N4,A0,N8,C1,N8,G0,N4,F0,N8,F0,N8,
E0,N8,E0,N4,D0,N8,D0,N8,C0,N4,C0,N8,C0,N8,
G0,N8,G0,N8,A0,N8,A0,N8,G0,N4,F0,N8,F0,N8,
E0,N8,E0,N8,D0,N8,D0,N8,C0,N4,G0,N8,G0,N8,
F0,N4,E0,N8,E0,N8,D0,N4,G0,N8,G0,N8,F0,N8,
F0,N8,E0,N8,E0,N8,D0,N4,C0,N8,E0,N8,G0,N4,
A0,N8,C1,N8,G0,N4,F0,N8,F0,N8,E0,N8,E0,N4,
D0,N8,D0,N8,C0,N4,END

};
song4[]= {
C10,N4,B0,N4,G0,N8,A0,N4,E0,N16,D0,N8,C0,N8,
D0,N8,G0,N8,E0,N8,E0,N4,E0,N8,G0,N8,E0,N8,
D0,N8,D0,N4,A0,N8,A0,N8,G0,N8,A0,N8,B0,N8,
G0,N8,G0,N8,E0,N4,C10,N8,B0,N8,G0,N8,A0,N4,
E0,N8,D0,N8,C0,N8,D0,N8,G0,N8,E0,N4,C0,N8,D0,N8,
E0,N4,G0,N8,E0,N8,D0,N4,C0,N8,B10,N8,C0,N8,B10,N8,
A10,N4,A0,N8,A0,N8,A0,N8,C1,N8,D1,N8, E1,N8,E1,N8,
C1,N8,A0,N8,A0,N8,B0,N16,A0,N16,G0,N8,E0,N8,A0,N8,
A0,N8,C1,N8,D1,N8,E1,N8,E1,N8,C1,N8,A0,N8,A0,N8,
B0,N8,A0,N8,B0,N16,A0,N16,G0,N8,E0,N8,D1,N16,D1,N16,D1,N8,
D1,N8,A0,N16,B0,N16,A0,N8,G0,N8,E0,N8,D1,N16,D1,N16,D1,N8,
A0,N16,B0,N16,A0,N8,G0,N8,E0,N8,A0,N8,A0,N8,A0,N4,A0,N8,
A0,N8,A0,N4,C10,N8,B0,N8,G0,N8,A0,N4,E0,N16,D0,N16,C0,N8,
D0,N8,G0,N8,E0,N4,E0,N4,E0,N16,G0,N16,E0,N16,
D0,N16,D0,N4,A0,N16,A0,N16,G0,N8,A0,N8,B0,N8,
G0,N16,G0,N16,E0,N4,C10,N8,B0,N8,G0,N8,A0,N4,
E0,N16,D0,N16,C0,N8,D0,N8,G0,N8,E0,N4,C0,N16,D0,N16,
E0,N4,G0,N8,E0,N8,D0,N4,C0,N8,B10,N8,C0,N16,B10,N16,
A10,N4,END};


void MusicPlay(int *song)
{
int note=0,fre,dur,control;
clock_t goal;
while(song[note]!=0)
{
fre=song[note];
dur=song[note+1];
if(kbhit())break;
if(fre)
{
outportb(0x43,0xB6);

fre=(unsigned)(1193180L/fre);
outportb(0x42,(char)(fre>>8));
outportb(0x42,(char)(fre>>8));
control=inportb(0x61);

outportb(0x61,(control)|0x3);
}
goal=(clock_t)dur+clock();
while(goal>clock());
if(fre)
outportb(0x61,control);
goal=(clock_t)0;
note=note+2;
}
}

void main(void)
{ int n;
do{
printf("If you want to listen music please input a number(1-4):");
if(scanf("%d",&n))
{
if(n<=4&&0<=n)
switch(n)
{
case 1:MusicPlay(song1);break;
case 2:MusicPlay(song2);break;
case 3:MusicPlay(song3);break;
case 4:MusicPlay(song4);break;

}
else printf("\n\t\tYou can input '0' to exit!\n\n");
}
else {printf("\n\tInput error,please prass any key to exit!\n");break;}
}while(n!=0);
return ;
getch();
}