细雨斜飞 发表于 2008-5-4 22:10

为什么程序执行一半就不能向后执行了?求救...

#include <iostream>
#include <cmath>
#define pi 3.141592653
using namespace std;
void main()
{cout<<"请输入已知点A,B,C三点的坐标:"<<endl;
cout<<"(提示:输入的顺序是按照XA,XB...排的 ,请理解后输入)"<<endl;
int x[3],y[3],a,b,c,d;
for(d=0;d<=2;d++)
{cin>>x[d];}
for(d=0;d<=2;d++)
{cin>>y[d];}
cout<<endl;
double i_,j_,k_;
i_=x[0]*x[0]-2*x[0]*x[1]+x[1]*x[1]+y[0]*y[0]-2*y[0]*y[1]+y[1]*y[1];
j_=x[0]*x[0]-2*x[0]*x[2]+x[2]*x[2]+y[0]*y[0]-2*y[0]*y[2]+y[2]*y[2];0
k_=x[2]*x[2]-2*x[2]*x[1]+x[1]*x[1]+y[2]*y[2]-2*y[2]*y[1]+y[1]*y[1];
a=sqrt(i_);
b=sqrt(j_);
c=sqrt(k_);
double A,B,C;
double work_1(double m,double n,double p);    //函数申明1
A=work_1(a,b,c);           //调用函数算A角  
B=work_1(b,a,c);           //调用函数算B角
C=work_1(c,a,b);           //调用函数算C角

if(A+B==pi&&B+C==pi&&A+C==pi)                          //危险圆   
{cout<<"危险圆,错误结果!";}
else
cout<<"输入观测得水平角a_,b_,c_:"<<endl;
double a_,b_,c_;            
double work_2(double x,double y,double z);           //函数申明2   [color=Red]-----执行到这里, 后面的都没有执行![/color]
double a_1,a_2,a_3,b_1,b_2,b_3,c_1,c_2,c_3;
cin>>a_1>>a_2>>a_3;
a_=work_2(a_1,a_2,a_3);   
cin>>b_1>>b_2>>b_3;
b_=work_2(b_1,b_2,b_3);
cin>>c_1>>c_2>>c_3;
c_=work_2(c_1,c_2,c_3);

double i,j,k;
double P_1,P_2,P_3;
i=1/tan(A)-1/tan(a_);j=1/tan(B)-1/tan(b_);k=1/tan(C)-1/tan(c_);
P_1=1/i;P_2=1/j;P_3=1/k;

double h,X,Y;
h=P_1+P_2+P_3;
X=P_1*x[0]/h+P_2*x[1]/h+P_3*x[2]/h;
Y=P_1*y[0]/h+P_2*y[1]/h+P_3*y[2]/h;

cout<<"点P的坐标是:("<<X<<","<<Y<<")"<<endl;
}

double work_1(double x,double y,double z)
{double w;
w=acos(y*y/2/y/z+z*z/2/y/z-x*x/2/y/z);
return w;
}

double work_2(double x,double y,double z)
{double e;
e=pi*(x+y/60+z/60/60)/180;
return e;
}
问题我标记在程序中了  请高手帮忙啊!!!

细雨斜飞 发表于 2008-5-4 22:46

怎么没人理啊

sunkaidong 发表于 2008-5-4 22:52

大家对这样纯c的程序不是很感兴趣...本来c++的人就不是很多

细雨斜飞 发表于 2008-5-4 23:22

但是~这个是C++啊  就只有#define 用了C的。。。

sunkaidong 发表于 2008-5-5 09:44

c++最精华就是面向对象哦...没有类的概念,只能说是面向过程的.呵呵

VanHorn 发表于 2008-5-5 09:52

这个程序有点小问题,语法错误:
#include "stdafx.h"


#include <iostream>
#include <cmath>
#define pi 3.141592653
using namespace std;
void main()
{
        cout<<"请输入已知点A,B,C三点的坐标:"<<endl;
        cout<<"(提示:输入的顺序是按照XA,XB...排的 ,请理解后输入)"<<endl;
        int x[3],y[3],a,b,c,d;
        for(d=0;d<=2;d++)
        {cin>>x[d];}
        for(d=0;d<=2;d++)
        {cin>>y[d];}
        cout<<endl;
        double i_,j_,k_;
        i_=x[0]*x[0]-2*x[0]*x[1]+x[1]*x[1]+y[0]*y[0]-2*y[0]*y[1]+y[1]*y[1];
        j_=x[0]*x[0]-2*x[0]*x[2]+x[2]*x[2]+y[0]*y[0]-2*y[0]*y[2]+y[2]*y[2];//源代码上这里多了个零
        k_=x[2]*x[2]-2*x[2]*x[1]+x[1]*x[1]+y[2]*y[2]-2*y[2]*y[1]+y[1]*y[1];
        a=sqrt(i_);
        b=sqrt(j_);
        c=sqrt(k_);
        double A,B,C;
        double work_1(double m,double n,double p);    //函数申明1
        A=work_1(a,b,c);           //调用函数算A角  
        B=work_1(b,a,c);           //调用函数算B角
        C=work_1(c,a,b);           //调用函数算C角
       
        if(A+B==pi&&B+C==pi&&A+C==pi)                          //危险圆   
        {cout<<"危险圆,错误结果!";}
        else
                cout<<"输入观测得水平角a_,b_,c_:"<<endl;
        double a_,b_,c_;            
        double work_2(double x,double y,double z);           //函数申明2   -----执行到这里, 后面的都没有执行!
        double a_1,a_2,a_3,b_1,b_2,b_3,c_1,c_2,c_3;
        cin>>a_1>>a_2>>a_3;
        a_=work_2(a_1,a_2,a_3);   
        cin>>b_1>>b_2>>b_3;
        b_=work_2(b_1,b_2,b_3);
        cin>>c_1>>c_2>>c_3;
        c_=work_2(c_1,c_2,c_3);
       
        double i,j,k;
        double P_1,P_2,P_3;
        i=1/tan(A)-1/tan(a_);j=1/tan(B)-1/tan(b_);k=1/tan(C)-1/tan(c_);
        P_1=1/i;P_2=1/j;P_3=1/k;
       
        double h,X,Y;
        h=P_1+P_2+P_3;
        X=P_1*x[0]/h+P_2*x[1]/h+P_3*x[2]/h;
        Y=P_1*y[0]/h+P_2*y[1]/h+P_3*y[2]/h;
       
        cout<<"点P的坐标是:("<<X<<","<<Y<<")"<<endl;
}

