常用數(shù)學(xué)算法c語言實(shí)現(xiàn)

常用數(shù)學(xué)算法c語言實(shí)現(xiàn)

ID:35447971

大小:84.97 KB

頁數(shù):21頁

時(shí)間:2019-03-24

常用數(shù)學(xué)算法c語言實(shí)現(xiàn)_第1頁
常用數(shù)學(xué)算法c語言實(shí)現(xiàn)_第2頁
常用數(shù)學(xué)算法c語言實(shí)現(xiàn)_第3頁
常用數(shù)學(xué)算法c語言實(shí)現(xiàn)_第4頁
常用數(shù)學(xué)算法c語言實(shí)現(xiàn)_第5頁
資源描述:

《常用數(shù)學(xué)算法c語言實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、一、基木算法1.交換(兩量交換借助第三者)例1、任意讀入兩個(gè)整數(shù),將二者的值交換后輸出。main(){inta,b,t;scanf("%d%d",&a,&b);printf("%d,%d",a,b);t=a;a=b;b=t;printf("%d,%d",a,b);}【解析】程序中加粗部分為算法的核心,如同交換兩個(gè)杯子里的飲料,必須借助第三個(gè)空杯子。假設(shè)輸入的值分別為3、7,則第一行輸出為3,7;第二行輸出為7,30其中t為屮間變量,起到“空杯了”的作用。注意:三句賦值語句賦值號(hào)左右的各量之間的關(guān)系!【應(yīng)用】例2、任意讀入三個(gè)整數(shù),然后按從小到人的順序輸

2、出。main(){inta,b,c,t;scanf("%d%d%d",&a,&b,&c);/*以下兩個(gè)訐語句使得a中存放的數(shù)最小*/if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}嚴(yán)以下訐語句使得b中存放的數(shù)次小*/訐(b>c){t=b;b=c;c=t;}printf("%d,%d,%d",a,b,c);}2.累加累加算法的要領(lǐng)是形如“S=S+A”的累加式,此式必須出現(xiàn)在循環(huán)中才能被反復(fù)執(zhí)行,從而實(shí)現(xiàn)累加功能?!癆”通常是有規(guī)律變化的表達(dá)式,s在進(jìn)入循環(huán)前必須獲得合適的初值,通常為0。例1、求1+2+3++100的和。m

3、ain(){intizs;s=0;i=l;while(i<=100){s=s+i;/*累加式*/i=i+l;/*特殊的累加式*/}printf("l+2+3+...+100=%d"/s);}【解析】程序中加粗部分為累加式的典型形式,賦值號(hào)左右都出現(xiàn)的變量稱為累加器,其小“2i+1”為特殊的累加式,每次累加的值為1,這樣的累加器又稱為計(jì)數(shù)器。3.累乘累乘算法的要領(lǐng)是形如“s二s*A”的累乘式,此式必須出現(xiàn)在循環(huán)屮才能被反復(fù)執(zhí)行,從而實(shí)現(xiàn)累乘功能。“A”通常是有規(guī)律變化的表達(dá)式,s在進(jìn)入循環(huán)前必須獲得合適的初值,通常為1。例1、求10![分析]10!=1X2X

4、3XX10main(){inti;Iongc;c=l;i=l;while(i<=10){c=c*i;廠累乘式*/i=i+l;}printf("l*2*3*...*10=%ld,,,c);}二、非數(shù)值計(jì)算常用經(jīng)典算法1.窮舉也稱為“枚舉法”,即將可能出現(xiàn)的每一種情況一一測試,判斷是否滿足條件,一般采用循環(huán)來實(shí)現(xiàn)。例1、用窮舉法輸岀所有的水仙花數(shù)(即這樣的三位正整數(shù):其每位數(shù)位上的數(shù)字的立方和與該數(shù)相等,比如:13+53+33=153)o[法一]main(){intx,g,s,b;for(x=100;x<=999;x++){g=x%10;s=x/10%10;b

5、=x/100;if(b*b*b+s*s*s+g*g*g==x)printf("%d"/x);}}【解析】此方法是將100到999所有的三位正整數(shù)一一考察,即將每一個(gè)三位正整數(shù)的個(gè)位數(shù)、十位數(shù)、百位數(shù)一一求出(各數(shù)位上的數(shù)字的提取算法見下面的“數(shù)字處理”),算出三者的立方和,一旦與原數(shù)相等就輸出。共考慮了900個(gè)三位正整數(shù)。[法二]main(){intg,s,b;for(b=l;b<=9;b++)for(s=0;s<=9;s++)for(g=0;g<=9;g++)if(b*b*b+s*s*s+g*g*g==b*100+s*10+g)printf("%d"

6、zb*100+s*10+g);}【解析】此方法是用1到9做百位數(shù)字、0到9做I?位和個(gè)位數(shù)字,將組成的三位正整數(shù)與每一組的三個(gè)數(shù)的立方和進(jìn)行比較,一旦相等就輸出。共考慮了900個(gè)組合(外循環(huán)單獨(dú)執(zhí)行的次數(shù)為9,兩個(gè)內(nèi)循環(huán)單獨(dú)執(zhí)行的次數(shù)分別為10次,故if語句被執(zhí)行的次數(shù)為9X10X10=900),即900個(gè)三位正整數(shù)。與法一判斷的次數(shù)一樣。2.排序(1)冒泡排序(起泡排序)假設(shè)要對(duì)含有n個(gè)數(shù)的序列進(jìn)行升序排列,冒泡排序算法步驟是:①從存放序列的數(shù)組屮的第一個(gè)元素開始到最麻一個(gè)元素,依次對(duì)相鄰兩數(shù)進(jìn)行比較,若前者大后者小,則交換兩數(shù)的位置;②第①趟結(jié)束后,最大數(shù)

7、就存放到數(shù)組的最后一個(gè)元素里了,然后從第一個(gè)元素開始到倒數(shù)笫二個(gè)元素,依次對(duì)相鄰兩數(shù)進(jìn)行比較,若両者大后者小,則交換兩數(shù)的位置;③重復(fù)步驟①n-1趟,每趟比前一趟少比較一次,即可完成所求。例1、任意讀入10個(gè)整數(shù),將其用冒泡法按升序排列后輸出。#definen10main(){inta[n],i,j,t;for(i=0;ia[i+l]){t=a[i];a[i]=

8、a[i+l];a[i+l]=t;}fo

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。