判断循环语句中的错误,有整个程序和错误结果文件,请大家来分析

zfq555 2009-10-01 08:50:53
还是昨天的作业,现在出现的问题如下:
1,A应该与Z1/Z2的差的绝对值为0.005时候, 可以输入,
比如上面的A=1,Z1=50。Z2=50。这个上面就是应该输出的,但现在的这个代码上面结果是Z1/Z2会出现大于2的结果

我用的是VC上输入C的代码进行计算
///////////////////////////////////
已知:A,B(A,B为输入值)//实数
Z1=(10到200)的整数
Z2=(10到200)的数数
M=(2.2,3,4.1,5,6) //实数
求:
当|A-Z1/Z2|<0.0005时
分别用M从(2,2.25,2.5,2.75,3,3.5,4,4.5,5,5.5,6,6.5,7,8,9,10,11,12,14,16,18,20)的每个数字计算:
beat=arccos(M*(z1+z2)/(2*B))
比较计算结果,当12<beat<15时
输出 A B Z1 Z2 M BEAT 的数值
///////////////////////
举例
用A=1 b=257.6227 M=5,Z1=50 Z2=50酸出来BEAT再12-15之间
就是哪个Z1/Z2的值和A的差的结果,精度控制在0,0005

/////////////////////////////////////////////////
程序1 这个程序计算不出结果来,程序计算见后面图
#include "stdio.h"
#include <iostream.h>
#include"math.h"
int main()
{

double A, B;
int Z1, Z2;
double beat;
int n = 0;
printf("请输入传动比:");
// scanf("%f", &A);
cin>>A;
printf("请输入中心距:");
cin>>B;
// scanf("%f", &B);
double d1 = A;
int i;
double M[22]={2,2.25,2.5,2.75,3,3.5,4,4.5,5,5.5,6,6.5,7,8,9,10,11,12,14,16,18,20};
for (Z1 = 13; Z1 <=200; Z1++)
{
for (Z2 = 13; Z2 <=200; Z2++)
{
double d2 = (Z1 / Z2 ) * 1.0;
if (double (fabs(A - d2) )<= 0.0005)//0.0005还是0.005
{

for (i=0;i<22;i++)
{
double d3 = (double)M[i] * (Z1 + Z2) / (2 * B);
if (d3 >= -1.0 && d3 <= 1.0)
{
if ( Z1 == 50 && Z2 == 50 )
printf("%d", 1);
beat = acos(d3);
double beat2= beat*180/3.1415926;
double b2=(double)M[i] * (Z1 + Z2) / (2 * cos(beat2));
// if (beat > 11.0 * 3.1415926 / 180 && beat < 15.0 * 3.1415926 / 180)
if ((beat > 11.0 * 3.1415926 / 180 && beat < 15.0 * 3.1415926 / 180) &&(b2>B-1 && b2<B+1) )
{
printf("%f %f %d %d %f %f \n", A, b2, Z1, Z2, M[i],beat2);
n ++;
break;
}
}
}
}
}
}
if (n == 0)
{
printf("无符合条件数据\n");
}
return 0;
}

/////////////////////////////////
程序2 这个有结果但结果不对,比如 z1/z2的值应该是在1加减0.005,而这个上都出来1.2或者 1.3甚至2的值也显示到输出了
#include "stdio.h"
#include <iostream.h>
#include"math.h"
int main()
{

double A, B;
int Z1, Z2;
double beat;
int n = 0;
printf("请输入A:");
// scanf("%f", &A);
cin>>A;
printf("请输入B:");
cin>>B;
// scanf("%f", &B);
double d1 = A;
int i;
double M[5]={2.5 ,3,3.5,5,6};
for (Z1 = 1; Z1 <=200; Z1++)
{
for (Z2 = 1; Z2 <=200; Z2++)
{
double d2 = (Z1 / Z2 ) * 1.0;
if (fabs(A - d2 ) < 0.0005 )
{

for (i=0;i<5;i++)
{
double d3 = (double)M[i] * (Z1 + Z2) / (2 * B);
if (d3 >= -1.0 && d3 <= 1.0)
{

beat = acos(d3);
if (beat > 12.0 * 3.1415926 / 180 && beat < 15.0 * 3.1415926 / 180)
{
printf("%f %f %d %d %f \n", A, B, Z1, Z2, M[i]);
n ++;
break;
}
}
}
}
}
}
if (n == 0)
{
printf("无符合条件数据\n");
}
return 0;
}

C:\Documents and Settings\Administrator\桌面\2.bmp
...全文
57 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zfq555 2009-10-01
  • 打赏
  • 举报
回复
另外如果M取20多个数字时候就看不到前面的结果了,
zfq555 2009-10-01
  • 打赏
  • 举报
回复
程序2的结果
zfq555 2009-10-01
  • 打赏
  • 举报
回复
程序1的结果
thy38 2009-10-01
  • 打赏
  • 举报
回复
1.0.00%
2.无图

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