一道C/C++ 的程序题,急!
计算三维空间中一个平面和一条直线的交点要求:a)编程实现,程序语言不限,建议采用C++b)平面和直线的表示方式自定c)平面和直线的方程随机生成d)如果相交,将交点坐标输出...
计算三维空间中一个平面和一条直线的交点
要求:
a) 编程实现,程序语言不限,建议采用C++
b) 平面和直线的表示方式自定
c) 平面和直线的方程随机生成
d) 如果相交,将交点坐标输出到文件保存,文件路径自定;如果不相交,给出提示。
最好能够用C做,朋友们呀,不胜感激! 展开
要求:
a) 编程实现,程序语言不限,建议采用C++
b) 平面和直线的表示方式自定
c) 平面和直线的方程随机生成
d) 如果相交,将交点坐标输出到文件保存,文件路径自定;如果不相交,给出提示。
最好能够用C做,朋友们呀,不胜感激! 展开
2个回答
展开全部
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<time.h>
char s[8];
int g(int x)
{
if(x<0)return(x+3);
else if(x>=3)return(x-3);
else return(x);
}
int f(int x[3],int y[3],int z[3])
{
int i,a=0;
for(i=0;i<3;i++)a=a+x[g(i)]*y[g(i+1)]*z[g(i+2)]-x[g(i)]*y[g(i-1)]*z[g(i-2)];
return(a);
}
void h(float a,int l)
{
int b[10],i,j,c,e;
float d;
if(a==0)
{
s[0]='0';
s[1]='\0';
return;
}
if(a<0)
{
s[0]='-';
a=-a;
}
else if(l)s[0]='+';
c=(int)a;
d=a-c;
if(c==0){s[l]='0';l++;}
for(i=0;c;i++)
{
b[i]=c%10;
c=(c-b[i])/10;
}
for(j=0;j<i;j++)s[j+l]=b[i-j-1]+48;
if(d){s[i+l]='.';i++;}
while(d&&(i+l)<7)
{
e=(int)(d*10);
d=d*10-e;
s[i+l]=e+48;
i++;
}
s[i+l]='\0';
}
int main()
{
int a[3],b[3],c[3],d[3],e,ex,ey,ez;
float x,y,z;
int i;
char ch[150];
FILE*fp;
srand((int)time(0));
for(i=0;i<3;i++)
{
a[i]=rand()-16338;
b[i]=rand()-16338;
c[i]=rand()-16338;
d[i]=rand()-16338;
if(i==2)if(a[1]*b[2]==b[1]*a[2]&&b[1]*c[2]==c[1]*b[2])i=1;
}
printf("平面形式为Ax+By+Cz=D,A、B、C、D的值分别为%d、%d、%d、%d\n",a[0],b[0],c[0],d[0]);
printf("直线的形式为A1x+B1y+C1z=D1,A2x+B2y+C2z=D2,A1、B1、C1、D1、A2、B2、C2、D2的值分别为%d、%d、%d、%d、%d、%d、%d、%d\n",a[1],b[1],c[1],d[1],a[2],b[2],c[2],d[2]);
if((fp=fopen("d:\\直线与平面的交点.txt","w"))==NULL)
{
printf("文件打开失败");
getch();
return 0;
}
strcpy(ch,"平面:");
h((float)a[0],0);
strcat(ch,s);
strcat(ch,"x");
h((float)b[0],1);
strcat(ch,s);
strcat(ch,"y");
h((float)c[0],1);
strcat(ch,s);
strcat(ch,"z=");
h((float)d[0],0);
strcat(ch,s);
strcat(ch,"\n直线:");
h((float)a[1],0);
strcat(ch,s);
strcat(ch,"x");
h((float)b[1],1);
strcat(ch,s);
strcat(ch,"y");
h((float)c[1],1);
strcat(ch,s);
strcat(ch,"z=");
h((float)d[1],0);
strcat(ch,s);
strcat(ch,",");
h((float)a[2],0);
strcat(ch,s);
strcat(ch,"x");
h((float)b[2],1);
strcat(ch,s);
strcat(ch,"y");
h((float)c[2],1);
strcat(ch,s);
strcat(ch,"z=");
h((float)d[2],0);
strcat(ch,s);
e=f(a,b,c);
ex=f(d,b,c);
ey=f(a,d,c);
ez=f(a,b,d);
if(e==0)
{
if(ex==0)strcat(ch,"\n直线在平面内");
else strcat(ch,"\n直线与平面平行");
for(i=0;ch[i];i++)fputc(ch[i],fp);
fclose(fp);
return 0;
}
x=(float)ex/e;
y=(float)ey/e;
z=(float)ez/e;
strcat(ch,"\n直线和平面的交点为(");
h(x,0);
strcat(ch,s);
strcat(ch,",");
h(y,0);
strcat(ch,s);
strcat(ch,",");
h(z,0);
strcat(ch,s);
strcat(ch,")");
for(i=0;ch[i];i++)fputc(ch[i],fp);
fclose(fp);
getch();
return 0;
}
#include<string.h>
#include<math.h>
#include<time.h>
char s[8];
int g(int x)
{
if(x<0)return(x+3);
else if(x>=3)return(x-3);
else return(x);
}
int f(int x[3],int y[3],int z[3])
{
int i,a=0;
for(i=0;i<3;i++)a=a+x[g(i)]*y[g(i+1)]*z[g(i+2)]-x[g(i)]*y[g(i-1)]*z[g(i-2)];
return(a);
}
void h(float a,int l)
{
int b[10],i,j,c,e;
float d;
if(a==0)
{
s[0]='0';
s[1]='\0';
return;
}
if(a<0)
{
s[0]='-';
a=-a;
}
else if(l)s[0]='+';
c=(int)a;
d=a-c;
if(c==0){s[l]='0';l++;}
for(i=0;c;i++)
{
b[i]=c%10;
c=(c-b[i])/10;
}
for(j=0;j<i;j++)s[j+l]=b[i-j-1]+48;
if(d){s[i+l]='.';i++;}
while(d&&(i+l)<7)
{
e=(int)(d*10);
d=d*10-e;
s[i+l]=e+48;
i++;
}
s[i+l]='\0';
}
int main()
{
int a[3],b[3],c[3],d[3],e,ex,ey,ez;
float x,y,z;
int i;
char ch[150];
FILE*fp;
srand((int)time(0));
for(i=0;i<3;i++)
{
a[i]=rand()-16338;
b[i]=rand()-16338;
c[i]=rand()-16338;
d[i]=rand()-16338;
if(i==2)if(a[1]*b[2]==b[1]*a[2]&&b[1]*c[2]==c[1]*b[2])i=1;
}
printf("平面形式为Ax+By+Cz=D,A、B、C、D的值分别为%d、%d、%d、%d\n",a[0],b[0],c[0],d[0]);
printf("直线的形式为A1x+B1y+C1z=D1,A2x+B2y+C2z=D2,A1、B1、C1、D1、A2、B2、C2、D2的值分别为%d、%d、%d、%d、%d、%d、%d、%d\n",a[1],b[1],c[1],d[1],a[2],b[2],c[2],d[2]);
if((fp=fopen("d:\\直线与平面的交点.txt","w"))==NULL)
{
printf("文件打开失败");
getch();
return 0;
}
strcpy(ch,"平面:");
h((float)a[0],0);
strcat(ch,s);
strcat(ch,"x");
h((float)b[0],1);
strcat(ch,s);
strcat(ch,"y");
h((float)c[0],1);
strcat(ch,s);
strcat(ch,"z=");
h((float)d[0],0);
strcat(ch,s);
strcat(ch,"\n直线:");
h((float)a[1],0);
strcat(ch,s);
strcat(ch,"x");
h((float)b[1],1);
strcat(ch,s);
strcat(ch,"y");
h((float)c[1],1);
strcat(ch,s);
strcat(ch,"z=");
h((float)d[1],0);
strcat(ch,s);
strcat(ch,",");
h((float)a[2],0);
strcat(ch,s);
strcat(ch,"x");
h((float)b[2],1);
strcat(ch,s);
strcat(ch,"y");
h((float)c[2],1);
strcat(ch,s);
strcat(ch,"z=");
h((float)d[2],0);
strcat(ch,s);
e=f(a,b,c);
ex=f(d,b,c);
ey=f(a,d,c);
ez=f(a,b,d);
if(e==0)
{
if(ex==0)strcat(ch,"\n直线在平面内");
else strcat(ch,"\n直线与平面平行");
for(i=0;ch[i];i++)fputc(ch[i],fp);
fclose(fp);
return 0;
}
x=(float)ex/e;
y=(float)ey/e;
z=(float)ez/e;
strcat(ch,"\n直线和平面的交点为(");
h(x,0);
strcat(ch,s);
strcat(ch,",");
h(y,0);
strcat(ch,s);
strcat(ch,",");
h(z,0);
strcat(ch,s);
strcat(ch,")");
for(i=0;ch[i];i++)fputc(ch[i],fp);
fclose(fp);
getch();
return 0;
}
展开全部
#include<stdio.h>
#include <stdlib.h>
int main()
{
char c;
char data[100];
int index=0;
int i,j;
while((c=getchar())!='\n')
{
if((c>='0'&&c<='9')||(c>='A'&&c<='Z')||(c>='a'&&c<='z'))
{
if(index==0)
data[index++]=c;
else
{
for(i=0;i<index;i++)
{
if(data[i]>c)
{
for(j=index+1;j>i;j--)
{
data[j]=data[j-1];
}
data[i]=c;
index++;
break;
}
if(i==index-1)
{
data[index]=c;
index++;
break;
}
}
}
}
}
for(i=0;i<index;i++)
printf("%c",data[i]);
}
完全c编写,有问题hi我,可以运行的,输入字符串,换行结束输入.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询