C語言的三部分之一_第1頁
C語言的三部分之一_第2頁
C語言的三部分之一_第3頁
C語言的三部分之一_第4頁
C語言的三部分之一_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Chapter5函式(Function)函式(Function)C語言的三局部之一宣告與流程控制,函式,指標(biāo)何謂函式?小的模組單元為何需要函式?由繁化簡(jiǎn)已用過或?qū)W過的函式main(),printf(),scanf(),…2常用的內(nèi)建函式(1/2)數(shù)學(xué)運(yùn)算pow(),sqrt(),log(),…字元處理isascii(),isdigit(),isspace(),…字串處理strcpy(),strcmp(),strcat(),…輸入/輸出fopen(),fclose(),fgets(),…記憶體管理malloc(),calloc(),realloc(),…3常用的內(nèi)建函式(2/2)資料轉(zhuǎn)換atoi(),atof(),strtol(),…時(shí)間time(),clock(),stime(),…其他sleep(),system(),…4內(nèi)建函式的用法標(biāo)頭檔#include<xxx.h>額外的編譯指令數(shù)學(xué)函式(libm.a):gcc-Wall-lmxxx.c-oxxx函式的用法〔用man觀察〕doublepow(doublex,doubley)輸入doubletype的x跟y,會(huì)傳回一個(gè)double的xy5內(nèi)建函式應(yīng)用範(fàn)例#include<math.h>#include<stdio.h>intmain(void){intx,y;printf("inputtwonum:");scanf("%d%d",&x,&y);printf("%d**%d=%f\n",x,y,pow((double)x,(double)y));return0;}$>gcc-Wallpow-opow/var/tmp/cckEsKQW.o:Infunction`main':/var/tmp/cckEsKQW.o(.text+0x4c):undefinedreferenceto`pow'collect2:ldreturned1exitstatus$>gcc-Wall-lmpow-opow$>./powInputtwonum:232**3=8.0000006寫自己的函式#include<stdio.h>longpow(inta,intb){ longp=1; inti; for(i=0;i<b;i++) p*=a; returnp;}intmain(void){intx,y;printf("inputtwonum:");scanf("%d%d",&x,&y);printf("%d**%d=%ld\n",x,y,pow(x,y));return0;}$>gcc-Wallpow2.c-opow2$>./pow2Inputtwonum:232**3=8//自己寫的函式不用用math.h//也不用-lm7#defineMax3intmain(void){ printf(“%d\n”,Max); return0;}intmain(void){ printf(“%d\n”,3); return0;}前置處理器(Pre-compiler)處理’#’開頭的資訊將程式內(nèi)容置換成定義值範(fàn)例:程式碼前置處理器編譯器連結(jié)器目的碼(objectcode)可執(zhí)行檔8函式的格式傳回值型態(tài)函式名稱(傳入值型態(tài)…){ //函式主體內(nèi)容}傳回值與傳入值型態(tài):void,int,int*,char,…傳回值用:return()傳入值的名稱不一定要和呼叫者一致,但型態(tài)一定要一致呼叫者:pow(x,y)自訂函式:longpow(inta,intb)自訂函式中的內(nèi)部宣告的名稱,不得和傳入值一樣9函式的格式傳回值型態(tài)函式名稱(傳入值型態(tài)…){ //函式主體內(nèi)容}Ex.longpow(inta);intcompare(inta,intb);intprinti(void);voidabc(void);10函式宣告(1/3)如函式主體在呼叫者之後,則必須先宣告假設(shè)函式主體在呼叫者之前,則不需要先宣告原因:statementbystatement一行一行的執(zhí)行11函式宣告(2/3)錯(cuò)誤例子#include<stdio.h>intmain(void){ …… a=pow(x,y);}longpow(inta,intb){ ……}12函式宣告(3/3)兩種不同的函示使用方法longpow(inta,intb){ ……}intmain(void){ …… a=pow(x,y);}longpow(int,int);intmain(void){ …… a=pow(x,y);}longpow(inta,intb){ ……}13函式使用注意事項(xiàng)使用函式之前,必須先做過函式的宣告,才可以使用防止使用與語言保存字一樣或類似的函式名稱使用函式不一定要有回傳值或傳入值〔void〕傳入函式與接受自函式的數(shù)值變數(shù),其型態(tài)必須與函式的定義一致。如果不一樣則必須做變數(shù)型態(tài)轉(zhuǎn)換變數(shù)值傳入函式後,即使在函式中該變數(shù)值有所變化,也不會(huì)影響到呼叫者中的該變數(shù)值傳值呼叫〔callbyvalue〕如果要將傳入的變數(shù)值有所變化必須透過傳址呼叫〔callbyreference〕的方式,此時(shí)必須用到指標(biāo)14函式範(fàn)例#include<stdio.h>longpow(inta,intb) //傳入值與傳回值型態(tài){ longp=1; //函式內(nèi)部宣告 inti; //為local的變數(shù),函式結(jié)束就消失 for(i=0;i<b;i++) //函式主體內(nèi)容 p*=a; returnp; //將運(yùn)算值傳回}intmain(void){intx,y;printf("inputtwonum:");scanf("%d%d",&x,&y);printf(“%d**%d=%ld\n”,x,y,pow(x,y)); //函式呼叫return0;}15Example輸入階數(shù)(1-10),列印出一三角形必須判斷輸入是否是在範(fàn)圍內(nèi)對(duì)齊16Examplenums_num****:\n換行:空格************17Example函式版(1/3)

/*把之前的程式拆成幾個(gè)函式來做,這是主程式*/#include<stdio.h>#include<stdlib.h>intmyscanf(void);//myscanf函式原型宣告

voidprinttri(int);//printtri函式原型宣告intmain(void){intinput;

input=myscanf();//呼叫函式檢查使用者輸入

printtri(input);//呼叫函式列印出三角形return0;

}18Example函式版(2/3)

/*這個(gè)函式可以用來檢查使用者輸入的數(shù)值,並回傳合理的輸入值*/intmyscanf(void){intinput,tmp;

printf("請(qǐng)輸入行數(shù):");

if(!scanf("%d",&input)){

printf("您輸入的不是整數(shù)\n");

exit(0);}

tmp=getchar();

if(tmp!=‘\n’){

printf("您輸入不合法的整數(shù)\n");

exit(0);//exit函式定義在stdlib.h

}

if(input>40||input<1){

printf("您輸入的數(shù)值大小有誤\n");

exit(0);

}

returninput;

}為什麼改用exit而不用return19Example函式版(3/3)

/*這個(gè)函式用來列印出三角形*/voidprinttri(int

input){inti,j;

for(i=1;i<=input;i++){

for(j=1;j<=input-i;j++)

printf("");

for(j=1;j<=2*i-1;j++)

printf("*");

p

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論