double work_1(double x,double y,double z)
{
        double w;
        w=acos(y*y/2/y/z+z*z/2/y/z-x*x/2/y/z);
        return w;
}

double work_2(double x,double y,double z)
{
        double e;
        e=pi*(x+y/60+z/60/60)/180;
        return e;
}


其他没什么问题。
楼主应该看看程序再说,你没有输入完毕,所以程序不能执行,其实不是在你帖子里那行停下的,是在cin语句停下的。





我测试的结果:
请输入已知点A,B,C三点的坐标:
(提示:输入的顺序是按照XA,XB...排的 ,请理解后输入)
12 34 56
34 56 78

输入观测得水平角a_,b_,c_:
13 23 45    //这里要输入三次三组。否则程序一直在这里等待。
45 67 88
45 67 89
点P的坐标是:(34,56)
Press any key to continue

[[it] 本帖最后由 VanHorn 于 2008-5-5 09:55 编辑 [/it]]

细雨斜飞 发表于 2008-5-5 13:44

谢谢VanHorn  问题已经解决  。。。

细雨斜飞 发表于 2008-5-5 13:56

#include <iostream>
#include <cmath>
#define pi 3.141592653
using namespace std;
void main()
{
    cout<<"请输入已知点A,B,C三点的坐标:"<<endl;
    cout<<"(提示:输入的顺序是按照XA,XB...排的 ,请理解后输入)"<<endl;
    int x[3],y[3],a,b,c,d;  // 这里的int 不能改为double  什么原因啊?
    for(d=0;d<=2;d++)
    {cin>>x[d];}
    for(d=0;d<=2;d++)
    {cin>>y[d];}
    cout<<endl;
    double i_,j_,k_;
    i_=x[0]*x[0]-2*x[0]*x[1]+x[1]*x[1]+y[0]*y[0]-2*y[0]*y[1]+y[1]*y[1];
    j_=x[0]*x[0]-2*x[0]*x[2]+x[2]*x[2]+y[0]*y[0]-2*y[0]*y[2]+y[2]*y[2];//源代码上这里多了个零
    k_=x[2]*x[2]-2*x[2]*x[1]+x[1]*x[1]+y[2]*y[2]-2*y[2]*y[1]+y[1]*y[1];
    a=sqrt(i_);
    b=sqrt(j_);
    c=sqrt(k_);
    double A,B,C;
    double work_1(double m,double n,double p);    //函数申明1
    A=work_1(a,b,c);           //调用函数算A角  
    B=work_1(b,a,c);           //调用函数算B角
    C=work_1(c,a,b);           //调用函数算C角
   
    if(A+B==pi&&B+C==pi&&A+C==pi)                          //危险圆   
    {cout<<"危险圆,错误结果!";}
    else
        cout<<"输入观测得水平角a_,b_,c_:"<<endl;
    double a_,b_,c_;            
    double work_2(double x,double y,double z);           //函数申明2   -----执行到这里, 后面的都没有执行!
    double a_1,a_2,a_3,b_1,b_2,b_3,c_1,c_2,c_3;
    cin>>a_1>>a_2>>a_3;
    a_=work_2(a_1,a_2,a_3);   
    cin>>b_1>>b_2>>b_3;
    b_=work_2(b_1,b_2,b_3);
    cin>>c_1>>c_2>>c_3;
    c_=work_2(c_1,c_2,c_3);
   
    double i,j,k;
    double P_1,P_2,P_3;
    i=1/tan(A)-1/tan(a_);j=1/tan(B)-1/tan(b_);k=1/tan(C)-1/tan(c_);
    P_1=1/i;P_2=1/j;P_3=1/k;
   
    double h,X,Y;
    h=P_1+P_2+P_3;
    X=P_1*x[0]/h+P_2*x[1]/h+P_3*x[2]/h;
    Y=P_1*y[0]/h+P_2*y[1]/h+P_3*y[2]/h;
   
    cout<<"点P的坐标是:("<<X<<","<<Y<<")"<<endl;
}

double work_1(double x,double y,double z)
{
    double w;
    w=acos(y*y/2/y/z+z*z/2/y/z-x*x/2/y/z);
    return w;
}

double work_2(double x,double y,double z)
{
    double e;
    e=pi*(x+y/60+z/60/60)/180;
    return e;
}
又有一问题。。。已经在程序中间标明 请大家帮忙了 谢谢

页: [1]

编程论坛