代數式編譯
A. C語言,#define語句的用法。
1.簡單的宏定義
格式:#define 標識符 替換列表
說明:替換列表可以是數,字元串字面量,標點符號,運算符,標識符,關鍵字,字元常量。
注意:替換列表是可以為空的
典型錯誤:
#defineN=100
inta[N];/*這樣會成為inta[=100],這里會處理成為一種標識記號一樣*/
#defineN100;
inta[N];/*帶分號的定義會成為inta[100;],這是一種很常見的錯誤*/
#definepin(int*);
pina,b;
int*a,b;/*本意是a和b都是int型指針,但是實際上變成int*a,b;a是int型指針,而b是int型變數。這是應該使用typedef來代替define,這樣a和b就都是int型指針了。*/
典型的使用方法:
使用宏定義可以自己根據自己的習慣來定義甚至改變C語言的語法習慣,例如:
#defineBEGIN{
#defineEND}
intmain()BEGIN
printf("DEFINE---- ");
END
定義一個循環
#defineLOOPfor(;;)
重新定義數據類型
#defineITint
2.帶參數的宏
#define 標識符(x1,x2,x3...xn) 替換列表 (注意:x1,x2,x3..是宏的參數,標識符和其左括弧之間不能有空格)
使用方法:
#defineMAX(x,y)((x)>(y)?(x):(y))
i=MAX(j+k,m-n);
替換為:
i=MAX((j+k)>(m-n)?(j+k):(m-n));
#defineSI_EX(n)((n)%2==0)
if(SI_EX(i))i++;
替換為:
if(SI_EX((i)%2==0))
通過以上例子可以看出,標識符帶參數(X1,X2,X3.....)在替換時會被替換列表(Y1,Y2,Y3....)對應的替換,但是和順序無關。
3.宏的特殊單行定義
#defineA(x)T_##x
#defineB(x)#@x
#defineC(x)#x
x=1
替換為:
A(1)------> T_1 (T_##x,##符號是記號粘黏符號,將前後的字元粘黏起來。)
B(1)------> '1' ( #@x , #@ 符號會將宏的參數進行字元串字面量化,並且加『』號)
C(1)------> "1" ( #x ,#符號會將宏的參數進行字元串字面量化,並且加""號)
4.define的多行定義
define可以替代多行的代碼,在每一個換行的時候加上一個""
#defineMAX(X,Y)do{
語句1;
語句2;
/*注釋的寫法*/
}while(0)/*(notrailing;)*/
5.在大規模的開發過程中,特別是跨平台和系統的軟體里,define最重要的功能是條件編譯。
#ifdefWINDOWS
......
......
#endif
#ifdefLINUX
......
......
#endif
可以在編譯的時候通過#define設置編譯環境
6.取消宏
#undef標識符
7.條件編譯
#ifdefXXX…(#else)…#endif
8.預定義宏
在C語言中收錄了一些有用的宏,這些宏是提供當前編譯信息的。
__LINE__ 被編譯文件的行數
(整型)
__FILE__ 被編譯文件的名字 (字元型)
__DATE__ 編譯日期 (字元型)
__TIME__ 編譯時間 (字元型)
__STDC__ 如果編譯器接受標准C,那麼值為1. (整型)
通常在編譯的時候可以用這些預定義的宏來進行排錯,例如:
一般情況下,當出現除零的情況時編譯器是沒有提示的,可以自定義一個解決辦法。
#defineCHECKZERO(divisor)
if(divisor==0)
printf("***ATTEMPTTODIVIDEBYZEROINLINE%doffile%s*** ",__LINE__,__FILE__);
引用方法
CHECKZERO(j);
k=i/j;
B. 邏輯運算規則
邏輯運算規則如下:
參與邏輯運算的是兩個同維數矩陣;或者一個是矩陣,另一個是標量;若參與運算的是兩個矩陣,邏輯運算是將兩個矩陣對應元素逐一進行邏輯運算,邏輯運算的結果是一個同維數矩陣,其元素值為「0」或「1」。
邏輯運算解釋:
1、邏輯常量與變數:邏輯常量只有兩個,即0和1,用來表示兩個對立的邏輯狀態。邏輯變數與普通代數一樣,也可以用字母、符號、數字及其組合來表示,但它們之間有著本質區別,因為邏輯常量的取值只有兩個,即0和1,而沒有中間值。
2、邏輯運算:在邏輯代數中,有與、或、非三種基本邏輯運算。表示邏輯運算的方法有多種,如語句描述、邏輯代數式、真值表、卡諾圖等。
3、邏輯函數:邏輯函數是由邏輯變數、常量通過運算符連接起來的代數式。同樣,邏輯函數也可以用表格和圖形的形式表示。
4、邏輯代數:邏輯代數是研究邏輯函數運算和化簡的一種數學系統。邏輯函數的運算和化簡是數字電路課程的基礎,也是數字電路分析和設計的關鍵。
5、用邏輯運算符將關系表達式或邏輯量連接起來的有意義的式子稱為邏輯表達式。邏輯表達式的值是一個邏輯值,即「true」或「false」。C語言編譯系統在給出邏輯運算結果時,以數字1表示「真」,以數字0表示「假」,但在判斷一個量是否為「真」時,以0表示「假」,以非0表示「真」。