C語言中常見的功能函數(shù)_第1頁
C語言中常見的功能函數(shù)_第2頁
C語言中常見的功能函數(shù)_第3頁
C語言中常見的功能函數(shù)_第4頁
C語言中常見的功能函數(shù)_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C語言中常見的功能函數(shù)(應(yīng)掌握的編程)1 、兩個變量值的交換voidexchang(float*x,float*y)/*形參為兩個變量的地鐵(指針)*/floatz;z=*x;*x=*y;*y=z;voidmain()floata,b;scanf(“%f%f”,&a,&b);exchang(&a,&b);/*因為形參是指針,所以實參必須給變量的地址,不能給變量名*/printf(“a=%f,b=%f”,a,b);2 、判斷一個整數(shù)的奇偶intjou(intn)/*如果是奇數(shù)返回1,否則返回0*/if(n%2=0)return0;return1;3 、小寫字符轉(zhuǎn)換

2、成大寫字符根據(jù)實參傳給形參的字母,判斷是否是小寫字母,如果是小寫字母,則轉(zhuǎn)換成大寫字母,否則不進行轉(zhuǎn)換,函數(shù)返回轉(zhuǎn)換后或原來的字符。本函數(shù)仿照toupper()庫函數(shù)的功能編寫(toupper(c)是將變量c字母轉(zhuǎn)換成大寫字母,如果不是小寫字母不轉(zhuǎn)換)chartoupper1(charch)if(ch>=a&&ch<=z)ch-=32;/*小寫字母比對應(yīng)的大寫字母ASCII碼值大32*/returnch;4 、判斷一個字符是否是字母(或數(shù)字)根據(jù)實參傳給形參的字符,判斷是否是字母(或數(shù)字),如果是字母(或數(shù)字)返回1,否則返回0。此函數(shù)是根據(jù)庫函數(shù)isalpha()

3、(或isdigit()來編寫的。intisalpha1(charch)/*判斷是否是字母*/if(ch>=A&&ch<=Z|ch>=a&&ch<=z)return1;elsereturn0;intisdigit1(charch)/*判斷是否是數(shù)字字符*/if(ch>=0&&ch<=9)return1;elsereturn0;5 、根據(jù)學生成績,返回其等級charfun(floatcj)charc;switch(int)cj/10)case10:case9:c=A;break;case8:c=B;break;ca

4、se7:c=C;break;case6:c=D;break;default:c=Ereturnc;6、求1+2+.+n(1)用循環(huán)intsum(intn)inti;for(i=1;i<=n;i+)s+=i;(2)使用遞歸longsum(intn)if(n=1)return1;elsereturnsum(n-1)+n;根據(jù)本題擴展:求s=1+(1+2)+(1+2+3)+.+(1+2+n)voidmain()longs=0,s1=0;inti,n;scanf(“%d”,&n);for(i=1;i<=n;i+)s1+=i;/*計算出每一項的值,通過累加得到*/s+=s1;/*將每

5、一項的值累加到結(jié)果中去*/printf(“s=%ld”,s);7 、求n!(1)用循環(huán)longjiec(intn)inti;longs=1;for(i=1;i<=n;i+)s*=i;returns;(2)使用遞歸longjiec(intn)if(n=1)return1;elsereturnjiec(n-1)*n;根據(jù)本題擴展:求s=1!+2!+3!+.+n!n的值最好不要太大voidmain()longs=0,s1=1;inti,n;long 型存不下,輸出時會輸出一個負數(shù)*/scanf(“%d”,&n);/*輸入n的值不要太大,否則結(jié)果for(i=1;i<=n;i+)s1

6、*=i;/*計算出每一項的值,通過累乘得到*/s+=s1;/*將每一項的值累加到結(jié)果中去*/printf(“s=%ld”,s);8 、求某整數(shù)的因子之和intinz(intn)/*計算數(shù)n的因子之和(包括1和n本身),函數(shù)返回因子之和*/ints=0,i;for(i=1;i<=n;i+)/*通過本循環(huán),將1-n的數(shù)一個一個拿來看是否能被n整除,如果是真因子的話,就不包括1和n本身*/if(n%i=0)s+=i;/*一個數(shù)的因子,就是能被其整除的數(shù)*/returns;9 、判斷一個整數(shù)是否是素數(shù)intss(intn)/*如果是素數(shù)返回1,否則返回0*/inti;for(i=2;i<n

7、/2;i+)if(n%i=0)return0;return1;10 、求一個整數(shù)的反序數(shù)longfxs(longn)/*函數(shù)返回反序數(shù),形參需要原來的數(shù)*/longfan=0;while(n!=0)fan=fan*10+n%10;n/=10;returnfan;11 、判斷一個數(shù)是否是回文數(shù)longhw(longn)/*如果是回文數(shù)函數(shù)返回1,否則返回0*/longfan=0,m=n;while(n!=0)fan=fan*10+n%10;n/=10;if(fan=m)return1;elsereturn0;12 、判斷一個數(shù)是否是水仙花數(shù)intsxh(longn)/*判斷任意位數(shù)的整數(shù)是否是水

8、仙花數(shù),是水仙花數(shù)返回1,不是返回0*/longg,i,s=0,m=n;while(n!=0)/*通過本循環(huán)語句,將數(shù)n從個位數(shù)字開始一個個位數(shù)的數(shù)字的立方累加到變量s中*/g=n%10;s=g*g*g;n/=10;if(s=m)return1;elsereturn0;13 、計算x的y次方本函數(shù)用于計算x的y次方(x,y為整型,函數(shù)返回值為long型)。仿照庫函數(shù)pow()(pow(x,y)是用于計算x的y次方的庫函數(shù),不過該函數(shù)的形參x,y和返回值均為double類型)編寫。longpow1(intx,inty)longs=1;inti;for(i=1;i<=y;i+)/*將變量x的

9、值累乘y次*/s*=x;/*每次將上次累乘的結(jié)果再乘以x*/returns;14 、計算n個n(n為一位十進制數(shù))本函數(shù)用于計算n個n的值,比如:333(3個3),4444(4個4)。longmm(intn)/*n為一個十進制數(shù)字*/inti;longs=0;for(i=1;i<=n;i+)s=s*10+n;returns;本函數(shù)可以應(yīng)用于這樣的題目:求s=1-1/22+1/333-1/4444+1/55555-1/666666主函數(shù)可以寫成:voidmain()doubles=0;inti,sign=1;/*sign用來處理每項的符號(正或負)*/for(i=1;i<=6;i+)

