C語言學習筆記

2021-10-01 14:25:17 字數 4502 閱讀 1611

學習一門新的程式語言的唯一途徑就是使用它編寫程式。對於所有語言的初學者來說,編寫的第乙個程式幾乎都是相同的,即;

列印出以下內容

hello, world

儘管這個練習很簡單,但對於初學語言的人來說,它仍然可能成為一大障礙,因為要實現這個目的,我們首先編寫程式文字,然後成功地進行編譯,並載入、執行,最後輸出到某個地方。掌握了這些操作細節後,其他事情就比較容易了。

#include //包含標準庫的資訊

main() //定義名為main的函式,它不接受引數值

// \n代表換行符

在linux系統中,輸入 gcc hello.c && ./a.out

編譯、載入、執行

0  -17

20 -6

40 4 

60 15

80 26

100 37

120 48

140 60

160 71

180 82

200 93

220 104

240 115

260 126

此程式中仍然只包括乙個名叫main的 函式定義。它比前面的hello.c 的程式長一些,但並並不複雜。這個程式中引入了一些新的概念,包括注釋、宣告、變數、算術表示式、迴圈以及格式化輸出。

#include /*  當fahr= 0, 20, ..., 300時,分別列印華氏溫度與攝氏溫度對照表 */

main()

}

/* 與*/之間的字串行將被編譯器忽略。注釋可以自由的運用在程式中,使得程式更易於理解。程式中允許出現空格、製表符或換行符之處,都可以使用注釋

在c語言中所有變數都必須先宣告後使用。宣告通常放在函式起始處,在任何可執行語句之前。宣告用於說明變數的屬性,它由乙個型別名和乙個變數表組成,例如:

int fahr,celsius;

int lower,upper,step;

其中int 表示後所列變數為整數,與相對應的,float表示所列變數為浮點數。int 與float 型別的取值範圍取決於具體的機器。對於int型別通常為16位,其範圍在-32768~+32767之間,也有用32位表示的int型別。float通常為32位,其至少有6位有效數字。

c語言還提供了其他一些基本資料型別:

char          字元---乙個位元組

short         短整型

long          長整型

double       雙精度浮點型

這些資料型別物件的大小也取決於具體的機器。還存在這些基本資料型別的陣列、結構、聯合,指向這些型別的指標以及返回這些型別值的函式。我們將在後續響應的章節中分別介紹。

在上面的溫度轉換程式中,最開始計算是下列4個賦值語句:

lower = 0;

upper = 300;

step = 20;

fahr = lower;

它們為變數設定初值。各條語句均以分號結束。

溫度轉換表中的各行計算方式相同,因此可以用迴圈語句重複輸出各行。這是while迴圈語句的用途:

while (fahr <= upper)for 語句是一種迴圈語句,它是對while 語句的推廣。如果將for語句與前面介紹的while語句比較,就會發現for語句的操作更直觀一些。

fahr=0          是初始化部分,僅在進入迴圈前執行一次。

fahr <=300   是控制迴圈的測試或條件部分。迴圈控制將對該條件求值,如果結果為真(true)則執行迴圈體

fahr = fahr + 20 以將迴圈變數fahr 增加乙個步長,並再次對條件求值。如果計算的到的條件值為假迴圈將終止執行。與while語句一樣,for迴圈語句的迴圈體可以只有一條語句,也可以是用花括起來的一組語句。

#define指令可以把符號名定義為乙個特定的字串

#define 名字 替換文字

在該定義之後,程式**現的所有在#define中定義的名字,都將用相應的替換文字替換。其中,名字與普通變數名的形式相同:他們都是以字母打頭的字母和數字序列;替換文字可以是任何字串行,而不僅限於數字。

符號常量通常是大寫字母,這樣可以很容易與用小寫字母拼寫的變數名相區別。注意#define指令行的末尾沒有分號

標準庫提供的輸入/輸出模型非常簡單。無**本從何處輸入,輸出到何處,其輸入/輸出都是按照字元流的方式處理。文字流是由多行字元構成的字串行,而每行字元則由0個或多個字元組成,行末是乙個換行符。

標準庫提供了一次讀/寫乙個字元的函式,其中最簡單的是getchar和putchar兩個函式。每次呼叫時,getchar函式從文字流中讀入下乙個輸入字元,並將其作為結果值返回。

1.5.1 檔案複製

借助於getchar與putchar函式,可以在不了解其他輸入/輸出知識的情況下編寫出數量驚人的有用的**。最簡單的例子就是把輸入一次乙個字元的複製到輸出,其基本思想如下

#include main()

}

其中,關係運算子 !=表示 「不等於」

字元在鍵盤、螢幕或其他的任何地方無論以什麼形式表現,它在機器內部都是以位模式儲存的。char型別專門用於儲存這種字元型資料,當然任何整型(int)也可以用於儲存字元型資料。因為某些潛在的重要原因,我們在此使用int型別

1.5.2 字元計數

下列程式對於字元進行計數,它與上面的複製程式類似。

#include main ()

其中,語句

++nc;

引入了乙個新的運算子++,其功能是執行加1操作。可以用語句nc=nc+1代替它,但語句++nc更精煉一些,且通常效率更高。

與該運算子響應的是自減運算子--。++與--這兩個運算子既可以作為字首運算子也可以作為字尾運算子。

1.5.3 行計數

統計行計數等價於統計換行符的個數。

#include main()

在該程式中,while迴圈語句的迴圈體是乙個if語句, 他控制自增語句++nl。if語句先測試圓括號中的條件,如果該條件為真,則執行其後的語句。這裡再次用縮排方式表明語句之間的控制關係。

雙等於號==是c語言中表示「等於」關係的運算子(類似於pascal中的單等於號=及fortran中的.eq)由於c語言將單等於號作為複製運算子,因此使用雙等於號==表示相等的邏輯關係,以示區分。

1.5.4 單詞計數

用於統計行數、單詞數與字元數。這裡對單詞的定義比較寬鬆,它是任何其他不包含空格、製表符或換行符的字串行。

#include #define in 1

#define out 0

main()

} printf("%d %d %d\n", nl, nw, nc);

}

程式執行時,每當遇到單詞的第乙個字元,它就作為乙個新單詞加以統計。state變數記錄程式當前是否正位於乙個單詞之中,它的初值是「不在單詞中」,即初值被賦為out。

編寫乙個程式,以統計各個數字、空白符以及所有其他字元出現的次數。這個程式的實用意義並不大,但我們可以通過該程式討論c語言多方面的問題。

#include main ()

到目前為止,我們所使用的函式(如printf、getchar和putchar)都是函式庫中提供的函式,現在讓我們

編寫函式。現在編寫乙個求冪的函式power(m,n)來說明函式定義的方法。用於計算整數m的n次冪,其中n是正整數。對函式呼叫

power(2,5)來說,結果為32。

#include int power (int m, int n);

main()

int power(int base, int n)

函式定義可以以任意次序出現在乙個原始檔或多個原始檔中,但同一函式不能分割存放在多個檔案中。每次呼叫時,main函式返回乙個格式化的整數並列印。在表示式中,power(2,i)同2和i一樣都是整數。

傳值呼叫的利大於弊。在被呼叫函式中,引數可以看作時便於初始化的區域性變數,因此額外使用的變數更少,這樣程式可以更緊湊簡潔。

用來存放字元的陣列稱為字元陣列,例如:

char a[10]; //一維字元陣列

char b[5][10]; //二維字元陣列

char c[20]=; // 給部分陣列元素賦值

char d=; //對全體元素賦值時可以省去長度

字元陣列實際上是一系列字元的集合,也就是字串(string)。在c語言中,沒有專門的字串變數,沒有string型別,通常就用乙個字元陣列來存放乙個字串。

如果在該函式內定義了乙個與之前定義的全域性變數同名的變數,那麼該同名區域性變數就會在函式內部遮蔽全域性變數的影響。即當區域性變數與全域性變數同名時,在區域性變數的作用範圍之內,全域性變數不起作用。區域性變數優先原則;

全域性變數是有預設值的(引用型別的變數預設值都是null,基本型別的變數預設值則不一樣,int型變數預設值是0),但是區域性變數沒有預設值;

全域性變數可以在函式外定義並初始化,但不能進行賦值操作。

C語言學習筆記

include include void swap int p1,int p2 void swapa int arr,int n void printfa int arr,int n int main int argc,char argv swap i,j printfa array,6 swapa...

C語言學習筆記

file 結構 包含在stdio.h裡 ifndef file defined struct iobuf typedef struct iobuf file define file defined endif fread 功 能 從乙個流中讀資料 函式原型 size t fread void buf...

C語言學習筆記

我們學習c語言最開始入門的時候,都是先從c語言學習 c語言教材書籍開始學習,這些是我摘要的一些內容。第一章 c 語言概述 語言概述 1.1 物件導向程式設計基本概念 1.2 c 語言是一種物件導向的程式設計 語言 1.3 c 程式結構的特點 程式結構的特點 1.4 visual c 6.0簡介 簡介...