C常用算法總結(jié)_第1頁
C常用算法總結(jié)_第2頁
C常用算法總結(jié)_第3頁
C常用算法總結(jié)_第4頁
C常用算法總結(jié)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、常用算法總結(jié)1分段函數(shù)的計算(如數(shù)學(xué)分段函數(shù)、一元二次方程求解, if-else)x<11x<10x10例1:有一函數(shù):寫程序分別求當(dāng)x=0.5, x=5.975, x=101.25, x=356.75時,y的值。#include <iostream.h>void main( )float x,y;cin>>x;if (x<1) y=x*x;else if(x<10)y=3*x-2;else y=x*x*x-10*x*x+28;cout<<"x="<<x<<",y="&l

2、t;<y<<endl;例2:輸入系數(shù)a、b和c,求ax2+bx+c=0 的解。#include <iostream.h>#include <math.h>void main( ) float a, b, c, disc, x1, x2, realpart, imagpart; cin>>a>>b>>c; cout<<"The equation" if (fabs(a)<=1e-6) / a=0 注意寫法 cout<<" is not quadraticn&q

3、uot;else / 處理后三種情況 disc=b*b-4*a*c;if (fabs(disc)<=1e-6) / disc=0 cout<<" has two equal roots:"<<(-b/(2*a)<<endl;else if (disc>1e-6) / disc > 0 x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);cout<<" has distinct real roots:"<<x1<<"

4、; and "<<x2<<endl;else / disc < 0 realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);cout<<" has complex roots:n"cout<<realpart<<"+"<<imagpart<<"in"cout<<realpart<<"-"<<imagpart<<"in"

5、; 例1#include <math.h>main() float a, b, c, disc, x1, x2, realpart, imagpart; scanf("%f,%f,%f", &a, &b, &c); printf("The equation"); if (fabs(a)<=1e-6) /* a=0 注意寫法 */printf(" is not quadraticn");else /* 處理后三種情況 */ disc=b*b-4*a*c;if (fabs(disc)<=1e

6、-6) /* disc=0 */ printf(" has two equal roots:%8.4fn,",-b/(2*a);else if (disc>1e-6)x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);printf(" has distinct real roots:%8.4f and %8.4fn" ,x1,x2);elserealpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf(" has complex roots:n"

7、;);printf("%8.4f+%8.4f in",realpart,imagpart); printf("%8.4f-%8.4f in",realpart,imagpart); 2多項式累加和、累乘積(1)根據(jù)通項大小結(jié)束(2)規(guī)定循環(huán)次數(shù)例1: 求:#include <iostream.h>#include <math.h>void main( )float x, t, sum; int n; cin>>x; n=1; t=1; sum=0; while( fabs(t)>1e-6 )sum += t;n=

8、n+1;t=t*(-1)*x*x/(2*n-3)/(2*n-2); cout<<"cos("<<x<<")="<<sum<<endl;例2:有一分?jǐn)?shù)序列, 求出這個序列的前20項之和#include <iostream.h>void main( ) float a=2,b=1,sum=0,t; int i;for(i=1; i<=20;i+)sum+=a/b;t=a; a+=b; b=t;cout<<"sum="<<sum<&l

9、t;endl;3求素數(shù)例1:將96到100之間的全部偶數(shù)分解成兩個素數(shù)之和#include <iostream.h>#include <math.h>void main( ) int i,j,m,k,n;for ( i=96;i<=100;i+=2 )for (m=3;m<i/2;m+=2) k=sqrt(m);for (j=2;j<=k;j+)if (m%j=0) break;if (j>=k+1) / m是素數(shù) n=i-m;k=sqrt(n);for(j=2;j<=k;j+)if (n%j=0) break;if (j>=k+1)

10、 / n是素數(shù) cout<<i<<'='<<m<<'+'<<n<<endl;例2:以下函數(shù):判斷 x 是否是素數(shù),若是素數(shù),返回1;若不是素數(shù),返回0。int isprime1(int x) /* 解1 */ int k, i; k=sqrt(x); for(i=2; i<=k; i+) if(x%i=0) break; if(i=k+1) return(1); else return(0); int isprime2(int x) /* 解2 */ int k, i; k=sqrt(

11、x); for(i=2; i<=k; i+) if(x%i=0) return(0); return(1);4牛頓迭代求a的平方根迭代公式為,要求前后兩次求出的x 的差的絕對值小于10-5。#include <iostream.h>#include <math.h>void main( )float a,x0,x1;cin>>a;x0=a/2;x1=(x0+a/x0)/2;dox0=x1;x1=(x0+a/x0)/2;while(fabs(x1-x0)>=1e-5);cout<<"The square root of &qu

12、ot;<<a<<" is "<<x1<<endl;5求最大公約數(shù)、最小公倍數(shù)#include <iostream.h>int gys(int m, int n) / 用輾轉(zhuǎn)相除法求最大公約數(shù)int d, x ,u ;d=m>n?m:n;x=m<n?m:n;u=d%x;while(u!=0) d=x; x=u; u=d%x; return(x);int gys(int m, int n) / 用輾轉(zhuǎn)相除法求最大公約數(shù)的優(yōu)化算法int r;while(r=m%n)!=0) m=n; n=r; return(

13、n);int gbs(int m, int n) / 求最小公倍數(shù)int maxy; maxy=gys(m,n);return(m*n/maxy);int gys(int m, int n) / 根據(jù)定義求最大公約數(shù)int i,x;x=m<n?m:n;for(i=x; i>=1; i-)if(m%i=0 && n%i=0) break;return(i);int gbs(int m, int n) / 根據(jù)定義求最小公倍數(shù)int i,d;d=m>n?m:n;for(i=d; i<=m*n; i+)if(i%m=0 && i%n=0) br

14、eak;return(i);int gys(int m, int n) / 求最大公約數(shù):大數(shù)減小數(shù)直至兩數(shù)相等 while(m!=n)if(m>n)m=m-n;else n=n-m;return(m);void main( )int m,n;cin>>m>>n;cout<<"gong yue shu:"<<gys(m,n)<<endl;cout<<"gong bei shu:"<<gbs(m,n)<<endl;6數(shù)的分解(硬性分解、循環(huán)分解,如求解水仙

15、花數(shù))例1:任意輸入一個不多于五位整數(shù),分別將該數(shù)各位數(shù)字正向、逆向輸出。如輸入7632,則輸出:ws=47,6,3,22,3,6,7(1)用選擇結(jié)構(gòu)實現(xiàn)/* n=k5 k4 k3 k2 k1 ,其中k1表示個位,k2表示十位,其余依此類推 */#include <iostream.h>void main( ) long n; int ws, k5, k4, k3, k2, k1;cin>>n;if(n<10) ws=1;else if(n<100) ws=2;else if(n<1000) ws=3;else if(n<10000) ws=4;

16、else ws=5;cout<<"ws="<<ws<<endl;switch(ws) case 5: k5=n/10000; n=n%10000; cout<<k5<<','case 4: k4=n/1000; n=n%1000; cout<<k4<<','case 3: k3=n/100; n=n%100; cout<<k3<<','case 2: k2=n/10; n=n%10; cout<<k2<

17、<','case 1: k1=n; cout<<k1<<'n' switch(ws) case 1: cout<<k1<<endl; break;case 2: cout<<k1<<','<<k2<<endl; break;case 3: cout<<k1<<','<<k2<<','<<k3<<endl; break;case 4: cout&

18、lt;<k1<<','<<k2<<','<<k3<<','<<k4<<endl; break;case 5: cout<<k1<<','<<k2<<','<<k3<<','<<k4<<','<<k5<<endl; break;(2)使用數(shù)組和循環(huán)實現(xiàn)(循環(huán)分解到數(shù)組元素中,優(yōu)點

19、:n的位數(shù)不限)#include <iostream.h>void main( ) long n; int a5, i=0, k;cin>>n;while(n>0) ai=n%10;n=n/10;i+; cout<<"ws="<<i<<endl;for(k=i-1; k>=0; k-) cout<<ak;cout<<'n'for(k=0; k<i; k+) cout<<ak;cout<<'n'(3)用遞歸實現(xiàn)(優(yōu)點:n

20、的位數(shù)不限)#include <iostream.h>void printz(long); /函數(shù)原型說明void printd (long); /函數(shù)原型說明void main( ) long num;cin>>num;printz(num);cout<<"n"printd(num);cout<<"n"void printz(long n) / 正向輸出 if(n>0)printz(n/10);cout<<n%10;void printd (long n) / 逆向輸出if(n>0

