| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 325 人关注过本帖
标题:请教一个简单c语言问题
只看楼主 加入收藏
初学者1986
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-12-4
收藏
 问题点数:0 回复次数:2 
请教一个简单c语言问题
#include<stdio.h>
#include<math.h>
#define PI 3.1415926
//-----------------------
int compute_t(int t1, int t2)//------计算复合波的周期,即两个波形周期的最小公倍数
{ int n;
  int fhb_t=1;
  for(n=1; ;n++)
  {   if(t1>t2)  
          if(t1*n%t2==0)
          {fhb_t=t1*n;
           break;
          }
      else
          if(t2*n%t1==0)
          {fhb_t=t2*n;
           break;
          }
  }
  return fhb_t;
}
//------------------------
void compute_l(int t1, int t2,double *l1, double *l2)//-----计算每个波的波长
{*l1=5.13*t1*t1;
 *l2=5.13*t2*t2;
}
//--------------------------
double compute_h(double a1, double a2, int t1, int t2, int fhb_t)//-----计算复合波的最大高度,复合波一周期内采样200个点
{ int n;
  double time=fhb_t*1.0/200;
  double h,maxh=0;
  for(n=1;n<200;n++)
  {   h=a1*sin(2*PI/t1*time*n)+a2*sin(2*PI/t2*time*n);
      printf("采样点:%f      复合波高度:%f\n",time*n, h);
      if(h>maxh) maxh=h;
  }
  return maxh;
}
//-----------------------
void main()//--------------------主函数
{ int t1,t2,fhb_t;
  double a1,a2,l1,l2,maxh;
  printf("请输入第一个正弦波的振幅a1和周期t1:\n");
  scanf("%f%d",&a1,&t1);
  printf("请输入第二个正弦波的振幅a2和周期t2:\n");
  scanf("%f%d",&a2,&t2);
  compute_l(t1,t2,&l1,&l2);
  printf("第一个波的波长是:%f\n第二波的波长是:%f\n",l1,l2);
  fhb_t=compute_t(t1,t2);
  printf("复合波的周期是:%d\n",fhb_t);
  maxh=compute_h(a1,a2,t1,t2,fhb_t);
  printf("复合波的最大高度是:%f!\n",maxh);
}

  
fhb_t以及之后的结果始终无法显示出来,运行到计算波长之后就停止了,各位帮忙解答下,谢谢

谢谢第二楼的解答~~在求解复合波的周期的函数出了问题,研究研究下~~~

[[it] 本帖最后由 初学者1986 于 2008-12-5 19:41 编辑 [/it]]
搜索更多相关主题的帖子: c语言 
2008-12-04 14:36
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
应该可以了。我随意试了一组数据。
#include<stdio.h>
#include<math.h>
#define PI 3.1415926
//-----------------------
int compute_t(int m, int n)//------计算复合波的周期,即两个波形周期的最小公倍数
{ int r,n0,m0;
 n0=n;m0=m;
  if(n>m)
  {
      r=n;n=m;m=r;
  }
  while(n!=0)
  {   
      r=m%n; m=n; n=r;
  }
  
  return n0*m0/m;
}
//------------------------
void compute_l(int t1, int t2,double *l1, double *l2)//-----计算每个波的波长
{
    *l1=5.13*t1*t1;
    *l2=5.13*t2*t2;
}
//--------------------------
double compute_h(double a1, double a2, int t1, int t2, int fhb_t)//-----计算复合波的最大高度,复合波一周期内采样200个点
{ int n;
  double time=fhb_t*1.0/200;
  double h,maxh=0;
  for(n=1;n<200;n++)
  {   h=a1*sin(2*PI/t1*time*n)+a2*sin(2*PI/t2*time*n);
      printf("采样点:%f      复合波高度:%f\n",time*n, h);
      if(h>maxh) maxh=h;
  }
  return maxh;
}
//-----------------------
void main()//--------------------主函数
{ int t1,t2,fhb_t;
  double a1,a2,l1,l2,maxh;
  printf("请输入第一个正弦波的振幅a1和周期t1:\n");
  scanf("%f%d",&a1,&t1);
  printf("请输入第二个正弦波的振幅a2和周期t2:\n");
  scanf("%f%d",&a2,&t2);

  compute_l(t1,t2,&l1,&l2);
  printf("第一个波的波长是:%f\n第二波的波长是:%f\n",l1,l2);
  fhb_t=compute_t(t1,t2);
  printf("复合波的周期是:%d\n",fhb_t);
  maxh=compute_h(a1,a2,t1,t2,fhb_t);
  printf("复合波的最大高度是:%f!\n",maxh);
}
2008-12-04 14:58
初学者1986
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-12-4
收藏
得分:0 
谢谢ls的同志的解答
2008-12-05 19:43
快速回复:请教一个简单c语言问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021264 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved