當前位置:首頁 » 編程語言 » c語言求最小距離的坐標
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言求最小距離的坐標

發布時間: 2022-08-07 10:29:49

『壹』 求兩點之間最短距離的c語言源代碼

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
printf("輸入兩點坐標:\n");
double x1,y1,x2,y2,length;
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
length = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
printf("%lf\n",length);
system("pause");
return 0;
}

『貳』 如何用C語言編程解決:空間兩線段間的最小距離,已經兩線段起點終點坐標。在線求解答

我可以給你思路:
先判斷是否相交,相交則距離為0;
若不相交,則最短距離必然某兩個端點間的距離,求出線段1起點、終點到線段2起點、終點的距離,挑出4個值中最小的即是。
註:判斷是否相交,網上有很多代碼,隨便google一下
如果你會寫c語言代碼,我相信你自己能夠辦到了

『叄』 c++ 請教高手,求一點與其他N個點距離最小的點怎麼搞,高分懸賞謝謝

就是一個for循環,遍歷P數組的一維,然後通過 s = (y1-y2)*(y1-y2) + (x1-x2)*(x1-x2)得出在二維坐標下的兩點最短距離

P[N][2]是已有數組
架設已經有了x1,y1

for(int i = 0 ; i< N; i++)
{
x2 = P[i][0];
y2 = P[i][1];

s = (y1-y2)*(y1-y2) + (x1-x2)*(x1-x2)

if(s < mins)
{
mins = s;
mini = i;
}
}

最後得到最短 距離mins和最短距離的點序號mini

『肆』 C語言求兩點間距離

#include <math.h>

#include <stdio.h>

void main()

{

float x1, y1, x2, y2;

float d;

printf("請輸入x1,y1,x2,y2,用空格隔開: ");

scanf("%f %f %f %f", &x1, &y1, &x2, &y2);

d = sqrtf((x2 - x1) * (x2 - x1) +(y2 - y1) * (y2 - y1));

printf("兩點間的距離為%.2f", d);

}

(4)c語言求最小距離的坐標擴展閱讀:

c語言的基本運算的注意事項

一、運算順序

1、算術表達式

用算術運算符將數據連接起來的式子,稱為「算術表達式」。比如a + b、10 * 5等。如果表達式比較復雜的話,那麼就要注意一下它的運算順序。表達式的運算順序是按照運算符的結合方向和優先順序進行的。

2、結合方向

算術運算符的結合方向是從左到右。例如表達式2+3+4,先計算2+3。

3、 優先順序

優先順序越高,就越先進行運算,當優先順序相同時,參照結合方向。下面是算術運算符的優先順序排序:

負值運算符(-)>乘(*)、除(/)、模(%)運算符>加(+)、減(-)運算符

例如表達式4+5*8/-2的計算順序為:-、*、/、+,最後的結果是-16

4、小括弧

如果需要先計算優先順序低的可以使用小括弧()括住,小括弧的優先順序是最高的!

例如4+5*8-2默認的計算順序是:*、+、-

如果想先執行加法運算,就可以這樣寫:(4+5)*8-2,最後的結果都是不一樣的。

二、關系運算符的使用注意

1、關系運算符中==、!=的優先順序相等,<、<=、>、>=的優先順序相等,且前者的優先順序低於後者

例如2==3>1 :先算3>1,條件成立,結果為1。再計算2==1,條件不成立,結果為0。因此2==3>1的結果為0。

2、關系運算符的結合方向為「從左往右」

例如4>3>2 :先算4>3,條件成立,結果為1。再與2比較,即1>2,條件不成立,結果為0。因此4>3>2的結果為0。

3、關系運算符的優先順序小於算術運算符

例如3+4>8-2 :先計算3+4,結果為7。再計算8-2,結果為6。最後計算7>6,條件成立,結果為1。因此3+4>8-2的結果為1。

『伍』 一個6x7的方格,中間有3個點,坐標【3,6】【2,1】【4,7】。C語言打出每個方格距離這3點的最短的那個距離

