⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 C语言编写的物理教学软件
💻
字号:

#include "ccbp.h"
#include"wuli.h"
#define PI 3.1415926
#define N 5
void main()
{
   int s;
   int gd=DETECT,gm;
   initgraph(&gd,&gm,"");
   setfillstyle(1,9);
   bar(0,0,600,480);
   outhzxy3(50,150,"物理模拟实验",4,0,12);
   outhzxy3(200,350,"指导老师 李元杰",1,0,12);
   getch();
   while(1)
   {
	  int gd=DETECT,gm;
	  initgraph(&gd,&gm,"");
	  setfillstyle(1,9);
	  bar(0,0,600,480);


	 outhzxy3(100,80,"小船过河请选1",1,0,12);
	 outhzxy3(100,140,"追击请选2",1,0,12);
	 outhzxy3(100,200,"弹簧连接体请选3",1,0,12);
	 outhzxy3(100,260,"碰撞请选4",1,0,12);
	 outhzxy3(100,320,"驻波请选5",1,0,12);
	 outhzxy3(100,380,"退出请选0",1,0,12);
	 
	 switch(getch())
	 {
	   case '1':{xcgh();break;}
	   case '2':{zhuiji();break;}
	   case '3':{tanhuang();break;}
	   case '4':{pengzhuang();break;}
	   case '5':{zhubo();break;}
           case '0':s=0;break;
	   defaut:break;
	 }
	 if(s==0)break;

   }
}






void  zhuiji()
{

   float x1=100,y1=400,x2=0,y2=0,dt=0.2;
   int i,a;
   int gd=DETECT,gm;
   initgraph(&gd,&gm,"");
   setbkcolor(1);  label1:;cleardevice();
   outhzxy1(0,10,"  请输入飞机路线",15);
   outhzxy1(20,30,"  1.直线  2.正弦曲线",15);
   

  if(getch()=='1')
    {
       for(i=0;i<=455;i++)
	{
	  setfillstyle(1,1);
	  bar(0,0,800,280);


	  setcolor(15);

	  x1=100+i;
	  y1=0;

	 wood_b(60+x1,y1+50,20,3.,0);
	 wood_b(70+x1,y1+50-3,10,1.5,120.);
	 wood_b(70+x1,y1+50,10,1.5,240);
	 wood_b(60+x1,y1+50,8,1.5,120);

	setcolor(11);
	x2=x1-(500-i)*dt;
	y2=y1-i*dt*2.2;
	circle(x2+70,y2+250,2);
	circle(x2+70,y2+250,1);
	setcolor(15);
	circle(x1+70,y1+300,1);

       setcolor(11);
       circle(x2+80,y2+500,1);
       delay(N) ;
   }
     setcolor(4);
     for(i=0;i<=30;i++)
     {
       circle(x1+60,y1+50,i);delay(N);}
       cleardevice();
       outhzxy1(1,1,"  是否从新运行?(y/n)",15);
       if(getch()=='y'){gotoxy(0,100);goto label1;}
       if(getch()=='n') goto label2;
      }
	  if(getch()=='2')
	  {
		x1=100,y1=400;
		for(i=0;i<=399;i++)
		{
		 setfillstyle(1,1);
		 bar(0,0,100,100);
		 bar(150,0,640,250);
		 bar(150,225,102,350);
		 bar(75,100,165,480);
		 bar(65,0,260,130);
		 setcolor(15);


		 x1=x1+1;
		 y1=50*cos(5*i*0.01-x1*0.1);
		wood_b(60+x1,y1+50,20,3.,0);
		wood_b(70+x1,y1+50-3,10,1.5,120.);
		wood_b(70+x1,y1+50,10,1.5,240.);
		wood_b(60+x1,y1+50,8,1.5,120);

		setcolor(11);
		x2=x1-(450-i)*dt;
		y2=y1-i*dt*2.5;
		circle(x2+70,y2+250,2);
		circle(x2+70,y2+250,1);
		setcolor(15);
		circle(x1+60,y1+300,1);

		setcolor(11);
		circle(x2+70,y2+500,1);
		delay(N) ;



}
   setcolor(4);
    for(i=0;i<=30;i++)
   { circle(x1+70,y1+50,i) ;
     delay(N);
    }
    cleardevice();
    outhzxy1(1,1,"   是否从新运行?(y/n)",15);
    if(getch()=='y'){  gotoxy(0,100);goto label1; }
    if(getch()=='n') goto label2;
}
    label2:;

getch();
 closegraph();
}


