




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
編譯預(yù)處理
在C語言源程序中以“#”號開頭的預(yù)處理命令都放在函數(shù)之外,一般都放在源文件的前面,它們稱為預(yù)處理部分。所謂預(yù)處理是指在進行編譯的第一遍掃描(詞法掃描和語法分析)之前所作的工作。預(yù)處理是C語言的一個重要功能,由預(yù)處理程序負責完成。對源文件進行編譯時,系統(tǒng)將自動引用預(yù)處理程序?qū)υ闯绦蛑蓄A(yù)處理部分作處理,處理完再自動進入對源程序的編譯。C語言提供了多種預(yù)處理功能,主要有宏定義、文件包含、條件編譯。7.1宏定義
預(yù)處理命令#define用來建立符號常量(用符號表示的常量)和宏(用符號定義的操作)。
C語言源程序中用一個標識符來表示一個字符串,稱為宏。被定義為“宏”的標識符稱為“宏名”。在編譯預(yù)處理時,對程序中所有出現(xiàn)的“宏名”,都用宏定義中的字符串去代換,稱為“宏代換”或“宏展開”。宏定義是由源程序中的宏定義命令完成的。宏代換是由預(yù)處理程序自動完成的。C語言中,“宏”分為有參數(shù)和無參數(shù)兩種。7.1宏定義7.1.1無參宏定義例7-1通過鍵盤輸入50個實數(shù),將其中大于它們平均值的數(shù)打印輸出。(未使用宏定義)voidmain(){inti;floatx[50],ave=0;for(i=0;i<50;i++){scanf("%f",&x[i]);ave+=x[i];}ave=ave/50;for(i=0;i<50;i++)if(x[i]>ave)printf("%f",x[i]);}7.1宏定義7.1.1無參宏定義例7-2通過鍵盤輸入100個實數(shù),將其中大于它們平均值的數(shù)打印輸出。(使用無參宏定義)#defineNUM100voidmain(){inti;floatx[NUM],ave=0;for(i=0;i<NUM;i++){scanf("%f",&x[i]);ave+=x[i];}ave=ave/NUM;for(i=0;i<NUM;i++)if(x[i]>ave)printf("%f",x[i]);}7.1宏定義7.1.1無參宏定義一般形式:#define標識符字符串第一部分為#define命令本身。第二部分為自定義的宏名。宏的名字中不允許有空格,遵循C語言變量的命名規(guī)則。第三部分(#define行的其余部分)稱為替換文本。預(yù)處理器在處理過程中發(fā)現(xiàn)程序中的宏實例后,會用它的等價替換文本代替宏。從宏變成最終替換文本的過程為“宏展開”或“宏代換”。
如例7-2的程序被預(yù)處理之后,程序中所有的NUM已經(jīng)由預(yù)處理器替換成了100。從這里可以看出給符號常量取有意義的名字能提高程序的可讀性和可維護性。
7.1宏定義7.1.1無參宏定義例7-3輸入一個圓的半徑,輸出該圓的周長。#definePI3.14#defineC2*PI*r /*PI是已定義的宏名*/voidmain(){doubler;printf("EnterTheRadius\n");scanf("%lf",&r);
printf("ThePerimeter=%lf\n",C);}printf("ThePerimeter=%lf\n",2*3.14*r);printf("ThePerimeter=%lf\n",2*PI*r);7.1宏定義7.1.1無參宏定義C語言允許宏定義嵌套,在宏定義的字符串中可以使用已經(jīng)定義的宏名。在宏展開時由預(yù)處理器進行層層代換。本例的宏定義用“C”替換表達式“2*PI*r”,因此宏不僅可以代替常量,宏還可以表示任何字符串,甚至是整個表達式。如果本例中沒有“doubler;”這個定義,則程序編譯時會出現(xiàn)變量未定義的語法錯誤。因此,我們還要注意若替換字符串中含有其他字符,一般需要在程序中定義,否則編譯時會出現(xiàn)標識符(變量)未定義的錯誤。這樣做的原因在于預(yù)處理器不能理解C語言,預(yù)處理時不檢查語法,不分配內(nèi)存空間,僅作簡單字符串置換。源程序只有在進行編譯時才作語法檢查。7.1宏定義7.1.1無參宏定義例7-4分析下列程序是否有錯。#defineX10#defineY20;voidmain(){intsum;sum=X+Yprintf("X+Y=%d",sum);}程序運行結(jié)果:
X+Y=30
7.1宏定義7.1.1無參宏定義
本例中語句“sum=X+Y”后面沒有分號結(jié)尾,但是程序并沒有編譯出錯。原因在于這條語句在預(yù)處理過程中已經(jīng)被展開成“sum=10+20;”是符合C語法的。注意,宏定義不是語句,不必在末尾加上分號。若加了分號,則分號也是作為替換字符串的一部分。宏名在源程序中若用引號括起來,則預(yù)處理器不對其作宏代換。所以本例的運行結(jié)果是“X+Y=30”,而不是“10+20=30”,原因在于printf輸出語句中雖然X和Y都是宏名,但是它們被引號括起來,所以不被宏展開,而是原樣輸出。7.1.1無參宏定義使用無參數(shù)宏定義還有以下幾點說明:
宏名遵守C語言標識符的命名規(guī)則,宏名中間不能有空格,但是在替代字符串中可以使用空格。習(xí)慣上宏名用大寫字母表示,方便與變量區(qū)別,但也允許用小寫字母。對大多數(shù)的數(shù)字常量應(yīng)該使用符號常量。如果是用于計算式中的常量,那么使用符號名會讓其含義更加清楚。如果數(shù)字代表數(shù)組大小,那么使用符號名后更容易改變數(shù)組大小和循環(huán)界限(如例7-2)。如果數(shù)值是系統(tǒng)代碼(如EOF等),那么使用符號表示會使程序更加易于移植(只需改變EOF的值)。7.1.1無參宏定義
宏定義必須寫在函數(shù)之外,其作用域從定義開始到用#undef取消其定義或到文件結(jié)束為止。取消了符號常量和宏名約定以后,可以用命令#define重新定義它。通常,#define命令寫在文件的開頭,函數(shù)之前,使其在本文件中全部有效。
#defineMIN500
┇
宏名MIN的有效范圍
#undefMIN/*此處取消了MIN的定義*/
┇
宏定義的替換文本通常在同一行中,如果替換文本超過一行,必須在該行的最后加上反斜杠“\”,反斜杠表示替換文本繼續(xù)到下一行。
7.1宏定義
#define7.1.2帶參宏定義
無參數(shù)宏用于定義符號來代替常量,C語言還允許用符號來定義操作。通過使用參數(shù),可以創(chuàng)建外形和作用都與函數(shù)相似的類函數(shù)宏。例7-5用定義帶參數(shù)宏來改寫例7-3的程序。#definePI3.14#defineC(r)2*PI*r /*PI是已定義的宏名*/voidmain(){doubleradius,perimeter;printf("EnterTheRadius\n");scanf("%lf",&radius);
perimeter=C(radius);
printf("ThePerimeter=%lf\n",perimeter);}此處宏展開為
perimeter=2*3.14*radius;
7.1宏定義
#define7.1.2帶參宏定義
在本例中第二個宏定義#defineC(r)2*PI*r與例7-3相比多了一對括號,以及括號中的參數(shù)r,在程序中使用該宏的時候也有相對應(yīng)的參數(shù)。我們來看這樣的宏代換是如何進行的。當預(yù)處理器遇到宏調(diào)用“perimeter=C(radius);”時,先用radius取代替換文本中的r,然后將宏展開,展開后的代碼為“perimeter=2*3.14*radius;”程序編譯運行后輸入半徑值給變量radius,則可以得到圓的周長。兩個例子最大的不同在于例7-3的宏定義要求程序在輸入半徑時必須使用變量名r,而本例中程序中的半徑變量名可以由用戶自定義。
7.1宏定義
#define7.1.2帶參宏定義
本例宏定義括號內(nèi)的r稱為形式參數(shù),將宏調(diào)用時出現(xiàn)的變量名radius稱為實際參數(shù),形參和實參可以不止一個。帶參數(shù)宏定義的一般形式為:
#define宏名(形參表)替換文本帶參宏調(diào)用的一般形式為:
宏名(實參表)帶參宏定義的宏展開步驟可以歸納為下面兩步:
①自左向右依次將替換文本中形參字符用相應(yīng)位置上的實參字符來替換;
②在程序中出現(xiàn)宏調(diào)用的位置進行宏展開,這一步與無參宏定義的宏代換相同。
7.1宏定義
#define7.1.2帶參宏定義
宏的參數(shù)用圓括號括起來,宏名與參數(shù)表間不能有空格,否則將作為無參數(shù)宏來處理,把括號和參數(shù)列表也作為替代文本的一部分。但是在替代文本中可以使用空格,也允許在參數(shù)列表中使用空格。帶參宏定義中的形參是標識符,而宏調(diào)用中的實參可以是表達式。帶參宏展開時,用實參字符串替換形參字符串,由于運算符的優(yōu)先級問題,可能發(fā)生邏輯錯誤??梢圆捎媒o宏定義的形參加括號的方法來解決,用圓括號括住每個參數(shù),并括住宏的整體定義。
注意,宏展開只是一個字符替換的過程,不考慮語法和算法。
宏不檢查其中的變量類型(這是因為宏處理字符型字符串,而不是實際值)。
7.1.2有參宏定義
例7-6定義一個帶參數(shù)的宏定義,用來交換兩個變量的值。#defineswap(x,y)t=x;x=y;y=t;voidmain(){doublea=1,b=2,t;swap(a,b)/*宏展開后為t=a;a=b;b=t;*/printf("%lf\t%lf\n",a,b);}
宏定義也可用來定義多個語句,在宏調(diào)用時,把這些語句又代換到源程序內(nèi)。
7.1.2有參宏定義
例7-7在替換文本中對形參進行替換。#include<math.h>#defineP(x)printf("Thesquarerootof"#x"is%.2lf\n",sqrt(x))voidmain(){doublem=4;P(m);P(2+7);}程序運行結(jié)果:Thesquarerootofmis2.00Thesquarerootof2+7is3.007.1.2有參宏定義
宏定義中,若替換文本中的形式參數(shù)在引號中,則宏展開時不被實參替換。假設(shè)確實希望替換文本中包含宏參數(shù),C語言允許在帶參數(shù)宏的替換部分中,用符號“#”做一個預(yù)處理運算符,它可以把語言符號轉(zhuǎn)化為字符串。形式參數(shù)若以“#”作為前綴,那么宏展開時它將被帶引號的實參字符串替換,這個過程稱為字符串化。7.1.2有參宏定義
7.1.3帶參宏與函數(shù)的比較
例7-8使用函數(shù)來實現(xiàn)例7-5求圓周長的功能。#definePI3.14doubleC(doubler);voidmain(){doubleradius,perimeter;printf("EnterTheRadius\n");scanf("%lf",&radius);perimeter=C(radius);printf("ThePerimeter=%lf\n",perimeter);}doubleC(doubler){return2*PI*r;}7.1.2有參宏定義
7.1.3帶參宏與函數(shù)的比較
在例7-5的帶參宏定義中,形式參數(shù)r不分配內(nèi)存單元,因此不必作類型定義。宏調(diào)用中的實參radius有具體的值,宏展開時用它去代換形參r,因此必須作類型說明。在本例的函數(shù)中,形參r和實參radius是兩個不同的量,有各自的作用域,調(diào)用時要把實參值賦予形參,進行“值傳遞”。而帶參宏只是簡單的字符代換,不存在值傳遞的問題。7.1.2有參宏定義
函數(shù)調(diào)用和宏調(diào)用二者在形式上相似,在本質(zhì)上是完全不同的。現(xiàn)將它們的區(qū)別歸納如表所示:
區(qū)別項目
函數(shù)
宏
信息傳遞
實參的值或地址傳送給形參。
用實參的字符串替換形參。
處理時刻、內(nèi)存分配情況
程序運行時處理,分配臨時內(nèi)存單元。
宏展開在預(yù)編譯時處理,不存在分配內(nèi)存的問題。
參數(shù)類型
實參和形參類型一致。如不一致,編譯器進行類型轉(zhuǎn)換。
作字符串替換,不存在參數(shù)類型問題。
返回值
可以有一個返回值。
作字符串替換,不存在返回值問題。
對源程序的影響
無影響。
宏展開后使程序加長。
時間占用
占用程序運行時間。
占用編譯時間。
7.1.2有參宏定義
同樣的任務(wù)既可以使用帶參數(shù)的宏完成,也可以使用函數(shù)完成。應(yīng)該使用宏還是函數(shù)呢?帶參數(shù)的宏與函數(shù)間的選擇實際上是時間和空間的權(quán)衡。宏產(chǎn)生內(nèi)聯(lián)代碼;也就是說,在程序中產(chǎn)生語句。如果使用宏10次,就會把10行代碼插入程序中。如果使用函數(shù)10次,那么程序中只有1份函數(shù)的拷貝,節(jié)省了空間。另一方面,使用函數(shù)時程序的控制必須轉(zhuǎn)移到函數(shù)中并隨后返回調(diào)用程序,因此這比內(nèi)聯(lián)代碼花費的時間多。7.2文件包含命令
#include
所謂“文件包含”,是指一個原文件可以將另外一個原文件的所有內(nèi)容包含進來。其使用格式為:#include“文件名”或:#include<文件名>
例如,在前面我們已多次用此命令包含過庫函數(shù)的頭文件:#include“stdio.h”/*包含標準輸入輸出頭文件*/#include“math.h”/*包含數(shù)學(xué)函數(shù)頭文件*/#include“string.h”/*包含字符串處理函數(shù)頭文件*/
預(yù)處理器發(fā)現(xiàn)#include命令后,就會尋找后跟的文件名,并把這個文件的內(nèi)容替換源代碼文件中的這一行#include命令,從而把指定的文件和當前的源程序文件連成一個源文件,再對合并后的文件進行編譯。7.2文件包含命令
#include例7-9
修改例7-5求圓周長的程序成為兩個文件。文件一:文件名為mydef.h;文件內(nèi)容如下:
#definePI3.14#defineC(r)2*PI*r文件二:文件名為perimeter.c;文件內(nèi)容如下:#include<stdio.h>#include"mydef.h"voidmain(){doubleradius,perimeter;printf("EnterTheRadius\n");scanf("%lf",&radius);perimeter=C(radius); printf("ThePerimeter=%lf\n",perimeter);}此處宏展開為
perimeter=2*3.14*radius;7.2文件包含命令
#include
本例中,將文件perimeter.c進行編譯之后,文件mydef.h的全部內(nèi)容將替換文件perimeter.c中的#include“mydef.h”命令,則源程序與例7-5完全相同。為什么要包含文件呢?因為這些文件包含編譯器所需的信息。例如,stdio.h文件通常包含EOF、NULL、getchar()和putchar()等的定義,還包含C語言I/O函數(shù)的原型。在程序設(shè)計中,文件包含是很有用的。一個大型程序可以分為多個模塊,由多個程序員分別編程。有些公用的符號常量或宏定義等可單獨組成一個文件,在其他文件的開頭用包含命令包含該文件即可使用。說明:7.2文件包含命令
#include
這樣,可避免在每個文件開頭都去書寫那些公用量,從而節(jié)省時間,并減少出錯。習(xí)慣上使用后綴.h表示這樣的頭文件,這類文件包含置于程序頭部的信息,經(jīng)常包含預(yù)處理器命令。有些頭文件由系統(tǒng)提供,也可以創(chuàng)建自己的頭文件。
#include命令的兩種形式區(qū)別在于預(yù)處理器查找要被包含的文件的路徑不同。如果雙引號標識文件名,則預(yù)處理器在正在編譯的程序所在的目錄中查找要被包含的文件,若找不到,再到存放C庫函數(shù)頭文件所在的目錄中去查找,該方法通常用來把程序員自定義的頭文件包含到程序中。如果用尖括號標識文件名,預(yù)處理器就直接到存放C庫函數(shù)頭文件所在的目錄中去查找,該方法通常用于調(diào)用庫函數(shù),節(jié)約查找的時間。7.2文件包含命令
#include
一個#include命令只能包含一個文件,如果要包含多個文件,要用多個#include命令。被包含的文件本身也可以使用#include命令去包含別的文件,即使用嵌套的文件包含。通過文件包含命令,可以實現(xiàn)多個源文件程序的執(zhí)行。某一程序有3個源程序文件:file1.c、file2.c和file3.c。可以在file1.c中使用命令:#include"file2.c"#include"file3.c"經(jīng)過編譯預(yù)處理后,在編譯時,將包含了file2.c和file3.c的file1.c(如圖(a))作為一個源文件進行編譯。7.2文件包含命令
#includefile1.cfile2.hfile3.hfile1.cfile2.cfile3.c
(a) (b)
可以這樣處理這個問題,在file1.c中使用命令:
#include"file2.c"
在file2.c中使用命令:#include"file3.c"
這樣,編譯預(yù)處理后,也可以把file1.c(如圖(b))所示作為一個源文件進行編譯。7.2文件包含命令
#include使用#include命令還要注意以下幾點:①#include命令通常用來把標準庫頭文件(如頭文件stdio.h和stdlib.h)包含到程序中。在這些文件中,一般定義符號常量、宏,或聲明函數(shù)原型。理論上,#include命令可以包含任何類型的文件,只要這些文件的內(nèi)容被擴展后符合C語言語法,通常是擴展名為.h的頭文件。②由于被包含文件與#include命令所在的文件,在預(yù)處理后成為一個文件。因此,若被包含文件定義有全局變量,在#include命令所在文件中不必用extern關(guān)鍵字聲明。在前面的內(nèi)容中,由于我們的程序多為單文件程序,#include指令通常只用來包含標準庫的頭文件。實際上,稍微復(fù)雜一些的C語言程序都不止一個源文件,其中程序員經(jīng)常還會建立一些頭文件,包含了供其他程序文件公用的聲明,然后把它包含到其他需要的文件中。7.3條件編譯命令
條件編譯能夠讓程序員控制預(yù)處理命令的執(zhí)行和程序代碼的編譯。也就是說,條件編譯預(yù)處理命令告訴編譯器:根據(jù)編譯時的條件接受或者忽略代碼塊。條件編譯有三種形式:1.第一種形式:
#ifdef標識符程序段1[#else
程序段2]#endif#ifdef命令說明:如果預(yù)處理器已經(jīng)定義了標識符,則編譯代碼直到下一個#else或者#endif命令出現(xiàn)為止。如果有#else命令,那么,在未定義標識符時會編譯#else和#endif之間的代碼。7.3條件編譯命令
例7-10根據(jù)是否定義宏C,決定是計算圓周長還是圓面積。#definePI3.14#defineC(r)2*PI*(r)voidmain(){doubler,c,s;printf("EnterTheRadius\n");scanf("%lf",&r);#ifdefCc=C(r);printf("Theperimeter=%lf\n",c);#elses=PI*r*r;printf("TheArea=%lf\n",s);#endif}因為存在第2行的宏定義,因此系統(tǒng)編譯求圓周長的那一段程序,而求面積的那段程序就不編譯。
7.3條件編譯命令
2.第二種形式:
#ifndef標識符程序段1[#else
程序段2]#endif3.第三種形式:
#if
表達式
程序段1#else
程序段2#endif
如果標識符未被#define命令定義過則對程序段1進行編譯,否則對程序段2進行編譯。#if命令后跟常量整數(shù)表達式,如表達式的值為真(非0),則對程序段1進行編譯,否則對程序段2進行編譯。7.3條件編譯命令
例7-11使用條件編譯的第三種形式改寫例7-10。#definePI3.14#defineC1voidmain(){doubler,c,s;printf("EnterTheRadius\n");scanf("%lf",&r);#ifCc=2*PI*r;printf("Theperimeter=%lf\n",c);#elses=PI*r*r;printf("TheArea=%lf\n",s);#endif}第2行宏定義中,定義C為1,因此在條件編譯時,常量表達式的值為真,故計算并輸出圓面積。
7.4
應(yīng)用程序舉例
7.4.1建立自己的頭文件
#include命令通常用來把標準庫頭文件包含到程序中。在這些頭文件中,一般定義符號常量、宏、聲明函數(shù)原型、類型定義或結(jié)構(gòu)模板定義。理論上,#include命令可以包含任何類型的文件,只要這些文件的內(nèi)容被擴展后符合C語言語法,通常是擴展名為.h的頭文件。因此,許多程序員開發(fā)自己的標準頭文件,以便在程序中使用。如果是在開發(fā)一系列相關(guān)的函數(shù)和結(jié)構(gòu),那么這種方法特別有價值。另外,可以使用頭文件來聲明多個文件共享的外部變量。
例7-12創(chuàng)建一個用于處理學(xué)生信息的頭文件,文件名為myhead.h,它包含常量定義、學(xué)生信息全局變量的定義及函數(shù)原型說明。/*常量定義*/#defineSTU_NUM20 /*學(xué)生人數(shù)最大值*/#defineNAME_LEN50 /*學(xué)生姓名字符最大值*/#defineCOURSE_NUM3 /*課程數(shù)*/
/*學(xué)生信息全局變量的定義*/charname[STU_NUM][NAME_LEN]; /*學(xué)生姓名*/intscore[STU_NUM][COURSE_NUM]; /*學(xué)生成績*/floatave[STU_NUM]; /*學(xué)生平均成績*/
/*函數(shù)原型*/voidget_info(); /*輸入學(xué)生信息*/voidget_ave(); /*求每個學(xué)生的平均成績*/voidprint_info(); /*輸出學(xué)生信息*/7.4.1建立自己的頭文件
例7-13編寫一個處理學(xué)生信息的C程序文件,文件名student.c,程序代碼如下:voidget_info() /*函數(shù)定義*/{inti,j;for(i=0;i<STU_NUM;i++){scanf("%s",name[i]);for(j=0;j<COURSE_NUM;j++)scanf("%d",score[i][j]);}}
voidget_ave() /*函數(shù)定義*/{inti,j;for(i=0;i<STU_NUM;i++){ave[i]=0;for(j=0;j<COURSE_NUM;j++)ave[i]+=score[i][j];
ave[i]/=COURSE_NUM;}}7.4.2多個源文件組成的C程序voidprint_info() /*函數(shù)定義*/{
inti,j;for(i=0;i<STU_NUM;i++){printf("%s'ssc
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省實驗中學(xué)廣州市天河區(qū)附屬實驗學(xué)校2021-2022學(xué)年八年級下學(xué)期期中物理試題(含答案)
- 基層中醫(yī)藥知識培訓(xùn)課件
- (一模)哈三中2025屆高三第一次模擬考試 英語試題(含答案)
- 物業(yè)管理服務(wù)委托及管理費支付協(xié)議
- 安東尼奇妙的冒險故事讀后感
- 項目執(zhí)行工作計劃書與時間表安排
- 山西省晉中市太谷區(qū)職業(yè)中學(xué)校2024-2025學(xué)年高一上學(xué)期期末考試生物試題
- 企業(yè)文件保密制度表格化處理記錄
- 三農(nóng)問題社會調(diào)查方法與技術(shù)指導(dǎo)書
- 離職員工知識產(chǎn)權(quán)保密協(xié)議
- 標識標牌制作及安裝項目技術(shù)方案
- 醫(yī)療器械物價收費申請流程
- DB3410T 34-2024特定地域單元生態(tài)產(chǎn)品價值核算規(guī)范
- 江蘇紅豆實業(yè)股份有限公司償債能力分析
- 青島中石化輸油管道爆炸事故調(diào)查報告
- 2024年蘇州職業(yè)大學(xué)高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 充電樁采購安裝投標方案(技術(shù)方案)
- 教科版小學(xué)科學(xué)六年級下冊單元練習(xí)試題及答案(全冊)
- 《Java程序設(shè)計》電子課件
- 乳腺癌患者的疼痛護理課件
- 研課標說教材修改版 八年級下冊
評論
0/150
提交評論