c語言常見基本算法程序段_第1頁
c語言常見基本算法程序段_第2頁
c語言常見基本算法程序段_第3頁
c語言常見基本算法程序段_第4頁
c語言常見基本算法程序段_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

cc語言常見基本算法程序段1、互換x,y的值利用中間變量tt二x;x=y;y=t;自身相加減x=x+y;y=x-y;x=x-y;2、 求m,n的最大公約數(shù)gys和最小、公倍數(shù)gbs相除求余法:余數(shù)用r表示if(m<n){互換m,n的值、}亠gbs=m*n;/*為求最小公倍數(shù)*/r=m%n;while(r!=0){m=n;n=r;r=m%n;}gys=n;gbs二gbs/gys; 一相減求差法:差數(shù)用c表示if(m<n){互換m,n的值}gbs=m*n;c=m-n;while(c!=0){m=n;n=c;if(m<n){互換m,n的值}c=m-n;}gys=m;/*或gys=n*/gbs=gbs/gys;窮舉法gbs=m*n;for(i=1;i<=n;i++)if(m%i==0&&n%i==0)gys=i;gbs=gbs/gys;求多個整數(shù)的最大公約數(shù)和最小公倍數(shù)方法一:窮舉法方法二:利用求余或相減法,先求其中前兩個數(shù)的最大公約數(shù),再用前兩個數(shù)的最大公數(shù)與第三個數(shù)求最大公約數(shù),以此類推,直到與最后一個數(shù)求最大公約數(shù)即可。3、 判斷m是否是素數(shù)、用標志變量flag=1假設m是素數(shù)flag=1; 、for(i=2;i〈m;i++) /*或i<sqrt(m)*/if(m%i==0){flag=0;break;}if(flag==1)m是素數(shù)elsem不是素數(shù)用循環(huán)控制變量是否等于mfor(i=2;i〈m;i++) /*或i〈sqrt(m)*/if(m%i二=0)break;if(i==m)m是素數(shù)elsem不是素數(shù)4、 累加累乘注重發(fā)現(xiàn)累加項、累乘項的變化規(guī)律。(1)、累加(或計數(shù)):累加器初始化為0如求:1+2+3+ + 100s=0;for(i=1;i〈=100;i++)s=s+i;或:s=0;i=1;while(i〈=100){s=s+i;i++;}累乘:累乘器初始化為1如求n!p=1;for(i=1;i<=n;i++)、p=p*i或:p=1;i=1;while(i<=n){p=p*i;i++;}累加累乘同時進行如求:1!+2!+3!+ +n!s=0;p=1;for(i=1;i<=n;i++){p=p*i;s=s+p;或:s=0;p=1;i=1;while(i<=n){p=p*i;s=s+p;

5、5、a、b、c、d、文本作圖外循環(huán)控制行,內循環(huán)控制列。每次輸出一個或一組文本。注意文本前或文本與文本之間的空格個數(shù)。 定義行號,并找出行號與該行文本個數(shù)之間的關系。(1)中心對稱圖形(行號:-n~n)*****!>**!>**X<*****for(i二-n;i〈二n;i++){for(j=l;j〈二abs(i)+m;j++)printf(“ “);for(j=l;j〈=2*n+i-2*abs(i);j++)printf(“*”);printf(“\n”);TOC\o"1-5"\h\z或: 11 2 11 2 3 2 11 2 11for(i=_2;i<=2;i++){for(j=1;j〈=3*abs(i);j++)printf(“ “);for(k二abs(i)-2;k〈=2-abs(i);k++)printf(“%3d”,3-abs(i)-abs(k));printf(“\n”)(2)三角形如:**********for(i=1;i〈=4;i++){for(j=1;j〈二i;j++)printf(“%c”,'*');printf(“\n”);}6、窮舉與遞推窮舉:如果解決的問題可列出不定方程式或不定方程組,定方程中的未知數(shù)的作為循環(huán)控制變量,一個未知數(shù)一層循環(huán),控制變量的初值、終值為未知數(shù)的取值范圍。如:百錢買百雞。方程組如下:x+y+z=100

5*x+3*y+z/3.0=100、遞推:根據(jù)前一項推出后一項或根據(jù)后一項推出前一項。遞推時注意發(fā)現(xiàn)變化規(guī)律。7、排序:(對數(shù)組a中的n個元素按升序排序)從左向右排:(1)順序比較從左向右排:a[i]=a[j];

a[j]=x;}

從右向左排:

for(i二nT;i〉0;i--)

for(j=i-1;j>=0;j--)

if(a[i]〉a[j]){x=a[i];

a[i]=a[j];

a[j]=x;}a[i]=a[j];

a[j]=x;}

從右向左排:

for(i二nT;i〉0;i--)

for(j=i-1;j>=0;j--)

if(a[i]〉a[j]){x=a[i];

a[i]=a[j];

a[j]=x;}(2)選樣排序從左向右排:for(i=0;i〈nT;i++){p=i;for(j=i+1;j<n;j++)if(a[p]〉a[j])zP二j;if(p!=i){x=a[p];a[p]=a[i];a[i]=x;}}{p=i;for(j=i—1;j>=0;j--)if(a[p]{p=i;for(j=i—1;j>=0;j--)if(a[p]〉a[j])p=j;if(p!=i){x=a[p];a[p]=a[i];a[i]=x;}) 冒泡排序從左向右排:for(i=l;i〈n;i++)for(j=0;j<=n—1—i;j++)if(a[j]〉a[j+l]){x=a[j];a[j]=a[j+1];

a[j+l]=x;從右向左排:for(i二nT;i〉0;i--){for(j二n-l;j〉二n-i;j—)if(a[j]〈a[j-l]){x=a[j];a[j]=a[j-1];a[j-1]=x;}插入排序從左向右排:for(i=l;i〈二nT;i++){x=a[i];x〈a[j])x〈a[j])x〉a[j])while(j>=0&&{a[j+l]=a[j];j二}T;a[j+1]=x;從右向左排:for(i=n-2;i>=0;i--){x=a[i];j=i+1;while(j〈二nT&&{a[j-1]=a[j];j=j+1;a[j-1]=x;8、數(shù)組在統(tǒng)計中的應用、統(tǒng)計數(shù)組中符合要求的如:輸出數(shù)組a中大于平均值的元素,并統(tǒng)計個數(shù)。#include〈stdio.h〉Viodmain(){inti,n=0,a[10]={34,56,76,23,12,87,32,45,38,41};floataver,s=0;for(i=0;i〈10;i++)s=s+a[i];aver二s/10;for(i=0;i〈10;i++)if(a[i]〉aver){n++;printf(“%d\t”,a[i]);}Printf(“\n%d”,n);((2)、將統(tǒng)計的結果保存到數(shù)組中如:統(tǒng)計全校1000名學生體重分別為48~52、53~57、58~62、63~67、68~72、73~77的人數(shù)。

#include〈#include〈stdio.h〉{intx,a[6]={0},i;for(i=l;i〈=1000;i++){scanf(“%d”,&x);a[(x-48)/5]++;}for(i=0;i<6;i++)中求最大值或最小值)9、極值(在給定的數(shù)組 在數(shù)組中求極值時,可求極值,也可求極值的位置。假設數(shù)組中的首兀素為最大值或最小值。、一維數(shù)組中求最大值或最小值)9、極值(在給定的數(shù)組 在數(shù)組中求極值時,可求極值,也可求極值的位置。假設數(shù)組中的首兀素為最大值或最小值。、一維數(shù)組a[10]a[0];il=0;min=a[0];i2=0;for(i=1;i<1{if(max<aif(min>a}printf(“max=%di1=%d\n”,max,i1);printf(“min=%di2=%d\n”,min,i2);、二維數(shù)組a[4][5]max=a[0][0];i1=0;j1=0;min=a[0][0];i2=0;j2=0;for(i=0;i<4;i++)for(j=0;j<5;{if(max<a=if(min>a[i}printf(“max=%d \ti1二%d\tj1=%d\n” ,max,i1,j1);printf(“min二%d\ti2二%d\tj2=%d\n”,min,i2,j2);max=);」L++)丄) {max二a=i=_i_) {min二a_i_;i2=i;}j++)){max=a[i][j];il二i;jl=j;}[j]){min=a[i][j];i2=i;j2=j;}10、查找順序查找直接對數(shù)組掃描并比較是否相等即可。二分法查找要求數(shù)組a[10]已排好序。方法一、在升序數(shù)組中查找#include〈stdio.h>voidmain(){intx,low,hig,mid,a[10]={1,2,3,4,5,6,7,8,9,10};scanf(“%d”,&x);n=10;low=0;hig=n-1;mid=(low+hig)/2;while(a[mid]〈〉x&&low〈二hig){if(x〉a[mid])low二mid+1;elsehig二midT;

mid=(low+hig)/s;}if(x==a[mid])printf(“%d:\t%d”,x,mid)elseprintf(“nofound”)方法二、在降序數(shù)組中查找#include〈stdio.h>voidmain(){intx,low,hig,mid,a[10]={10,9,8,7,6,5,4,3,2,1};scanf(“%d”,&x);n=10;low=0;hig=n-1;mid=(low+hig)/2;while(a[mid]〈〉x&&low〈二hig){if(x〉a[mid])hig二midT;elselow二mid+1;mid=(low+hig)/s;}if(x==a[mid])printf(“%d:\t%d”,x,mid)elseprintf(“nofound”)11、移動要求移動前后相鄰兩數(shù)的位置關系不變。如:a[10]={1,2,3,4,5,6,7,8,9,10}一維數(shù)組左移左移3位如下:4,5,6,7,8,9,10,1,2,3for(i=1;i<=3;i++){x=a[0];for(j=0;j<9;j++)a[j]=a[j+1];a[j]=x;}一維數(shù)組右移右移3位如下:&9,10,1,2,3,4,5,6,7for(i=1;i<=3;i++){x=a[9];for(j=9;j>0;j--)a[j]=a[j-1];a[j]=x;

二維數(shù)組按行向左移1列#definem4#definen5inta[m][n],i,j,x;for(i=0;i〈m;i++){x=a[i][0];for(j=0;j〈n-1;j++)[j]=a[i][j+1];a[i][j]=x;}一#definem4(4)二維數(shù)組按列向上移1#definem4#definen5inta[m][n],i,j,x;for(j=0;j〈n;j++){x=a[0][j];for(i=0;i〈mT;i++)a[i][j]=a[i+1][j];a[i][j]=x;}(5)移到指定位置將NXN階矩陣a的每列最大值移到主對角線上。for(j=0;j〈N;i++){max二a[0][j]; /*找最大值*/for(i=1;i〈N;i++)if(a[i][j]〉max)max二a、[i][j];while(max〈〉a[j][j])/*按列向上平移*/{x=a[0][j];for(i=0;i〈NT;i++)a[i][j]=a[i+1][j];a[N-1][j]=x;}12、插入、刪除、復制(1)插入xinta[11]={147,143,140,135,130,125,118,106,101,98}scanf(“%d”,&x);j=9;while(j>=0&& x〈a[j]){a[j+1]=a[j];j=j-1;a[j+1]=x;(2)刪除xinta[10]={147,143,140,135,130,125,118,106,101,98}k=0;for(i=0;i〈10;i++)if(a[i]!=x)a[k++]=a[i];復制 、、,①、一維數(shù)組復制到一維數(shù)組inta[9]={ },b[3][3],n=0;for(i=0;i〈3;i++)for(j=0;j〈3;j++){b[i][j]=a[n];n++;}②、二維數(shù)組復制到一維數(shù)組inta[9],b[3][3]={ },n=0;for(i=0;i〈9;i++)a[i]=b[i/3][i%3];13、矩陣(二維數(shù)組)處理(1)、相加#definem3#definen4inta[m][n],b[m][n],c[m][n];for(i=0;i〈m;i++)for(j=0;j〈n;j++)c[m][n]=a[m][n]+、相乘#definem3#definen4#definel5inta[m][n],b[n][l],c[m][l];for(i=0;i〈m;i++){for(j=0;j〈l;j++)c[i][j]=0;for(k=0;k〈n;k++)c[i][j]=c[i][j]+a[i][k]*b[k][j];、轉置(行列互換)#definem3#definen4inta[m][n],b[n][m];for(i=0;i〈m;i++)for(j=0;j〈n;j++)b[j][i]二a[i][j];、逆時針旋轉90度#definem3#definen4inta[m][n],b[n][m];for(i=0;i<m;i++)for(j=0;j<n;j++)b[j][i]=a[i][n-1-j];、順時針旋轉90度#definem3#definen4inta[m][n],b[n][m];for(i=0;i<m;i++)for(j=0;j<n;j++)b[j][i]=a[m-l-i][j];、逆時針或順時針旋轉180度#include〈stdio.h〉voidmain(){inti,j,m,n;inta[3][4]={l,2,3,4,5,6,7,8,9,10,ll,12},b[3][4];m=3;n=4;clrscr();for(i=0;i<m;i++){for(j=0;j<n;j++)printf("%d\t",a[i][j]);printf(〃\n〃);for(i=0;i<m;i++)for(j=0;j<n;j++)b[i][j]=a[m-1-i][n-1-j];for(i=0;i<m;i++){for(j=0;j<n;j++)printf("%d\t〃,b[i][j]);printf(〃\n〃);}}14、數(shù)制轉換(整數(shù))系統(tǒng)默認數(shù)值型數(shù)據(jù)以十進制形式輸出,非十進制數(shù)的輸出可作字符輸出,也可將二進制以十進制形式輸出。如:(loioooii)10100011B 2(1)、十進制x轉二進制yintx,r,n=0;longy=0;while(x!=0)

{r=x%2;y二pow(10,n)*r+y;x=x/2;n++}或:intx,r,n=0,I;chary[]={“ “};while(x=0){r=x%2;y[n++]=r+48;x=x/2;}for(i二nT;i〉=0;i--)putchar(y[i]);、二進制y轉十進制xintx=0,r,n=0,i;chary[]={“10111001“};n=strlen(y);for(i=0;i<n;i++){r=y[i]-48;x二x+r*pow(2,n_i_1);、二進制y轉八進制x#include〈stdio.h〉#include〈math.h〉voidmain(){charx[]={" "};intr,n=0,m=0,t=0,i;chary[]二{"10111001"};clrscr();n=strlen(y);for(i=n-1;i>=0;i--){r=y[i]-'0';t二t+r*pow(2,m);m++;if(m==3||i==0){m=0;r=0;x[((i+1)/3)]=t+'0';t=0;}}puts(x);、八進制x轉二進制y#include〈stdio.h〉#include〈math.h〉voidmain()"},t[3];{"},t

溫馨提示

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

評論

0/150

提交評論