




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、函數(shù)參數(shù)與結(jié)構(gòu)體練習(xí)第1頁,共30頁,2022年,5月20日,9點26分,星期一2.為什么會出現(xiàn)if-else不匹配? 這種錯誤的原因可能比較復(fù)雜;總的原則是:(1)有一個else必有一個if,所以首先在數(shù)量上要匹配(2)邏輯關(guān)系要合理;若執(zhí)行的是復(fù)合語句,不要漏掉復(fù)合語句標(biāo)志 。 例如: if (xy) t=a; a=b; b=t; else t=m; 編譯時就會提示出錯信息,正確的寫法: if (xy) t=a; a=b; b=t; else t=m;(3)若條件不成立時要求執(zhí)行的語句有多條,else后必須為復(fù)合語句。 例如:if (xy) t=a; a=b; b=t; else t=m;
2、 m=n; n=t; C程序中常見問題-if語句第2頁,共30頁,2022年,5月20日,9點26分,星期一C程序中常見問題-定長數(shù)組與變長數(shù)組定義定長數(shù)組:int a5; 變長數(shù)組:int n;int an;定義數(shù)組并初始化數(shù)組元素:int a5 = 1,2,3,4,5; 訪問數(shù)組元素(寫、讀):for (i = 0; i 5; i+) ai = i*2;for (i = 0; i 5; i+) printf(%d ,ai);變長數(shù)組:int n = 20;int an;C99標(biāo)準(zhǔn)規(guī)定:定義數(shù)組時,其尺寸可以不確定,但不是所有的編譯器都支持該特性第3頁,共30頁,2022年,5月20日,9點
3、26分,星期一關(guān)于函數(shù)函數(shù)是具有名字的語句序列,使用函數(shù)可改善程序的結(jié)構(gòu),也用于將多處重復(fù)使用的代碼編寫為函數(shù),減少代碼量函數(shù)定義和函數(shù)調(diào)用形式參數(shù)與實際參數(shù)參數(shù)傳遞實際參數(shù)向形式參數(shù)傳值實參與形參個數(shù)相等,類型一致,按順序一一對應(yīng)函數(shù)的返回值局部變量與全局變量變量的作用域與生存期staticextern第4頁,共30頁,2022年,5月20日,9點26分,星期一#include long sum(int a, int b); long factorial(int n);void main() int n1,n2; long a; scanf(%d,%d,&n1,&n2); a = sum(n
4、1,n2); printf(a=%1d,a);long sum(int a,int b) long c1,c2; c1 = factorial(a); c2 = factorial(b); return(c1+c2); long factorial(int n) long rtn=1; int i; for(i=1;ib) swap(a,b); if (ac) swap(a,c); if (bc) swap(b,c); printf(%d %d %d,a,b,c); return 0;第7頁,共30頁,2022年,5月20日,9點26分,星期一傳值調(diào)用函數(shù)調(diào)用執(zhí)行時,將實際參數(shù)變量的地址傳遞給
5、形式參數(shù)void swap(int *x,int *y) int t; t = *x; *x = *y; *y = t;main() int a,b,c; a = 3; b = 8; c = 2; if (ab) swap(&a,&b); if (ac) swap(&a,&c); if (bc) swap(&b,&c); printf(%d %d %d,a,b,c);第8頁,共30頁,2022年,5月20日,9點26分,星期一數(shù)組作為函數(shù)參數(shù)數(shù)組作為參數(shù)有兩種形式數(shù)組元素作為實參,與一般變量相同;形參為數(shù)組,實參為數(shù)組名int num5=79,11,27,26,43;num4num2num3n
6、um0nu組元素是一個變量第9頁,共30頁,2022年,5月20日,9點26分,星期一數(shù)組元素作為函數(shù)參數(shù)數(shù)組元素等同于一個一般變量,作為實參時,是將數(shù)組元素的值傳給形參void change(int x) printf(before: %dn,x); x = x + 10; printf(after: %dn,x);int main() int i; int num6= 43, 18, 9, 13, 55, 7; change(num2); for(i = 0; i6; i+) printf(%dt,numi); return 0;第10頁,共30頁,2022年,5
7、月20日,9點26分,星期一數(shù)組名作為函數(shù)參數(shù)數(shù)組名可以作為實參,傳遞的是數(shù)組空間的首地址 int i, j, temp, a5 = 43, 18, 9, 13, 55; for(i = 0; i 4; i+) for(j = 0; j aj+1) temp = aj; aj = aj+1; aj+1 = temp; /*end if*/*end for i*/void sort(int a,int n) /*數(shù)組a的尺寸為n*/ int i, j, temp; for(i = 0; i n-1; i+) for(j = 0; j aj+1) temp = aj; aj = aj+1; aj+
8、1 = temp; /*end if*/ /*end for i*/int main() int i; int num6= 43, 18, 9, 13, 55, 7; sort(num,6); for(i = 0; i6; i+) printf(%dt,numi); return 0;第11頁,共30頁,2022年,5月20日,9點26分,星期一數(shù)組名作為函數(shù)參數(shù)(續(xù))多維數(shù)組作為實參和形參int max_Value_Matrix(int a4,int m,int n) int i, j, line,col; max = a00; line = 0; col = 0; for(i = 0; i
9、 m; i+) for(j = 0; j max) max = aij; line = i; col = j; printf(%d, %d, ,line,col); return max; 例如:找出二維數(shù)組中的最大元素,輸出其下標(biāo)void main() int i, j, max, num34; for(i = 0; i3; i+) for(j = 0; j4; j+) numij = rand(); printf(%dt,numij); printf(n); max = max_Value_Matrix(num,3,4); printf(%dt, max);第12頁,共30頁,2022年,
10、5月20日,9點26分,星期一結(jié)構(gòu)體變量作為函數(shù)參數(shù)(續(xù))結(jié)構(gòu)體變量作為函數(shù)的實參和形參int GetDateId( DATE date ) static unsigned int day_of_month13 = 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ; int i, date_id = 0; for( i = 0; i 2 & IsLeapYear(date.year) ) date_id+; return date_id;typedef struct int year,month,day;DATE;void main() DA
11、TE new_date; int days; int GetDateId( DATE date); new_date.year = 2008; new_date.month = 11; new_date.day = 26; days = GetDateId(new_date); printf(%d, days); printf(n);第13頁,共30頁,2022年,5月20日,9點26分,星期一結(jié)構(gòu)體數(shù)組編寫一程序,對于某班的50名學(xué)生,輸入各學(xué)生的姓名、學(xué)號、高數(shù)、英語和程序設(shè)計課程成績(都是百分制成績),并按照總分降序排列輸出成績表。 1. 定義描述每個學(xué)生信息的結(jié)構(gòu)體類型 2. 定義存儲
12、所有學(xué)生信息的結(jié)構(gòu)體數(shù)組 3. 輸入 4. 排序 5. 輸出第14頁,共30頁,2022年,5月20日,9點26分,星期一內(nèi)存布局代碼區(qū)靜態(tài)數(shù)據(jù)區(qū)棧區(qū)(stack)堆區(qū)(heap)代碼區(qū)靜態(tài)數(shù)據(jù)區(qū)(變量)棧區(qū)(stack)堆區(qū)(heap)文字常量區(qū)第15頁,共30頁,2022年,5月20日,9點26分,星期一變量的屬性數(shù)據(jù)類型:變量所持有的數(shù)據(jù)的性質(zhì)(操作屬性)存儲類型存儲器類型:寄存器、靜態(tài)存儲區(qū)、動態(tài)存儲區(qū)生存期:變量在某一時刻存在-靜態(tài)變量與動態(tài)變量作用域:變量在某區(qū)域內(nèi)有效-局部變量與全局變量變量的存儲類型auto -自動型register-寄存器型static -靜態(tài)型extern
13、-全局型變量定義格式: 存儲類型 數(shù)據(jù)類型 變量表;變量是對程序中數(shù)據(jù)的存儲空間的抽象如: int sum; auto int a,b,c; register int i; static float x,y;變量的屬性第16頁,共30頁,2022年,5月20日,9點26分,星期一變量的作用域 是指在程序的哪個范圍內(nèi)這個變量是有效的,即可以引用和賦值。根據(jù)作用域可以將變量分為:全局變量和局部變量外部變量(全局變量)定義在函數(shù)體外,可以在源程序的任何位置定義(必須保證不在任何一個函數(shù)體內(nèi))作用域從源文件定義位置開始之后的所有函數(shù)外部變量通常在程序開始處所有函數(shù)前定義,以便所有函數(shù)都能使用若在本程序
14、中使用別的文件中定義的外部變量,則在程序開始處加extern 進行聲明(與函數(shù)的原型聲明功能類似)變量的作用域第17頁,共30頁,2022年,5月20日,9點26分,星期一外部變量會被各函數(shù)共同操作int gcd( ) int i; for(i = m; i0; i-) if ( m%i=0 & n%i=0 ) break; return i; int m,n;main() int max; printf(ninput value for m,n: ); scanf(%d, %d,&m,&n); max = gcd(); printf(Gcd = %dt, max);慎用全局變量,因耦合性太強
15、!變量的作用域第18頁,共30頁,2022年,5月20日,9點26分,星期一根據(jù)作用域可以將變量分為:外部變量(全局變量)int fun(int n)int m, i;for(m=i=0; in; +i)int k = m + 1;m = k + i * 1;return m;左例中:n, m, i都是局部變量,作用于整個函數(shù)內(nèi)部k為循環(huán)體內(nèi)定義的語句,只作用于該復(fù)合語句中內(nèi)部變量(局部變量,自動變量)在函數(shù)內(nèi)作定義說明作用域僅限于它所定義的語句塊(復(fù)合語句)內(nèi)函數(shù)中的形參屬于局部變量變量的作用域第19頁,共30頁,2022年,5月20日,9點26分,星期一變量的作用域同一作用域內(nèi)不允許出現(xiàn)同
16、名變量不同作用域內(nèi)同名變量互不影響全局變量的作用域是整個程序局部變量的作用域是所定義的復(fù)合語句體嵌套的兩個作用域內(nèi)的同名變量,以內(nèi)層定義為準(zhǔn)int f(int n) int x = 1, y; while (1) double x = 2.0; x為又精度2.0變量的作用域第20頁,共30頁,2022年,5月20日,9點26分,星期一變量的生存期變量是在程序的執(zhí)行過程中才變劃分內(nèi)存空間的,這時候的變量才會存在程序結(jié)束后由OS收回程序所占內(nèi)存空間,變量也就不存在了全局變量從程序開始到結(jié)束都存在局部變量只在其所定義的復(fù)合語句執(zhí)行期間才存在變量的生存期第21頁,共30頁,2022年,5月20日,9點
17、26分,星期一程序裝載到內(nèi)存后所占用的內(nèi)存空間稱為用戶區(qū),分為數(shù)據(jù)區(qū)和代碼區(qū),其中數(shù)據(jù)區(qū)又分為靜態(tài)存儲區(qū)和動態(tài)存儲區(qū):靜態(tài)存儲區(qū)是在程序開始執(zhí)行時給所有全局變量分配的存儲區(qū),在程序執(zhí)行過程中占據(jù)固定的存儲單元,程序行完畢才釋放 動態(tài)存儲區(qū)是在程序運行期間根據(jù)需要進行動態(tài)分配的存儲空間,用以存放以下數(shù)據(jù):函數(shù)形式參數(shù);自動變量;函數(shù)調(diào)用時的現(xiàn)場保護和返回地址;只在函數(shù)調(diào)用時分配動態(tài)存儲空間,結(jié)束時釋放這些空間 變量的生存期代碼區(qū)靜態(tài)數(shù)據(jù)區(qū)棧區(qū)(stack)堆區(qū)(heap)第22頁,共30頁,2022年,5月20日,9點26分,星期一有時需要在函數(shù)執(zhí)行之后保留局部變量(的值),在下一次調(diào)用時使用。
18、-實現(xiàn)這一需求的是靜態(tài)局部變量int fac(int n) int f = 1; f = f*n; return(f);main() int i; for(i=1;i=5;i+)printf(%d!=%dn,i,fac(i);函數(shù)返回后仍保留f的值就好了!-將f 設(shè)為靜態(tài)局部變量(用關(guān)鍵字static進行聲明)變量的生存期第23頁,共30頁,2022年,5月20日,9點26分,星期一對靜態(tài)局部變量的說明:int fac(int n) static int f=1; f = f*n; return(f);int main(void) int i; for(i=1;i=5;i+) printf(%
19、d!=%dn,i,fac(i); return 0;靜態(tài)局部變量在靜態(tài)存儲區(qū)內(nèi)分配存儲單元,在程序整個運行期間都不釋放。靜態(tài)局部變量只賦初值一次如果在定義局部變量時不賦初值,系統(tǒng)自動賦初值0(對數(shù)值型變量)或空字符(對字符變量)。static變量第24頁,共30頁,2022年,5月20日,9點26分,星期一static int fac(int n) static int f=1; f = f*n; return(f);int main(void) int i; for(i=1;i=5;i+) printf(%d!=%dn,i,fac(i); return 0;函數(shù)定義加static前綴時,本函
20、數(shù)只能在當(dāng)前程序文件中被調(diào)用static函數(shù)第25頁,共30頁,2022年,5月20日,9點26分,星期一C程序中常見問題-字符數(shù)組 與 字符串定義字符數(shù)組:char name5; 定義字符數(shù)組及初始化:char name15 = c, h, i, n, a ;char name2 = c, h, i, n, a ; 定義字符數(shù)組及初始化:char name1 = c, h, i, n, a, 0 ; char name2 = china;Char name3 = china;scanf(%s,name);或 gets(name);讀入一個字符串時,系統(tǒng)會自動加上結(jié)束標(biāo)志0 。第26頁,共30
21、頁,2022年,5月20日,9點26分,星期一當(dāng)前字符=空格是否未出現(xiàn)新單詞,使word=0,num不累加前一字符為空格(word=0),新單詞出現(xiàn),word=1,num加1前一字符為非空格(word=1),未出現(xiàn)新單詞,num不變否0是11是1未01否0是12否1未12是1未02否0是13是1未03否0是14否1未14否1未14否1未14例 輸入:I am a boy. 當(dāng)前字符是否空格word原值新單詞開始否word新值num值Iamaboy.例 輸入一行字符,統(tǒng)計其中有多少個單詞第27頁,共30頁,2022年,5月20日,9點26分,星期一YNword0(c=stri)!=0?輸出num的值輸入一個字符串s
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 語文-福建省漳州市2025屆高三畢業(yè)班第三次教學(xué)質(zhì)量檢測(漳州三檢)試題和答案
- 《探索與發(fā)現(xiàn):三角形邊的關(guān)系》(教學(xué)設(shè)計)-2023-2024學(xué)年四年級下冊數(shù)學(xué)北師大版
- 鄉(xiāng)村公路養(yǎng)護合同范例
- 幼兒園小班角色游戲與社會認知計劃
- 賣車正規(guī)交易合同范例
- 高中教師工作計劃
- 如何在變化中保持年度目標(biāo)的穩(wěn)定計劃
- 加強行業(yè)知識的學(xué)習(xí)目標(biāo)計劃
- 信貸行業(yè)月度個人工作計劃
- 社團資源整合優(yōu)化計劃
- 高管履歷核實調(diào)查報告
- 2024-2030年中國澆筑型聚氨酯彈性體(CPU)行業(yè)前景研判與應(yīng)用需求潛力分析報告
- 制作塔臺模型課件科學(xué)六年級下冊教科版
- 中國新能源汽車“車電分離”行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報告2024-2029版
- 雙t板屋面施工方案
- 【消毒供應(yīng)中心護理人員職業(yè)暴露與安全防護探究5200字(論文)】
- 2025年湖南省邵陽市新寧縣初三第一次聯(lián)考綜合試題含答案
- 2024-2025學(xué)年新教材高中地理 第三章 產(chǎn)業(yè)區(qū)位因素 第二節(jié) 工業(yè)區(qū)位因素及其變化(2)教案 新人教版必修2
- 財務(wù)管理委托代理會計服務(wù) 投標(biāo)文件(技術(shù)方案)
- 常用焊管規(guī)格表
- 認知心理學(xué):認知科學(xué)與你的生活
評論
0/150
提交評論