把程式中不需要了解的具體操作細節隱藏起來,從而使整個程式結構更加清晰,並且降低修改程式的難度。(封裝)
/* 找到所有與模式匹配的行:getline, strindex */
#include
#include
#define maxline 1000
intgetline
(char line,
int max)
;int
strindex
(char source,
char searchfor)
;char pattern=
"ould"
;//待查詢的模式
/* 找出所有與模式匹配的行 */
intmain()
}return found;
}/* 將行儲存到 s 中,並返回該行的長度*/
intgetline
(char s,
int lim)
/* 返回t在s中的位置,若未找到則返回-1 */
最簡單的函式:dummy(){}
程式開發期間用以保留位置(待以後填充**)
省略了返回型別,預設 int
/* atof: s->雙精度浮點數*/
double
atof
(char s)
;
宣告和定義必須一致;
若沒有函式原型,則函式將在第一次出現的表示式中被隱式宣告。 sum += atof(line);
若未宣告的名字出現在表示式,且後面緊跟圓括號,上下文認為該名字是函式名;
返回值假定為 int,若帶參,則要宣告它們;若不帶參,則使用 void 宣告。
/* 簡易計算器程式,累加程式 */
#include
#include
#define maxline 30
intmain()
/* 將行儲存到 s 中,並返回該行的長度*/
intgetline
(char s,
int lim)
/* 字串s 轉換成雙精度浮點數 */
double
atof
(char s)
val = sign * val / power;
if(s[i]
=='e'
|| s[i]
=='e'
)// 讀取12.3e-4科學計數法
return val;
}
external:定義在函式之外的變數
internal:定義在函式內部
作用:可作為函式之間的資料交換一種方式,任何函式都可通過名字訪問外部變數。
永久存在,值在兩次函式呼叫之間保持不變。
逆波蘭表示法:所有運算子都跟在運算元的後面。(字尾式)
#include
#include
#include
#define maxop 100
#define number '0'
intgetop
(char
);// get op 拿操作符
double
stof
(char
);// str轉double
void
push
(double);
double
pop(
void);
/* 逆波蘭計算器 */
intmain()
}return0;
}/* 字串s 轉換成雙精度浮點數 */
double
stof
(char s)
val = sign * val / power;
if(s[i]
=='e'
|| s[i]
=='e'
)// 讀取12.3e-4科學計數法
return val;
}#define maxval 100
int sp =0;
double val[maxval]
;void
push
(double f)
// 把f壓入棧頂
double
pop(
void
)// 彈出並返回棧頂的值
}int
getch
(void);
void
ungetch
(int);
intgetop
(char s)
#define bufsize 100
char buf[bufsize]
;// 陣列作為緩衝區 buffer
int bufp =0;
// 緩衝區中下乙個空閒位置
名字的作用域:程式中可以使用該名字的部分。
外部變數或函式的作用域:從宣告的地方開始到檔案末尾結束。
若要在外部變數定義之前使用該變數,或定義與使用不在同一原始檔,則必須在宣告中強制性使用 extern;
外部變數只能定義一次,且初始化只能在定義中,必須制定陣列長度;
其他檔案用 extern 宣告來訪問,不需指明陣列長度。
實際程式中,他們分別來自單獨編譯的庫,需分割成多個檔案。
4.6 靜態變數
4.7 暫存器變數 見第1章
4.8 程式塊結構
if
(n>0)
4.9 初始化
規則:不進行顯示初始化的情況下,extern 和 static 都將初始化為 0;auto 和 register 初值沒有定義。
char pattern=
"ould"
;char pattern=
;
函式直接或間接呼叫自身
note:
把 mid 拿到最前面,作為比較的參照物。遍歷從 left+1 到 right,比 left 小的元素換到前面(此時的left 是前面剛換過來的 mid),last 指向最後乙個比 left 小的元素。最後,left 與 最後乙個比 left 小的元素換位置,至此,left 元素固定,左側這裡實際上每次選取並固定位置的參考是 mid,和資料結構上的**要相區別。
// 版本1:常規陣列排序
void
qsort
(int v,
int left,
int right)
void
swap
(int v,
int i,
int j)
// 版本2:文字行排序,陣列元素是字串,v[left]... v[right] p94
void
qsort
(int
*v,int left,
int right)
void
swap
(int
*v,int i,
int j)
// 版本3:資料結構版
void
quicksort
(int r,
int low,
int high)
r[i]
= temp;
quicksort
(r, low, i-1)
;quicksort
(r, i+
1, high);}
}
4.11 c 預處理器
檔案包含#include "檔名"
或#include 《檔名》
巨集替換#define 名字 替換文字
條件包含
#if system == sysv
#define hdr "sysv.h"
#elif system == bsd
// else if
#define hdr "bsd.h"
#else
#define hdr "default.h"
#endif
// end if 終止if
#include hdr
#ifndef hdr
// if not define 如果未定義
#define hdr "default.h"
#endif
C語言學習筆記04
結構體中的指標用法 p a,其中p是指向乙個結構體的指標,a是這個結構體型別的乙個成員。表示式p a引用了指標p指向的結構體的成員a。1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設...
C語言學習筆記04
define crt secure no warnings 1 include include intmax int a,int b 函式前寫void是說不需要返回值,就不用加return語句,所以不需要返回值的函式可以這麼寫 define max 100 巨集定義變數,所有的max都代表100 d...
C語言學習筆記 函式與指標
1 c 語言中的函式有自己特定的型別,這個型別由返回值 引數型別和引數個數共同決定。如 int add int i,int j 的型別為 int int,int 2 c 語言中通過 typedef 為函式型別重新命名 typedef type name parameter list 如 typede...