《C程式語言》學習筆記(04)函式與程式結構

2021-10-10 09:40:49 字數 4548 閱讀 5187

把程式中不需要了解的具體操作細節隱藏起來,從而使整個程式結構更加清晰,並且降低修改程式的難度。(封裝)

/* 找到所有與模式匹配的行: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...