C语言程序:帮我看下这个,哪里出错了

来源:百度知道 编辑:UC知道 时间:2024/09/25 14:21:33
函数功能就是输入起点坐标,终点坐标和半径,画出圆弧。
#include "stdio.h"
#include"graphics.h"
#include "math.h"
main()
{
int gdriver, gmode,i,x,y,x0,y0,xe,ye,r;
int Q1,Q2;
float a,b,c,x1,y1,t,m,n;
double delta;
gdriver=DETECT;
initgraph(&gdriver, &gmode, "");
setbkcolor(11);/*背景颜色为淡青*/
setcolor(15);
setlinestyle(1,0,1);/*出现点线*/
for(i=0;i<640;i+=20)line(i,460,i,0);/*画网格线*/
for(i=460;i>0;i-=20)line(20,i,640,i);
setcolor(4);/*当情笔画红色*/
setlinestyle(0,0,1); /*实线*/
rectangle(0,0,639,479); /*画边框*/

gotoxy(1,1);
printf("Please Enter x0:" );/*输入起点坐标*/
scanf("%d",&x0);
printf("Please Enter y0:" );
scanf("%d",&y0);
printf("Please Enter xe:" );/*输入终点坐标*/
scanf("%d",&xe);
printf("Please Enter y

关键还是程序的思路问题,算出的圆心坐标不在屏幕范围内怎么能用函数arc()画出弧形?
图形模式下坐标必须满足0<=x<=640,0<=y<=480,所以说输入的坐标点以及半径值都是有限制的。可以设判断条件,当输入值或计算得出的圆心坐标值超出范围就设置输入无效。比如
......
x=(int)((-b-sqrt(delta))/(2*a));
y=(int)((t-x*x1)/y1);
if(x<1||x>640||y<1||y>480)
{ printf("Input invalid!");
system("pause");
exit(1);
}
......
或者用循环要求重新输入弧点坐标。
总之这个题这种方法有很大限制。
老大,arc()函数是按逆时针方向为角度增量画弧,也就是说按逆时针为正方向,是从(200,200)按逆时针画弧到(400,400)而不是相反(而这样的画法又到屏幕外了),相反的话那就是角度要用负值。
你一定明白了。
还是一句老话,程序的这种方法有缺陷。
delta是double型,a,b,c等是float型,这不好哦,都改成double型试试,我没具体看你的计算方法。再者还要保证delta>0,tc2.0由于设计缺陷对float的处理有时会失败,外国人自己都说了,所以改为double再试试。

圆心这样计算就可以了
x1=(xe+x0)/2;
y1=(ye+y0)/2;

万恶的TC !

Q1 Q2 的定义int 能存足够的数据吗