freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

安徽工程科技學(xué)院(編輯修改稿)

2025-03-14 10:22 本頁面
 

【文章內(nèi)容簡介】 類型標(biāo)識符 函數(shù)名(形參表) 如 static int fun(int a, int b ) 內(nèi)部函數(shù)又稱靜態(tài)函數(shù)。使用內(nèi)部函數(shù),可以使函數(shù)只局限于所在文件,如果在不同的文件中有同名的內(nèi)部函數(shù),互不干擾。這樣不同的人可以分別編寫不同的函數(shù),而不必?fù)?dān)心所用函數(shù)是否會(huì)與其他文件中函數(shù)同名,通常把只能由同一文件使用的函數(shù)和外部變量放在一個(gè)文件中,在它們前面都冠以 static使之局部化,其他文件不能引用。 ? ? ( 1)在定義函數(shù)時(shí),如果在函數(shù)首部的最左端冠以關(guān)鍵字 extern,則表示此函數(shù)是外部函數(shù),可供其他文件調(diào)用。 ? 如函數(shù)首部可以寫為 ? extern int fun (int a, int b) ? 這樣,函數(shù) fun 就可以為其他文件調(diào)用。C語言規(guī)定,如果在定義函數(shù)時(shí)省略extern,則隱含為外部函數(shù)。本書前面所用的函數(shù)都是外部函數(shù)。 ? ( 2)在需要調(diào)用此函數(shù)的文件中,用extern聲明所用的函數(shù)是外部函數(shù)。 ? 【例 】 有一個(gè)字符串,內(nèi)有若干個(gè)字符,今輸入一個(gè)字符,要求程序?qū)⒆址性撟址麆h去。用外部函數(shù)實(shí)現(xiàn)。 ? (文件 1) ? main() ? { extern enter_string ( char str [80]); ? extern delete_string (char str [ ], char ch); ? extern print_string (char str [ ])。 ? /*以上 3行聲明在本函數(shù)中將要調(diào)用的在其他文件中定義的 3個(gè)函數(shù)*/ char c; char str[80]; enter_strng(str); scanf(%c, c); delete_string(str,c); print_string(str); } (文件 2) include ? enter_string(char str[80]) /*定義外部函數(shù)enter_srting*/ ? { gets(str);} /*向字符數(shù)組輸入字符串 */ (文件 3) delete_string(char str [],char ch) /*定義外部函數(shù) delete_string*/ { int i,j; for(i=j=0; str[i]!=\0 ; i++) if(str[i]!=ch) str[j++]=str[i]。 str[j]= \0 ; } (文件 4) print_string(char str[ ]) /*定義外部函數(shù)print_string*/ { printf(%s ,str)。 } 運(yùn)行情況如下: abcdefgc↙ (輸入 str) c↙ (輸入要?jiǎng)h去的字符 ) abdefg (輸出已刪去指定字符的字符串) 整個(gè)程序由 4個(gè)文件組成。每個(gè)文件包含一個(gè)函數(shù)。主函數(shù)是主控函數(shù),除聲明部分外,由 4個(gè)函數(shù)調(diào)用語句組成。其中scanf是庫函數(shù),另外 3個(gè)是用戶自己定義的函數(shù)。函數(shù) delete_string的作用是根據(jù)給定的字符串和要?jiǎng)h除的字符 ch,對字符串作刪除處理。算法是這樣的:對 str數(shù)組的字符逐個(gè)檢查,如果不是被刪除的字符就將它存放在數(shù)組中,見圖 (設(shè)刪除空格)。 從 str[0]開始逐個(gè)檢查數(shù)組元素值是否等于指定要?jiǎng)h除的字符, 若不是就留在數(shù)組中,若是就不保留。從圖中可以看到,應(yīng)該使 str[0]賦給 str[0],str[1]str[1], str[2]str[2], str[3]str[3],然后, str[5]str[4], …… 請讀者注意分析如何控制 i和 j的變化,以便使被刪除的字符不保留在原數(shù)組中。這個(gè)題目當(dāng)然可以設(shè)兩個(gè)數(shù)組,把不刪除的字符 ―― 賦給新數(shù)組。但我們只用一個(gè)數(shù)組,只把不被刪除的字符保留下來。由于 I總是二于或等于 j,因此最后保留下來的字符不會(huì)覆蓋未被檢測處理的字符。最后將結(jié)束符 \o也復(fù)制到被保留的字符后面。 ? 程序中 3個(gè)函數(shù)都定義為外部函數(shù)。在 main函數(shù)中用 extern聲明在 main函數(shù)中用到的enter_string、 delete_string、 print_string是在其他文件中定義的外部函數(shù)。 ? 通過此例可知:使用 extern聲明就能夠在一個(gè)文件中調(diào)用其他文件中定義的函數(shù),或者說把該函數(shù)的作用域擴(kuò)展到本文件。 Extern聲明的形式就是在函數(shù)原型基礎(chǔ)上加關(guān)鍵字 extern(見本例 main函數(shù)中的聲明形式)。由于函數(shù)在本質(zhì)上是外部的,在程序中經(jīng)常要調(diào)用外部函數(shù) ,耿方便編程, C語言允許在聲明函數(shù)時(shí)省寫 extern。例 main函數(shù)中對 power函數(shù)的聲明就沒有用 extern,但作用相同,一般都省寫 extern,例如例 main函數(shù)中的第一個(gè)函數(shù)聲明可寫成 enter_string(char str[80]) ? 這就是我們多次用過的函數(shù)原型。由此可以進(jìn)一步理解函數(shù)原型的作用。用函數(shù)原型也能夠把函數(shù)的作用域擴(kuò)展到定義該函數(shù)的文件之外(不必使用 extern)。只要在使用該函數(shù)的每一個(gè)文件中包含該函數(shù)的函數(shù)原型即可。函數(shù)原型通知編譯系統(tǒng):該函數(shù)在本文件中稍后定義,或在另一文件中定義。 ? 利用函數(shù)原型擴(kuò)展函數(shù)作用域最常見的例子是# include命令的應(yīng)用。在前面幾章中曾多次使用過# include命令,并提到過:# include命令所指定的“頭文件”中包含有調(diào)用庫函數(shù)時(shí)所需的信息。例如,在程序中需要調(diào)用 sin函數(shù),但三角函數(shù)并不是由用戶在本文件中定義的,而是存放在數(shù)學(xué)函數(shù)庫中的。按以上的介紹,必須在本文件中寫出 sin函數(shù)的原型,否則無法調(diào)用 sin函數(shù)。 Sin函數(shù)的原型是 double sin(double x) ? 顯然,要求程序設(shè)計(jì)者在調(diào)用庫函數(shù)時(shí)先從手冊可查出所用的庫函數(shù)的原型,并在程序中一一寫出來是麻煩而困難的。為減少程序設(shè)計(jì)者的困難,在頭文件其他有關(guān)信息,用戶只需用以下 include命令: ? include< > ? 這樣,在該文件中就能合法地調(diào)用各數(shù)學(xué)庫函數(shù)了。 6. 9 編譯預(yù)處理 ANSI C標(biāo)準(zhǔn)規(guī)定可以在 C源程序中加入一些“預(yù)處理命令”( preprocessor directives),以改進(jìn)程序設(shè)計(jì)環(huán)境,提高編程效率。這些預(yù)處理命令是由 ANSI C統(tǒng)一規(guī)定的,但是它不是 C語言本身的組成部分,不能直接對它們進(jìn)行編譯(因?yàn)榫幾g程序不能識別它們。)必須在對程序進(jìn)行通常的編譯(包括詞法和語法分析、代碼生成、優(yōu)化等)之前,先對程序中這些特殊的命令進(jìn)行“預(yù)處理”,即根據(jù)預(yù)處理命令對程序作相應(yīng)的處理(例如,若程序中用# define命令定義了一個(gè)符號常量 A,則在預(yù)處理時(shí)將程序中所有的 A都置換為指定的字符串。若程序中用# include命令包含一個(gè)文件“ ”,則在預(yù)處理時(shí)將 代替該命令)。 經(jīng)過預(yù)處理后程序不再包括預(yù)處理命令了,最后再由編譯程序?qū)︻A(yù)處理后的源程序進(jìn)行通常的編譯處理,得到可供執(zhí)行的目標(biāo)代碼?,F(xiàn)在使用的許多 C編譯系統(tǒng)都包括了預(yù)處理、編譯和連接等部分,在進(jìn)行編譯時(shí)一氣呵成。因此不少用戶誤認(rèn)為預(yù)處理命令是 C語言的一部分,甚至以為它們是 C語句,這是不對的。必須正確區(qū)別預(yù)處理命令和 C語句、區(qū)別預(yù)處理和編譯,才能正確使用預(yù)處理命令。 C語言與其他高級語言的一個(gè)重要區(qū)別是可以使用預(yù)處理命令和具有預(yù)處理的功能。 C提供的預(yù)處理功能主要有以下三種: 分別用宏定義命令、文件包含命令、條件編譯命令來實(shí)現(xiàn)。為了與一般 C語句相區(qū)別,這些命令以符號“?!遍_頭。 宏定義 用一個(gè)指定的標(biāo)識符(即名子)來代表一個(gè)字符串,它的一般形式為 # define 標(biāo)識符 字符串 這就是已經(jīng)介紹過的定義符號常量。如: # define PI 它的作用是指定用標(biāo)識符 PI來代替“ ”這個(gè)字符串,在編譯預(yù)處理時(shí),將程序中在該命令以后出現(xiàn)的所有的 PI都用“ ”代替。這種方法使用戶能以一個(gè)簡單的名字代替一個(gè)長的字符串,因此把這個(gè)標(biāo)識符(名字)稱為“宏名”,在預(yù)編譯時(shí)將宏名替換成字符串的過程稱為“宏展開”。# define是宏定義命令。 【例 】 # define PI main( ) { float l, s, r, v; printf(input radius:); scanf(%f,r); l= *PI*r; s=PI*r*r; v=*PI*r*r*r; printf(i=%\ns=%\nv=%\n, l, s,v); } 運(yùn)行情況如下: input radius:4? l=??? s=??? v=?? ? 說明: ? ( 1)宏名一般習(xí)慣用大寫字母表示,以便與變量名相區(qū)別。但這并非規(guī)定,也可用小寫字母。 ? ( 2)使用宏名代替一個(gè)字符串,可以減少程序中重復(fù)寫某些字符串的工作量。例如,如果不定義 PI代表 ,不僅麻煩,而且容易寫錯(cuò)(或敲錯(cuò)),用宏名代替,簡單不易出錯(cuò),因?yàn)橛涀∫粋€(gè)宏名(它的名字往往用容易理解的單詞表示)要比記住一個(gè)無規(guī)律的字符串容易,而且在讀程序時(shí)能立即知道它的含義,當(dāng)需要改變某一個(gè)常量時(shí),可以只改變# define命令行,一改全改。 例如,定義數(shù)組大小,可以用: # define array_size 1000 int array[array_size]; 先指定 array_size代表常量 1000,因此數(shù)組 array大小為 1000,如果需要改變數(shù)組大小,只需改# define行: # define array_size 500 使用宏定義,可以提高程序的通用性。 ? ( 3)宏定義是用宏名代替一個(gè)字符串,也就是作簡單的置換,不作正確性檢查。如果寫成 ? define PI ? 即把數(shù)字 1寫成小寫字母 l,預(yù)處理時(shí)也照樣代人,不管含義是否正確。也就是說預(yù)編譯時(shí)不作任何語示檢查。只有在編譯已被宏展開后的源程序時(shí)才會(huì)發(fā)現(xiàn)錯(cuò)誤并報(bào)錯(cuò)。 ? ( 4)宏定義不是 C語句,不必在行末加分號。如果加了分號則會(huì)連分號一起進(jìn)行置換。如: ? define PI ; ? area=PI*r*r。 ? 經(jīng)過宏展開后,該語句為 ? area=*r*r; ? 顯然出現(xiàn)語法錯(cuò)誤。 ? ( 5) define命令出現(xiàn)在程序中函數(shù)的外面,宏名的有效范圍為定義命令之后到本源文件結(jié)束。通常,define命令寫在文件開頭,函數(shù)之前,作為文件一部分,在此文件范圍內(nèi)有效。 ? ( 6)可以用 undef命令終止宏定義的作用域。例如: define G —— main( ) { | G的有效范圍 ┆ } undef G —— f1( ) { ┆ } 由于 undef的作用,使 G的作用范圍在 undef行處終止,因此在 f1函數(shù)中, G不再代表 。這樣可以靈活控制宏定義的作用范圍。 ( 7)在進(jìn)行宏定義時(shí),可以引用已定義的宏名,可以層層置換。 【例 】 define R define PI define L 2*PI*R define S PI*R*R main( ) { printf(” L=%f\nS=%f\n” ,L,S)。 } 運(yùn)行情況如下: L= S= ? 經(jīng)過宏展開后, printf函數(shù)中的輸出項(xiàng) L被展開為 2**, S展開為 **,printf函數(shù)調(diào)用語句展開為 ? printf(” L=%f\nS=%f\n” ,2**,5926**)。 ? ( 8)對程序中用雙撇號括起來的字符串內(nèi)的字符,即使與宏名相同,也不進(jìn)行置換。如例 中的 printf函數(shù)內(nèi)有兩個(gè) L字符,一個(gè)在雙撇號內(nèi),它不被宏置換,另一個(gè)在雙撇號外,被宏置換展開。 ? ( 9)宏定義是專門用于預(yù)處理命令的一個(gè)專用名詞,它與定義變量的含義不同,只作字符替換,不分配內(nèi)存空間。 不是進(jìn)行簡單的字符串替換,還要進(jìn)行參數(shù)替換。其定義的一般形式為 define宏名(參
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1