21、)cout<<n%10;printd(n/10); 例2:打印出所有的“水仙花數(shù)”。(1)分解數(shù)字#include <iostream.h>#include <iomanip.h>void main( )int i,a,b,c; /* a百位,b十位,c個位 */for(i=100; i<1000; i+)a=i/100; b=i/10%10; c=i%10;if(a*a*a+b*b*b+c*c*c=i)cout<<setw(10)<<i;cout<<endl;(2)窮舉法,三重循環(huán)#include <iost

22、ream.h>void main( ) int i,j,k; /* i百位,j十位,k個位 */for(i=1; i<10; i+) for(j=0; j<10; j+)for(k=0; k<10; k+)if( i*i*i+j*j*j+k*k*k = i*100+j*10+k )cout<<i<<j<<k<<endl;7數(shù)的合并(類似于乘權(quán)求和)例1: 已知 int a10, k i, n; 數(shù)組a中有k個值,分別是一個十進(jìn)制整數(shù)的各位數(shù)字,將其合并成一個整數(shù)n,算法如下:n=0;for(i=0; i<k; i+)

23、 n = n*10 + ai;例2: 將一個八進(jìn)制正整數(shù)作為字符串輸入,如輸入字符串“342”,輸出其等值的十進(jìn)制數(shù)。#include <iostream.h>void main( )char *p,s6; int n=0;cin>>s;for(p=s; *p!='0' p+) n=n*8+*p-'0'cout<<n<<endl; 例3:寫一程序,將一個十六數(shù)字符串轉(zhuǎn)換成相應(yīng)的十進(jìn)制數(shù)。#include <iostream.h>int htod(char *); /函數(shù)原型說明void main( )c

24、har s80;cin>>s;cout<<htod(s)<<endl;int htod(char s80)int i,n,num=0;for(i=0; si!='0' i+) if( si>='0' && si<='9') n = si-'0'else if( si>='a' && si<='f') n = si-'a'+10;else n = si-'A'+10;num =

