C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)3.2 多文件編程_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)3.2 多文件編程_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)3.2 多文件編程_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)3.2 多文件編程_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)3.2 多文件編程_第5頁(yè)
已閱讀5頁(yè),還剩20頁(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)介

C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)與實(shí)踐模塊一編程技術(shù)基礎(chǔ)任務(wù)3.2多文件編程C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)與實(shí)踐課程組04技能點(diǎn)拓展03技能點(diǎn)詳解02技能點(diǎn)分析目錄CONTENTS任務(wù)3.2多文件編程01問(wèn)題引入05技能點(diǎn)檢測(cè)一問(wèn)題引入

進(jìn)入數(shù)字經(jīng)濟(jì)時(shí)代,開源技術(shù)的重要價(jià)值日漸凸顯,已經(jīng)成為數(shù)字經(jīng)濟(jì)的基礎(chǔ)設(shè)施與底座。開源技術(shù)是一個(gè)巨大的知識(shí)寶庫(kù),我們?cè)谙碛眠@個(gè)知識(shí)寶庫(kù)的同時(shí),當(dāng)知這個(gè)知識(shí)寶庫(kù)正是無(wú)數(shù)前人的奉獻(xiàn)積累而成的。

那么如何使我們的C語(yǔ)言編程代碼能夠共享交流,實(shí)現(xiàn)開源技術(shù)的價(jià)值呢?這就需要我們掌握多文件編程的方法,使編程思路更清晰、程序結(jié)構(gòu)更簡(jiǎn)單、更易于程序的讀寫和移植。04技能點(diǎn)拓展03技能點(diǎn)詳解02技能點(diǎn)分析目錄CONTENTS01問(wèn)題引入05技能點(diǎn)檢測(cè)任務(wù)3.2多文件編程二技能點(diǎn)分析1.掌握頭文件編寫方法;2.學(xué)會(huì)使用多文件編程模式編寫程序。學(xué)習(xí)目標(biāo)1.什么是多文件編程?多文件編程具有哪些優(yōu)點(diǎn)?2.頭文件一般包括哪些內(nèi)容?3.頭文件的引用格式有哪些?它們之間有何異同點(diǎn)?學(xué)期預(yù)習(xí)04技能點(diǎn)拓展03技能點(diǎn)詳解02技能點(diǎn)分析目錄CONTENTS01問(wèn)題引入05技能點(diǎn)檢測(cè)任務(wù)3.2多文件編程三技能點(diǎn)詳解——1頭文件多文件編程就是將程序中所用的變量、函數(shù)或宏定義等程序元素分散到兩個(gè)以上的源文件中定義實(shí)現(xiàn),并通過(guò)包含頭文件方式實(shí)現(xiàn)在多個(gè)源文件中共享。三技能點(diǎn)詳解——1頭文件

頭文件是擴(kuò)展名為.h的文件,有兩種類型的頭文件:程序員編寫的頭文件和編譯器自帶的頭文件。在前面的程序中,我們已經(jīng)多次使用到stdio.h頭文件,它是編譯器自帶的頭文件。頭文件一般包含全局變量的聲明、函數(shù)的聲明、宏定義、結(jié)構(gòu)體定義等,如stdio.h頭文件中包含putchar()、getchar()、printf()、scanf()等標(biāo)準(zhǔn)輸入輸出函數(shù)的聲明。1)頭文件的引用格式

使用預(yù)處理指令#include引用用戶自編和系統(tǒng)自帶的頭文件。它的形式有以下兩種:三技能點(diǎn)詳解——1頭文件格式一:#include<文件名>

本命令的特點(diǎn)是在文件名的首尾用尖括號(hào)括起來(lái)。文件名可以帶路徑。在預(yù)處理時(shí)將只在所指定的標(biāo)準(zhǔn)目錄(即C系統(tǒng)安裝后形成的include子目錄,該子目錄中有系統(tǒng)提供的頭文件)中查找包含文件。格式二:#include"文件名"

