




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C語言程序設計基礎與實踐模塊一編程技術基礎任務3.2多文件編程C語言程序設計基礎與實踐課程組04技能點拓展03技能點詳解02技能點分析目錄CONTENTS任務3.2多文件編程01問題引入05技能點檢測一問題引入
進入數(shù)字經濟時代,開源技術的重要價值日漸凸顯,已經成為數(shù)字經濟的基礎設施與底座。開源技術是一個巨大的知識寶庫,我們在享用這個知識寶庫的同時,當知這個知識寶庫正是無數(shù)前人的奉獻積累而成的。
那么如何使我們的C語言編程代碼能夠共享交流,實現(xiàn)開源技術的價值呢?這就需要我們掌握多文件編程的方法,使編程思路更清晰、程序結構更簡單、更易于程序的讀寫和移植。04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務3.2多文件編程二技能點分析1.掌握頭文件編寫方法;2.學會使用多文件編程模式編寫程序。學習目標1.什么是多文件編程?多文件編程具有哪些優(yōu)點?2.頭文件一般包括哪些內容?3.頭文件的引用格式有哪些?它們之間有何異同點?學期預習04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務3.2多文件編程三技能點詳解——1頭文件多文件編程就是將程序中所用的變量、函數(shù)或宏定義等程序元素分散到兩個以上的源文件中定義實現(xiàn),并通過包含頭文件方式實現(xiàn)在多個源文件中共享。三技能點詳解——1頭文件
頭文件是擴展名為.h的文件,有兩種類型的頭文件:程序員編寫的頭文件和編譯器自帶的頭文件。在前面的程序中,我們已經多次使用到stdio.h頭文件,它是編譯器自帶的頭文件。頭文件一般包含全局變量的聲明、函數(shù)的聲明、宏定義、結構體定義等,如stdio.h頭文件中包含putchar()、getchar()、printf()、scanf()等標準輸入輸出函數(shù)的聲明。1)頭文件的引用格式
使用預處理指令#include引用用戶自編和系統(tǒng)自帶的頭文件。它的形式有以下兩種:三技能點詳解——1頭文件格式一:#include<文件名>
本命令的特點是在文件名的首尾用尖括號括起來。文件名可以帶路徑。在預處理時將只在所指定的標準目錄(即C系統(tǒng)安裝后形成的include子目錄,該子目錄中有系統(tǒng)提供的頭文件)中查找包含文件。格式二:#include"文件名"
本命令格式的特點是在文件名的首尾用雙引號括起來。其中,文件名指出的是待包含進來的文件,且可以帶路徑。若文件名帶路徑,則預處理時在指定的路徑下去查找。若查找不到,再到系統(tǒng)指定的標準目錄中找。找到文件后,用文件內容替換該命令。因此格式二的查找功能包含了格式一的查找功能。另外,兩種格式的include后可以不帶空格。2)頭文件的引用操作如果文件A中有一條文件包含預處理命令:#include<B>該命令將指定文件B的內容替換掉文件A中“#include<B>”命令,共同組成一個程序文件,即在文件A中產生文件B的一個副本。例如,如果一個程序中有一個頭文件header.h,包含的代碼如下:char*test(void);三技能點詳解——1頭文件三技能點詳解——1頭文件3)頭文件的編寫結構
如果一個頭文件被引用兩次,編譯器會處理兩次頭文件的內容,這將產生錯誤。為了防止這種情況,標準的做法是把文件的整個內容放在條件編譯語句中,一般結構如下:#ifndef_HEADER_H_#define_HEADER_H_……#endif這種結構就是通常所說的包裝器#ifndef?!癬HEADER_H_”通常以下劃線“_”作為開頭和結尾,下劃線之間的字符串通常是大寫的頭文件名,并且“#ifndef”后的標識符和“#define”后面的完全相同,但不同的頭文件中的標識符是不同的。三技能點詳解——2多文件編程
假如我們現(xiàn)在需要編程實現(xiàn)輸出從鍵盤輸入的兩個整數(shù)中最大值和最小值,首先我們編寫一個只含有一個源文件test.c的程序。#include
<stdio.h>
intmax(intx,inty);//max函數(shù)聲明intmin(intx,inty);//min函數(shù)聲明
voidmain(void){
inta,b,m,n; printf("請輸入第一個數(shù):"); scanf("%d",&a); printf("請輸入第二個數(shù):"); scanf("%d",&b); m=max(a,b);//max函數(shù)調用 n=min(a,b);//min函數(shù)調用 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;}三技能點詳解——2多文件編程
根據前面所說的多文件編程的基本思路,下面我們把上面的程序改寫為多文件編程的形式。在各個文件中,一個源文件對應一個頭文件,且文件主名相同,如maxmin.c源文件對應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("請輸入第一個數(shù):"); scanf("%d",&a); printf("請輸入第二個數(shù):"); scanf("%d",&b); m=max(a,b); n=min(a,b); printf("max=%d\n",m); printf("min=%d\n",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計算器采用多文件編程方式編寫一個簡單計算器的程序,可以實現(xiàn)對輸入的兩個整數(shù)進行加、減、乘、除計算,并輸出計算的結果。********************************************************************內容簡述:兩個整數(shù)的加、減、乘、除的簡單計算器*******************************************************************/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
三技能點詳解——案例display.h頭文件:#ifndef_DISPLAY_H_#define_DISPLAY_H_
#include
<stdio.h>
voiddisp_result(intx,inty);//打印輸出結果的函數(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;}三技能點詳解——案例display.c源文件:#include
"counter.h"#include
"display.h"
voiddisp_result(intx,inty){
ints;
floatt;
s=add(x,y);//加法運算的結果 printf("%d+%d=%d\n",x,y,s);
s=sub(x,y);//減法運算的結果 printf("%d-%d=%d\n",x,y,s);
s=mul(x,y);//乘法運算的結果 printf("%d*%d=%d\n",x,y,s);
t=div(x,y);//除法運算的結果 printf("%d/%d=%.2f\n",x,y,t);}getnum.c源文件:#include
"getnum.h"
intgetnum1()//輸入第一個整數(shù){
inta; printf("請輸入第一個整數(shù):"); scanf("%d",&a);
returna;}
intgetnum2()//輸入第二個整數(shù){
inta; printf("請輸入第二個整數(shù):"); scanf("%d",&a);
returna;}三技能點詳解——案例main.c源文件:#include
"getnum.h"#include
"display.h"
voidmain(void){
inta,b; a=getnum1();//調用函數(shù)getnum1,獲取第一個整數(shù) b=getnum2();//調用函數(shù)getnum2,獲取第二個整數(shù) disp_result(a,b);//顯示運算結果}實現(xiàn)算術運算的子程序對應counter.c的頭文件對應display.c的頭文件對應getnum.c的頭文件實現(xiàn)打印輸出的子程序通過調用子程序中的函數(shù)完成所有功能的主程序獲取輸入數(shù)值的子程序三技能點詳解——案例04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務3.2多文件編程四技能點拓展——1條件編譯條件編譯是在對源程序編譯之前的處理中,根據給定的條件,決定只編譯其中的某一部分源程序,而不編譯另外一部分源程序。1)控制條件為常量表達式的條件編譯(1)類單分支格式#if常量表達式程序段#endif功能是:如果常量表達式為真(即非0),程序段被編譯。否則,程序段不被編譯。四技能點拓展——1條件編譯(2)類雙分支格式:#if常量表達式程序段1
#else
程序段2
#endif功能是:如果常量表達式的值為真(即非0),則在程序編譯時只對程序段1進行編譯,否則只對程序段2進行編譯。四技能點拓展——1條件編譯(3)類多分支格式:#if常量表達式1程序段1#elif常量表達式2程序段2#elif常量表達式n程序段n#else
程序段n+
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年沈丘往年面試試題及答案
- 2025年python軟件測試面試題及答案
- 2025年碎步測量測試題及答案
- 2025年大白梨汽水測試題及答案
- 2025年公文格式小測試題及答案
- 2025年土壤污染工程試題及答案
- 創(chuàng)新創(chuàng)業(yè)全國管理決策模擬大賽安徽賽
- 2025年單招護理面試題及答案
- 2025年前期報建專員筆試題及答案
- 2025年杭州二?;瘜W試題及答案
- 2025年孝感貨運從業(yè)資格考試
- 防災避險安全應急知識培訓課件
- 2023年新高考全國Ⅱ卷語文真題(解析版)
- 2025年政府采購評審專家理論考試復習試指導題庫(含答案)
- 2025屆西北四省(山西、陜西、青海、寧夏)高三下學期第一次聯(lián)考英語試題
- 高中主題班會 復盤-在思考中學習課件-高中上學期主題班會
- 中考生物總復習《用藥、急救與健康地生活》專項測試題及答案
- 2.2學會管理情緒 課件 -2024-2025學年統(tǒng)編版道德與法治七年級下冊
- 2024-2025學年第二學期教學教研工作安排表 第二版
- 2024年高州市人民醫(yī)院廣東醫(yī)學院附屬高州醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 出租汽車行業(yè)安全監(jiān)管與自律
評論
0/150
提交評論