版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1T7變量作用域及有參有返回值的函數(shù)2回顧1、C語言的基本單位是什么?2、使用函數(shù)有哪些好處?3、自定義函數(shù)包含哪幾部分?4、什么是函數(shù)的定義?什么是函數(shù)的調(diào)用?5、函數(shù)的調(diào)用分哪兩種方式?3本章任務(wù)
定義幾個全局變量,用來保存一個客戶的開戶信息,包括用戶名、卡號、密碼和開戶金額,然后分別完成開戶、存款、取款、余額查詢等業(yè)務(wù)。4本章目標(biāo)理解變量的作用域理解函數(shù)的參數(shù)理解函數(shù)的返回值5變量的作用域
作用域是某些事物起作用或有效的區(qū)域。限于陸地限于海洋限于空中6程序中變量也有不同的使用范圍,稱為變量的作用域。變量的作用域決定變量的可訪問性變量的作用域voiddisplayDiscount(){floatdiscount_amt;.........}局部變量:只在某函數(shù)內(nèi)部有效floatdiscount_amt;voidmain(){......}voiddisplayDiscount(){......}全局變量:從定義時到程序結(jié)束有效7變量的作用域#include<stdio.h>voidaddNumbers(){
intnum1,num2,sum;
printf("\n
請輸入兩個數(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請輸入兩個數(shù):5645子函數(shù)中sum的值是101主函數(shù)中sum的值是056sum101示例一8變量的作用域#include<stdio.h>intsum=0;//全局變量voidaddNumbers(){
intnum1,num2;
printf("\n
請輸入兩個數(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請輸入兩個數(shù):5645子函數(shù)中sum的值是101主函數(shù)中sum的值是10156101示例二9全局變量全局變量:它是在任何函數(shù)外部定義的變量。它的作用域是從定義時刻開始,到程序結(jié)束。全局變量需注意以下幾點:1.全局變量定義必須在所有的函數(shù)之外。2.全局變量可加強函數(shù)模塊之間的數(shù)據(jù)聯(lián)系,但是又使函數(shù)要依賴這些變量,因而使得函數(shù)的獨立性降低。3.在同一源文件中,允許全局變量和局部變量同名。在局部變量的作用域內(nèi),同名的全局變量不起作用。10全局變量int
a,b;/*全局變量*/floatx,y;/*全局變量*/voidf1()/*函數(shù)f1*/
{
……
}
intf2()/*函數(shù)f2*/
{
……
}main()/*主函數(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 上面的程序聲明了一個全局的整型用于傳遞數(shù)據(jù),通過運行程序可以看出:在函數(shù)內(nèi)和函數(shù)外都可以修改全局變量的值。12局部變量局部變量:在函數(shù)內(nèi)定義說明的,其作用范圍僅限于該函數(shù)內(nèi)。局部變量需注意以下幾點:1.主函數(shù)中定義的變量也只能在主函數(shù)中使用,不能在其它函數(shù)中使用。2.允許在不同的函數(shù)中使用相同的變量名,它們代表不同的變量,分配不同的存放單元,互不相干,不會發(fā)生混淆。3.復(fù)合語句中定義的變量,也是復(fù)合語句的局部變量。所謂復(fù)合語句,就是用{}包含起來的語句塊.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ù)合語句中的局部變量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ù)合語句中的局部變量示例三14小結(jié)1、什么是變量的作用域?2、全局變量和局部變量有什么區(qū)別?15函數(shù)形參和實參display(intnum,floatfraction){......}voidmain(){......display(10,20.5);}實際參數(shù)函數(shù)調(diào)用形式參數(shù)16函數(shù)參數(shù)及函數(shù)的調(diào)用形式參數(shù):簡稱形參。形參出現(xiàn)在函數(shù)定義中,在整個函數(shù)體內(nèi)的局部變量.實際參數(shù):簡稱實參。出現(xiàn)在函數(shù)調(diào)用中。是函數(shù)調(diào)用時,參數(shù)的實際值。int
max(int
a,intb){if(a>=b) returna;else returnb;}voidmain(){int
x,y,mux;......mux=max(x,y)......}實參形參函數(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ù)的說明注意以下幾點:1、定義函數(shù)時,必須說明形參的類型。形參只能是變量和數(shù)組。2、形參是函數(shù)局部變量,只在函數(shù)內(nèi)部有效3、實參的傳遞,必須和形參的類型,個數(shù),順序完全一致19使用局部變量的例子#include"stdio.h"voidout(inta){ a++;}voidmain(){ a=1;
out(a);
printf(“a=%d\n”,a);}定義形參變量a,是函數(shù)內(nèi)部的局部變量將a的值傳遞進函數(shù)20小結(jié)1、什么是形參?什么是實參?2、實參在使用時,必須注意什么?21函數(shù)的返回值返回語句:returnxx;/*’xx’為一變量、表達式、常量*/注意:1、如果你聲明的是一有返回值的函數(shù),但沒有使用return語句,將報錯.2、一個函數(shù)中可以有多個return語句,但是函數(shù)運行過程中遇見第一個return語句就會返回,同時終止該函數(shù)的運行!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));}特點:有返回值的函數(shù),一般使用容器將返回值接收!23例
有參有返回值的函數(shù)問題描述:編寫函數(shù)求給定2個數(shù)中的最大值#include"stdio.h"int
getMax(int
a,intb);//函數(shù)聲明voidmain(){
int
x,y,max;
printf("請輸入兩個整數(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ù)值的類型,在定義時聲明。例:int
max(int
a,intb);函數(shù)類型為int型。說明:函數(shù)的類型同函數(shù)返回值的類型一般是要求保持一致,如果函數(shù)返回值類型(即return語句返回的類型)同函數(shù)類型不一致,則在函數(shù)返回值時對其進行強行轉(zhuǎn)化,轉(zhuǎn)化為函數(shù)類型;25小結(jié)定義幾個全局變量,用來保存一個客戶的開戶信息,包括用戶名、卡號、密碼和開戶金額,然后分別完成開戶、存款、取款、余額查詢等業(yè)務(wù)?,F(xiàn)場編程charname[10];longcardID;longpsw;floatmoney;voidmain(){……}voidopenAccount()//開戶{ printf("\t\t\t本系統(tǒng)現(xiàn)在為你開戶\n");printf("\t\t\t請輸入您的用戶名:");scanf("%s",name);printf("\t\t\t請輸入您的卡號:");scanf("%ld",&cardID);printf("\t\t\t請輸入您的密碼:");scanf("%ld",&psw);printf("\t\t\t請輸入您的開戶金額:");scanf("%f",&money);printf("\t\t\t開戶成功,請妥善保管您的開戶信息\n");}voidsaveMoney()//存款{longID;floatm;
printf("\t\t\t請輸入您的卡號:");
scanf("%ld",&ID);
if(ID==cardID){
printf("\t\t\t請輸入您的存款金額:");
scanf("%f",&m);money=m+money;
printf(“\t\t\t存款成功,您卡上的余額是: %0.2f\n",money);}else{
printf("\t\t\t您的卡號輸入錯誤,無法存款!\n");}}26變量交換
1224xyc1224方式二: x=x+y; y=x-y; x=x-y;27傳值調(diào)用與傳址調(diào)用
C語言中函數(shù)的形式參數(shù)的傳遞方式有兩種,一種是傳值,另一種是傳址,對于這兩個概念,最核心的思想是: 第一、
在傳值調(diào)用中,函數(shù)中傳遞的是實際參數(shù)的值即內(nèi)容,這時形式參數(shù)的改變不會影響實參。 第二、在傳址調(diào)用中,函數(shù)中傳遞的是實際參數(shù)的地址,這時函數(shù)形式參數(shù)的改變會影響實參。其原因是:傳址是形參和實參共用一個地址內(nèi)存。 下面先看一下傳值調(diào)用的例子:28值傳遞傳遞的是實參變量的內(nèi)容的復(fù)制品,而不是實參本身。函數(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思考定義一個變量交換的函數(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
請輸入兩個數(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)用請輸入兩個數(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ù)實參的地址傳遞在學(xué)習(xí)地址傳遞之前,我們先回顧一下一維數(shù)組的定義:
inta[5];其中,數(shù)組a有5個元素,它們在內(nèi)存中是連續(xù)存放的。數(shù)組名a就是數(shù)組的元素在內(nèi)存中存放的首地址.地址的概念就像門牌號碼.郵遞員送信只認(rèn)門牌號碼,而不用管這個地址中住的是什么人。32數(shù)組作為函數(shù)參數(shù)(傳址調(diào)用)在用數(shù)組作實參時,以傳址方式調(diào)用函數(shù),也就是說把實參數(shù)組的首地址賦給形參實際上形參數(shù)組和實參數(shù)組為同一數(shù)組,共同擁有一段內(nèi)存空間33使用數(shù)組作為函數(shù)參數(shù)實現(xiàn)變量交換
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 社保合同補充協(xié)議
- 外匯擔(dān)保借款合同
- 技術(shù)轉(zhuǎn)移與知識產(chǎn)權(quán)管理作業(yè)指導(dǎo)書
- 全新旅行社勞動合同
- 資產(chǎn)擔(dān)保合同
- 水務(wù)管理與水質(zhì)保障作業(yè)指導(dǎo)書
- 殯葬服務(wù)合同年
- 城市軌道與公共交通技術(shù)作業(yè)指導(dǎo)書
- 2025年內(nèi)蒙古年貨運從業(yè)資格證考試試題
- 2025年貨運從業(yè)資格哪里考
- 2024年山東省高考政治試卷真題(含答案逐題解析)
- 煙葉復(fù)烤能源管理
- 應(yīng)收賬款管理
- 食品安全管理員考試題庫298題(含標(biāo)準(zhǔn)答案)
- 執(zhí)業(yè)醫(yī)師資格考試《臨床執(zhí)業(yè)醫(yī)師》 考前 押題試卷絕密1 答案
- 非ST段抬高型急性冠脈綜合征診斷和治療指南(2024)解讀
- 2024年山東濟寧初中學(xué)業(yè)水平考試地理試卷真題(含答案詳解)
- 社會保險課件教學(xué)課件
- 撫恤金喪葬費協(xié)議書模板
- 訂婚協(xié)議書手寫模板攻略
- 準(zhǔn)備單元 雪地上的“足跡”(教學(xué)設(shè)計)-2023-2024學(xué)年五年級下冊科學(xué)大象版
評論
0/150
提交評論