c標准演算法
這里整理c語言常用演算法,主要有:
交換演算法
查找最小值演算法
冒泡排序
選擇排序
插入排序
shell排序 (希爾排序)
歸並排序
快速排序
二分查找演算法
查找重復演算法
❷ C語言之基本演算法
1.return 0是檢驗程序是否正確的。
當程序正確時會顯示0,錯誤則出現其他隨機數。
void的意思是「無類型」。
如果函數沒有返回值,那麼應聲明為void類型。
在C語言中,凡不加返回值類型限定的函數,
就會被編譯器作為返回整型值處理。
2.你開始定義了int zz[100],後面能用zz[]嗎?
在自定義函數中,你是不知道數組長度大小,所以用xx[]。
3.return 0你可以完全忽略它,編程時也不用編進去,它完全不重要。
4.指針傳遞變數的地址,變數傳遞的是變數的值。
在自定義函數中,如果要改變形參的話,必須改變形參的地址。
而形參的值的改變,沒任何意義。
5.float到double轉換有可能丟失數據。變數類型改變了。不是什麼轉換。
所謂隱式轉換:例:int i=5; char j='a'; int n=i+j;
因char可以隱式專換為int類型,所以結果n=102 。
與什麼long,short沒關系。那些只是類型長度不同。
你的書寫風格要注意了。不能中英文混合。
還有,頭文件老寫錯!是#include<stdio.h>,不是雙引號。
❸ c語言常用演算法有哪些
0) 窮舉法
窮舉法簡單粗暴,沒有什麼問題是搞不定的,只要你肯花時間。同時對於小數據量,窮舉法就是最優秀的演算法。就像太祖長拳,簡單,人人都能會,能解決問題,但是與真正的高手過招,就頹了。
1) 貪婪演算法
貪婪演算法可以獲取到問題的局部最優解,不一定能獲取到全局最優解,同時獲取最優解的好壞要看貪婪策略的選擇。特點就是簡單,能獲取到局部最優解。就像打狗棍法,同一套棍法,洪七公和魯有腳的水平就差太多了,因此同樣是貪婪演算法,不同的貪婪策略會導致得到差異非常大的結果。
2) 動態規劃演算法
當最優化問題具有重復子問題和最優子結構的時候,就是動態規劃出場的時候了。動態規劃演算法的核心就是提供了一個memory來緩存重復子問題的結果,避免了遞歸的過程中的大量的重復計算。動態規劃演算法的難點在於怎麼將問題轉化為能夠利用動態規劃演算法來解決。當重復子問題的數目比較小時,動態規劃的效果也會很差。如果問題存在大量的重復子問題的話,那麼動態規劃對於效率的提高是非常恐怖的。就像斗轉星移武功,對手強它也會比較強,對手若,他也會比較弱。
3)分治演算法
分治演算法的邏輯更簡單了,就是一個詞,分而治之。分治演算法就是把一個大的問題分為若干個子問題,然後在子問題繼續向下分,一直到base cases,通過base cases的解決,一步步向上,最終解決最初的大問題。分治演算法是遞歸的典型應用。
4) 回溯演算法
回溯演算法是深度優先策略的典型應用,回溯演算法就是沿著一條路向下走,如果此路不同了,則回溯到上一個
分岔路,在選一條路走,一直這樣遞歸下去,直到遍歷萬所有的路徑。八皇後問題是回溯演算法的一個經典問題,還有一個經典的應用場景就是迷宮問題。
5) 分支限界演算法
回溯演算法是深度優先,那麼分支限界法就是廣度優先的一個經典的例子。回溯法一般來說是遍歷整個解空間,獲取問題的所有解,而分支限界法則是獲取一個解(一般來說要獲取最優解)。
❹ c語言中什麼是演算法有哪些描述演算法的例子
1、有窮性(有限性)。任何一種提出的解題方法都是在有限的操作步驟內可以完成的。
如果在有限的操作步驟內完不成,得不到結果,這樣的演算法將無限的執行下去,永遠不會停止。除非手動停止。例如操作系統就不具有有窮性,它可以一直運行。
2、一個演算法應該具有以下七個重要的特徵:
1)有窮性(finiteness)
演算法的有窮性是指演算法必須能在執行有限個步驟之後終止
2)確切性(definiteness)
演算法的每一步驟必須有確切的定義;
3)輸入項(input)
一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定出了初始條件;
4)輸出項(output)
一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果.沒有輸出的演算法是毫無意義的;
5)可行性(effectiveness)
演算法中執行的任何計算步都是可以被分解為基本的可執行的操作步,即每個計算步都可以在有限時間內完成;
6)
高效性(high
efficiency)
執行速度快,佔用資源少;
7)
健壯性(robustness)
健壯性又稱魯棒性,是指軟體對於規范要求以外的輸入情況的處理能力。所謂健壯的系統是指對於規范要求以外的輸入能夠判斷出這個輸入不符合規范要求,並能有合理的處理方式。
❺ C語言簡單演算法介紹
第一步:p=1,第二步:i=2,第三步:應該是p*i賦值給p,所以p*i=1*2 賦值給p
也就是現在的p=1*2,第四步:把i+1賦值給i,此時i=3,第五步:判斷i是否大於五,沒有返回到第三步:把p*i賦值給p,所以p*i=1*2*3 賦值給p
也就是現在的p=1*2*3,第四步:把i+1賦值給i,此時i=4,第五步:判斷i是否大於五,沒有返回到第三步:把p*i賦值給p,所以p*i=1*2*3*4 賦值給p
也就是現在的p=1*2*3*4,第四步:把i+1賦值給i,此時i=5,第五步:判斷i是否大於五,沒有返回到第三步:把p*i賦值給p,所以p*i=1*2*3*4*5 賦值給p
也就是現在的p=1*2*3*4*5,第四步:把i+1賦值給i,此時i=6,第五步:判斷i是否大於五,有,結束。此時p=1*2*3*4*5=5!
這樣i+1就是為了使得後面的乘3,乘4,乘5做准備的!
❻ C語言基本演算法
1.輸入語句:scanf("控制格式",接受值列表),其中控制格式常用的有:%d,%c,%s,%f,分別
表示整型,字元型,字元串和浮點型.
例如int
a;char
c;scanf("%d
%c",&a,&c);表示向a和c輸入值
2.賦值語句:=號,如將b賦值為10,為b=10
3.條件:if(布爾表達式){程序}else{程序}(注:此結構可嵌套)
switch(離散量){case
常量:...;case
常量:...}
例:int
a;scanf("%d",&a);
if(a>10)
{printf("大於10");}
else
{printf("小於10")}
例:switch(months)
{
case
1:printf("1月有31天");break;
case
3:printf("3月有31天");break;
....
default:break;
}
4.循環:for結構,while結構,do-while結構
for(初始化;判斷;變化)
{
}
while(條件)
{
}
do
{
}while(條件)
❼ c語言演算法
在C語言中,由於精度問題,DOUBLE值本來應該等於零時,
在系統內部它可能是,0.0000000132 之類的一個極小的數。
所以:
DOUBLE W;
...
IF(W==0.0)
...
這樣的判斷,條件很難成立。
判斷DOUBLE值是否為零,通常寫成:
#define EPS 0.000001
IF(fabs(W)<EPS)
...
也就是說,只要它的絕對值小於一個極小的數,
就認為它是零。
❽ 常用的C語言演算法有哪些
演算法是一個自成體系的東西,和c語言沒有本質聯系。
而且演算法是為了解決問題的,所以也就無所謂常用不常用。
如果你的程序需要排序功能,那麼排序就算常用演算法,排序演算法有冒泡,快速和歸並等。