25、num*16+n;return(num);8一維數(shù)組排序(選擇法、冒泡法、*插入法(*前插、*后插)例1:將n個整數(shù)按由小到大排列#include <iostream.h>#include <iomanip.h>void sort(int a ,int n) / 選擇法排序 int i,j,p,t;for(i=0; i<n-1; i+) p=i;for(j=i+1; j<n; j+)if(aj<ap) p=j;if(p!=i) t=ai; ai=ap; ap=t;void sort(int a ,int n) / 冒泡法排序 int i,j,t;for

26、(i=0; i<n-1; i+)for(j=0;j<n-1-i;j+)if(aj>aj+1) t=aj; aj=aj+1; aj+1=t;void main( )int i,n,a100;cin>>n;for(i=0;i<n;i+)cin>>ai;sort(a,n);for(i=0;i<n;i+)if(i%10=0)cout<<"n"cout<<setw(5)<<ai;cout<<endl;*例2: 插入排序法(主函數(shù)與例1一樣)(1)前插算法void insertsort

27、(int *a, int n) /* 數(shù)組a有n個元素 */int i,j,k,t;for(i=1; i<n; i+)t=ai;for(j=0; j<i; j+) /* 找到待插位置 */if( t<aj ) break;for(k=i; k>j; k-) /* 將比t大的元素依次全部右移一個位置 */ak=ak-1;aj=t;(2)后插算法void insertsort2(int a, int n) /* 數(shù)組a有n個元素 */int i,j,t;for(i=1; i<n; i+) t=ai;j=i-1; while(j>=0 && t&l

28、t;aj) /* 將比t大的元素依次右移一個位置 */aj+1=aj;j-;aj+1=t;9一維數(shù)組逆置(含整型數(shù)組逆置和字符數(shù)組逆置等,變形:會判回文等)例1: 編一函數(shù),將整型數(shù)組d中n個元素的次序倒置 #include <iostream.h>void reverse(int d , int n) / 解1 int i, j, t; i=0; j=n-1; while(i<j) t=di; di=dj; dj=t;i+; j-; void reverse( int *d, int n) / 解2,指針方式 int *p1, *p2, t; p1=d; p2=d+n-1;

29、 / p1、p2 是指針 while( p1<p2 ) t=*p1; *p1=*p2; *p2=t; p1+; p2-; void reverse(int d ,int n) / 解3 int k,t,i ;k=n/2 ;for(i=0 ;i<k ;i+) t=dn-1-i; dn-1-i=di; di=t; void main( )int a10=1,2,3,4,5,6,7,8,9,10, i;reverse(a, 10); for(i=0; i<9; i+)cout<<ai<<','cout<<a9<<end

30、l;例2:編一函數(shù),判斷輸入的字符串是否為正向拼寫與反向拼寫都一樣的"回文",判斷回文時,忽略大小寫字母的區(qū)別、忽略空格及標(biāo)點符號等。注意:isalpha(c)用于判斷c是否是字母,如果是字母返回真,否則返回假。toupper(ch) 將ch字符轉(zhuǎn)換成大寫字母#include <iostream.h>#include <string.h>#include <ctype.h>palin(char s )char *head,*tail;head=s; tail=s+strlen(s)-1;while(head<tail) while(

31、!isalpha(*head) head+; /*去掉非字母字符*/ while(!isalpha(*tail) tail-; if(toupper(*head)=toupper(*tail) head+;tail-; else return(0);return(1);void main( )char s80;cin.getline(s, 80);cout<<s<<endl;if(palin(s) cout<<"Yes.n"else cout<<"No.n"10數(shù)組歸并(或合并),指兩個有序數(shù)組合并成一個有

32、序數(shù)組。例1:編寫一程序,將已按升序排好序的兩個字符串str1和str2中的字符,按升序合并到字符串str3中,如str1為"abd",str2為"bc",則將str1和str2合并后得"abbcd"。#include <iostream.h>void main( )char str1 ="bdfhjlnpq"char str2 ="acegikm"char str380;int i=0, j=0, k=0;while(str1i!='0' && st

33、r2j!='0') if(str1i<str2j) str3k=str1i;i+; else str3k=str2j;j+; k+; while(str1i!='0') str3k=str1i; k+; i+; ; while(str2j!='0') str3k=str2j; k+; j+; ; str3k='0'cout<<str3<<endl;此程序運行結(jié)果為:abcdefghijklmnpq11一維數(shù)組查找(順序、折半)例1:編一函數(shù),利用順序查找法從數(shù)組a的10個元素中對關(guān)鍵字m進(jìn)行查找。順序

34、查找法的思路是:從第一個元素開始,從前向后依次與關(guān)鍵字比較,直到找到此元素或查找到數(shù)組尾部時結(jié)束。若找到,返回此元素的下標(biāo);若仍未找到,則返回1。#include <iostream.h>int search(int a , int n, int m) / a數(shù)組中有n個元素,查找值為m的元素下標(biāo)int i;for(i=0; i<n; i+) if (ai=m) return(i); return(-1);void main( )int a10=2,14,6,12,8,17,9,15,-10,-20, m, no;cin>>m;no=search(a, 10, m

35、);if(no>=0) cout<<"OK Found! position:"<<no<<endl;else cout<<"Sorry Not Found!n"例2:編一函數(shù),利用折半查找法從數(shù)組a的10個元素中對關(guān)鍵字m進(jìn)行查找。折半查找法的前提是:數(shù)組元素值必須已排序。折半查找法的思路是:先確定待查元素的范圍,將排好序的元素分成兩半,然后測試位于中間點元素的值。如果該待查元素的值大于中間點元素,就縮小待查范圍,只測試中間點之后的元素;反之,測試中間點之前的元素。若找到,返回其下標(biāo)值;反之,返回1。

36、#include <iostream.h>int binary(int a , int n, int m) / a數(shù)組中有n個元素,查找值為m的元素下標(biāo)int low=0,high=n-1,mid;while (low<=high)mid=(low+high)/2;if(m<amid) high=mid-1;else if(m>amid)low=mid+1;else return(mid);return(-1);void main( )int a10=2,4,6 ,8,10,12,14, 16,18,20, m, no;cin>>m;no=binary

37、(a, 10, m);if(no>=0) cout<<"OK Found! position:"<<no<<endl;else cout<<"Sorry Not Found!n"12一維數(shù)組:插入元素、刪除元素例1:給定一維升序整型數(shù)組a10,其前7個值為0、2、4、6、8、10,12,編一程序,要求做3次循環(huán)分別將 -1、8、13插入到數(shù)組,使新數(shù)組仍為升序#include <iostream.h>void insert(int a , int n, int x) /解1:從后向前找插入

38、位置int i;if(n=0) a0=x;elsefor(i=n-1; i>=0; i-) / 找到應(yīng)插入的位置if(x<ai) ai+1=ai; / 后挪一個元素else break;ai+1=x;void insert(int a , int n, int x) / 解2:用指針,從后向前處理int t,*p=a+n-1;if(n=0) *a=x;else*(a+n)=x;while(p>=a)if(*p>*(p+1)t=*p; *p=*(p+1); *(p+1)=t; p-; else break;void main( ) int a10=0,2,4,6,8,10

39、,12 ;int i,n=7,x;cout<<"origin array: "for(i=0;i<n;i+) cout<<ai<<" "cout<<"n"for(i=0;i<3;i+) / 控制插入次數(shù) cout<<"Please input a value:"cin>>x;insert(a,n,x);n+; cout<<"result array: "for(i=0;i<10;i+) cout

40、<<ai<<" "cout<<"n"例2:刪除一維數(shù)組中值為c的元素。例:輸入一個字符串s,輸入一個字符c,刪除字符串中出現(xiàn)的字符c后,輸出余下的字符。例如輸入字符串“warrior”及字符r,則結(jié)果字符串為“waio”#include <iostream.h>void main( )char s80,c,*p, *pt; cin.getline(s, 80);cin.get(c);for(p=s; *p!='0' ) if(*p=c)for(pt=p; *pt!='0' p

41、t+)*pt=*(pt+1);elsep+;cout<<s<<endl;13求一維數(shù)組最大、最小、平均值解1:通過全局變量返回數(shù)組的最大值和最小值,通過函數(shù)的返回值返回數(shù)組的平均值。#include <iostream.h>float max, min;float average(float array , int n) int i; float aver, sum;max=min=sum=array0;for (i=1; i<n; i+) if (arrayi>max)max=arrayi;else if (arrayi<min) min

42、=arrayi;sum=sum+arrayi;aver=sum/n;return(aver);void main( ) float ave, score10;int i;for (i=0; i<10; i+) cin>>scorei;ave=average(score, 10);cout<<"max="<<max<<endl;cout<<"min="<<min<<endl;cout<<"average="<<ave<

43、<endl;解2:通過指針做函數(shù)參數(shù),返回數(shù)組的最大值、最小值和平均值。#include <iostream.h> / 推薦使用此方法void average(float array , int n, float *maxp, float *minp, float *averp) int i; float sum;sum=array0;*maxp=*minp=array0;for (i=1; i<n; i+) if (arrayi>*maxp)*maxp=arrayi;else if (arrayi<*minp) *minp=arrayi;sum=sum+a

44、rrayi;*averp=sum/n;void main( ) float score10, max, min, aver ;int i; for (i=0; i<10; i+) cin>>scorei;average(score, 10, &max, &min, &aver);cout<<"max="<<max<<endl;cout<<"min="<<min<<endl;cout<<"average="<

45、;<aver<<endl;解3:通過引用做函數(shù)參數(shù),返回數(shù)組的最大值、最小值和平均值。#include <iostream.h> / 推薦使用此方法void average(float array , int n, float &maxv, float &minv, float &averv) int i; float sum;sum=array0;maxv=minv=array0;for (i=1; i<n; i+) if (arrayi>maxv)maxv=arrayi;else if (arrayi<minv) mi

46、nv=arrayi;sum=sum+arrayi;averv=sum/n;void main( ) float score10, max, min, aver ;int i; for (i=0; i<10; i+) cin>>scorei;average(score, 10, max, min, aver);cout<<"max="<<max<<endl;cout<<"min="<<min<<endl;cout<<"average="

47、<<aver<<endl;14掃描一維數(shù)組求滿足條件的元素個數(shù),如素數(shù)個數(shù)、偶數(shù)個數(shù)、正數(shù)個數(shù)等例1:統(tǒng)計一維數(shù)組中元素值為素數(shù)的元素個數(shù),數(shù)組元素為大于1的自然數(shù)。素數(shù)的定義為:如果一個數(shù)的正因子只有和這個數(shù)本身,那么這個數(shù)就是素數(shù)。#include <iostream.h>int isprime( int x ) int i; for( i=2; i<=x/2; i+)if( x%i=0) return(0); return(1);void main( ) int array20=2,3,27,7,97,96,102,137;int i,n=0;f

48、or (i=0;i<20;i+)if( arrayi!=0 && isprime(arrayi) ) n+;cout<<arrayi<<endl;cout<<"total="<<n<<"n"15字符串操作(不用系統(tǒng)函數(shù),完成strlen, strcpy, strcat, strcmp 功能)#include <iostream.h>int mystrlen(char *str) /* strlen函數(shù)功能 */char *p1=str, *p2=p1;while

49、(*p2) p2+;return(p2-p1);char* mystrcpy(char *to,char *from) /* strcpy函數(shù)功能 */int i;for(i=0;fromi!='0'i+)toi=fromi;toi='0'return(to);char* mystrcat(char *s1,char *s2) /* strcat函數(shù)功能 */int i=0,j=0;while (s1i+!='0') ; i= i-1 ; while (s2j!='0') s1i+=s2j+ ; s1i='0' ;

50、 return(s1);int mystrcmp(char *s,char *t) /* strcmp函數(shù)功能 */ for( ; *s=*t; s+,t+)if(*s='0') return(0);return(*s-*t);void main( )char s180,s280;int r;cout<<"input sting1:" cin.getline(s1, 80);cout<<"input sting2:" cin.getline(s2, 80);cout<<"s1 length=&

51、quot;<<mystrlen(s1)<<"n"cout<<"s1 compare with s2: "r=mystrcmp(s1,s2);if(r>0) cout<<"s1>s2n"else if(r<0) cout<<"s1<s2n"else cout<<"s1=s2n"mystrcat(s1,s2);cout<<"s1 catenate with s2 is: "

52、<<s1<<endl;cout<<"copy s2 to s1: "<<mystrcpy(s1,s2)<<endl;16求二維數(shù)組最大、最小、平均值注意:(1)通過參數(shù)返回最大值、最小值和平均值。(2)二維數(shù)組做參數(shù)時,形式參數(shù)的三種寫法。#include <iostream.h>#define N 4void average(int (*p)N,int *maxp,int *minp, double *averp)/ 或:void average(int pNN, int *maxp, int *mi

53、np, double *averp)/ 或:void average(int p N, int *maxp, int *minp, double *averp) int i,j;double sum=0;*maxp=*minp=*(*(p);for (i=0; i<N; i+)for (j=0;j<N; j+ ) if (*(*(p+i)+j)>*maxp) *maxp=*(*(p+i)+j);else if (*(*(p+i)+j)<*minp) *minp=*(*(p+i)+j);sum+=*(*(p+i)+j);*averp=sum/(N*N);void main

54、( ) int aNN=3,6,4,6,8,3,1,3,4,7,1,2,2,9,5,3; int max,min,*maxp=&max, *minp=&min; double aver,*averp=&aver; average(a,maxp, minp, averp); cout<<"max="<<max<<", min="<<min<<",average="<<aver<<endl;17二維數(shù)組轉(zhuǎn)置(變種:判是否主對角線對稱

55、、求左下右上三角形元素之和)以下為在數(shù)組自身上轉(zhuǎn)置的算法:void turn(int a44) /* 注意:左下(右上)三角形元素下標(biāo)滿足什么條件 */ int i, j, t;for(i=0; i<4; i+)for(j=0; j<4; j+)if(i<j) /* 注意:此行可改為 i>j */t=aij;aij=aji; aji=t;void turn(int a44) /* 對左下(右上)三角形元素循環(huán),對稱元素交換位置 */int i, j, t;for(i=0; i<4; i+)for(j=0; j<i; j+) /* 注意:此行可改為for(j=

56、i+1; j<4; j+) */t=aij;aij=aji; aji=t;18二維數(shù)組對角線元素之和。二維數(shù)組若為奇數(shù)階,本例累加中心點元素。#include <iostream.h>#define N 4int fsum(int (*)N,int); / 函數(shù)原型說明 void main( ) int i,j,aNN=3,6,4,6,8,3,1,3,4,7,1,2,2,9,5,3;for(i=0;i<N;i+) for (j=0;j<N;j+) cout<<aij<<" " cout<<"n&qu

57、ot;cout<<"sum="<<fsum(a,N)<<endl;int fsum(int aNN,int n) / 子函數(shù)解法1 int i,j,sum=0;for (i=0;i<n;i+)for (j=0;j<n;j+)if (i=j|i+j=n-1)sum+=aij;if (N%2=1) sum+=aN/2N/2; return sum;int fsum(int aNN,int n) / 子函數(shù)解法2 int i,sum=0;for (i=0;i<n;i+)sum += aii+aiN-i-1;return sum;19二維數(shù)組周邊元素之和#include &

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論