void zhubo()
{

    float j=0.001,i=0.03,y,y1,y2;
    int t,k,A=20;
    int gdriver=DETECT,gmode;
    initgraph(&gdriver,&gmode,"");

      setfillstyle(1,5);
      setbkcolor(4);
      outhzxy3(250,200,"叠加前的波",1,0,14);
      outhzxy3(250,400,"叠加后的波",1,0,14);
      setfillstyle(1,5);
    for(t=0;150*i*t<=500;t++)
      {
      line(550,40,550,160);
      line(550,240,550,360);
      for(k=0;100*j*k<=150*t*i;k++)
	{
	    y=A*sin(PI*6*t*i-PI*4*j*k);
	    putpixel(100*j*k+50,y+300,12);
	    putpixel(100*j*k+50,y+100,12);
	}
      delay(N+15);
      bar(0,30,600,170);
      bar(0,230,600,370);
      }


    for(t=0;150*t*i<=500;t++)
      {
      line(550,40,550,160);
      line(550,240,550,360);
      for(k=0;k<=5000;k++)
	{
	    y=A*sin(PI*6*(t+100/9)*i-PI*4*j*k);
	    putpixel(100*j*k+50,y+100,12);
	}
      for(k=0;100*j*k<=150*i*t;k++)
	{
	    y=A*sin(PI*6*t*i-PI*4*j*k);
	    putpixel(500-100*j*k+50,y+100,14);
	}
      for(k=5000;(500-100*j*k)<=150*t*i;k--)
	{
	    y1=A*sin(PI*6*t*i-PI*4*j*(5000-k));
	    y2=A*sin(PI*6*t*i-PI*4*j*k);
	    putpixel(100*j*k+50,y1+y2+300,11);
	}
      for(k=0;100*j*k<(500-150*i*t);k++)
	{
	    y=A*sin(PI*6*(t+100/9)*i-PI*4*j*k);
	    putpixel(100*j*k+50,y+300,12);
	}
      delay(N+15);
      bar(0,30,600,170);
      bar(0,230,600,370);}


    for(t=0;t<=30;t++)
      {
      line(550,40,550,160);
      line(550,240,550,360);
      for(k=0;k<=5000;k++)
	   {   y=A*sin(PI*6*(t+200/9)*i-PI*4*j*k);
	       putpixel(100*j*k+50,y+100,12);
	   }
      for(k=0;k<=5000;k++)
	   {
	       y=A*sin(PI*6*(t+100/9)*i-PI*4*j*k);
	       putpixel(500-100*j*k+50,y+100,14);
	   }
      for(k=5000;k>=0;k--)
	   {
	       y1=A*sin(PI*6*(t+100/9)*i-PI*4*j*(5000-k));
	       y2=A*sin(PI*6*t*i-PI*4*j*k);
	       putpixel(100*j*k+50,y1+y2+300,11);
	   }
      delay(N+15);
      bar(0,30,600,170);
      bar(0,230,600,370);}

}




