#include"graphics.h"启粗
#define LEFT 1
#define RIGHT 2
#define BOTTOM 4
#define TOP 8
#define XL 100.0
#define XR 200.0
#define YB 100.0
#define YT 200.0
encode(float x,float y,int *code)
{
int c
c=0
if(x<XL) c+=LEFT
else if(x>让缺XR) c+=RIGHT
if(y<YB) c+=BOTTOM
else if(y>坦旁辩YT) c+=TOP
*code=c
return
}
main()
{
int drive,mode
int color,i,j,k,m
int code,code1,code2
float sx,sy,px,py
float fx,fy,x,y
float bx[20],by[20]
float pointx[5]={60.0,130.0,150.0,260.0,180.0}
float pointy[5]={150.0,80.0,140.0,160.0,240.0}
printf("\nColor=\n")
scanf("%d",&color)
detectgraph(&drive,&mode)
initgraph(&drive,&mode,"c:\\")
setcolor(3)
line(XL,YB,XL,YT)
line(XL,YB,XR,YB)
line(XL,YT,XR,YT)
line(XR,YB,XR,YT)
setcolor(50)
line(XL+300,YB+200,XL+300,YT+200)
line(XL+300,YB+200,XR+300,YB+200)
line(XL+300,YT+200,XR+300,YT+200)
line(XR+300,YB+200,XR+300,YT+200)
setcolor(color)
line(pointx[4],pointy[4],pointx[0],pointy[0])
for(k=0k<4k++)
{
line(pointx[k],pointy[k],pointx[k+1],pointy[k+1])
}
sx=fx=pointx[0]
sy=fy=pointy[0]
j=0
for(i=1i<=5i++)
{
px=pointx[i]
py=pointy[i]
if(i==5)
{
px=fx
py=fy
}
encode(sx,sy,&code1)
encode(px,py,&code2)
while((code1!=0||code2!=0))
{
if((code1&code2)!=0) return
code=code1
if(code1==0) code=code2
if((LEFT&code)!=0)
{
x=XL
y=sy+(py-sy)*(XL-sx)/(px-sx)
}
else if((RIGHT&code)!=0)
{
x=XR
y=sy+(py-sy)*(XR-sx)/(px-sx)
}
else if((BOTTOM&code)!=0)
{
y=YB
x=sx+(px-sx)*(YB-sy)/(py-sy)
}
else if((TOP&code)!=0)
{
y=YT
x=sx+(px-sx)*(YT-sy)/(py-sy)
}
if(code==code1)
{
sx=xsy=y
encode(x,y,&code1)
}
else
{
px=xpy=y
encode(x,y,&code2)
}
}
if((j>0)&(bx[j-1]==sx)&(by[j-1]==sy))
{
bx[j]=pxby[j]=py
}
if((sx!=0)&(sy!=0))
{
bx[j]=sxby[j]=sy
bx[j+1]=pxby[j+1]=py
}
j++
sx=pointx[i]
sy=pointy[i]
}
setcolor(color)
line(bx[j-1]+300,by[j-1]+200,bx[0]+300,by[0]+200)
setcolor(color)
for(m=0m<j-1m++)
{
line(bx[m]+300,by[m]+200,bx[m+1]+300,by[m+1]+200)
}
getch()
closegraph()
}
举个例子://二分查找法//
#
include
void
main()
{
int
a[16],i,num,flag=0,top,bottom,mid
//定义一个一维数组a[16]用来存放供查找用的数据,但只用a[1]——a[15]//
//num用来放要查找并伏的数据,flag是表示是否找到的开关变量,top表示查找的起始位置,bottom表示查找的终止位置,mid表示top与bottom的中间位置//
char
goon
//变量goon为'y'或'Y'时表示继续下一轮查找,否则终止程序//
printf("请输入第1个数字:\n")
scanf("
%d",&a[1])
//依次输入第二到第十五个数,并要求输入的数递减//
for(i=2i<=15i++)
{
printf("请输入第%d个数字:\n",i)
scanf("
%d",&a[i])
if(a[i]>=a[i-1])
{
printf("请再次输入,它应该比上一个数小:\n")
scanf("
%d",&a[i])
}
}
//输出刚才输入的数//绝做携
printf("你刚才输入的数是:\n")
for(i=1i<=15i++)
printf("
%d",a[i])
printf("\n")
//查找循环开始//
do
{
printf("现在请输入你要查找的数:\n")//输入想要查找的数//
scanf("
%d",&num)
top=15
bottom=1
mid=15/2+1
if(num>a[1]
||
num
0)//如果在规定的范围内,开始二分法查找//
{
if(num==a[mid])//找到所需数据,退出本层循环//
{
printf("你所要查找的数字是第%d个。\n",mid)
flag=1
}
else
if(num>a[mid])//如果要查找的数据比a[mid]大,在前半数组查找//
{
top=mid+1
mid=(top+bottom)/2
}
else
//如果要查找的数据比a[mid]小,在后半数组查找//
{
bottom=mid-1
mid=(top+bottom)/2
}
}
if(flag==0)//如果未找到数据,输出找不到的信息//
printf("无法找到你要找的数字!\n")
printf("是否继续查找?(Y/N):\n")//询问是否胡简开始下一轮查找//
scanf("
%c",&goon)
}while(goon=='y'
||
goon=='Y')
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)