資源描述:
《常用數(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