c语言程序设计抛物线Word格式.docx
《c语言程序设计抛物线Word格式.docx》由会员分享,可在线阅读,更多相关《c语言程序设计抛物线Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
需要在源代码相应的位置注释出以上知识点;
4.课程设计的主体包括题目名称、算法分析、流程设计、代码设计及运行结果。
C设计抛物线计算器
算法分析:
抛物线计算器程序的开头是文件包含的预处理命令。
语言中,预处理命令都是以“#”开头,#include表示包含某个头文件。
stdio.h是标准输入输出头文件。
(#include<
stdio.h>
#include<
math.h>
#include<
graphics.h>
)。
然后程序对所做图形的大小模型分辨率进行了设置,将其设置成了合适的图形模式。
(initgraph(640,480);
)
再依次输入抛物线的四个参数(1初始高度,2初始角度,3初始速度,4重力加速度),并且分别对四个参数的要求以及数值范围进行了规范。
然后程序中调用函数公式对其他参数进行计算并且将其输出。
再对图形的背景颜色以及线条颜色进行了设置。
之后程序利用sprintf命令将输出的数据添加到字符串中。
sprintf%[指定参数][标识符][宽度][.精度]指示符。
1.处理字符方向。
负号时表示从后向前处理。
2.填空字元。
0的话表示空格填0;
空格是内定值,表示空格就放着。
3.字符总宽度。
为最小宽度。
4.精确度。
指在小数点后的浮点数位数。
最后程序运行正确,数据正确时,将文件保存到指定位置,打开读取保存的函数文件。
流程设计:
操作开始
调整图像模式
输入参数h,v1,a,g
h>
v1>
Na>
g>
Y
调用函数公式计算其他参数,输出其他参数
保存函数,读取函数N
操作结束
代码设计:
1.开始部分
#definePI3.1415926
doublegeth_t(doubleh,doublev1,doubleA,doubleg,doublet);
intmain(void)
{
2.图像设置
initgraph(640,480);
3.输入参数计算参数:
doubleh,v1,a,g;
chars[10];
intflag=0;
do
{
InputBox(s,10,"
请输入初始高度"
);
sscanf(s,"
%lf"
&
h);
if(h<
=0)
flag=0;
else
flag=1;
}while(!
flag);
flag=0;
请输入出始速度"
v1);
if(v1<
请输入初始角度"
a);
if(a>
=-90)
if(a<
=90)
flag=1;
else
flag=0;
}
请输入重力加速度"
g);
if(g<
doubleA=(a*PI)/180;
doublev2=sqrt(v1*v1+2*g*h);
doublecosB=(v1*cos(A))/v2;
doublesinB=sqrt(1-cosB*cosB);
doubleB=acos(cosB);
doubleT=(v1*sin(A)+v2*sinB)/g;
doubleS=v1*cos(A)*T;
doubleb=-B*180/PI;
doubleh_max;
doublev_max;
if(a<
h_max=h;
v_max=v1;
}
h_max=h+(v1*v1*sin(A)*sin(A))/g;
v_max=v1*sin(A);
4.画出图像嵌入数据:
doubledet_s=S/400.0;
doubledet_h=h_max/400.0;
doubledet;
if(det_s>
=det_h)
det=det_s;
det=det_h;
ints_n=(int)(S/det)+1;
setbkcolor(blue);
cleardevice();
setcolor(green);
line(20,440,460,440);
line(40,30,40,460);
intpoints[]={40,30,35,40,45,40};
fillpoly(3,points);
intpoints2[]={460,440,450,435,450,445};
fillpoly(3,points2);
setcolor(red);
outtextxy(20,445,'
0'
outtextxy(40+s_n,445,'
S'
outtextxy(20,440-(int)(h/det),'
H'
moverel(40,440-(int)(h/det));
intdx=40;
intdy=dx*tan(A);
linerel(dx,-dy);
setcolor(WHITE);
charstr[50];
sprintf(str,"
初始高度为%.2f米"
h);
outtextxy(440,50,str);
初速度为%.2f米/秒"
v1);
outtextxy(440,70,str);
初始角度为%.2f度"
a);
outtextxy(440,90,str);
重力加速度为%.2f米/秒^2"
g);
outtextxy(440,110,str);
落地时间为%.2f秒"
T);
outtextxy(440,130,str);
落地时速度为%.2f米/秒"
v2);
outtextxy(440,150,str);
落地角为%.2f度"
b);
outtextxy(440,170,str);
落地点水平距离为%.2f米"
S);
outtextxy(440,190,str);
最高点速度为%.2f米/秒"
v_max);
outtextxy(440,210,str);
最高点垂直距离为%.2f米"
h_max);
outtextxy(440,230,str);
setcolor(YELLOW);
inti;
moveto(40,440-(int)(h/det));
for(i=0;
i<
s_n;
i++)
doublet=(double)(T/s_n)*i;
doubleh_t=geth_t(h,v1,A,g,t);
inth_n=(int)(h_t/det);
intx=40+i;
inty=440-h_n;
lineto(x,y);
lineto(40+s_n,440);
charp[]="
保存"
;
outtextxy(490,400,p);
charr[]="
打开"
outtextxy(490,420,r);
MOUSEMSGm;
while(true)
m=GetMouseMsg();
switch(m.uMsg)
{
caseWM_LBUTTONDOWN:
if(m.x>
490&
&
m.x<
510&
m.y>
400&
m.y<
420)
{
chars[50];
InputBox(s,10,"
请输入要保存的文件名"
saveimage("
s"
}
if(m.x>
420&
440)
请输入要读取的文件名"
loadimage(NULL,"
break;
}
getchar();
closegraph();
return0;
}
doublegeth_t(doubleh,doublev1,doubleA,doubleg,doublet)
return(h+v1*t*sin(A)-0.5*g*t*t);
运行结果: