『壹』 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本身的數據類型啦)。
上面有兄弟(姐妹?)說用求根公式算,對於一元二次方程當然是可以的,但是對於沒有求根公式的方程來說,利用計算機的高速計算特點來解題也未嘗不是個好方法。