‘壹’ c语言计算两点间距离方法是什么
Problem Description
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
Input
输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。
Output
对于每组输入数据,输出一行,结果保留两位小数。
#include<stdio.h>
#include<math.h>
void main()
{int X1,X2,Y1,Y2;<br>double d;<br>printf("%d %d %d %d ",X1,Y1,X2,Y2);
<br>while(scanf("%d %d %d %d ",&X1,&Y1,&X2,&Y2)!=EOF)
<br>while(1)<br>{d=sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));<br>printf("%.2f ",d);
‘贰’ c语言算一元二次方程
# include<stdio.h>
# include<math.h>
int main()
{
double a,b,c,x1,x2,d=0,e=0;
scanf("%lf%lf%lf",&a,&b,&c);
if(b*b-4*a*c<=0)
{
d=-b/2/a;
e=sqrt(fabs(b*b-4*a*c))/2/a;
printf("x1=%.3lf+%.3lfi x2=%.3lf-%.3lfi
",d,e,d,e);
}
else
{
x1=(-b+sqrt(b*b-4*a*c))/2/a,x2=(-b-sqrt(b*b-4*a*c))/(2*a);
printf("x1=%.3lf x2=%.3lf
",x1,x2);
}
getch();
return 0;
}
你的程序没有问题,是你的C语言工具有问题,建议你重装一编译软件。
‘叁’ 如何用C语言求一元二次方程的根
#include <stdlib.h>
#include <math.h>
void main( void )
{
double a,b,c,d;
printf("请输入一元二次方程的三个系数:");
scanf("%lf %lf %lf",&a,&b,&c);
d=b*b-4*a*c;
if(d<0){printf("方程没有实根。\n"); return 1;}
if(d==0){printf("方程有重根 x=%lf\n",-b/(2*a)); return 0;}
printf("方程有二个实根 x1=%lf x2=%lf",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));
system("pause");
return 0;
}
‘肆’ x1=(x1-=x1*x1)在c语言里怎么算
先算最右侧乘法。
再看括号,由a-=b, 即a = a - b,可得括号里面的其实就是 temp = x1 - (x1 * x1);
x1 = temp; 最终结果就是x1- x1 * x1的值。
‘伍’ 怎样用C语言编写数学公式
1、C语言有现场的常用数学函数,所在函数库为math.h、stdlib.h。
函数名及解释:
int abs(int i) 返回整型参数i的绝对值
double cabs(struct complex znum) 返回复数znum的绝对值
double fabs(double x) 返回双精度参数x的绝对值
long labs(long n) 返回长整型参数n的绝对值
double exp(double x) 返回指数函数ex的值
double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中
double ldexp(double value,int exp); 返回value*2exp的值
double log(double x) 返回logex的值
double log10(double x) 返回log10x的值
double pow(double x,double y) 返回xy的值
double pow10(int p) 返回10p的值
double sqrt(double x) 返回+√x的值
double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度
double asin(double x) 返回x的反正弦sin-1(x)值,x为弧度
double atan(double x) 返回x的反正切tan-1(x)值,x为弧度
double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x为弧度
double cos(double x) 返回x的余弦cos(x)值,x为弧度
double sin(double x) 返回x的正弦sin(x)值,x为弧度
double tan(double x) 返回x的正切tan(x)值,x为弧度
double cosh(double x) 返回x的双曲余弦cosh(x)值,x为弧度
double sinh(double x) 返回x的双曲正弦sinh(x)值,x为弧度
double tanh(double x) 返回x的双曲正切tanh(x)值,x为弧度
double hypot(double x,double y) 返回直角三角形斜边的长度(z),x和y为直角边的长度,z2=x2+y2
2、复杂的数学函数可以用自定义函数的形式实现。
例如:
doubleConerVelocity(intA,doublex1,doubley1,doublex2,doubley2,doublet1,doublet2)
{
doubleT,V;
T=acos(abs(x1*x2+y1*y2)/sqrt(x1*x1+y1*y1)/sqrt(x2*x2+y2*y2));
V=(A*(t2-t1))/(2*sin(T/2));
returnV;
}
‘陆’ c语言问题,会的帮帮忙(x1和x2为什么都是等于40)
要搞清楚C的形参值传递是单向的,即不能用形参返回值。还要注意各变量的作用域。
所以你的sub 函数不能起到交换值的作用,实际等效于:
void sub(int x,int y) //相当于把第一个参数的值赋给全局变量x1
{
x1=x;
}
你的程序相当于:
int x3=10,x4=20;
x1=x3;
x1=x2;
printf(……);
所以输出40,40,10,20
可将sub改为:
void sub(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
应用sub时参数加&,即sub(&x1,&x2),sub(&x3,&x4)用指针传回变量值。
你的编译环境VC的话,直接用C++别名解决值传递问题:
void sub(int &x,int &y)
{
int temp;
temp=x;
x=y;
y=temp;
}
应用sub时参数不加&,即sub(x1,x2),sub(x3,x4)用别名传回变量值。
‘柒’ c语言,求计算过程,详细,高分。 答案是10 20 40 40
这一题考的就是函数的形式参数和实际参数的区别。
首先是sub(x3,x4)
这里由于传入函数中的是形式参数(也就是程序另外声明了两个变量x,y,同时使x=x3,y=x4,而他们的值的改变跟x3,x4没关系),所以尽管函数交换了,其实也就是交换x,y的值,并没有影响到x3,x4,所以x3=10,x4=20;
而sub(x2,x1)也是同样的道理,不同的是在sub函数中,有一步x1=x,因为x1,x2是全局变量,所以这一步就使x1的值改变了,变为x的值了,而x的值是有x2传进去的,所以x1=40,x2还是没变,x2=40
‘捌’ C语言用scanf 输入 x1(某数) — x2(某数) 的int ,计算x1 到x2,之间数的乘机,并用peintf 显示
给你个建议:尽量在每一语句后面加一注释,以便自己或他人阅读和检错!
#include <stdio.h>
void main()
{
int a,b,i;
long sum=1;/*乘积结果可能比较大,所以用long型*/
printf("请输入x1(整数a):");
scanf("%d",&a);
printf("\n请输入x2(整数b且b>a):");/*下一行输入x2*/
scanf("%d",&b);
for(i= a; i<=b;i++)
{
sum=sum*i;/*乘积放入sum中*/
}
printf("x1 到x2,之间数的乘积是%ld \n",sum) ;/*这是包括两边的数的*/
}
‘玖’ C语言关系运算符的使用和理解,麻烦哪位大佬解答下下述源代码中x1,x2,x3分别是怎么得来的
你前面int就已经定义了x1,x2,x3为整型变量啦,但是没有赋初值而已
而你后面x1=a>b>d;就是判断a是否大于b是否大于d,是的话x1=1,否则x1=0;下面的语句也是如此
‘拾’ 用c语言计算方程2x^2+3x+1=0的根x1,x2 看下哪有错
首先呢void main()的写法在VC++下是没问题啦
但是到GCC编译器里就不通过了
最好改成int main()
其实main函数的标准定义应该是int main(int argc, char *argv[])
————————————
上面是闲话
然后下面说说算法的问题
你这个算法里用到的是在区间里步长0.1进行扫描取近似值的方法
先扫描出第一个根x1,然后从x1出发继续扫描x轴上后面的实数
理论上是没有错,但是有点小问题
就是 一个浮点数是不能直接跟0比较大小的
你这个步长是0.1能不能正好算到0姑且不论
就算是这样的语句
float x=0;
程序中(x==0)可能依然为假,因为计算机内部存储数据都是二进制,C里用4个字节来存放浮点数。浮点数精度很高但是也不可能是无限的精度,总得有个误差。
所以一般要比较两个浮点数是否相等,是先定义一个很小的值作为参照。比如:
#define EPSILON 0.00001
然后假设有float a,b需要比较
那么写进if语句是这样
if (abs(a-b)<EPSILON) //abs()是求绝对值的函数,使用需先包含math.h头文件
{
.....
}
这个if语句的条件为真的时候,就可以认为a,b是相等的。
用这样的表达式去代替你的判断相等的表达式,应该就能得到答案了。
这个算法适合用于知道根的区间,进一步确定根的位置。精确度取决于上面定义的EPSILON。
一般来说EPSILON定义得越小,根就越精确(当然还要看x本身的数据类型啦)。
上面有兄弟(姐妹?)说用求根公式算,对于一元二次方程当然是可以的,但是对于没有求根公式的方程来说,利用计算机的高速计算特点来解题也未尝不是个好方法。