void pengzhuang()
{

  float  v1,v2,v3,m1,m,M,x5,l=50,w,w1,w2,x1,x2,y1,y2,t=0.05,x,y,m2,x3,x4;
  int i;
  int gd=DETECT,gm;
  initgraph(&gd,&gm,"");
  setbkcolor(2);label1:;
  cleardevice();
  outhzxy1(1,5,"球撞杆或者杆撞杆?(B or S)",15);
  if(getch()=='b')
{ v1=1;

  outhzxy1(200,120,"球的质量大于杆的质量(8M>9m)",15);
  outhzxy1(200,270,"球的质量等于杆的质量(8M=9m)",15);
  outhzxy1(200,400,"球的质量小于杆的质量(8M<9m)",15);


  for(i=0;i<=1000;i++)
  {

    setbkcolor(6);
    setcolor(13);
    line(400,100,400,0);
    line(400,150,400,250);
    line(400,290,400,390);
    setfillstyle(1,4);
    fillellipse(450-i*v1*t,75,5,5);
    fillellipse(450-i*v1*t,225,5,5);
    fillellipse(450-i*v1*t,365,5,5);



    setfillstyle(1,3);
    bar(0,100,640,0);
    bar(0,150,640,250);
    bar(0,290,640,390);

    if(fabs(50-i*v1*t<5))
    break;
  }
   {M=9,m=7;
    for(i=0;i<=3000;i++)
   {  setfillstyle(1,3);
    bar(0,100,640,0);

      setcolor(14);
      v2=(9*m-8*M)/(9*m+8*M)*v1;
      v3=(2*m*v1)/(M*((9*m)/(8*M))+1);
      w=3*v1/(100*((9*m)/8*M)+1);

      x=400-i*t*v3;
      x1=x+50*cos(w*i*t*100);
      x2=x-50*cos(w*i*t*100);
      y1=50+50*sin(w*i*t*100);
      y2=50-50*sin(w*i*t*100);
      line(x1,y1,x2,y2);

      setfillstyle(1,4);
      fillellipse(405+i*v2*t,75,5,5);

    }}
  {M=9,m=8;
    for(i=0;i<=3000;i++)
   {  setfillstyle(1,3);


      bar(0,150,640,250);
      setcolor(14);
      v2=(9*m-8*M)/(9*m+8*M)*v1;
      v3=(2*m*v1)/(M*((9*m)/(8*M))+1);
      w=3*v1/(100*((9*m)/8*M)+1);

      x=400-i*t*v3;
      x1=x+50*cos(w*i*t*100);
      x2=x-50*cos(w*i*t*100);
      y1=200+50*sin(w*i*t*100);
      y2=200-50*sin(w*i*t*100);
      line(x1,y1,x2,y2);

      setfillstyle(1,4);
      fillellipse(405+i*v2*t,225,5,5);

    }}
   {M=7,m=9;
     for(i=0;i<=3000;i++)
   {  setfillstyle(1,3);

      bar(0,290,640,390);
      setcolor(14);
      v2=(9*m-8*M)/(9*m+8*M)*v1;
      v3=(2*m*v1)/(M*((9*m)/(8*M))+1);
      w=3*v1/(100*((9*m)/8*M)+1);

      x=400-i*t*v3;
      x1=x+50*cos(w*i*t*100);
      x2=x-50*cos(w*i*t*100);
      y1=340+50*sin(w*i*t*100);
      y2=340-50*sin(w*i*t*100);
      line(x1,y1,x2,y2);

      setfillstyle(1,4);
      fillellipse(405+i*v2*t,365,5,5);

    }}
    cleardevice();
   outhzxy1(1,5,"是否重新运行?(y/n)",15);
  if(getch()=='y')goto label1;if(getch()=='n')goto label2;
 }
     if(getch()=='s')v1=2;
{
     for(i=0;i<=2000;i++)
     { setbkcolor(1);
     setcolor(14);
     line(400,300,400,200);
     setcolor(4);
     line(500-i*v1*t,400,500-i*v1*t,300);
     cleardevice();delay(N);
     if(fabs(100-i*v1*t)<0.1)
    break;
  }
    {m1=2,m2=4;
     for(i=0;i<=3000;i++)
    { setfillstyle(1,2);
      outhzxy1(200,180,"M = 2",14);
      outhzxy1(400,410,"M = 4",4);
      outhzxy1(200,440,"红色杆的质量是黄色杆的两倍",15);
      bar(0,200,640,400);
      setcolor(14);
      v3=sqrt((3*m2*m2*m2/m1/m1*v1*v1+3*m1*v2*v2-m2*v1*v1)/m1);
      v2=(m2*v1-m1*v3)/m2;
      w2=3*v1/l;
      w1=m2*w2/m1;

      x1=400-i*v3*t;
      x2=x1+50*cos(w1*i*t);
      x3=x1-50*cos(w1*i*t);
      y1=250+50*sin(w1*i*t);
      y2=250-50*sin(w1*i*t);
      line(x2,y1,x3,y2);
      x2=400+i*v2*t;
      x4=x2+50*cos(w2*i*t);
      x5=x2-50*cos(w2*i*t);
      y1=350+50*sin(w2*i*t);
      y2=350-50*sin(w2*i*t);
      setcolor(4);
      line(x4,y1,x5,y2);
      delay(N);
      if(kbhit())break;
  }}

  outhzxy1(1,5,"是否重新运行?(y/n)",15);
   if(getch()=='y')goto label1;if(getch()=='n')goto label2;
}label2:;
 getch();
   closegraph();
}




