c语言程序设计抛物线.docx
《c语言程序设计抛物线.docx》由会员分享,可在线阅读,更多相关《c语言程序设计抛物线.docx(12页珍藏版)》请在冰豆网上搜索。
c语言程序设计抛物线
《程序设计基础(C语言)》
课程设计说明书
学院:
班级:
学号:
姓名:
教师:
日期:
2012年6月18日
课程设计要求:
1.本课程设计作为《程序设计基础(C语言)》的期末考核,占该课程总成绩的70%。
2.本课程设计的题目可以由老师指定或学生自选。
3.知识点要求包括:
(1)文件常用操作(打开,读/写数据,关闭等);
(2)选择结构;
(3)循环结构;
(4)自定义函数;
(5)数组的使用;
(6)指针的定义与引用;
(7)结构体类型的定义与使用
注意:
需要在源代码相应的位置注释出以上知识点;
4.课程设计的主体包括题目名称、算法分析、流程设计、代码设计及运行结果。
C设计抛物线计算器
算法分析:
抛物线计算器程序的开头是文件包含的预处理命令。
语言中,预处理命令都是以“#”开头,#include表示包含某个头文件。
stdio.h是标准输入输出头文件。
(#include
#include
#include)。
然后程序对所做图形的大小模型分辨率进行了设置,将其设置成了合适的图形模式。
(initgraph(640,480);)
再依次输入抛物线的四个参数(1初始高度,2初始角度,3初始速度,4重力加速度),并且分别对四个参数的要求以及数值范围进行了规范。
然后程序中调用函数公式对其他参数进行计算并且将其输出。
再对图形的背景颜色以及线条颜色进行了设置。
之后程序利用sprintf命令将输出的数据添加到字符串中。
sprintf%[指定参数][标识符][宽度][.精度]指示符。
1.处理字符方向。
负号时表示从后向前处理。
2.填空字元。
0的话表示空格填0;空格是内定值,表示空格就放着。
3.字符总宽度。
为最小宽度。
4.精确度。
指在小数点后的浮点数位数。
最后程序运行正确,数据正确时,将文件保存到指定位置,打开读取保存的函数文件。
流程设计:
操作开始
调整图像模式
输入参数h,v1,a,g
h>0
v1>0
Na>0
g>0
Y
调用函数公式计算其他参数,输出其他参数
保存函数,读取函数N
Y
操作结束
代码设计:
1.开始部分
#include
#include
#include
#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;
do
{
InputBox(s,10,"请输入出始速度");
sscanf(s,"%lf",&v1);
if(v1<=0)
flag=0;
else
flag=1;
}while(!
flag);
flag=0;
do
{
InputBox(s,10,"请输入初始角度");
sscanf(s,"%lf",&a);
if(a>=-90)
{
if(a<=90)
flag=1;
else
flag=0;
}
else
flag=0;
}while(!
flag);
flag=0;
do
{
InputBox(s,10,"请输入重力加速度");
sscanf(s,"%lf",&g);
if(g<=0)
flag=0;
else
flag=1;
}while(!
flag);
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<=0)
{
h_max=h;
v_max=v1;
}
else
{
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;
else
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);
sprintf(str,"初速度为%.2f米/秒",v1);
outtextxy(440,70,str);
sprintf(str,"初始角度为%.2f度",a);
outtextxy(440,90,str);
sprintf(str,"重力加速度为%.2f米/秒^2",g);
outtextxy(440,110,str);
sprintf(str,"落地时间为%.2f秒",T);
outtextxy(440,130,str);
sprintf(str,"落地时速度为%.2f米/秒",v2);
outtextxy(440,150,str);
sprintf(str,"落地角为%.2f度",b);
outtextxy(440,170,str);
sprintf(str,"落地点水平距离为%.2f米",S);
outtextxy(440,190,str);
sprintf(str,"最高点速度为%.2f米/秒",v_max);
outtextxy(440,210,str);
sprintf(str,"最高点垂直距离为%.2f米",h_max);
outtextxy(440,230,str);
setcolor(YELLOW);
inti;
moveto(40,440-(int)(h/det));
for(i=0;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>490&&m.x<510&&m.y>420&&m.y<440)
{
chars[50];
InputBox(s,10,"请输入要读取的文件名");
loadimage(NULL,"s");
}
break;
}
}
getchar();
closegraph();
return0;
}
doublegeth_t(doubleh,doublev1,doubleA,doubleg,doublet)
{
return(h+v1*t*sin(A)-0.5*g*t*t);
}
运行结果: