




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
首都體育學院《C語言程序設計》第5章
函數(shù)
第一節(jié)
概述
第二節(jié)
標準庫函數(shù)
第三節(jié)
函數(shù)的定義調用和聲明
第四節(jié)
函數(shù)的嵌套調用和遞歸調用
第五節(jié)
變量的作用域和存儲類別
第六屆C程序文件結構
掌握函數(shù)、函數(shù)值(函數(shù)返回值)以及函數(shù)調用等基本概念。掌握函數(shù)的定義和調用方法。掌握函數(shù)參數(shù)的傳遞方法。掌握變量的作用范圍。目標要求概述標準庫函數(shù)
函數(shù)的定義調用和聲明函數(shù)的嵌套調用和遞歸調用
變量的作用域和存儲類別C程序文件結構講課提綱模塊化程序設計基本思想:將一個大的程序按功能分割成一些小模塊開發(fā)方法:自上向下,逐步分解,分而治之5.1概述5.1概述C程序結構函數(shù)的特點函數(shù)是程序的基本組成單位必須有且只能有一個名為main的主函數(shù)C程序的執(zhí)行總是從main函數(shù)開始,在main中結束函數(shù)與函數(shù)之間是平行的獨立的,不能嵌套定義,但可以嵌套調用,main函數(shù)可以調用任意其他函數(shù),其他函數(shù)(除main函數(shù)外)之間可相互調用5.1概述函數(shù)的分類從用戶角度(函數(shù)定義)標準函數(shù)(庫函數(shù)):由系統(tǒng)提供用戶自定義函數(shù):用戶可根據(jù)需要自己編寫。從函數(shù)返回值角度分有返回值函數(shù)無返回值函數(shù)從主調函數(shù)和被調函數(shù)間數(shù)據(jù)傳遞角度分有參函數(shù)無參函數(shù)5.1概述常用標準庫函數(shù) 使用庫函數(shù)應注意:1、函數(shù)功能2、函數(shù)參數(shù)的數(shù)目和順序,及各參數(shù)意義和類型3、函數(shù)返回值意義和類型4、需要使用的包含文件5.2標準庫函數(shù)最常用的幾個庫函數(shù)
函數(shù)原型功能返回值doublefabs(doublex)求x的絕對值。
計算結果
doublesqrt(doublex)
計算x的算術平方根。
計算結果
doublepow(doublex,dlubley)
計算xy的值。
計算結果
doublesin(doublex)
計算sin(x)的值。計算結果
doublecos(doublex)
計算cos(x)的值。
計算結果
doublelog(dlublex)
計算lnx的值
計算結果
doubleexp(doublex)
求ex的值計算結果int
rand(void)
產(chǎn)生一個0到32767之間的隨機整數(shù)。
隨機整數(shù)
5.2.1常用標準庫函數(shù)char*strcat(char*str1,char*str2)
把str2接到str1的后面,str1最后面的'\0'被取消。
返回str1
char*strcpy(char*str1,char*str2)
把str2指向的字符串復制到str1中去。
返回str1
unsignedstrlen(char*str)
統(tǒng)計字符串str中字符的個數(shù)(不包括'\0')
返回字符個數(shù)
FILE*fopen(char*filename,char*mode)
以mode指定的方式打開名為filename的文件。成功返回文件指針,否則返回0int
fclose(FILE*fp)
關閉fp所指的文件,釋放文件緩沖區(qū)。有錯返回非0值,否則返回0int
feof(FILE*fp)
檢查文件是否結束。文件結束返回非0值,否則返回05.2.1常用標準庫函數(shù)基本隨機數(shù)函數(shù)
偽隨機數(shù)產(chǎn)生函數(shù):int
rand(void)
種子函數(shù):voidsrand(unsinged
intseed)說明:函數(shù)rand()可生成一個在0~RAND_MAX(32767) 之間均勻分布的偽隨機整數(shù),但需要使用種子 函數(shù)srand()來改變rand()函數(shù)所產(chǎn)生隨機數(shù)列 的起始點,以便于偽隨機數(shù)更“隨機”。例如:srand(time(NULL))
//將系統(tǒng)時間設為隨即種子
rand()5.2.2偽隨機數(shù)的產(chǎn)生及應用#include<stdio.h>#include<stdlib.h>#include<time.h>main(){
intk=0;
printf("time=%ld\n",time(NULL));
srand(time(NULL));
for(k=0;k<10;k++)
printf("%d\n",rand());
printf("%d\n",RAND_MAX);}5.2.2偽隨機數(shù)的產(chǎn)生及應用猜數(shù)游戲。計算機隨機產(chǎn)生一個100以內的整數(shù),用戶猜數(shù),最多猜10次,每次給出大了或小了的提示。最后根據(jù)猜的次數(shù)給出相應的評價。如果10次還沒有猜對,則輸出“很遺憾,你已經(jīng)沒有機會了!游戲結束?。?!”。#include<stdio.h>#include<stdlib.h>#include<time.h>main(){ int
i,magic; intguess;/*人猜的數(shù)*/
srand(time(NULL)); /*產(chǎn)生隨機函數(shù)的種子*/ magic=rand()%100; /*計算機產(chǎn)生隨機數(shù)*/
for(i=1;i<=10;i++) {printf("請輸入一個100以內的整數(shù):");
scanf("%d",&guess);
if(guess>magic)
printf("大了,再小點!\n"); elseif(guess<magic)
printf("小了,再大點!\n"); else {printf("恭喜你,答對了!\n");
if(i<=2)
printf("棒極了!\n"); elseif(i<=5)
printf("順利過關!"); else
printf("不容易呀,終于猜出來了!\n"); break; } }
if(i>10)
printf("\t很遺憾,你已經(jīng)沒有機會了!游戲結束!?。n");}均勻分布隨機數(shù)的產(chǎn)生
rand()函數(shù)產(chǎn)生0~32767之間的偽隨機數(shù),若在給定區(qū)間[a,b]產(chǎn)生均勻分布的隨機實數(shù):
rand()*(b-a)/RAND_MAX+a5.2.2偽隨機數(shù)的產(chǎn)生及應用5.3函數(shù)的定義和調用函數(shù)定義:類型標識符函數(shù)名(形式參數(shù)表){ 函數(shù)聲明部分; 函數(shù)語句部分;}函數(shù)返回值類型缺省int型合法標識符函數(shù)體函數(shù)的參數(shù)例有參函數(shù)(現(xiàn)代風格)
int
max(int
x,inty){intz;z=x>y?x:y;return(z);}例無參函數(shù)
printstar(){printf(“**********\n”);}例空函數(shù)
dummy(){}函數(shù)定義說明:函數(shù)名:是調用該函數(shù)的標識,是該函數(shù)所占內存區(qū)的首地址。函數(shù)值:函數(shù)調用之后返回給主調函數(shù)的值稱為函數(shù)值,其通過return語句返回。格式如下:Return(表達式);
或
return表達式;
或
return;說明:函數(shù)中可有多個return語句若無return語句,遇}時,自動返回調用函數(shù)若函數(shù)類型與return語句中表達式值的類型不一致,按前者為準.void型函數(shù),表明該函數(shù)無返回值5.3函數(shù)的定義和調用例函數(shù)返回值類型轉換main(){intmax(float,float)floata,b,c;
scanf("%f,%f",&a,&b);c=max(a,b);
printf("Maxis%f\n",c);}max(floatx,floaty){floatz;z=x>y?x:y;
return(z);}5.3函數(shù)的定義和調用函數(shù)的形式參數(shù)定義函數(shù)時,函數(shù)名后圓括號中的變量稱為形參,形參需逐一定義.形參只能是變量形參在函數(shù)被調用前不占內存;函數(shù)調用時為形參分配內存;調用結束,內存釋放。形參僅在函數(shù)內部有效。函數(shù)體{}
中內容是函數(shù)體,是實現(xiàn)函數(shù)功能的語句。5.3函數(shù)的定義和調用函數(shù)調用(一般形式)
函數(shù)名(實參表);函數(shù)定義與函數(shù)調用的區(qū)別:函數(shù)定義是編程實現(xiàn)相應功能,而函數(shù)調用是在需要此功能的地方執(zhí)行此函數(shù)。函數(shù)的定義中有“類型標識符”而函數(shù)的調用中沒有。函數(shù)的定義后沒有“;”,而函數(shù)的調用中有“;”5.3函數(shù)的定義和調用實際參數(shù):主調函數(shù)中調用一個函數(shù)時,被調用函數(shù)名后 面圓括號中的表達式
例比較兩個數(shù)并輸出大者main(){inta,b,c;
scanf("%d,%d",&a,&b);c=max(a,b);
printf("Maxis%d",c);}max(intx,inty){intz;z=x>y?x:y;return(z);}實參形參c=max(a,b);(main函數(shù))(max函數(shù))max(intx,inty){intz;z=x>y?x:y;return(z);}5.3函數(shù)的定義和調用說明:實參必須有確定的值,可以是變量、常量或表達式,并將其值傳給形參形參與實參個數(shù)相同、類型一致若形參與實參類型不一致,自動按形參類型轉換——函數(shù)調用轉換由實參到形參的值的單向傳遞5.3函數(shù)的定義和調用例計算x的立方#include<stdio.h>floatcube(floatx){return(x*x*x);}main(){floata,product;
printf("Pleaseinputvalueofa:");
scanf("%f",&a);product=cube(a);
printf(”Cubeof%.4fis%.4f\n",a,product);}aproduct××××1.21.21.728x5.3函數(shù)的定義和調用例交換兩個數(shù)711x:y:調用前:調用結束:711x:y:main(){intx=7,y=11; printf("x=%d,y=%d\n",x,y);
printf("swapped:\n");
swap(x,y);
printf("x=%d,y=%d\n",x,y);}swap(int
a,intb){inttemp;temp=a;a=b;b=temp;
printf(“a=%d,b=%d\n”,a,b);}調用:711a:b:711x:y:swap:711x:y:117a:b:temp5.3函數(shù)的定義和調用函數(shù)調用方式函數(shù)作為獨立的語句: 側重函數(shù)的執(zhí)行功能例:printf("IloveChina!\n");函數(shù)作為表達式的組成部分: 需要函數(shù)的返回值參與運算例:c=max(a,b);函數(shù)作為其他函數(shù)的參數(shù): 需要函數(shù)的返回值例:printf("%d\n",max(a,b));
putchar(getchar());5.3函數(shù)的定義和調用調用函數(shù)時,對被調函數(shù)的要求:必須是已存在的函數(shù)庫函數(shù):#include<*.h>用戶自定義函數(shù):
在主調函數(shù)中需對被調函數(shù)進行函數(shù)類型聲明函數(shù)聲明:一般形式:
函數(shù)類型函數(shù)名(形參類型[形參名],…..);5.3函數(shù)的定義和調用下列情況下,函數(shù)聲明可缺省:
1、若函數(shù)返值是char或int型,系統(tǒng)自動按int型處理2、被調用函數(shù)定義出現(xiàn)在主調函數(shù)之前
3、在所有函數(shù)的定義之前,在文件的開頭已經(jīng)作了函數(shù) 聲明main(){floatadd(float,float);/*函數(shù)原型聲明*/floata,b,c;
scanf("%f,%f",&a,&b);c=add(a,b);
printf("sumis%f",c);}floatadd(floatx,floaty)/*函數(shù)首部*/
{floatz;/*函數(shù)體*/z=x+y;return(z);}floatadd(floatx,floaty){floatz;z=x+y;return(z);}main(){floata,b,c;
scanf("%f,%f",&a,&b);c=add(a,b);
printf("sumis%f",c);}被調函數(shù)出現(xiàn)在主調函數(shù)之前,不必函數(shù)說明main(){floata,b;
intc;
scanf("%f,%f",&a,&b);c=max(a,b);
printf("Maxis%d\n",c);}max(floatx,floaty){floatz;z=x>y?x:y;return(z);}int型函數(shù)可不作函數(shù)說明5.3函數(shù)的定義和調用C規(guī)定:函數(shù)定義不可嵌套,但可以嵌套調用函數(shù)5.4嵌套調用與遞歸調用main()調用函數(shù)a結束a函數(shù)b函數(shù)調用函數(shù)b例求三個數(shù)中最大數(shù)和最小數(shù)的差值
int
dif(int
x,int
y,intz);
int
max(int
x,int
y,intz);
int
min(int
x,int
y,intz);main(){inta,b,c,d;
scanf("%d%d%d",&a,&b,&c);
d=dif(a,b,c);
printf("Max-Min=%d\n",d);}int
dif(int
x,int
y,intz){returnmax(x,y,z)—min(x,y,z);}int
max(int
x,int
y,intz){intr;r=x>y?x:y;return(r>z?r:z);}int
min(int
x,int
y,intz){intr;r=x<y?x:y;return(r<z?r:z);}5.4嵌套調用與遞歸調用例求三個數(shù)中最大數(shù)和最小數(shù)的差值main(){……
d=dif(a,b,c);
……}int
dif(int
x,int
y,intz){returnmax(x,y,z)-min(x,y,z);}int
max(int
x,int
y,intz){……}int
min(int
x,int
y,intz){……}main()調用函數(shù)dif輸出結束dif函數(shù)max函數(shù)調用函數(shù)max調用函數(shù)minmin函數(shù)5.4嵌套調用與遞歸調用定義:函數(shù)直接或間接的調用自身叫函數(shù)的遞歸調用int
f(intx){inty,z;……
z=f(y);…….return(2*z);}int
f1(intx){inty,z;……
z=f2(y);…….return(2*z);}int
f2(intt){inta,c;……
c=f1(a);…….return(3+c);}f()調f調f2調f1f1()f2()5.4嵌套調用與遞歸調用說明:C編譯系統(tǒng)對遞歸函數(shù)的自調用次數(shù)沒有限制必須有一個明確的結束遞歸的條件。5.4嵌套調用與遞歸調用例求n的階乘int
fac(intn){intf;if(n<0)printf("n<0,dataerror!");elseif(n==0||n==1)f=1;elsef=fac(n-1)*n;return(f);}main(){intn,y;
printf("Inputaintegernumber:");
scanf("%d",&n);
y=fac(n);
printf("%d!=%15d",n,y);}5.4嵌套調用與遞歸調用作用域:
若某個標識符僅能在源程序正文的某個范圍內被使用,則稱源程序正文的這個范圍為該標識符的作用域。分程序作用域:
指該復合語句的左括弧“{”和右括弧“}”之間的源程序 正文。
文件作用域:
指一個編譯單位內的所有程序正文。根據(jù)作用域的不同,將變量分類:
局部變量、全局變量5.5變量的作用域與存儲類別
局部變量---內部變量
在函數(shù)內定義,只在本函數(shù)內有效說明:動態(tài)分配內存單元main中定義的變量只在main中有效不同函數(shù)中同名變量,占不同內存單元形參屬于局部變量可定義在復合語句中有效的變量有包含關系的兩個作用域中的同名變量,外層同名變量被屏蔽。
5.5變量的作用域與存儲類別
floatf1(inta){intb,c;…….}charf2(intx,inty){inti,j;……}main(){intm,n;…….}a,b,c有效x,y,i,j有效m,n有效局部變量具有分程序作用域例不同函數(shù)中同名變量main(){inta,b;a=3;b=4;
printf("main:a=%d,b=%d\n",a,b);
sub();
printf("main:a=%d,b=%d\n",a,b);}sub(){inta,b;a=6;b=7;
printf("sub:a=%d,b=%d\n",a,b);}運行結果:main:a=3,b=4sub:a=6,b=7main:a=3,b=45.5變量的作用域與存儲類別
有包含關系的兩個作用域中的同名變量main(){inta,b,c;
…
{intc;c=a+b;
…
}
…
}使用內層同名變量c變量a,b可以在整個范圍內使用5.5變量的作用域與存儲類別
全局變量---外部變量說明:有效范圍:從定義變量的位置開始到本源文件結束靜態(tài)分配全局變量的內存單元減少函數(shù)調用時實參與形參之間的數(shù)據(jù)傳遞若外部變量與局部變量同名,則外部變量被屏蔽不足:全局變量在程序全部執(zhí)行過程中占用存儲單元降低程序的可讀性,降低函數(shù)的通用性5.5變量的作用域與存儲類別
例外部變量與局部變量inta=3,b=5;max(inta,intb){intc;c=a>b?a:b;return(c);}main(){inta=8;
printf("max=%d",max(a,b));}運行結果:max=8局部變量a、b有效范圍局部變量a有效范圍全局變量a、b有效范圍5.5變量的作用域與存儲類別
靜態(tài)存儲方式:
程序運行期間,始終占有固定的存儲空間。
動態(tài)存儲方式:
程序運行期間,根據(jù)需要動態(tài)的分配存儲空間。
變量的存儲類型:auto-----自動型register-----寄存器型static------靜態(tài)型extern-----外部型變量的定義格式:[存儲類型]數(shù)據(jù)類型變量表;5.5變量的作用域與存儲類別
內存用戶區(qū):
程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)全局變量、局部靜態(tài)變量形參變量局部動態(tài)變量(autoregister)函數(shù)調用現(xiàn)場保護和返回地址等
生存期
靜態(tài)變量:從程序開始執(zhí)行到程序結束動態(tài)變量:從包含該變量定義的函數(shù)開始執(zhí)行至函數(shù)執(zhí)行結束5.5變量的作用域與存儲類別
局部變量默認為auto型靜態(tài)局部變量具有全局壽命和可繼承性寄存器變量個數(shù)受限,且不能為long,double,float型extern不是變量定義,可擴展外部變量作用域靜態(tài)動態(tài)存儲方式程序整個運行期間函數(shù)調用開始至結束
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 ISO 23698:2024 EN Cosmetics - Measurement of the sunscreen efficacy by diffuse reflectance spectroscopy
- 【正版授權】 ISO/IEC TR 24722:2024 EN Information technology - Biometrics - Multimodal and other multibiometric fusion
- 【正版授權】 ISO 16173:2025 EN Ships and marine technology - Jacking system appliances on self-elevating unit - Rack pinion leg fixation system
- 【正版授權】 ISO 1171:2024 EN Coal and coke - Determination of ash
- 2025年度玻璃隔斷安裝與品牌授權合同
- 2025年度金融科技企業(yè)員工試工合作協(xié)議
- 2025年度高速公路服務區(qū)草坪綠化與旅客服務合同
- 2025年度草種研發(fā)與市場推廣合作協(xié)議
- 2025年度社會組織勞動合同范本解讀與應用4篇
- 個人財務規(guī)劃的重要階段計劃
- 《婦幼保健學》課件-第一章 緒論
- 10S505 柔性接口給水管道支墩
- 移動寬帶注銷委托書模板需要a4紙
- 初一下冊期末模擬物理質量檢測試卷解析1
- 《教育向美而生-》讀書分享課件
- 中海地產(chǎn)總部-員工考核手冊
- 左卡尼汀在減輕高原反應中的應用
- 《烹飪美學》課件-項目二 烹飪色彩
- 青海省西寧市選調生考試(行政職業(yè)能力測驗)綜合能力測試題匯編
- 2024年上海民航職業(yè)技術學院高職單招歷年職業(yè)技能測驗高頻考點試題含答案解析
- 夏枯草口服液相關項目實施方案
評論
0/150
提交評論