本命令格式的特點(diǎn)是在文件名的首尾用雙引號(hào)括起來(lái)。其中,文件名指出的是待包含進(jìn)來(lái)的文件,且可以帶路徑。若文件名帶路徑,則預(yù)處理時(shí)在指定的路徑下去查找。若查找不到,再到系統(tǒng)指定的標(biāo)準(zhǔn)目錄中找。找到文件后,用文件內(nèi)容替換該命令。因此格式二的查找功能包含了格式一的查找功能。另外,兩種格式的include后可以不帶空格。2)頭文件的引用操作如果文件A中有一條文件包含預(yù)處理命令:#include<B>該命令將指定文件B的內(nèi)容替換掉文件A中“#include<B>”命令,共同組成一個(gè)程序文件,即在文件A中產(chǎn)生文件B的一個(gè)副本。例如,如果一個(gè)程序中有一個(gè)頭文件header.h,包含的代碼如下:char*test(void);三技能點(diǎn)詳解——1頭文件三技能點(diǎn)詳解——1頭文件3)頭文件的編寫結(jié)構(gòu)

如果一個(gè)頭文件被引用兩次,編譯器會(huì)處理兩次頭文件的內(nèi)容,這將產(chǎn)生錯(cuò)誤。為了防止這種情況,標(biāo)準(zhǔn)的做法是把文件的整個(gè)內(nèi)容放在條件編譯語(yǔ)句中,一般結(jié)構(gòu)如下:#ifndef_HEADER_H_#define_HEADER_H_……#endif這種結(jié)構(gòu)就是通常所說(shuō)的包裝器#ifndef?!癬HEADER_H_”通常以下劃線“_”作為開頭和結(jié)尾,下劃線之間的字符串通常是大寫的頭文件名,并且“#ifndef”后的標(biāo)識(shí)符和“#define”后面的完全相同,但不同的頭文件中的標(biāo)識(shí)符是不同的。三技能點(diǎn)詳解——2多文件編程

假如我們現(xiàn)在需要編程實(shí)現(xiàn)輸出從鍵盤輸入的兩個(gè)整數(shù)中最大值和最小值,首先我們編寫一個(gè)只含有一個(gè)源文件test.c的程序。#include

<stdio.h>

intmax(intx,inty);//max函數(shù)聲明intmin(intx,inty);//min函數(shù)聲明

voidmain(void){

inta,b,m,n; printf("請(qǐng)輸入第一個(gè)數(shù):"); scanf("%d",&a); printf("請(qǐng)輸入第二個(gè)數(shù):"); scanf("%d",&b); m=max(a,b);//max函數(shù)調(diào)用 n=min(a,b);//min函數(shù)調(diào)用 printf("max=%d\n",m); printf("min=%d\n",n);}

intmax(intx,inty)//max函數(shù)定義{

intm; m=x>y?x:y;

returnm;}

intmin(intx,inty)//min函數(shù)定義{

intn; n=x<y?x:y;

returnn;}三技能點(diǎn)詳解——2多文件編程

根據(jù)前面所說(shuō)的多文件編程的基本思路,下面我們把上面的程序改寫為多文件編程的形式。在各個(gè)文件中,一個(gè)源文件對(duì)應(yīng)一個(gè)頭文件,且文件主名相同,如maxmin.c源文件對(duì)應(yīng)maxmin.h,通常主程序main.c不編寫main.h。頭文件maxmin.h#ifndef_MAXMIN_H_#define_MAXMIN_H_

intmax(intx,inty);//函數(shù)聲明intmin(intx,inty);//函數(shù)聲明

#endif主程序main.c#include

<stdio.h>#include

"maxmin.h"

voidmain(void){

inta,b,m,n; printf("請(qǐng)輸入第一個(gè)數(shù):"); scanf("%d",&a); printf("請(qǐng)輸入第二個(gè)數(shù):"); scanf("%d",&b); m=max(a,b); n=min(a,b); printf("max=%d\n",m); printf("min=%d\n",n);}三技能點(diǎn)詳解——2多文件編程子程序maxmin.c#include

"maxmin.h"

intmax(intx,inty)//max函數(shù)定義,比較出最大值{

intm; m=x>y?x:y;

returnm;}

intmin(intx,inty)//min函數(shù)定義,比較出最小值{

intn; n=x<y?x:y;

returnn;}案例3.2.1計(jì)算器采用多文件編程方式編寫一個(gè)簡(jiǎn)單計(jì)算器的程序,可以實(shí)現(xiàn)對(duì)輸入的兩個(gè)整數(shù)進(jìn)行加、減、乘、除計(jì)算,并輸出計(jì)算的結(jié)果。********************************************************************內(nèi)容簡(jiǎn)述:兩個(gè)整數(shù)的加、減、乘、除的簡(jiǎn)單計(jì)算器*******************************************************************/counter.h頭文件:#ifndef_COUNTER_H_#define_COUNTER_H_

intadd(intx,inty);//加法函數(shù)的聲明intsub(intx,inty);//減法函數(shù)的聲明intmul(intx,inty);//乘法函數(shù)的聲明floatdiv(intx,inty);//除法函數(shù)的聲明

#endif

三技能點(diǎn)詳解——案例display.h頭文件:#ifndef_DISPLAY_H_#define_DISPLAY_H_

#include

<stdio.h>

voiddisp_result(intx,inty);//打印輸出結(jié)果的函數(shù)聲明

#endif

getnum.h頭文件:#ifndef_GETNUM_H_#define_GETNUM_H_

#include

<stdio.h>

intgetnum1(void);//輸入第一整數(shù)的函數(shù)聲明intgetnum2(void);//輸入第二整數(shù)的函數(shù)聲明

#endif

counter.c源文件:intadd(intx,inty)//加法函數(shù)的定義{

returnx+y;}

intsub(intx,inty)//減法函數(shù)的定義{

returnx-y;}

intmul(intx,inty)//乘法函數(shù)的定義{

returnx*y;}

floatdiv(intx,inty)//除法函數(shù)的定義{

return(float)x/y;}三技能點(diǎn)詳解——案例display.c源文件:#include

"counter.h"#include

"display.h"

voiddisp_result(intx,inty){

ints;

floatt;

s=add(x,y);//加法運(yùn)算的結(jié)果 printf("%d+%d=%d\n",x,y,s);

s=sub(x,y);//減法運(yùn)算的結(jié)果 printf("%d-%d=%d\n",x,y,s);

s=mul(x,y);//乘法運(yùn)算的結(jié)果 printf("%d*%d=%d\n",x,y,s);

t=div(x,y);//除法運(yùn)算的結(jié)果 printf("%d/%d=%.2f\n",x,y,t);}getnum.c源文件:#include

"getnum.h"

intgetnum1()//輸入第一個(gè)整數(shù){

inta; printf("請(qǐng)輸入第一個(gè)整數(shù):"); scanf("%d",&a);

returna;}

intgetnum2()//輸入第二個(gè)整數(shù){

inta; printf("請(qǐng)輸入第二個(gè)整數(shù):"); scanf("%d",&a);

returna;}三技能點(diǎn)詳解——案例main.c源文件:#include

"getnum.h"#include

"display.h"

voidmain(void){

inta,b; a=getnum1();//調(diào)用函數(shù)getnum1,獲取第一個(gè)整數(shù) b=getnum2();//調(diào)用函數(shù)getnum2,獲取第二個(gè)整數(shù) disp_result(a,b);//顯示運(yùn)算結(jié)果}實(shí)現(xiàn)算術(shù)運(yùn)算的子程序?qū)?yīng)counter.c的頭文件對(duì)應(yīng)display.c的頭文件對(duì)應(yīng)getnum.c的頭文件實(shí)現(xiàn)打印輸出的子程序通過(guò)調(diào)用子程序中的函數(shù)完成所有功能的主程序獲取輸入數(shù)值的子程序三技能點(diǎn)詳解——案例04技能點(diǎn)拓展03技能點(diǎn)詳解02技能點(diǎn)分析目錄CONTENTS01問(wèn)題引入05技能點(diǎn)檢測(cè)任務(wù)3.2多文件編程四技能點(diǎn)拓展——1條件編譯條件編譯是在對(duì)源程序編譯之前的處理中,根據(jù)給定的條件,決定只編譯其中的某一部分源程序,而不編譯另外一部分源程序。1)控制條件為常量表達(dá)式的條件編譯(1)類單分支格式#if常量表達(dá)式程序段#endif功能是:如果常量表達(dá)式為真(即非0),程序段被編譯。否則,程序段不被編譯。四技能點(diǎn)拓展——1條件編譯(2)類雙分支格式:#if常量表達(dá)式程序段1

#else

程序段2

#endif功能是:如果常量表達(dá)式的值為真(即非0),則在程序編譯時(shí)只對(duì)程序段1進(jìn)行編譯,否則只對(duì)程序段2進(jìn)行編譯。四技能點(diǎn)拓展——1條件編譯(3)類多分支格式:#if常量表達(dá)式1程序段1#elif常量表達(dá)式2程序段2#elif常量表達(dá)式n程序段n#else

程序段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)論