T7 變量作用域及函數(shù)傳值方式_第1頁(yè)
T7 變量作用域及函數(shù)傳值方式_第2頁(yè)
T7 變量作用域及函數(shù)傳值方式_第3頁(yè)
T7 變量作用域及函數(shù)傳值方式_第4頁(yè)
T7 變量作用域及函數(shù)傳值方式_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1T7變量作用域及有參有返回值的函數(shù)2回顧1、C語(yǔ)言的基本單位是什么?2、使用函數(shù)有哪些好處?3、自定義函數(shù)包含哪幾部分?4、什么是函數(shù)的定義?什么是函數(shù)的調(diào)用?5、函數(shù)的調(diào)用分哪兩種方式?3本章任務(wù)

定義幾個(gè)全局變量,用來(lái)保存一個(gè)客戶的開(kāi)戶信息,包括用戶名、卡號(hào)、密碼和開(kāi)戶金額,然后分別完成開(kāi)戶、存款、取款、余額查詢等業(yè)務(wù)。4本章目標(biāo)理解變量的作用域理解函數(shù)的參數(shù)理解函數(shù)的返回值5變量的作用域

作用域是某些事物起作用或有效的區(qū)域。限于陸地限于海洋限于空中6程序中變量也有不同的使用范圍,稱為變量的作用域。變量的作用域決定變量的可訪問(wèn)性變量的作用域voiddisplayDiscount(){floatdiscount_amt;.........}局部變量:只在某函數(shù)內(nèi)部有效floatdiscount_amt;voidmain(){......}voiddisplayDiscount(){......}全局變量:從定義時(shí)到程序結(jié)束有效7變量的作用域#include<stdio.h>voidaddNumbers(){

intnum1,num2,sum;

printf("\n

請(qǐng)輸入兩個(gè)數(shù):");

scanf("%d%d",&num1,&num2);

sum=num1+num2;

printf("子函數(shù)中sum的值是%d\n",sum);}voidmain(){

intsum=0;//局部變量

addNumbers();

printf("\n

主函數(shù)中sum的值是%d\n",sum);}內(nèi)存sumnum2045num1請(qǐng)輸入兩個(gè)數(shù):5645子函數(shù)中sum的值是101主函數(shù)中sum的值是056sum101示例一8變量的作用域#include<stdio.h>intsum=0;//全局變量voidaddNumbers(){

intnum1,num2;

printf("\n

請(qǐng)輸入兩個(gè)數(shù):");

scanf("%d%d",&num1,&num2); sum=num1+num2;

printf("子函數(shù)中sum的值是%d\n",sum);}voidmain(){

addNumbers();

printf("\n

主函數(shù)中sum的值是%d\n",sum);}內(nèi)存sumnum2045num1請(qǐng)輸入兩個(gè)數(shù):5645子函數(shù)中sum的值是101主函數(shù)中sum的值是10156101示例二9全局變量全局變量:它是在任何函數(shù)外部定義的變量。它的作用域是從定義時(shí)刻開(kāi)始,到程序結(jié)束。全局變量需注意以下幾點(diǎn):1.全局變量定義必須在所有的函數(shù)之外。2.全局變量可加強(qiáng)函數(shù)模塊之間的數(shù)據(jù)聯(lián)系,但是又使函數(shù)要依賴這些變量,因而使得函數(shù)的獨(dú)立性降低。3.在同一源文件中,允許全局變量和局部變量同名。在局部變量的作用域內(nèi),同名的全局變量不起作用。10全局變量int

a,b;/*全局變量*/floatx,y;/*全局變量*/voidf1()/*函數(shù)f1*/

{

……

}

intf2()/*函數(shù)f2*/

{

……

}main()/*主函數(shù)*/

{

……

}此時(shí),全局變量a,b,x,y可以在函數(shù)f1、f2、及主函數(shù)中使用11使用全局變量的例子#include"stdio.h"inta=0;voidout(){

printf("%d\n",a);}voidmain(){ a=1; out();}聲明全局變量a并初始化為0將a的值輸出,輸出為1將a賦值為1 上面的程序聲明了一個(gè)全局的整型用于傳遞數(shù)據(jù),通過(guò)運(yùn)行程序可以看出:在函數(shù)內(nèi)和函數(shù)外都可以修改全局變量的值。12局部變量局部變量:在函數(shù)內(nèi)定義說(shuō)明的,其作用范圍僅限于該函數(shù)內(nèi)。局部變量需注意以下幾點(diǎn):1.主函數(shù)中定義的變量也只能在主函數(shù)中使用,不能在其它函數(shù)中使用。2.允許在不同的函數(shù)中使用相同的變量名,它們代表不同的變量,分配不同的存放單元,互不相干,不會(huì)發(fā)生混淆。3.復(fù)合語(yǔ)句中定義的變量,也是復(fù)合語(yǔ)句的局部變量。所謂復(fù)合語(yǔ)句,就是用{}包含起來(lái)的語(yǔ)句塊.13局部變量#include"stdio.h"voidstup(){inta=3,b=4;

printf("函數(shù)stup()的局部變量a,b\n%d%d\n",a,b);}voidmain(){inta=1,b=2;{inta=7,b=9;

printf("復(fù)合語(yǔ)句中的局部變量a,b\n%d%d\n",a,b);}

printf("函數(shù)main()的局部變量a,b\n%d%d\n",a,b);

stup();}函數(shù)stup()的局部變量函數(shù)

main()的局部變量復(fù)合語(yǔ)句中的局部變量示例三14小結(jié)1、什么是變量的作用域?2、全局變量和局部變量有什么區(qū)別?15函數(shù)形參和實(shí)參display(intnum,floatfraction){......}voidmain(){......display(10,20.5);}實(shí)際參數(shù)函數(shù)調(diào)用形式參數(shù)16函數(shù)參數(shù)及函數(shù)的調(diào)用形式參數(shù):簡(jiǎn)稱形參。形參出現(xiàn)在函數(shù)定義中,在整個(gè)函數(shù)體內(nèi)的局部變量.實(shí)際參數(shù):簡(jiǎn)稱實(shí)參。出現(xiàn)在函數(shù)調(diào)用中。是函數(shù)調(diào)用時(shí),參數(shù)的實(shí)際值。int

max(int

a,intb){if(a>=b) returna;else returnb;}voidmain(){int

x,y,mux;......mux=max(x,y)......}實(shí)參形參函數(shù)調(diào)用17函數(shù)的參數(shù)使用案例voidtotal(int

a,intb){

intsum=0;

for(inti=a;i<=b;i++){sum+=i;}

printf(“%d到%d的和是%d\n”,a,b,sum);}voidpow(double

a,intb){doublesum=1.0;

for(inti=0;i<b;i++){sum*=a;}

printf(“%lf的%d次方是%lf\n”,a,b,sum);}voidfun(intn){doubles=1.0;

while(n>1)s*=n--;

printf(“%d的階乘是%lf\n”,n,s);}18函數(shù)參數(shù)的說(shuō)明注意以下幾點(diǎn):1、定義函數(shù)時(shí),必須說(shuō)明形參的類型。形參只能是變量和數(shù)組。2、形參是函數(shù)局部變量,只在函數(shù)內(nèi)部有效3、實(shí)參的傳遞,必須和形參的類型,個(gè)數(shù),順序完全一致19使用局部變量的例子#include"stdio.h"voidout(inta){ a++;}voidmain(){ a=1;

out(a);

printf(“a=%d\n”,a);}定義形參變量a,是函數(shù)內(nèi)部的局部變量將a的值傳遞進(jìn)函數(shù)20小結(jié)1、什么是形參?什么是實(shí)參?2、實(shí)參在使用時(shí),必須注意什么?21函數(shù)的返回值返回語(yǔ)句:returnxx;/*’xx’為一變量、表達(dá)式、常量*/注意:1、如果你聲明的是一有返回值的函數(shù),但沒(méi)有使用return語(yǔ)句,將報(bào)錯(cuò).2、一個(gè)函數(shù)中可以有多個(gè)return語(yǔ)句,但是函數(shù)運(yùn)行過(guò)程中遇見(jiàn)第一個(gè)return語(yǔ)句就會(huì)返回,同時(shí)終止該函數(shù)的運(yùn)行!22改寫n!doublefun(intn){doubles=1.0;

while(n>1)s*=n--;returns;}調(diào)用:voidmain(){doublesum;sum=fun(5);printf(“5的階乘是%lf\n”,sum);}或者voidmain(){doublesum;

intn=5;sum=fun(n);

printf(“%d的階乘是%lf\n”,n,sum);}或者voidmain(){printf(“5的階乘是%lf\n”,fun(5));}特點(diǎn):有返回值的函數(shù),一般使用容器將返回值接收!23例

有參有返回值的函數(shù)問(wèn)題描述:編寫函數(shù)求給定2個(gè)數(shù)中的最大值#include"stdio.h"int

getMax(int

a,intb);//函數(shù)聲明voidmain(){

int

x,y,max;

printf("請(qǐng)輸入兩個(gè)整數(shù):");

scanf("%d%d",&x,&y); max=getMax(x,y);//函數(shù)調(diào)用

printf("%d和%d中的較大數(shù)是:%d\n",x,y,max);}int

getMax(int

a,intb)//函數(shù)定義{

if(a>b) { returna; } else { returnb; }}示例四24函數(shù)值的類型函數(shù)的類型即函數(shù)值的類型,在定義時(shí)聲明。例:int

max(int

a,intb);函數(shù)類型為int型。說(shuō)明:函數(shù)的類型同函數(shù)返回值的類型一般是要求保持一致,如果函數(shù)返回值類型(即return語(yǔ)句返回的類型)同函數(shù)類型不一致,則在函數(shù)返回值時(shí)對(duì)其進(jìn)行強(qiáng)行轉(zhuǎn)化,轉(zhuǎn)化為函數(shù)類型;25小結(jié)定義幾個(gè)全局變量,用來(lái)保存一個(gè)客戶的開(kāi)戶信息,包括用戶名、卡號(hào)、密碼和開(kāi)戶金額,然后分別完成開(kāi)戶、存款、取款、余額查詢等業(yè)務(wù)?,F(xiàn)場(chǎng)編程charname[10];longcardID;longpsw;floatmoney;voidmain(){……}voidopenAccount()//開(kāi)戶{ printf("\t\t\t本系統(tǒng)現(xiàn)在為你開(kāi)戶\n");printf("\t\t\t請(qǐng)輸入您的用戶名:");scanf("%s",name);printf("\t\t\t請(qǐng)輸入您的卡號(hào):");scanf("%ld",&cardID);printf("\t\t\t請(qǐng)輸入您的密碼:");scanf("%ld",&psw);printf("\t\t\t請(qǐng)輸入您的開(kāi)戶金額:");scanf("%f",&money);printf("\t\t\t開(kāi)戶成功,請(qǐng)妥善保管您的開(kāi)戶信息\n");}voidsaveMoney()//存款{longID;floatm;

printf("\t\t\t請(qǐng)輸入您的卡號(hào):");

scanf("%ld",&ID);

if(ID==cardID){

printf("\t\t\t請(qǐng)輸入您的存款金額:");

scanf("%f",&m);money=m+money;

printf(“\t\t\t存款成功,您卡上的余額是: %0.2f\n",money);}else{

printf("\t\t\t您的卡號(hào)輸入錯(cuò)誤,無(wú)法存款!\n");}}26變量交換

1224xyc1224方式二: x=x+y; y=x-y; x=x-y;27傳值調(diào)用與傳址調(diào)用

C語(yǔ)言中函數(shù)的形式參數(shù)的傳遞方式有兩種,一種是傳值,另一種是傳址,對(duì)于這兩個(gè)概念,最核心的思想是: 第一、

在傳值調(diào)用中,函數(shù)中傳遞的是實(shí)際參數(shù)的值即內(nèi)容,這時(shí)形式參數(shù)的改變不會(huì)影響實(shí)參。 第二、在傳址調(diào)用中,函數(shù)中傳遞的是實(shí)際參數(shù)的地址,這時(shí)函數(shù)形式參數(shù)的改變會(huì)影響實(shí)參。其原因是:傳址是形參和實(shí)參共用一個(gè)地址內(nèi)存。 下面先看一下傳值調(diào)用的例子:28值傳遞傳遞的是實(shí)參變量的內(nèi)容的復(fù)制品,而不是實(shí)參本身。函數(shù)參數(shù)的值傳遞voidfunc(inta){ a++;

printf(“func函數(shù)中的a=%d\n”,a);}voidmain(){

inta=12;

func(a);

printf(“main函數(shù)中的a=%d\n”,a);}結(jié)論:只要是基本類型作為函數(shù)的參數(shù),都是屬于值傳遞.內(nèi)存aa121213func函數(shù)中的a=13main函數(shù)中的a=1229思考定義一個(gè)變量交換的函數(shù),如下所示:

voidchange(int

a,intb){

intc=a; a=b; b=c;} voidmain(){

inta=12,b=24;

printf(“交換前:a=%d,b=%d\n”,a,b);

change(a,b);

printf(“交換后:a=%d,b=%d\n”,a,b); }內(nèi)存12a24b交換前:a=12,b=24交換后:a=12,b=2412a24b30#include<stdio.h>voidincrement(int,int);voidmain(){

intnum1,num2;

printf("\n

請(qǐng)輸入兩個(gè)數(shù):");

scanf("%d%d",&num1,&num2);

printf("\n

遞增前的值是%d和%d\n",num1,num2); increment(num1,num2);

printf("\n

遞增后的值是%d和%d\n",num1,num2);}voidincrement(intval1,intval2){ val1++; val2++;

printf("\n

子函數(shù)中值%d和%d\n",val1,val2);}例2傳值調(diào)用請(qǐng)輸入兩個(gè)數(shù)

:3456遞增前的值是

34和

56_遞增后的值是

34和56num1num2var13456var2子函數(shù)中的值是

35和5735345657num1num234563456FF23FF05調(diào)用后修改為35val2FFEAFF45將變量num1的值賦給形參val1將變量num2的值賦給形參val2val1調(diào)用后修改為57調(diào)用函數(shù)被調(diào)用函數(shù)示例五31函數(shù)實(shí)參的地址傳遞在學(xué)習(xí)地址傳遞之前,我們先回顧一下一維數(shù)組的定義:

inta[5];其中,數(shù)組a有5個(gè)元素,它們?cè)趦?nèi)存中是連續(xù)存放的。數(shù)組名a就是數(shù)組的元素在內(nèi)存中存放的首地址.地址的概念就像門牌號(hào)碼.郵遞員送信只認(rèn)門牌號(hào)碼,而不用管這個(gè)地址中住的是什么人。32數(shù)組作為函數(shù)參數(shù)(傳址調(diào)用)在用數(shù)組作實(shí)參時(shí),以傳址方式調(diào)用函數(shù),也就是說(shuō)把實(shí)參數(shù)組的首地址賦給形參實(shí)際上形參數(shù)組和實(shí)參數(shù)組為同一數(shù)組,共同擁有一段內(nèi)存空間33使用數(shù)組作為函數(shù)參數(shù)實(shí)現(xiàn)變量交換

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論