大學(xué)c語言程序設(shè)計第五版課件 第六章 函數(shù)_第1頁
大學(xué)c語言程序設(shè)計第五版課件 第六章 函數(shù)_第2頁
大學(xué)c語言程序設(shè)計第五版課件 第六章 函數(shù)_第3頁
大學(xué)c語言程序設(shè)計第五版課件 第六章 函數(shù)_第4頁
大學(xué)c語言程序設(shè)計第五版課件 第六章 函數(shù)_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六章函數(shù)本章教學(xué)目標(biāo)(1)掌握函數(shù)的結(jié)構(gòu),函數(shù)的類型和返回值;(2)掌握函數(shù)的調(diào)用方法;(3)掌握函數(shù)參數(shù)傳遞的類型;(4)掌握函數(shù)的嵌套機制和遞歸機制。16.1顯示學(xué)生成績管理系統(tǒng)功能菜單

6.1.1問題描述************StudentsScoreManageSystem****************************************************************MenuItems*****************************************************1-------InputStudentsInformation**2-------ModifyStudentsInformation**3-------QueryStudentsInformation**4-------StatisticStudentsInformation**5-------DisplayStudentsInformation**6-------ExitSystem*****************************************************PleaseSelectanOption(1-6):

程序運行界面26.1.2問題抽象顯示菜單選項提示用戶進行選擇用戶進行輸入根據(jù)輸入的選項執(zhí)行相應(yīng)的模塊是否在給定范圍中?YN

菜單程序功能思路分析從問題空間對進行分析3

可以自定義一個菜單函數(shù),取名DisplayMenu(),從整體來看,應(yīng)該是一個大循環(huán)結(jié)構(gòu),內(nèi)嵌一個小循環(huán),小循環(huán)的功能是實現(xiàn)用戶的正確輸入,代碼段(P87)。

從平臺空間對上面問題進行解析46.1.3映射編碼#include<stdio.h>#include<stdlib.h>voidDisplayMenu(){charMenuItem;while(1){printf("\n");printf("************StudentsScoreManageSystem*************\n");printf("***************************************************\n");printf("MenuItems\n");printf("****************************************************\n");printf("*1-------InputStudentsInformation*\n");printf("*2-------ModifyStudentsInformation*\n");printf("*3-------QueryStudentsInformation*\n");printf("*4-------StatisticStudentsInformation*\n");printf("*5-------DisplayStudentsInformation*\n");printf("*6-------ExitSystem*\n");printf("****************************************************\n");

5do{printf("PleaseSelectanOption(1-6):\n");

fflush(stdin);/*ClearBuffer*/scanf("%c",&MenuItem);getchar();}while(MenuItem<'1'||MenuItem>'6');switch(MenuItem){case'1':printf("WelcomeInputStudentsInformationInterface\n");

/*Addfunction*/printf("PressAnyKeyContinue……….\n");getchar();break;case'2':printf("WelcomeModifyStudentsInformationInterface\n");

/*Addfunction*/printf("PressAnyKeyContinue……….\n");getchar();break;

6case'3':printf("WelcomeQueryStudentsInformationInterface\n");

/*Addfunction*/printf("PressAnyKeyContinue……….\n");getchar();break;case'4':printf("WelcomeStatisticStudentsInformationInterface\n");

/*Addfunction*/printf("PressAnyKeyContinue……….\n");getchar();break;case'5':printf("WelcomeDisplayStudentsInformationInterface\n");

/*Addfunction*/printf("PressAnyKeyContinue……….\n");getchar();break;case'6':printf("ThanksyouUsethisSystem\n");printf("PressAnyKeyExitSystem\n");getchar();exit(0);}}}7voidmain(){DisplayMenu();}運行結(jié)果:************StudentsScoreManageSystem****************************************************************MenuItems*****************************************************1-------InputStudentsInformation**2-------ModifyStudentsInformation**3-------QueryStudentsInformation**4-------StatisticStudentsInformation**5-------DisplayStudentsInformation**6-------ExitSystem*****************************************************PleaseSelectanOption(1-6):1WelcomeInputStudentsInformationInterfacePressAnyKeyContinue……….86.1.4編碼分析通過上面實例,要熟練掌握函數(shù)的定義形式。理解函數(shù)調(diào)用的過程。(3)#include<stdlib.h>標(biāo)準(zhǔn)庫函數(shù)頭文件,程序中退出程序的exit(0)函數(shù)需要它。(4)stdin是系統(tǒng)變量,表示標(biāo)準(zhǔn)輸入設(shè)備變量。96.2函數(shù)

6.2.1函數(shù)的定義函數(shù)的分類從函數(shù)定義的角度看,函數(shù)可分為庫函數(shù)和用戶定義函數(shù)兩種;從函數(shù)有無返回值的角度看,可以分“無返回值函數(shù)”和“有返回值函數(shù)”兩種;從主調(diào)函數(shù)和被調(diào)函數(shù)之間數(shù)據(jù)傳送的角度看又可分為無參函數(shù)和有參函數(shù)兩種。

10①無參函數(shù)的定義形式 類型標(biāo)識符函數(shù)名() {

局部變量聲明部分 語句組

[return表達(dá)式;] }

11②有參函數(shù)的定義形式第一種形式是:函數(shù)返回值類型函數(shù)名(類型參數(shù)1,類型參數(shù)2,……) {

局部變量聲明部分 語句組

[return表達(dá)式;] }

第二種形式是:

函數(shù)返回值類型函數(shù)名(參數(shù)1,參數(shù)2,……)類型參數(shù)1,類型參數(shù)2,……/*形參定義*/ {

局部變量聲明部分 語句組

[return表達(dá)式;] }

12注意:(1)在一個函數(shù)的函數(shù)體內(nèi),不能再定義另一個函數(shù),即不能嵌套定義。但是在一個的體內(nèi)可以調(diào)用另一個函數(shù),即函數(shù)可以相互調(diào)用。(2)如果函數(shù)自己調(diào)用自己,這種函數(shù)調(diào)用稱為函數(shù)的遞歸調(diào)用。(3)main函數(shù)是主函數(shù),它可以調(diào)用其他函數(shù),而不允許被其他函數(shù)調(diào)用。(4)一個C源程序必須有、也只能有一個主函數(shù)main。136.2.2函數(shù)的調(diào)用(1)函數(shù)的調(diào)用形式

函數(shù)名([參數(shù)列表])

函數(shù)的調(diào)用主要是指出函數(shù)名,有參數(shù)的時候必須指出參數(shù)。這里的參數(shù)稱為實在參數(shù),簡稱實參。定義函數(shù)時括弧()中的參數(shù)稱為形式參數(shù),簡稱形參。在C語言中,函數(shù)的參數(shù)分為形參和實參兩種。形參出現(xiàn)在函數(shù)定義中,實參出現(xiàn)在主調(diào)函數(shù)中,形參和實參的功能是作數(shù)據(jù)傳送。14

函數(shù)的形參和實參具有以下特點:(1)形參變量只有在被調(diào)用時才分配內(nèi)存單元,在調(diào)用結(jié)束時,即刻釋放所分配的內(nèi)存單元。(2)在進行函數(shù)調(diào)用時,應(yīng)預(yù)先用賦值、輸入等辦法使實參獲得確定值。(3)實參和形參在數(shù)量上、類型上、順序上應(yīng)嚴(yán)格一致,否則會發(fā)生類型不匹配的錯誤。

15有以下三種情況,使用函數(shù)的調(diào)用格式:第一種:以語句的形式調(diào)用函數(shù)。這種情況一般用于調(diào)用無返回值的函數(shù)。形式為:

函數(shù)名(參數(shù)列表);

16第二種情況:以表達(dá)式的形式調(diào)用函數(shù)。這種情況一般用于調(diào)用有返回值的函數(shù)。通過調(diào)用函數(shù)的表達(dá)式,接收被調(diào)用函數(shù)的返回值。形式為:

變量名=函數(shù)名([實參列表]);17例如:輸入兩個整數(shù),輸出其中的最大值。#include<stdio.h>intmax(intx,inty){intz;if(x>y)z=x;elsez=y;returnz;}運行結(jié)果為:8878Max=88voidmain(){inta,b,Max;scanf("%d%d",&a,&b);

Max=max(a,b);

/*使用表達(dá)式方式調(diào)用函數(shù)*/printf("Max=%d\n",Max);}18第三種情況:調(diào)用函數(shù)值為函數(shù)的參數(shù)。這種形也一般情況使用在有返回值的函數(shù)調(diào)用中。例如:輸入三個整型數(shù)據(jù),輸出其中的最大數(shù)。#include<stdio.h>intmax(intx,inty){intz;if(x>y)z=x;elsez=y;returnz;}voidmain(){inta,b,c,Max;scanf("%d%d%d",&a,&b,&c);Max=max(max(a,b),c);/*把函數(shù)作為函數(shù)的參數(shù)形式調(diào)用函數(shù)*/printf("Max=%d\n",Max);}運行結(jié)果為:687875Max=7819(2)函數(shù)的聲明

一般情況下,如果被調(diào)用函數(shù)的定義出現(xiàn)在主調(diào)函數(shù)之后,應(yīng)該在主調(diào)函數(shù)中添加對被調(diào)函數(shù)的聲明。函數(shù)聲明的作用是告訴編譯程序,被調(diào)用的函數(shù)函數(shù)的返回值類型是什么,函數(shù)名是什么,函數(shù)帶了幾個什么類型的參數(shù),至于形式參數(shù)的名字是什么,編譯系統(tǒng)并不關(guān)心。20C語言又規(guī)定在以下幾種情況時可以省去主調(diào)函數(shù)中對被調(diào)函數(shù)的函數(shù)聲明,直接調(diào)用。(1)如果被調(diào)函數(shù)的返回值是整型或字符型時。這時系統(tǒng)將自動對被調(diào)函數(shù)返回值按整型處理。(2)當(dāng)被調(diào)函數(shù)的函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前時。(3)如在所有函數(shù)定義之前,在函數(shù)外預(yù)先說明了各個函數(shù)的類型。(4)對庫函數(shù)的調(diào)用不需要再作聲明,但必須把該函數(shù)的頭文件用include命令包含在源文件前部。216.2.3函數(shù)參數(shù)的傳遞

參數(shù)傳遞稱為“實形結(jié)合”,即實參向形參傳遞信息,使形參具有確切的含義(即具有對應(yīng)的存儲空間和初值)。這種參數(shù)傳遞又分為兩種不同的方式,一種是按值傳遞,另一種是地址傳遞。22(1)按值傳遞

以按值傳遞方式進行參數(shù)傳遞的過程為:首先計算出實參表達(dá)式的值,接著給對應(yīng)的形參變量分配一個存儲空間,該空間的大小等于該形參類型的長度,然后把已求出的實參表達(dá)式的值復(fù)制到為形參變量分配的存儲空間中,成為形參變量的初值,供被調(diào)用函數(shù)執(zhí)行時使用。這種傳遞是把實參表達(dá)式的值傳送給對應(yīng)的形參變量,故稱這種傳遞方式為“按值傳遞”。這種方式被調(diào)用函數(shù)本身不對實參進行操作,也就是說,即使形參的值在函數(shù)中發(fā)生了變化,實參的值也完全不會受到影響,仍為調(diào)用前的值。23例如:有人為了實現(xiàn)兩個數(shù)據(jù)的交換,編寫了下面的程序,分析程序的結(jié)果:#include<stdio.h>voidmain(){voidswap(int,int);inta=3,b=4;printf("a=%d,b=%d\n",a,b);swap(a,b);printf("a=%d,b=%d\n",a,b);}voidswap(intx,inty){intt;t=x;x=y;y=t;}

注意:在C語言中,當(dāng)實參是常量或者普通變量時,參數(shù)傳遞的形式都是按值傳遞。24(2)地址傳遞

如果在函數(shù)定義時將形參的類型說明成數(shù)組名或者指針變量,對這樣的函數(shù)進行調(diào)用時就需要指定地址值形式的實參。這時的參數(shù)傳遞方式即為地址傳遞方式。這種地址傳遞與上述的按值傳遞不同,它把實參的存儲地址傳送給對應(yīng)的形參,從而使得形參指針和實參指針指向同一個地址。因此,被調(diào)用函數(shù)中對形參指針?biāo)赶虻牡刂分袃?nèi)容的任何改變都會影響到實參。25實例:編寫一個程序,要求定義一個一維數(shù)組score,存放10個學(xué)生的成績,首先通過鍵盤輸入學(xué)生成績,再將存放在數(shù)組中的學(xué)生成績輸出,接著對存放在數(shù)組中的學(xué)生成績從低分到高分排序,最后把排序后的學(xué)生成績輸出。每個過程都編寫一個函數(shù)完成,在main函數(shù)中調(diào)用。26

問題分析:依據(jù)題意,我們可以建立如下的一個main函數(shù),其中包括:首先定義score數(shù)組,再給score數(shù)組中輸入成績數(shù)據(jù),調(diào)用input函數(shù),接著將排序前的數(shù)據(jù)輸出,調(diào)用output函數(shù);再對score中的數(shù)據(jù)進行排序,調(diào)用sort函數(shù),最后把排序后score數(shù)組中的數(shù)據(jù)輸出,調(diào)用output函數(shù)。27從問題空間的角度來處理:主函數(shù)main可以這樣編寫:voidmain(){

定義一個存放10個學(xué)生的一維數(shù)組;輸入10個成績數(shù)據(jù),并存放在一維數(shù)組中;輸出排序前的10個成績數(shù)據(jù);對10個成績數(shù)據(jù)進行排序;輸出排序后的10個成績數(shù)據(jù);}28從平臺空間角度來看:可以轉(zhuǎn)化為下面的C語言程序:voidmain(){intscore[10];

input(score,10);/*輸入10個成績數(shù)據(jù)*/printf("BeforeSortData:\n");

output(score,10);/*輸出10個成績數(shù)據(jù)*/

sort(score,10);/*對10個成績數(shù)據(jù)進行排序*/printf("\nAfterSortData:\n");

output(score,10);/*輸出10個成績數(shù)據(jù)*/}29(1)編寫input(score,10)函數(shù)注意到主函數(shù)中調(diào)用的input(score,10)函數(shù)沒有返回值,有兩個實參,第一個是一個數(shù)組名,即就是數(shù)組中第一個元素的地址,第二個是一個普通變量,那么在定義該函數(shù)時,形參的形式應(yīng)該與其相同,因此input函數(shù)應(yīng)該這樣編寫:voidinput(inta[],intn){inti;for(i=0;i<n;i++)/*從鍵盤輸入數(shù)據(jù)給數(shù)組賦值*/scanf("%d",&a[i]);}30(2)編寫output(score,10)函數(shù)分析與輸入類似,output函數(shù)應(yīng)該這樣編寫:voidoutput(inta[],intn){inti;for(i=0;i<n;i++)/*score中數(shù)據(jù)輸出*/printf("%d",a[i]);}313)編寫sort(score,10)函數(shù)該函數(shù)的功能就是把實參中傳遞過來的數(shù)組按升序進行排序,排序算法我們在一維數(shù)組中已經(jīng)講解,現(xiàn)在直接可以使用。因此sort函數(shù)應(yīng)該這樣編寫:voidsort(inta[],intn){inti,j,temp;for(i=0;i<n-1;i++)/*冒泡排序*/for(j=0;j<n-1-i;j++)if(a[j]>a[j+1]){temp=a[j];/*交換a[j]與a[j+1]*/a[j]=a[j+1];a[j+1]=temp;}}32完整程序如下:#include<stdio.h>voidmain(){voidinput(inta[],intn);/*被調(diào)函數(shù)的聲明*/voidoutput(inta[],intn);voidsort(inta[],intn);intscore[10];input(score,10);/*輸入10個成績數(shù)據(jù)*/printf("BeforeSortData:\n");output(score,10);/*輸出10個成績數(shù)據(jù)*/sort(score,10);/*對10個成績數(shù)據(jù)進行排序*/printf("\nAfterSortData:\n");output(score,10);/*輸出10個成績數(shù)據(jù)*/}33voidinput(inta[],intn){inti;for(i=0;i<n;i++)/*從鍵盤輸入數(shù)據(jù)給數(shù)組賦值*/scanf("%d",&a[i]);}voidoutput(inta[],intn){inti;for(i=0;i<n;i++)/*score中數(shù)據(jù)輸出*/printf("%d",a[i]);}voidsort(inta[],intn){inti,j,temp;for(i=0;i<n-1;i++)/*冒泡排序*/for(j=0;j<n-1-i;j++)if(a[j]>a[j+1]){temp=a[j];/*交換a[j]與a[j+1]*/a[j]=a[j+1];a[j+1]=temp;}}346.2.4函數(shù)的返回值

在C語言中,return語句用于返回調(diào)用它的函數(shù),同時向被調(diào)者返回函數(shù)的結(jié)果,即函數(shù)返回值。return語句的使用形式:

return(表達(dá)式);

說明:(1)當(dāng)函數(shù)的返回值類型為void時,小括弧連同其內(nèi)的內(nèi)容都可以省略。這時return語句只起返回到主調(diào)函數(shù)中的作用,不返回任何值。(2)當(dāng)函數(shù)有返回值時,return語句除了返回主調(diào)函數(shù)外,將表達(dá)式的值送回給主調(diào)它的函數(shù),小括弧可以省略。356.2.5函數(shù)的嵌套調(diào)用

函數(shù)的嵌套調(diào)用是指在調(diào)用一個函數(shù)的過程中,被調(diào)函數(shù)可以調(diào)用另一個函數(shù)。

main(){…………f1();…………}f1(){…………f2();…………}f2(){…………………………}①執(zhí)行②調(diào)用③執(zhí)行④調(diào)用⑤執(zhí)行⑥返回⑦執(zhí)行⑧返回⑨執(zhí)行函數(shù)嵌套調(diào)用與返回過程36實例:下面我們把6.1節(jié)中的程序修改為使用函數(shù)嵌套調(diào)用的結(jié)構(gòu)。

376.2.6函數(shù)的遞歸調(diào)用

實例:鍵盤輸入一個正整數(shù)N,計算N!。問題分析:對于計算N階乘的問題,對于不同的解決思路就會有不同的解決問題的方法,因此對于這個問題,可以建立下面兩個的數(shù)學(xué)模型:數(shù)學(xué)模型一:數(shù)學(xué)模型二:38

針對模型一,我們發(fā)現(xiàn)是一個累計求乘積的問題,那么就可以編寫這樣一個函數(shù):

longfact(intn){longp=1;inti;for(i=1;i<=n;i++)p=p*i;returnp;}39

針對模型二,我們發(fā)現(xiàn)是一個遞歸調(diào)用的問題,因為,想要求N!,先計算出(N-1)!后與N相乘,依次類推,最后1!=1,再回推,可以算出2!=1!*2,依次回推計算出N!,那么我們可以編寫這樣一個函數(shù):

longfact(intn){longp=1;if(n==0||==1)p=1;elsep=n*fact(n-1);returnp;}一個函數(shù)直接或間接地調(diào)用自身,稱為函數(shù)的遞歸調(diào)用。40fac(5)5*fac(4)4*fac(3)3*fac(2)2*fac(1)12*13*2*14*3*2*15*4*3*2*1120遞歸41下面給出完成程序:#include<stdio.h>longfact(intn){longp=1;if(n==0||n==1)/*遞歸結(jié)束條件*/ p=1;elsep=n*fact(n-1);returnp;}voidmain(){longx;/*定義變量*/intn;scanf("%d",&n);/*輸入變量*/

x=fact(n);/*使用自定義函數(shù)計算*/printf("%d!=%ld",n,x);/*輸出結(jié)果*/}42小結(jié):使用函數(shù)的優(yōu)點:(1)可讀性好;(2)易于查錯和修改;(3)便于分工編寫,分階段調(diào)試;(4)各個函數(shù)之間接口清晰,便于相互間交換信息和使用;(5)節(jié)省程序代碼和存儲空間;(6)減少用戶總的工作量;(7)成為實現(xiàn)結(jié)構(gòu)程序設(shè)計思想的重要工具;(8)擴充語言和計算機的原設(shè)計能力;(9)便于驗證程序正確性。436.3變量的作用域6.3.1變量的存儲類型變量的存儲類型存儲類型標(biāo)識符含義auto自動變量static靜態(tài)變量extern外部變量register寄存器變量存儲類型標(biāo)識符

數(shù)據(jù)類型變量名;44一、auto實例:鍵盤輸入兩個整數(shù),輸出最大數(shù)和最小數(shù)#include<stdio.h>voidmain(){autointmin,max;/*定義自動變量,等價intmin,max;*/scanf(“%d%d”,&min,&max);if(min>max){autointtemp;/*定義自動變量,等價inttemp;*/temp=min;min=max;max=temp;}printf(“max=%d,min=%d”,max,min);}

45程序分析:(1)上面程序定義變量時,有兩個位置,第一個位置是在函數(shù)內(nèi)定義的變量,第二個位置是在if語句的組合語句塊內(nèi)定義。這樣定義變量的存儲類型都是自動類型。當(dāng)把變量定義為自動類型時,關(guān)鍵詞auto可以省略。(2)自動變量語句動態(tài)存儲類,系統(tǒng)在函數(shù)運行時,自動為其動態(tài)分配內(nèi)存空間,離開它的作用范圍時,系統(tǒng)回收它的存儲空間,變量的值也就不存在了。因此自動變量的生存期就是程序進入其作用域期間。(3)自動變量在初始化之前,或者沒有賦初始值之前,其值是不確定的。46例如:

#include<stdio.h>voidmain(){inti,sum;/*定義自動變量*/for(i=1;i<=100;i++)/*累計求和*/sum+=i;printf(“sum=%d”,sum);/*輸出結(jié)果*/}運行結(jié)果:sum=-85898841047程序分析:上面程序是求自然數(shù)1+2+3+……+100的和,大家都知道結(jié)果應(yīng)該是5050,可是程序的運行結(jié)果并非如此,分析原因就是,累計和的自動變量sum沒有賦初值。只要在定義sum并初始化為0,即可。(4)變量出現(xiàn)的有效區(qū)域稱為變量的作用域。在函數(shù)體內(nèi)或者復(fù)合語句塊內(nèi)定義的變量稱為局部變量。在函數(shù)體內(nèi)定義的變量,從定義位置開始起,到本函數(shù)結(jié)束有效,在復(fù)合語句塊內(nèi)定義的局部變量,從定義位置起,到復(fù)合語句結(jié)束有效,例如48#include<stdio.h>voidmain(){autointmin,max;/*定義自動變量,等價intmin,max;*/scanf(“%d%d”,&min,&max);if(min>max){

autointtemp;/*定義自動變量,等價inttemp;*/

temp=min;min=max;max=temp;}printf(“temp=%d”,temp);/*錯誤,不能訪問temp變量*/printf(“max=%d,min=%d”,max,min);}

49二、static

實例:分析下面程序的運行結(jié)果

#include<stdio.h>voidfun(){intx=0;x=x+1;printf(“%d”,x);}voidmain(){inti;for(i=1;i<=3;i++)fun();}

50如果把上面程序改變?yōu)椋?/p>

#include<stdio.h>voidfun(){

staticintx=0;x=x+1;printf(“%d”,x);}voidmain(){inti;for(i=1;i<=3;i++)fun();}51程序分析:兩個程序僅僅一個關(guān)鍵詞之差,結(jié)果完全不同,是因為fun函數(shù)中的變量被定義為靜態(tài)局部變量,第一次調(diào)用時,輸出其值為1,當(dāng)出了x變量的作用域后,系統(tǒng)沒有回收它的存儲空間,因此空間的值也存在,當(dāng)?shù)诙握{(diào)用是,系統(tǒng)沒有重新分配空間,因此在原來基礎(chǔ)上做x=x+1,因此x值變?yōu)?,被輸出,第三次,同樣,在原來基礎(chǔ)上加1,x值變?yōu)?,被輸出。

52

使用靜態(tài)變量時應(yīng)該注意以下幾點:(1)動態(tài)的局部變量的值在其作用域范圍內(nèi)有效,出了作用域,系統(tǒng)將回收給其分配的內(nèi)存空間。如果希望一個局部變量的值,當(dāng)它離開其作用域范圍后不消失,并保持原來的值,它占用的存儲空間也不釋放,因此空間在,變量的值也就在。這種變量在C語言中,用關(guān)鍵詞static來定義,稱為靜態(tài)變量。(2)定義的一般形式:

static數(shù)據(jù)類型變量名;(3)整型靜態(tài)變量在初始化之前,或者沒有賦初始值之前,其值是0。

53上面程序?qū)懗桑?include<stdio.h>voidfun(){staticintx;/*定義靜態(tài)變量*/x=0;x=x+1;printf(“%d”,x);}voidmain(){inti;/*定義變量*/for(i=1;i<=3;i++)/*循環(huán)調(diào)用fun()函數(shù)*/fun();}

54三、register寄存器變量在程序運行中,存取變量要消耗一定的時間開銷,如果一個變量使用非常頻繁,為了節(jié)省時間開銷,可以使用寄存器變量速度快的特點,將變量存放在CPU的寄存器中,可以提高程序的運行效率。使用寄存器變量時應(yīng)該注意以下幾點:(1)只有函數(shù)的形參或者局部變量才可以定義為寄存器變量,不能用于全局變量,局部靜態(tài)變量不能定義為寄存器變量。(2)寄存器變量占有的是CPU的高速寄存器單元,不占用內(nèi)存存儲空間,因此不宜定義的寄存器變量過多。

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論