10、s+=sign*mm(i);/*因為mm()函數(shù)返回的值是長整型,所以必須用,而不能用1,因為整型除以整型,結(jié)果是整型*/sign=-sign;/*每次變換一下sign的符號(正或負)*/這樣的題目包括:求s=a+aa+aaa+aaaa+aa.aa(n個a),a和n者B在1-9之間。longfun(inta,intn)longs=0,t=0;inti;for(i=1;i<=n;i+)t=t*10+a;s+=t;returns;/*或者return(s);*/15 、求兩個整數(shù)的最大公約數(shù)(1)輾轉(zhuǎn)相除法intfun(intm,intn)intt,r;if(m<n)t=m;m=n;n

11、=t;/*保證m>n,如果m<n,則交換兩個變量的值*/r=m%n;while(r!=0)m=n;n=r;r=m%n;returnn;/*n為最大公約數(shù)*/(2)窮舉法(按數(shù)學定義)intfun(intm,intn)/*此方法可以求多個數(shù)的最大公約數(shù)*/inti,min,gys;if(m<n)min=m;/*找出兩個數(shù)中的最小數(shù)*/elsemin=n;for(i=1;i<min;i+)if(m%i=0&&n%i=0)gys=i;returngys;16 、計算Fibonacci數(shù)列的第n項本函數(shù)完成的功能:計算出該數(shù)列的第n項的值,并返回。遞歸方法lon

12、gfbnc(longn)if(n=1|n=2)return1;elsereturnfbnc(n-1)+fbnc(n-2);/*從第三項開始,后一項是前面兩項之和*/17 、數(shù)組的輸入一維數(shù)值型數(shù)組的輸入:voidintput1(floata,intn)/*n為數(shù)組a中元素的個數(shù),此函數(shù)以float型數(shù)組為例*/inti;for(i=0;i<n;i+)scanf(“%f”,&ai);二維數(shù)值型數(shù)組的輸入:voidintput2(floata3,intn)/*n為數(shù)組a中元素的行數(shù),此函數(shù)以float型數(shù)組為例,形參定義時,如果是二維數(shù)組,則第二維(列)的數(shù)字不能少,比如本例中的3*

13、/inti,j;for(i=0;i<n;i+)/*表示行的外循環(huán)*/for(j=0;j<3;j+)/*表示列的內(nèi)循環(huán)*/scanf(“%f”,&aij);18 、數(shù)組的輸出一維數(shù)值型數(shù)組元素的輸出:voidoutput1(floata,intn)/*n為數(shù)組a中元素的個數(shù),此函數(shù)以float型數(shù)組為例*/inti;for(i=0;i<n;i+)printf(“%”,ai);二維數(shù)值型數(shù)組元素的輸出:voidoutput2(floata3,intn)/*n為數(shù)組a中元素的行數(shù),此函數(shù)以float型數(shù)組為例,形參定義時,如果是二維數(shù)組,則第二維(列)的數(shù)字不能少,比如本例

14、中的3*/inti,j;for(i=0;i<n;i+)/*表示行的外循環(huán)*/for(j=0;j<3;j+)printf(“%”,aij);printf(“n”);/*按行輸出,所以每一行輸出后,輸出一個換行符*/19 、二分查找/*在有序數(shù)組a中查找值為x的,找到返回找到的數(shù)下標,沒找到返回-1*/intfind(floata,floatx,intn)/*有序數(shù)組a中的數(shù)是從小到大,n為數(shù)組中數(shù)的個數(shù)*/intlow,high,mid;low=0;high=n-1;while(high>=low)mid=(low+high)/2;if(amid=x)returnmid;els

15、eif(amid>x)high=mid-1;elselow=mid+1;return-1;20 、冒泡排序/*對存放在數(shù)組a中的n個數(shù)進行排序,(或者對從地址a開始的n個數(shù)進行排序),排序是從小到大)*/voidsort1(inta,intn)inti,j,t;for(i=0;i<n-1;i+)/*排序趟數(shù)*/for(j=0;j<n-1-i;j+)if(aj>aj+1)/*從小到大排序,如果是從大到小排序,則將大于號改成小于號*/t=aj;aj=aj+1;aj+1=t;/*不符合小到大的進行交換*/21 、直接選擇排序voidsort1(inta,intn)/*對以地址

16、(指針)a開始的n個數(shù),按從小到大進行排序*/inti,j,k,t;for(i=0;i<n-1;i+)/*排序趟數(shù)*/k=i;for(j=i+1;j<n-1-i;j+)if(aj<ak)k=j;/*從小到大排序,如果是從大到小排序,則將大于號改成小于號*/if(k!=i)t=ai;ai=ak;ak=t;/*如果找的極值不在下標為i,則進行交換*/22 、求字符串長度本函數(shù)是仿照庫函數(shù)strlen()的功能編寫的。(1)常歸方法intstrlen1(chars)/*字符串第一個0的下標就是字符串的長度*/inti;for(i=0;si!=0;i+);/*循環(huán)體中只有一個空語句,

17、即只有;,沒有表達式,本循環(huán)退出時,si!=0為假,即si=0,則i就是字符0的下標*/returni;(2)使用指針方法intstrlen1(chars)char*p1,*p2;p1=s;for(p2=p1;*p2!=0;p2+);/*循環(huán)體中只有一個空語句,循環(huán)結(jié)束后,指針p2指向0這個字符*/returnp2-p1;/*兩個指針相減即為字符串長度*/23 、字符串拷貝本函數(shù)是仿照庫函數(shù)strcpy()的功能編寫的。voidstrcpy1(chats1,chars2口)/*將字符串s2拷貝到字符串si中*/inti;for(i=0;s2i!=0;i+)s1i=s2i;s1i=0;/*因上述

18、循環(huán)沒有將字符串結(jié)束標志0拷貝到s1中,所以需要加一個字符串結(jié)束標志0*/24 、字符串連接本函數(shù)是仿照庫函數(shù)strcat()的功能編寫的。#include<>voidstrcat1(chars1,chars2)/*將字符串s2連接到字符串s1后面*/inti,len=strlen(s1);for(i=0;s2i!=0;i+)s1i+len=s2i;s1i+len=0;/*因上述循環(huán)沒有將字符串結(jié)束標志0拷貝到s1中,所以需要加一個字符串結(jié)束標志0*/25 、字符串比較比較字符串s1與s2的大小,如果s1大于s2返回1,如果s1小于s2返回-1,否則返回0。intstrcmp1(chars1,chars2)inti;for(i=0;s1i!=0|s2i!=0;i+)/*如果有一個字符串先到0,則用0(ASCII碼為0的字符)與另一個字符串進行比較,0肯定小于任何其他字符*/if(s1i>s2i)return1;elseif(s1i<s2i)return-1;if(s1i=0&&s2i=0)return0;/*說明兩個字符串一樣長,并且前面沒有比較出誰大誰小(即前面的字符都

溫馨提示

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

評論

0/150

提交評論