【程序1】題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去掉不滿足條件的排列。2.程序源代碼:main(){inti,j,k;printf(「\n「);for(i=1;i〈5;i++)/*以下為三重循環*/for(j=1;j〈5;j++)for(k=1;k〈5;k++){if(i!=k&&i!=j&&j!=k)/*確保i、j、k三位互不相同*/printf(「%d,%d,%d\n「,i,j,k);}}==============================================================【程序2】題目:企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?1.程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。2.程序源代碼:main(){longinti;intbonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(「%ld「,&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i〈=100000)bonus=i*0.1;elseif(i〈=200000)bonus=bonus1+(i-100000)*0.075;elseif(i〈=400000)bonus=bonus2+(i-200000)*0.05;elseif(i〈=600000)bonus=bonus4+(i-400000)*0.03;elseif(i〈=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf(「bonus=%d「,bonus);}==============================================================【程序3】題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?1.程序分析:在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後的結果滿足如下條件,即是結果。請看具體分析:2.程序源代碼:#include「math.h「main(){longinti,x,y,z;for(i=1;i〈100000;i++){x=sqrt(i+100);/*x為加上100後開方後的結果*/y=sqrt(i+268);/*y為再加上168後開方後的結果*/if(x*x==i+100&&y*y==i+268)/*如果一個數的平方根的平方等於該數,這說明此數是完全平方數*/printf(「\n%ld\n「,i);}}==============================================================【程序4】題目:輸入某年某月某日,判斷這一天是這一年的第幾天?1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大於3時需考慮多加一天。2.程序源代碼:main(){intday,month,year,sum,leap;printf(「\npleaseinputyear,month,day\n「);scanf(「%d,%d,%d「,&year,&month,&day);switch(month)/*先計算某月以前月份的總天數*/{case1:sum=0;break;case2:sum=31;break;case3:sum=59;break;case4:sum=90;break;case5:sum=120;break;case6:sum=151;break;case7:sum=181;break;case8:sum=212;break;case9:sum=243;break;case10:sum=273;break;case11:sum=304;break;case12:sum=334;break;default:printf(「dataerror「);break;}sum=sum+day;/*再加上某天的天數*/if(year%400==0||(year%4==0&&year%100!=0))/*判斷是不是閏年*/leap=1;elseleap=0;if(leap==1&&month〉2)/*如果是閏年且月份大於2,總天數應該加一天*/sum++;printf(「Itisthe%dthday.「,sum);}==============================================================【程序5】題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。1.程序分析:我們想法把最小的數放到x上,先將x與y進行比較,如果x〉y則將x與y的值進行交換,然後再用x與z進行比較,如果x〉z則將x與z的值進行交換,這樣能使x最小。2.程序源代碼:main(){intx,y,z,t;scanf(「%d%d%d「,&x,&y,&z);if(x〉y){t=x;x=y;y=t;}/*交換x,y的值*/if(x〉z){t=z;z=x;x=t;}/*交換x,z的值*/if(y〉z){t=y;y=z;z=t;}/*交換z,y的值*/printf(「smalltobig:%d%d%d\n「,x,y,z);}==============================================================【程序6】題目:用*號輸出字母C的圖案。1.程序分析:可先用』*』號在紙上寫出字母C,再分行輸出。2.程序源代碼:#include「stdio.h「main(){printf(「HelloC-world!\n「);printf(「****\n「);printf(「*\n「);printf(「*\n「);printf(「****\n「);}==============================================================【程序7】題目:輸出特殊圖案,請在c環境中運行,看一看,VeryBeautiful!1.程序分析:字元共有256個。不同字元,圖形不一樣。2.程序源代碼:#include「stdio.h「main(){chara=176,b=219;printf(「%c%c%c%c%c\n「,b,a,a,a,b);printf(「%c%c%c%c%c\n「,a,b,a,b,a);printf(「%c%c%c%c%c\n「,a,a,b,a,a);printf(「%c%c%c%c%c\n「,a,b,a,b,a);printf(「%c%c%c%c%c\n「,b,a,a,a,b);}==============================================================【程序8】題目:輸出9*9口訣。1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列。2.程序源代碼:#include「stdio.h「main(){inti,j,result;printf(「\n「);for(i=1;i〈10;i++){for(j=1;j〈10;j++){result=i*j;printf(「%d*%d=%-3d「,i,j,result);/*-3d表示左對齊,佔3位*/}printf(「\n「);/*每一行後換行*/}}==============================================================【程序9】題目:要求輸出國際象棋棋盤。1.程序分析:用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格。2.程序源代碼:#include「stdio.h「main(){inti,j;for(i=0;i〈8;i++){for(j=0;j〈8;j++)if((i+j)%2==0)printf(「%c%c「,219,219);elseprintf(「「);printf(「\n「);}}==============================================================【程序10】題目:列印樓梯,同時在樓梯上方列印兩個笑臉。1.程序分析:用i控制行,j來控制列,j根據i的變化來控制輸出黑方格的個數。2.程序源代碼:#include「stdio.h「main(){inti,j;printf(「\1\1\n「);/*輸出兩個笑臉*/for(i=1;i〈11;i++){for(j=1;j〈=i;j++)printf(「%c%c「,219,219);printf(「\n「);}}【程序11】題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?1.程序分析:兔子的規律為數列1,1,2,3,5,8,13,21.2.程序源代碼:main(){longf1,f2;inti;f1=f2=1;for(i=1;i〈=20;i++){printf(「%12ld%12ld「,f1,f2);if(i%2==0)printf(「\n「);/*控制輸出,每行四個*/f1=f1+f2;/*前兩個月加起來賦值給第三個月*/f2=f1+f2;/*前兩個月加起來賦值給第三個月*/}}==============================================================【程序12】題目:判斷101-200之間有多少個素數,並輸出所有素數。1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。2.程序源代碼:#include「math.h「main(){intm,i,k,h=0,leap=1;printf(「\n「);for(m=101;m〈=200;m++){k=sqrt(m+1);for(i=2;i〈=k;i++)if(m%i==0){leap=0;break;}if(leap){printf(「%-4d「,m);h++;if(h%10==0)printf(「\n「);}leap=1;}printf(「\nThetotalis%d「,h);}==============================================================【程序13】題目:列印出所有的「水仙花數」,所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個「水仙花數」,因為153=1的三次方+5的三次方+3的三次方。1.程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。2.程序源代碼:main(){inti,j,k,n;printf(「』waterflower』numberis:「);for(n=100;n〈1000;n++){i=n/100;/*分解出百位*/j=n/10%10;/*分解出十位*/k=n%10;/*分解出個位*/if(i*100+j*10+k==i*i*i+j*j*j+k*k*k){printf(「%-5d「,n);}}printf(「\n「);}==============================================================【程序14】題目:將一個正整數分解質因數。例如:輸入90,列印出90=2*3*3*5。程序分析:對n進行分解質因數,應先找到一個最小的質數k,然後按下述步驟完成:(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。(2)如果n〈〉k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新的正整數你n,重復執行第一步。(3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。2.程序源代碼:/*zhengintisdividedyinshu*/main(){intn,i;printf(「\npleaseinputanumber:\n「);scanf(「%d「,&n);printf(「%d=「,n);for(i=2;i〈=n;i++){while(n!=i){if(n%i==0){printf(「%d*「,i);n=n/i;}elsebreak;}}printf(「%d「,n);}==============================================================【程序15】題目:利用條件運算符的嵌套來完成此題:學習成績〉=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。1.程序分析:(a〉b)?a:b這是條件運算符的基本例子。2.程序源代碼:main(){intscore;chargrade;printf(「pleaseinputascore\n「);scanf(「%d「,&score);grade=score〉=90?』A』:(score〉=60?』B』:』C』);printf(「%dbelongsto%c「,score,grade);}==============================================================【程序16】題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。1.程序分析:利用輾除法。2.程序源代碼:main(){inta,b,num1,num2,temp;printf(「pleaseinputtwonumbers:\n「);scanf(「%d,%d「,&num1,&num2);if(num1{temp=num1;num1=num2;num2=temp;}a=num1;b=num2;while(b!=0)/*利用輾除法,直到b為0為止*/{temp=a%b;a=b;b=temp;}printf(「gongyueshu:%d\n「,a);printf(「gongbeishu:%d\n「,num1*num2/a);}==============================================================【程序17】題目:輸入一行字元,分別統計出其中英文字母、空格、數字和其它字元的個數。1.程序分析:利用while語句,條件為輸入的字元不為』\n』.2.程序源代碼:#include「stdio.h「main(){charc;intletters=0,space=0,digit=0,others=0;printf(「pleaseinputsomecharacters\n「);while((c=getchar())!=』\n』){if(c〉=』a』&&c〈=』z』||c〉=』A』&&c〈=』Z』)letters++;elseif(c==』』)space++;elseif(c〉=』0』&&c〈=』9』)digit++;elseothers++;}printf(「allinall:char=%dspace=%ddigit=%dothers=%d\n「,letters,space,digit,others);}==============================================================【程序18】題目:求s=a+aa+aaa+aaaa+aaa的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。1.程序分析:關鍵是計算出每一項的值。2.程序源代碼:main(){inta,n,count=1;longintsn=0,tn=0;printf(「pleaseinputaandn\n「);scanf(「%d,%d「,&a,&n);printf(「a=%d,n=%d\n「,a,n);while(count〈=n){tn=tn+a;sn=sn+tn;a=a*10;++count;}printf(「a+aa+=%ld\n「,sn);}==============================================================【程序19】題目:一個數如果恰好等於它的因子之和,這個數就稱為「完數」。例如6=1+2+3.編程找出1000以內的所有完數。1.程序分析:請參照程序〈--上頁程序14.2.程序源代碼:main(){staticintk[10];inti,j,n,s;for(j=2;j〈1000;j++){n=-1;s=j;for(i=1;i{if((j%i)==0){n++;s=s-i;k[n]=i;}}if(s==0){printf(「%disawanshu「,j);for(i=0;iprintf(「%d,「,k);printf(「%d\n「,k[n]);}}}==============================================================【程序20】題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?1.程序分析:見下面注釋2.程序源代碼:main(){floatsn=100.0,hn=sn/2;intn;for(n=2;n〈=10;n++){sn=sn+2*hn;/*第n次落地時共經過的米數*/hn=hn/2;/*第n次反跳高度*/}printf(「thetotalofroadis%f\n「,sn);printf(「thetenthis%fmeter\n「,hn);}

『陸』 c語言求點到線段最短距離的這兩句代碼是是什麼意思

k=(p2.y-p1.y)/(p2.x-p1.x); 已知線段的斜率。就是 (y2-y1) / (x2-x1) ,點2與點1的 y 坐標之差,除以點2與點1的 x 坐標之差。
q.y 是某點的y坐標, q.x 是某點的x坐標
s.x 是 垂足 的 x 坐標,s.y 垂足 的 y 坐標
距離 = sqrt( (q.y-s.y) * (q.y-s.y) + (q.x-s.x) * (q.x-s.x));

『柒』 用c語言實現尋找最短距離的問題,照片是個例子,問題就是從x城市到y城市,如何給出最短距離的路線,這

單源最短路徑問題,用Dijkstra演算法求解。圖的存儲結構,有鄰接矩陣和鄰接表兩種,鄰接矩陣佔用空間大,但是使用方便。這里就說一下鄰接矩陣:

structGraph{
intmatrix[N][N];
inte;
};

N表示頂點數,就這幅圖而言是5,e表示邊數。matrix存儲了頂點之間的距離,比如matrix[0][1]表示頂點0到頂點1之間的距離。matrix[n][n]表示一個頂點到它自己的距離,這個應當設為0。另外,若兩個頂點之間沒有邊,應該用一個值(可以是負數)來標識它,這兩項操作,應該在圖的初始化時進行。

創建圖之後,首先要輸入邊數,然後輸入每條邊的起點、終點和長度,來給數組matrix賦值。

然後就是使用演算法了。

參考:http://www.cnblogs.com/dolphin0520/archive/2011/08/26/2155202.html

『捌』 給出坐標的幾點之間的最短路徑問題 用C語言解 求高手幫忙

最笨的枚舉法,先算第一個點距離剩下點的最短路徑,然後把第一點排除最外求剩下點最短,循環直到剩下兩點。
#include <stdio.h>
#include <stdlib.h>
#define N 10

//返回最短距離的平方,兩個點下標分別存在index1和index2中
//x為所有點x坐標數組,y為所有點y坐標數組,n為個數
int getShortest(int *x,int *y,int n,int& index1,int& index2);
int main(int argc, char **argv)
{
int x[10]={11,3,5,7,1,10,17,18,19,20};
int y[10]={0};
int index1,index2;

printf("%d %d %d \n",getShortest(x,y,10,index1,index2),index1,index2);
return 0;
}
/*
* 簡要描述:先找出離第一個點最近的點,再把第一個點排除在外,
* 求剩餘n-1個點中最近距離,遞推直到剩下兩個點,演算法結束
*
*
* */
int getShortest(int *x,int *y,int n,int &minP1,int &minP2)
{

int *px,*py,*currX,*currY;
int minX,minY;
//當前點與第一個點之間的坐標差值
minX = abs(*(x+1) - *x);
minY = abs(*(y+1) - *y);
//坐標差值絕對值
int absX,absY;
//最短距離平方
long minLen2 ;
long currLen2;
//當前兩點的索引
int *endIndex=x+1;
int *beginIndex=x;
for (px=x,py=y;px<x+n-1;px++,py++)
{

currX = px+1;
currY = py+1;
minLen2 = minX*minX+minY*minY;
while (currX<x+n)
{
absX = abs(*currX-*px);
absY = abs(*currY-*py);
/*比較大小*/
//x,y方向距離都比最小的小,無須計算
if (absX<minX&&absY<minY)
{
minX = absX;
minY = absY;
endIndex = currX;
beginIndex = px;
}
//x,y方向距離一個大一個小,計算平方比較
else if ((absX<minX&&absX>minY)||(absX<minX&&absX>minY))
{
currLen2 = (absX*absX+absY*absY);
if (minLen2>currLen2)
{
minLen2 = currLen2;
minX = absX;
minY = absY;
endIndex = currX;
beginIndex = px;
}
}
currX++;
currY++;
}
}
minP1 = beginIndex - x;
minP2 = endIndex - x;
return minLen2;
}

『玖』 c語言 如何求一點,使其到平面上其他已知點的距離和最小

能具體點嗎?
如果點少,或許可以用數學幾何方法求
如果點多,估計就只能循環求近似點了

min=(x,y)到到其他點的距離和 (x,y可隨意,一般取x=最小值,y=最小值)
for(x=最小值;x≤最大值;x增加)
for(y=最小值;y≤最大值;y增加)
if(點(x,y)到其他點的距離和 < min)
記錄下(x,y);
這種方法只能求一個近似點,精確度取決於你設置的x、y的增加速率