void xcgh()
{
   float x,y,x1,y1;
   float t=0.01;
   char s;
   int v,i,m,j;
   int gd=DETECT,gm;
   initgraph(&gd,&gm,"");
   setbkcolor(0);
   setfillstyle(1,2);
   bar(0,100,600,400);
   outhzxy1(10,450,"小船过河",4);
   outhzxy3(150,450,"程序运行时击任意键推出该次运行  击e键退出",1,0,4);
   for(v=27;v>=3;v=v-3)
   {
      for(i=0;i<=30000/v;i++)
      {

	  setfillstyle(1,9);
	  bar(0,100,600,400);


	 x=3*v*(i*t)*(i*t)/32-v*v*(i*t)*(i*t)*(i*t)/4800+10;
	 y=400-v*(i*t);
	 setfillstyle(1,4);
	 fillellipse(x,y,2,4);

	 for(j=0;j<=i;j++)
	   {
	      x1=3*v*(j*t)*(j*t)/32-v*v*(j*t)*(j*t)*(j*t)/4800+10;
	      y1=400-v*(j*t);
	      putpixel(x1,y1,4);
	   }

	 if(kbhit())break;
      }
	getch();
	if(getch()=='e')
	break;

  }

}



void tanhuang()
{

   int m1=10,m2=5,m3=7,l1=80,l2=80,k1=5,k2=5,v1=50,v2=0,v3=-50;
   float x=10,x1=100,x2=110+l1,x3=120+l1+l2,i=0.005,p1,p2,p3,temp;
   int gdriver=DETECT,gmode;
   initgraph(&gdriver,&gmode,"");
   setfillstyle(1,0);
   bar(540,0,640,480);
   outhzxy3(550,100,"弹性势能",1,0,14);
   outhzxy3(550,230,"动能",1,0,14);
   outhzxy3(550,400,"总能量",1,0,14);
   p1=m1*v1;p2=m2*v2;p3=m3*v3;
   while(x<=640)
   {  setfillstyle(1,6);
      bar(1,1,1000,70);
      setfillstyle(1,9);
     fillellipse(x1,50,5,5);fillellipse(x2,50,5,5);fillellipse(x3,50,5,5);
      spring(x1+5,50,x2-5,50,3,20);spring(x2+5,50,x3-5,50,3,20);

      x1=x1+p1/m1*i;
      x2=x2+p2/m2*i;
      x3=x3+p3/m3*i;
      p1=p1+k1*(x2-x1-l1-10)*i;
      p2=p2-k1*(x2-x1-l1-10)*i+k2*(x3-x2-l2-10)*i;
      p3=p3-k2*(x3-x2-l2-10)*i;


      temp=0.01;
      putpixel(x+=temp,200-p1*p1/m1/600,11);
      putpixel(x+=temp,200-p2*p2/m2/600,12);
      putpixel(x+=temp,200-p3*p3/m3/600,13);
      putpixel(x+=temp,200-p1*p1/m1/600-p2*p2/m2/600-p3*p3/m3/600,14);

      putpixel(x+=temp,300-k1*(x2-x1-l1-10)*(x2-x1-l1-10)/600,10);
      putpixel(x+=temp,300-k2*(x3-x2-l2-10)*(x3-x2-l2-10)/600,9);
      putpixel(x+=temp,300-k1*(x2-x1-l1-10)*(x2-x1-l1-10)/600-k2*(x3-x2-l2-10)*(x3-x2-l2-10)/600,8);

      putpixel(x+=temp,400-p1/m1,7);
      putpixel(x+=temp,400-p2/m2,6);
      putpixel(x+=temp,400-p3/m3,5);

   } getch();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -