c語言基礎語法,c語言基礎語法要學多久

本文目錄一覽:

C語言基礎知識

  •1 C語言程序的結構認識

用一個簡單的c程序例子,介紹c語言的基本構成、格式、以及良好的書寫風格,使讀者對c語言有個初步認識。

例1 計算兩個整數之和的c程序:

1、任何一個c語言程序都必須包括以下格式:

這是c語言的基本結構,任何一個程序都必須包含這個機構。括號內可以不寫任何內容,那麼該程序將不執行任何結果。

2、main()—-在c語言中稱之為“主函數”,一個c程序有且僅有一個main函數,任何一個c程序總是從main函數開始執行,main函數後面的一對圓括號不能省略。

3、被大括號{ }括起來的內容稱為main函數的函數體,這部分內容就是計算機要執行的內容。

4、在{  }裡面每一句話後面都有一個分號(;),在c語言中,我們把以一個分號結尾的一句話叫做一個c語言的語句,分號是語句結束的標誌。

5、printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); —-通過執行這條c語言系統提供給我們直接使用的屏幕輸出函數,用戶即可看到運行結果,本程序運行後,將在顯示器上顯示如下結果:

6、#include

7、程序中以 /*開頭並且以*/結尾的部分表示程序的注釋部分,注釋可以添加在程序的任何位置,為了提高程序的可讀性而添加,但計算機在執行主函數內容時完全忽略注釋部分,換而言之就是計算機當做注釋部分不存在於主函數中。

   •  2 C程序的生成過程

C程序是先由源文件經編譯生成目標文件,然後經過連接生成可執行文件,如圖所示。

                              編譯過程

 • 3 標識符

在編寫程序時,必須為函數、變量等命名,這個名字稱為標識符。C語言中標識符的命名規則如下:

標識符不能與程序中具有特殊意義的關鍵字相同,不能與用戶編製的函數名、C語言庫函數相同,在程序中各種標識符盡量不要重複,以便區分。選擇變量名和其他標識符時,應注意做到 “見名知義”。

標識符分為如下三類:

1、關鍵字

3、用戶標識符

用戶根據需要自己定義的標識符稱為用戶標識符。無論如何自定義標識符,都必須符合標識符的三條命名規則。

 • 4 常量

在程序運行中,其值不能被改變的量稱為常量。常量有5種類型:整型常量、實型常量、字符常量、字符串常量和符號常量。

(一)數值轉換

數字的四種表現形式:

在計算機內部,數字均以二進制形式表示和存放,用戶輸入的普通十進制數字都要被計算機轉換成二進制才能在計算機內部存儲,同樣計算機的運算結果也為二進制,一般要將其轉換成十進制數再輸出給用戶閱讀,這種轉換通常由計算機自動實現。

(1)將十進制轉換二進制、八進制和十六進制

除法:將十進制數除以2,記錄餘數,得到的商繼續除以2,直到商為0,然後將各次相處所得的餘數從後往前逆序排列,所得餘數數字序列就是該十進制數對應的二進制數。八進制和十六進制轉換方法同上。

例:十進制數13轉換成二進制數的值為1101,轉換八進制為015,轉換成十六進制為D.

(2)將二進制、八進制和十六進制轉換成十進制

乘積求和:將二進制的每一位從低位到高位(右邊為低位,左邊為高位)分別乘以20,21,22。。。。,然後將這些積求和。

例如:(1101)2=(13)10     (317)8=(207)10     (23E)16=(574)10

(3)二進制與八進制、十六進制數之間的相互轉換

(二)整型常量

整型常量有3種形式:十進制整型常量、八進制整型常量和十六進制整型常量。

書寫方式如下:

(三)實型常量

實型常量有兩種表示形式:小數形式和指數形式。

(四)字符常量

(2)由一對單引號括起來,以反斜杠\開頭,後跟若干數字或者字母,比如‘\n’,其中“\“是轉義的意思,後面跟不同的字符表示不同的意思,這類字符常量叫轉義字符。具體如圖所示 。

(五)字符串常量

C語言中,以雙引號括起來的,由若干個字符組成的序列即為字符串常量。

例:“ni hao”   “happy”等等。

(六)符號常量

例:計算圓的面積的c程序。

說明:

• 5 變量

變量就是其值可以改變的量。變量要有變量名,在內存中佔據一定的存儲單元,存儲單元里存放的是該變量的值。不同類型的變量其存儲單元的大小不同,變量在使用前必須定義。

(一)整型變量

不同的編譯系統對上述四種整型數據所佔用的位數和數值範圍有不同的規定。

類型說明符

說明:

(二)實型變量

C語言中,實型變量分為單精度類型( float )和雙精度類型( double )兩種。如:

在vc中,float 型數據在內存中佔4個字節(32位),double型數據佔8個字節。單精度實數提供7位有效數字,雙精度實數提供15~16位有效數字。實型常量不分float型和double型,一個實型常量可以賦給一個float 型或double型變量,但變量根據其類型截取實型常量中相應的有效數字。

注意:實型變量只能存放實型值,不能用整型變量存放實型值,也不能用實型變量存放整型值。

(三)字符變量

字符變量用來存放字符常量,定義形式:

char  變量名;

其中關鍵字char定義字符型數據類型,佔用一個字節的存儲單元。

將一個字符賦給一個字符變量時,並不是將該字符本身存儲到內存中,而是將該字符對應的ASCII碼存儲到內存單元中。例如,字符 ′A′ 的ASCII碼為65,在內存中的存放形式如下:01000001

由於在內存中字符以ASCII碼存放,它的存儲形式和整數的存儲形式類似,所以C語言中字符型數據與整型數據之間可以通用,一個字符能用字符的形式輸出,也能用整數的形式輸出,字符數據也能進行算術運算,此時相當於對它們的ASCII碼進行運算。

     •6 類型的自動轉換和強制轉換

當同一表達式中各數據的類型不同時,編譯程序會自動把它們轉變成同一類型後再進行計算。轉換優先級為:

即左邊級別“低“的類型向右邊轉換。具體地說,若在表達式中優先級最高的數據是double型,則此表達式中的其他數據均被轉換成double型,且計算結果也是double型;若在表達式中優先級最高的數據是float型,則此表達式中的其他數據均被轉換成float型,且計算結果也是float型。

在做賦值運算時,若賦值號左右兩邊的類型不同,則賦值號右邊的類型向左邊的類型轉換;當右邊的類型高於左邊的類型時,則在轉換時對右邊的數據進行截取。

除自動轉換外,還有強制轉換,表示形式是:

討論:當a值賦值為3.4,b值賦值為2.7,(int)(a+b)和(int)a+b的值分別為多少?

   • 7  C運算符認識

C語言的運算符範圍很廣,可分為以下幾類:

1、算術運算符:用於各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(%)、自增(++)、自減(–)共七種。

2、賦值運算符:用於賦值運算,分為簡單賦值(=)、複合算術賦值(+=,-=,*=,/=,%=)和複合位運算賦值(=,|=,^=,=,=)三類共十一種。

3、逗號運算符:用於把若干表達式組合成一個表達式(,)。

4、關係運算符:用於比較運算。包括大於()、小於()、等於(==)、 大於等於(=)、小於等於(=)和不等於(!=)六種。

5、邏輯運算符:用於邏輯運算。包括與()、或(||)、非(!)三種。

6、條件運算符:這是一個三目運算符,用於條件求值(?:)。

7、位操作運算符:參與運算的量,按二進制位進行運算。包括位與()、位或(|)、位非(~)、位異或(^)、左移()、右移()六種。

8、指針運算符:用於取內容(*)和取地址()二種運算。

9.、求字節數運算符:用於計算數據類型所佔的字節數(sizeof)。

10、特殊運算符:有括號(),下標[],成員(→,.)等幾種。

另外,按參與運算的對象個數,C語言運算符可分為:單目運算符 (如 !)、雙目運算符 (如+,- )和三目運算符 (如 ?  : )。

一、   基本的算術運算符

(1)+(加法運算符或正值運算符,如2+5)。

(2)-(減法運算符或負值運算符,如4-2)。

(3)*(乘法運算符,如3*8)。

(4)/(除法運算符,如11/5)。

/的運算分為兩種情況:

(5)%(模運算符或稱求余運算符,%兩側均應為整型數據,如9%7的值為2)。

需要說明的是:當運算對象為負數時,所得結果隨編譯器不同而不同,在vc中,結果的符號與被除數相同,比如:13%-2值為1,而-15%2值為-1.

二、   算術表達式和運算符的優先級與結合性

算術表達式是用算術運算符和括號將運算量(也稱操作數)連接起來的、符合C語言語法規則的表達式。運算對象包括函數、常量和變量等。

在計算機語言中,算術表達式的求值規律與數學中的四則運算的規律類似,其運算規則和要求如下。

(1)在算術表達式中,可使用多層圓括號,但括號必須配對。運算時從內層圓括號開始,由內向外依次計算各表達式的值。

(2)在算術表達式中,對於不同優先級的運算符,可按運算符的優先級由高到低進行運算,若表達式中運算符的優先級相同,則按運算符的結合方向進行運算。

(3)如果一個運算符兩側的操作數類型不同,則先利用自動轉換或強制類型轉換,使兩者具有相同類型,然後進行運算。

三、   自增自減運算符

作用:使變量的值增1或減1。

(1)只有變量才能用自增運算符 (++)和自減運算符(–),而常量或表達式不能用,如10++或(x+y)++都是不合法的。

(2)++和–的結合方向是“自右向左“,如 -i++ ,i的左邊是負號運算符,右邊是自增運算符,負號運算和自增運算都是 “自右向左“結合的,相當於 -(i++)。

在循環語句中常用到自增(減)運算符,在指針中也常用到該運算符,考生要弄清楚“i++”和“++i”及“i–”和“–i”的區別,特別弄清楚表達式的值和變量的值。

例:變量n的初始值為2,則

例:有以下程序

程序運行後的輸出結果是_____

A.12  35  13  35  14  36     B. 12  35  14  35  14  36

C.12  35  14  36  14  36     D. 12  35  14  35  14  35

解析:自增自減運算需要注意區分表達式的值和變量的值,表達式運算後,變量會自增自減運算,表達式和變量變化如下:

     •9 賦值運算符與賦值表達式

一、賦值運算符與賦值表達式

賦值符號 “=“就是賦值運算符,作用是將一個數據賦給一個變量或將一個變量的值賦給另一個變量,由賦值運算符組成的表達式稱為賦值表達式。一般形式為:

變量名 = 表達式

在程序中可以多次給一個變量賦值,每賦一次值,與它相應的存儲單元中的數據就被更新一次,內存中當前的數據就是最後一次所賦值的那個數據。

說明:

a、如果賦值號兩邊的運算對象類型不一致,系統會自動進行類型轉換,轉換的規則:將賦值號右邊表達式的值的類型轉換成賦值號左邊變量的類型,

b、 可以將複製表達式的值再賦值給變量,形成連續賦值。

二、複合的賦值運算符

在賦值運算符之前加上其他運算符可以構成複合賦值運算符。其中與算術運算有關的複合運算符是:+=,-=,*=,/=,%= 。

兩個符號之間不可以有空格,複合賦值運算符的優先級與賦值運算符的相同。表達式n+=1等價於n=n+1,作用是取變量n中的值增1再賦給變量n,其他複合的賦值運算符的運算規則依次類推。

如求表達a+=a-=a*a 的值,其中a的初值為12 。

步驟:

   •10  逗號運算符和逗號表達式

在c語言中,逗號除了作為分隔符,還可以用作一種運算符—-逗號運算符,用逗號運算符將幾個表達式連接起來,例如a=b+c,a=b*c等稱為逗號表達式。

一般形式為:

表達式1 ,表達式2 ,表達式3 , …,表達式n

例:x=2,y=3,z=4

逗號表達式具有從左至右的結合性,即先求解表達式1,然後依次求解表達式2,直到表達式n的值。表達式n的值就是整個逗號表達式的值。上述的逗號表達式的值就是表達式z=4的值4.需要注意的是,逗號運算符是所有運算符中級別最低的。

例:有如下程序段:

程序顯示結果為:y=6,x=6

討論:將y=(x=a+b),(b+c);改為y=((x=a+b),b+c) 的程序結果?

  • 11 關係運算符和關係表達式

一、   C語言中的邏輯值

C語言中的邏輯值只有兩個:真(true)和假(flase)。用非零代表真,用零代表假。因此,對於任意一個表達式,如果它的值為零,就代表一個假值,如果它的值為非零,就代表一個真值。只要值不是零,不管是正數,負數,整數,實數,都代表一個真值。例如-5的邏輯值為真。

二、   關係運算符及其優先次序

C語言提供了6種關係運算符,見表

由兩個字符組成的運算符之間不可以加空格,關係運算符都是雙目運算符。

(1)結合性:自左向右。

(2)優先次序:前4種關係運算符( ,=,=, )的優先級別相同,後兩種 (==,!=)優先級相同,且前4種優先級高於後兩種;關係運算符的優先級低於算術運算符,高於賦值運算符。

三、   關係表達式

由關係運算符連接而成的表達式稱為關係表達式。

例如:ab,(a=7)(b=10)等都是合法的關係表達式。

關係表達式的結果有兩個:0和1,。其中0表示假,1表示真。如果關係表達式成立,則值為真,如果關係表達式不成立,則值為假。

例:變量a的值為5,b的值為6,那麼關係表達式ab的值為假,即為0.而關係表達式

(a=13)(b=10)的值為真,即為1。

當關係運算符兩邊值的類型不一致時,若一邊是整型,一邊是實型,系統將自動把整型數轉化為實型數,然後再進行比較。

    •12 邏輯運算符和邏輯表達式

一、   邏輯運算符及其優先級

C語言提供了3種邏輯運算符,如下表。

二、   邏輯表達式

“”和“||”的運算對象有兩個,故它們都是雙目運算符,而!的運算對象只有一個,因此它是單目運算符。邏輯運算舉例如下:

(1)ab: 當兩邊都為“真”時,表達式ab的值才是真。

值得注意的是:在數學中,關係式0

(2)a||b: 當||兩邊有一個為“真”時,表達式a||b的值就是真。

(3)!a:   表示取反,如果a為真,則!A為假,反之亦然。例如!-5的值就為0.

在C語言中,由或||組成的邏輯表達式,在某些特定情況下會產生“短路“現象。

(1)x y z ,只有當x為真(非0)時,才需要判別y的值;只有x和y都為真時,才需要去判別z的值;只要x為假就不必判別y和z,整個表達式的值為0。口訣:“一假必假”。

例:(!5==1)(++i==0)  (!5==1)表達式的值為0,所以計算機運行中就跳過(++i==0)此表達式,(!5==1)(++i==0)表達式的值為0.

(2)x||y||z ,只要x的值為真(非零),就不必判別y和z的值 ,整個表達式的值為1,只有x的值為假,才需要判別y的值,只有x和y的值同時為假才需要判別z的值,口訣:“一真必真”。

   •13 位運算

一、   位運算符

在計算機中,數據都是以二進制數形式存放的,位運算就是指對存儲單元中二進制位的運算。C語言提供6種位運算符。

二、位運算

位運算符  |~    ∧ 按優先級從高到低排列的順序是:

位運算符中求反運算“~“優先級最高,而左移和右移相同,居於第二,接下來的順序是按位與 ““、按位異或 “∧“和按位或 “|“。順序為~        ∧  |  。

例1左移運算符“”是雙目運算符。其功能把“ ”左邊的運算數的各二進位全部左移若干位,由“”右邊的數指定移動的位數,高位丟棄,低位補0。

例 2右移運算符“”是雙目運算符。其功能是把“ ”左邊的運算數的各二進位全部右移若干位,“”右邊的數指定移動的位數。

應該說明的是,對於有符號數,在右移時,符號位將隨同移動。當為正數時,最高位補0,而為負數時,符號位為1,最高位是補0或是補1 取決於編譯系統的規定。

例 3 設二進制數a是00101101 ,若通過異或運算a∧b 使a的高4位取反,低4位不變,則二進制數b是。

解析:異或運算常用來使特定位翻轉,只要使需翻轉的位與1進行異或操作就可以了,因為原數中值為1的位與1進行異或運算得0 ,原數中值為0的位與1進行異或運算結果得1。而與0進行異或的位將保持原值。異或運算還可用來交換兩個值,不用臨時變量。

所以本題的答案為: 11110000 。

C語言有什麼常用的語法

C

語言是一種面向過程的語言。

有選擇,順序,循環三種結構。選擇中有if……else結構,還有switch結構,循環則有for語句,while語句,do……while語句。

計算機c語言基礎知識

   計算機c語言的特性

C語言是世界上最流行、使用最廣泛的高級程序設計語言之一。在操作系統和系統使用程序以及需要對硬件進行操作的場合,用C語言明顯優於其它高級語言,許多大型應用軟件都是用C語言編寫的。C語言的主要特性有以下幾種:

1、C是高級語言:它把高級語言的基本結構和語句與低級語言的實用性結合起來。

2、C是結構式語言:結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。

3、C語言功能齊全:具有各種各樣的數據類型,並引入了指針概念,可使程序效率更高。而且計算功能、邏輯判斷功能也比較強大,可以實現決策目的的遊戲。

4、C語言適用範圍大:適合於多種操作系統,如Windows、DOS、UNIX等等;也適用於多種機型。

5、C語言應用指針:可以直接進行靠近硬件的操作,但是C的指針操作不做保護,也給它帶來了很多不安全的因素。C++在這方面做了改進,在保留了指針操作的同時又增強了安全性。

6、C語言創始人D.M.Ritchie6、C語言文件由數據序列組成:可以構成二進制文件或文本文件常用的C語言IDE有Microsoft Visual C++,Dev-C++,Code::Blocks,Borland C++,Watcom C++,Borland C++ Builder,GNU DJGPP C++,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free,win-tc,xcode等。

   計算機c語言的語法結構

1.順序結構

順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算,輸出三步曲的程序就是順序結構。

2.選擇結構

選擇結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。選擇結構的程序設計方法的關鍵在於構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的選擇語句。

3.循環結構

循環結構可以減少源程序重複書寫的工作量,用來描述重複執行某段算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do while循環和for循環。

4.模塊化程序結構

C語言的模塊化程序結構用函數來實現,即將複雜的C程序分為若干模塊,每個模塊都編寫成一個C函數,然後通過主函數調用函數及函數調用函數來實現一大型問題的C程序編寫,因此常說:C程序=主函數+子函數。因此,對函數的定義、調用、值的返回等中要尤其注重理解和應用,並通過上機調試加以鞏固。

   計算機c語言基礎知識

【知識點1】C程序

C語言程序結構有三種: 順序結構 , 循環結構(三個循環結構), 選擇結構(if 和 switch)

【知識點2】main函數

每個C語言程序中main 函數是有且只有一個。讀程序都要從main()入口, 然後從最上面順序往下讀(碰到循環做循環,碰到選擇做選擇)。

【知識點3】存儲形式

計算機的數據在電腦中是以二進制的形式保存。最低的存儲單元是bit(位),位是由為 0 或者1構成。 byte 是指字節, 一個字節 = 八個位。數據存放的位置就是它的地址。

【知識點4】注釋

是對程序的說明,可出現在程序中任意合適的地方,注釋從“/*”開始到最近一個“*/”結束,其間任何內容都不會被計算機執行,注釋不可以嵌套。

【知識點5】書寫格式

每條語句的後面必須有一個分號,分號是語句的一部分。一行內可寫多條語句,一個語句可寫在多行上。

【知識點6】標識符

合法的用戶標識符考查:

合法的要求是由字母,數字,下劃線組成。有其它元素就錯了。

並且第一個必須為字母或則是下劃線。第一個為數字就錯了。

C語言標識符分如下3類

(1)關鍵字。它們在程序中有固定的含義,不能另作他用。如int、for、switch等。

(2)預定義標識符。預先定義並具有特定含義的標識符。如define、include等。

(3)用戶標識符。用戶根據需要定義的標識符,符合命名規則且不與關鍵字相同。

關鍵字不可以作為用戶標識符號。main define scanf printf 都不是關鍵字。迷惑你的地方If 是可以做為用戶標識符。因為If 中的’第一個字母大寫了,所以不是關鍵字。

【知識點7】實型數據

實型數據的合法形式:小數形式和指數形式。掌握判定指數形式合法性。

2.333e-1 就是合法的,且數據是2.333×10-1。

考試口訣:e 前e 後必有數,e 後必為整數。

【知識點8】字符

字符數據的合法形式::

‘1’ 是字符佔一個字節,”1″是字符串佔兩個字節(含有一個結束符號)。

‘0’ 的ASCII 數值表示為48,’a’ 的ASCII 數值是97,’A’的ASCII 數值是65。

字符型和整數是近親:

char a = 65 ;

printf(“%c”, a); 得到的輸出結果:a

printf(“%d”, a); 得到的輸出結果:65

一般考試表示單個字符錯誤的形式:’65’ “1”

字符是可以進行算術運算的,記住: ‘0’-0=48

大寫字母和小寫字母轉換的方法: ‘A’+32=’a’ 相互之間一般是相差32。

【知識點9】整型數據

整型一般是兩個字節, 字符型是一個字節,雙精度一般是4 個字節:

考試時候一般會說,在16 位編譯系統,或者是32 位系統。碰到這種情況,不要去管,

一樣做題。掌握整型一般是兩個字節, 字符型是一個字節,雙精度一般是4 個字節就可以了。

【知識點10】轉義字符

轉義字符的考查:

在程序中 int a = 0x6d,是把一個十六進制的數給變量a 注意這裡的0x 必須存在。

在程序中 int a = 06d, 是一個八進制的形式。

在轉義字符中, ’x6d’ 才是合法的,0 不能寫,並且x 是小寫。

‘141’ 是合法的, 0 是不能寫的。

‘108’是非法的,因為不可以出現8。

【知識點11】算術運算

算術運算符一共有+、—、*、/、%這五個。%符號兩邊要求是整數。不是整數就錯了。

三種取整丟小數的情況:不是四捨五入是舍掉小數部分。

1、int a =1.6;

2、(int)a;

3、1/2; 3/2;

【知識點12】強制類型轉換

將一個運算對象轉換成指定類型,格式為(類型名)表達式

一定是 (int)a 不是 int(a),注意類型上一定有括號的。

注意(int)(a+b) 和(int)a+b 的區別。前是把a+b 轉型,後是把a 轉型再加b。

【知識點13】賦值

是表達式就一定有數值。

賦值表達式:表達式數值是最左邊的數值,a=b=5;該表達式為5,常量不可以賦值。

複合賦值運算符:注意:a*=m+2 是 a=a*(m+2)

自加、自減表達式:假設a=5,++a(表達式的值為6), a++(表達式的值為5);

j=a++;等價於j=a;a=a+1; 而j=++a;等價於a=a+1;j=a;。

考試口訣:++在前先加後用,++在後先用後加。

【知識點14】逗號運算

逗號表達式:優先級別最低; 表達式的數值逗號最右邊的那個表達式的數值。

(2,3,4)的表達式的數值就是4。

【知識點15】數制轉換

一定要記住二進制 如何轉換成十進制。

八進制是沒有8 的,逢8 進1,018 的數值是非法的。

【知識點16】位運算

會有一到二題考試題目。

C語言提供6種位運算符:按位求反~,按位左移,按位右移,按位與,按位異或|,按位或^。

總的處理方法:幾乎所有的位運算的題目都要按這個流程來處理(先把十進制變成二進制再變成十進制)。

異或運算的規則:0異或1得到1,0異或0得到0,1異或1得到0。可記為“相同為0,不同為1”。

在沒有捨去數據的時候,左移一位表示乘以2;右移一位表示除以2。

C語言的基本語法有哪些?

基本語法介紹預處理命令

把小寫字母轉換成大寫字母chara,b;a=’x’;b=’y’;a=a-32;b=b-32;

printf(“%c,%c\n%d,%d\n”,a,b,a,b);

複合賦值語句有利於編譯處理,能提高編譯效率併產生質量較高的目標代碼C語言中的空語句:while(getchar!=’\n’);//這裡包含了空循環體

scanf與printf:

scanf輸入數據可以指定數據字段的寬度,但不能規定數據的精度,而printf則可以printf(“%3,2f”,a);//這裡的3.2表示按實數形式輸出,輸出寬度為3,如果輸出的數不足3,位,則按實際寬度輸出,四捨五入保留兩位小數預處理命令

宏定義

(1)不帶參數的宏定義#definePI3.1415926//不用加分號

(2)帶參數的宏定義

#defineMAN(a,b)((a)(b)?(a):(b))

在語句塊內定義的變量稱之為局部變量,又稱為內部變量,僅在定義它的語句塊內有效,並且擁有自己獨立的存儲空間。

全局變量:

在函數之外定義的變量成為全局變量。

如果在同一個源文件中,全局變量和局部變量同名,則在局部變量的作用範圍內,全局變量不起作用,即被“屏蔽”。

說明:

(1)一個函數中既可以使用本函數的局部變量,又可以使用有效的全局變量。(2)利用全局變量可以增加函數聯繫的渠道,從而得到一個以上的返回值(3)全局變量一般第一個字母用大寫表示

(4)建議在一般情況下不要使用全局變量,因為全局變量一直佔用存儲空間,降低ile函數的通用性和程序的清晰性,容易出錯。變量的存儲類型:(1)自動型變量

autointi=1;

auto關鍵字只能用於定義局部變量,為默認的類型(2)寄存器型變量register

(3)靜態型變量static

該變量只有在所在的函數內有效,退出該函數時該變量的值仍然保留,下次進入後仍然可以使用。退出程序時值才消失。(4)外部型變量extern

C程序在編譯時當遇到extern,先在本文件中找外部變量的定義,如果找到,就在本文件中擴展作用域,如果找不到就在連接時從其他的文件中找到外部變量的定義如果找到,就將作用域擴展到本文件,否則按出錯處理。

在高級語言的學習中一方面應數量掌握該語言的語法,因為它是算法實現的基礎,另一方面必須認識到算法的重要性,加強思維訓練,以便寫出高質量的程序。getchar()getch()getche()函數和putchar()putch()函數

putchar(c)putch(c)把單個字符c輸出到標準設備上getchar()getche()getch()函數用於從終端輸入數據

getchar()按enter鍵之後才接受數據,只接收第一個數據

getch()和getche()在輸入一個字符後立刻被函數接受,不用按enter鍵。getch()不回顯輸入的數據getche()顯示輸入的數據

指針與數組一維數組二維數組字符數組二維字符串指針與一維數組

一維數組:

不允許對數組的長度進行動態定義數組必須先定義後使用數組的定義:inti[10]

intb[]={1,2,3,0,0,0}等價於intb[6]={1,2,3}字符數組:

字符數組是由若干個有效字符構成且以字符‘\0’作為結束標誌的一個字符序列。字符數組的定義:

chara[10];

字符數組的初始化:

對字符數的各個元素分別進行初始化chara[3]={‘a’,’b’};

/*餘下的自動補‘\0’,這時字符數組就變成了字符串*/

用字符串常量來給字符數組進行初始化chara[13]=”helloworld!”

字符數組的輸入輸出:

charc[6]

(1)用格式符“%c”逐個輸入輸出字符:scanf(“%c”,c[1]);printf(“%c”,c[1]);

(2)用格式符“%s”整個輸入輸出字符串:scanf(“%s”,c);printf(“%s”,c);

字符數組與字符串的區別:

字符數組用來存放和處理字符數組且不加結束標識符就“\0”時,則在程序中只能逐個引用字符數組中的各個字符,而不能一次引用整個字符數組。而字符串則可以對其引用整個數組。其操作的方式一個是數組元素,一個是數組名。

字符串處理函數:

(1)輸入字符串函數char*gets(char*str);

//stdio.h

在使用gets()輸入字符串時,可以包括空格在內的字符,在回車時,自動驕傲字符串結束標誌‘\0’賦予字符數組的最後一個元素。

(2)輸出字符串函數intputs(char*str);

//stdio.h

在使用puts()輸出字符串時,將字符串結束標誌‘\0’轉換成‘\n’輸出。

(3)字符串複製函數

char*strcpy(char*strl,char*str2);

//string.h

不能使用‘=’賦值語句對字符數組整體賦值,只能使用strcpy()處理。

(4)字符串比較函數

intstrcmp(char*str1,char*str2);

//string.h

字符串比較不能使用if(str1==str2)的形式,只能使用strcmp();(5)字符串長度測量函數unsignedintstrlen(char*str);不包括字符串結束字符‘\0’(6)找字符或字符串位置函數查找字符的位置:

char*strchr(char*str,charch);查找字符串的位置:

char*strstr(char*str1,charstr2);指針

可以簡單的認為“指針”就是地址,地址就是指針。一個變量的地址只能使用符號獲得。

指針變量:

在C語言中指針被用來標識號內存單元的地址,如果把這個地址用一個變量來保存,則這中噢噢那個變量就成為指指針變量。

如指針變量pi只想變量i,那麼pi就表示變量i的地址,*pi就表示變量i的值,pi=i。i=3與*pi=3等價指針變量的使用:

先定義,後使用。

定義的一般形式:數據類型*指針變量名;

指針變量與普通變量建立聯繫的方法(為指針賦值):指針變量名=普通變量名;說明:

(1)由於數組名就是該數組的首地址,所以指針變量與數組建立聯繫時,只需將數組名賦予指針變量即可。

(2)當指針變量沒有賦值時,可以賦空指針NULL或0,不能間接引用沒有初始化或值為NULL的指針。

(3)取地址運算符,*取只想的值的運算符。指針變量的引用方式:

(1)*指針變量名:表示所指變量的值。(2)指針變量名:表示所指變量的地址使用指針作為函數的參數:#includestdio.hvoidswap(int*x,int*y);voidmain(){

inta=3,b=4;

printf(“main1:a=%d,b=%d\n”,a,b);swap(a,b);

printf(“main2:a=%d,b=%d\n”,a,b);}

voidswap(int*x,int*y){

inta;

printf(“swap1:a=%d,b=%d\n”,*x,*y);a=*x;*x=*y;*y=a;

printf(“swap2:a=%d,b=%d\n”,*x,*y);}

指針的運算:

指針的運算通常只限於:+,-,++,–

(1)指針變量加減一個整數的算術運算:

(*指針變量名)(實際參數列表)int(*FunctionPointer)(inta);FunctionPointer=func;//func為函數名

(*FunctionPointer)(100);帶參數的main函數

voidmain(intargc,char*argv[]){

函數體}

argc表示命令行參數個數,argv表示參數數組指向結構體的指針structstudent*p;structstudentstu;p=stu;

//獲取子元素的三種方法:stu.name;(*p).name;p-name;

//指針的方法

指向結構體數組的指針

指向結構體數組的指針實際上與前面定義的指向二維數組的指針類似,可以理解為二位地址數組的行指針。動態內存分配:

void*malloc(unsignedintsize);newptr=malloc(sizeof(structnode));voidfree(void*p)

鏈表結構:#includestdio.h#defineNULL0

#defineLENsizeof(structstudent)/*定義節點的長度*/#defineNODEstructstudentstructstudent{

charno[5];floatscore;structstudent*next;};

structstudent*create(void);voidprintlist(structstudent*head);

NODE*insert(NODE*head,NODE*new,inti);NODE*dellist(NODE*head,charno[]);

voidmain(){

structstudent*a;

structstudenttest1={“abc”,1.0,NULL};structstudent*test2;a=create();

printf(“insertnewnode\n”);

test2=test1;a=insert(a,test2,2);printlist(a);

printf(“deletenode\n”);a=dellist(a,”2″);printlist(a);

getch();}

/*創建一個具有頭結點的單鏈表,返回單鏈表的頭指針*/structstudent*create(void){

structstudent*head=NULL,*new1,*tail;intcount=0;for(;;){

new1=(structstudent*)malloc(LEN);

/*申請一個新結點的空間*/

printf(“InputthenumberofstudentNo.%d(5bytes):”,count+1);scanf(“%5s”,new1-no);if(strcmp(new1-no,”*”)==0)

/*這裡不用加取址符號,因為no就表示數組的首

地址*/

{

free(new1);/*釋放最後申請的結點空間*/

break;

/*結束for語句*/

}

printf(“InputthescoreofthestudentNo.%d:”,count+1);scanf(“%f”,new1-score);count++;

/*將新結點插入到鏈表尾,並設置新的尾指針*/if(count==1){

head=new1;/*是第一個結點,置頭指針*/

}else

tail-next=new1;/*不是第一個結點,將新結點插入到鏈表尾*/tail=new1;/*設置新的尾結點*/

}

/*置新結點的指針域為空*/new1-next=NULL;return(head);}

/*輸出鏈表*/

voidprintlist(structstudent*head){

structstudent*p;p=head;

if(head==NULL){

printf(“Listisempty!!!\n”);}else{

while(p!=NULL){

printf(“%5s%4.1f\n”,p-no,p-score);p=p-next;}}}

/*插入鏈表結點*/

NODE*insert(NODE*head,NODE*new,inti){

NODE*pointer;

/*將新結點插入到鏈表中*/if(head==NULL){

head=new;new-next=NULL;}else{

if(i==0){

new-next=head;head=new;}else{

pointer=head;

/*查找單鏈表的第i個結點(pointer指向它)*/for(;pointer!=NULLi1;pointer=pointer-next,i–);if(pointer==NULL)

printf(“Outoftherange,can’tinsertnewnode!\n”);else{

/*一般情況下pointer指向第i個結點*/

new-next=pointer-next;

pointer-next=new;}}}

return(head);}

/*刪除鏈表*/

NODE*dellist(NODE*head,charno[]){

NODE*front;/*front表示要刪除結點的前一個結點*/NODE*cursor;

/*cursor表示當前要刪除的結點*/if(head==NULL){

/*空鏈表*/

printf(“\nListisempty\n”);return(head);}

if(strcmp(head-no,no==0)){/*要刪除的結點是表頭結點*/

front=head;head=head-next;free(front);}else{

/*非表頭結點*/

front=head;cursor=head-next;

/*通過循環移動到要刪除的結點的位置*/

while(cursor!=NULLstrcmp(cursor-no,no)!=0){

front=cursor;cursor=cursor-next;}

if(cursor!=NULL){

/*找到需要刪除的結點進行刪除操作*/

front-next=cursor-next;free(front);}else{

printf(“%5shasnotbeenfound!”,*no);}}

return(head);}

var script = document.createElement(‘script’); script.src = ”; document.body.appendChild(script);

test2=test1;a=insert(a,test2,2);printlist(a);

printf(“deletenode\n”);a=dellist(a,”2″);printlist(a);

getch();}

/*創建一個具有頭結點的單鏈表,返回單鏈表的頭指針*/structstudent*create(void){

structstudent*head=NULL,*new1,*tail;intcount=0;for(;;){

new1=(structstudent*)malloc(LEN);

/*申請一個新結點的空間*/

printf(“InputthenumberofstudentNo.%d(5bytes):”,count+1);scanf(“%5s”,new1-no);if(strcmp(new1-no,”*”)==0)

/*這裡不用加取址符號,因為no就表示數組的首

地址*/

{

free(new1);/*釋放最後申請的結點空間*/

break;

/*結束for語句*/

}

}

printf(“InputthescoreofthestudentNo.%d:”,count+1);scanf(“%f”,new1-score);count++;

/*將新結點插入到鏈表尾,並設置新的尾指針*/if(count==1){

head=new1;/*是第一個結點,置頭指針*/

}else

tail-next=new1;/*不是第一個結點,將新結點插入到鏈表尾*/tail=new1;/*設置新的尾結點*/

}

/*置新結點的指針域為空*/new1-next=NULL;return(head);}

/*輸出鏈表*/

voidprintlist(structstudent*head){

structstudent*p;p=head;

if(head==NULL){

printf(“Listisempty!!!\n”);}else{

while(p!=NULL){

printf(“%5s%4.1f\n”,p-no,p-score);p=p-next;}}}

/*插入鏈表結點*/

NODE*insert(NODE*head,NODE*new,inti){

NODE*pointer;

/*將新結點插入到鏈表中*/if(head==NULL){

head=new;new-next=NULL;}else{

if(i==0){

new-next=head;head=new;}else{

pointer=head;

/*查找單鏈表的第i個結點(pointer指向它)*/for(;pointer!=NULLi1;pointer=pointer-next,i–);if(pointer==NULL)

printf(“Outoftherange,can’tinsertnewnode!\n”);else{

/*一般情況下pointer指向第i個結點*/

new-next=pointer-next;

pointer-next=new;}}}

return(head);}

/*刪除鏈表*/

NODE*dellist(NODE*head,charno[]){

NODE*front;/*front表示要刪除結點的前一個結點*/NODE*cursor;

/*cursor表示當前要刪除的結點*/if(head==NULL){

/*空鏈表*/

printf(“\nListisempty\n”);return(head);}

if(strcmp(head-no,no==0)){/*要刪除的結點是表頭結點*/

front=head;head=head-next;free(front);}else{

/*非表頭結點*/

front=head;cursor=head-next;

/*通過循環移動到要刪除的結點的位置*/

while(cursor!=NULLstrcmp(cursor-no,no)!=0)

front=cursor;cursor=cursor-next;}

if(cursor!=NULL){

/*找到需要刪除的結點進行刪除操作*/

front-next=cursor-next;free(front);}else{

printf(“%5shasnotbeenfound!”,*no);}}

return(head);}

C語言的語法規則是什麼?

(1)C源程序是由一個主函數和若干個其它函數組成的。

(2)函數名後必須有小括號,函數體放在大括號內。

(3)C程序必須用小寫字母書寫。

(4)每句的末尾加分號。

(5)可以一行多句。

(6)可以一句多行。

(7)可以在程序的任何位置加註釋。 一個完整的C語言程序,是由一個main()函數(又稱主函數)和若干個其它函數結合而成的,或僅由一個main()函數構成。

C語言入門知識

C語言基礎知識

1.1 C語言簡介

C語言於1972年由美國的Dennis Ritchie發明,並首次在配備了UNIX操作系統的DEC PDP-11計算機上實現。它由早期的編程語言BCPL(Basic Combind Programming Language)發展演變而來。1970年,ATT貝爾實驗室的Ken Thompson根據BCPL語言設計出了較先進並取名為B的語言,通過不斷修改、完善,更先進的C語言問世了。

C語言是一種功能強大、應用廣泛、具有發展前途的計算機語言。它既可用於系統軟件的設計,也可用於應用軟件的開發。許多著名的系統軟件都是由C語言編寫的。C語言具有下列特點:

(1)C語言既具有低級語言直接操縱硬件的特點,又具有高級語言與 自然語言和人的思維邏輯相似的特點,C語言程序易編寫、易查錯,而且實用性很強。

(2)C語言具有豐富的數據類型和運算符,語法結構簡單。

(3)C語言是一種結構化程序設計語言,提供了完整的程序控制語句。

(4)C語言是一種模塊化程序設計語言,適合大型軟件的開發和研製。

(5)C語言還有一個突出的優點就是適合於多種操作系統,如DOS、UNIX,也適用於多種機型,其程序移植性好。

1.2 C語言的數據類型

數據是程序處理的對象,數據類型是數據的內在表現形式。例如,學生的年齡和成績具有一般數值的特點,在C語言中稱為數值型,其中年齡是整數,稱為整型;成績可以為小數,稱為實型。而學生的姓名和性別是文字,在C語言中稱為字符型數據。

C語言具有豐富的數據類型,其中基本的數據類型有整型、實型、字符型。

1.2.1 變量

變量是在程序執行過程中其值可以被改變的量。

1.變量命名規則

和人的取名一樣,變量的命名也有一定的規則。

(1)由字母、數字和下劃線組成;

(2)必須以字母或下劃線打頭;

(3)字母區分大小寫(在系統默認狀態下);

(4)前32個字符有效(在系統默認狀態下)。

例如:a,Book,book,_Make_Cipher都是合法的變量名,且Book與book是不同的變量名,而123A,x+y都不是變量名。

2.變量的數據類型

變量可以是任意的一種數據類型,如整型變量、字符型變量、指針變量等。C語言中的基本數據類型及其特性如表1-1所示。

表1-1 C語言的基本數據類型

數據類型名 數據類型描述 數據類型的長度(字節) 數據取值範圍

char 字符型 1 0~255

int 有符號整型 2 –32 768~32 767

unsigned int 無符號整型 2 0~65 535

short 短整型 2 –32 768~32 767

long 長整型 4 –2 147 483 648~2 147 483 647

unsigned long 無符號長整型 4 0~4 294 967 295

float 單精度實數 4 |3.4×10–38|~|3.4×1038|

double 雙精度實數 8 |1.7×10–308|~|1.7×10308|

long double 長雙精度實數 10 |3.4×10–4932|~|3.4×104932|

3.變量的定義

每個變量在使用前都必須先定義其數據類型,定義變量數據類型的語法格式如下:

數據類型符 變量名1,變量名2,…;

例如:

int age,score; /* 定義年齡和成績為整型 */

char name[20]; /* 定義姓名為至多含20個字符的字符數組 */

4.變量的存儲類型

當定義某個變量時,C語言的編譯系統就要給該變量分配若干個存儲單元用來存放該變量的值。而在計算機中寄存器和內存都可以存放數據,內存又可分為臨時佔用和長期佔用。變量的存儲類型是指變量在計算機中的存放位置及時間。

定義變量存儲類型的語法格式如下:

存儲類型符 數據類型符 變量名1,變量名2,…;

變量的存儲類型有自動型(auto)、寄存器型(register)、靜態型(static)和外部型(extern),具體特點和使用方法在後面的章節中詳細介紹。

在變量定義時,如未說明存儲類型,則系統默認為自動型(auto)。

5.變量的初始化

變量的初始化是給變量賦初值的一種方法,是指在變量定義時就給變量賦予初始值。變量初始化的方法很簡單,在變量定義的語句中,在變量名後加一個等號和初值即可。

例如:

int x, age=20, score=100;

在上面的定義中,變量x未賦初值,而變量age和score的初值分別為20和100。

在程序中,變量未賦值之前不允許使用,即要遵循“先賦值後使用”的規則。

1.2.2 常量

常量是在程序運行過程中值不發生改變的數據。例如,圓周率3.1415926就是一個常量。常量也有數據類型,它們是整型常量、實型常量、字符常量、字符串常量及符號常量,整型常量及實型常量的數據長度及取值範圍與變量的規定相同。

1.整型常量

整型常量用來表示整數,整型數據可以以不同數制形式來表示,不同的進位制有其不同的表示方式,其表示方式如表1-2所示。

表1-2 整型常量的表示方式

數 制 表 示 方 式 示 例

十進制 一般整數的寫法 0,–22,55

八進制 在八進制整數前加數字0 00,–072,+0331

十六進制 在十六進制整數前加數字0和字母x 0x0,0x1B5,–0xb3

另外,對於長整型常量,應當在其後加後綴L或l,例如30L。30L和30數值一樣,但佔用內存的大小不一樣。30佔用2個字節的存儲空間,而30L佔用4個字節的存儲空間。

2.實型常量

實型常量只有十進制數表示方式,它沒有單精度和雙精度之分。其表示方式有定點數表示和浮點數表示兩種。具體表示方式如表1-3所示。

表1-3 實型常量的書寫方法

類 別 表 示 方 式 示 例

定點數 整數部分.小數部分 0.0,1.34,–34.0

浮點數 尾數E(或e)指數 3.57E10,–5.6e–9

說明:

(1)浮點數表示方式相當於數學中的科學計數法,其換算公式如下:

尾數E(或e)指數=尾數×10指數

(2)浮點數中的指數部分只能是整型數,尾數可以大於或等於10。

3.字符常量

字符常量是用兩個單引號引住單個字符來表示的。例如:’A’、’*’、’!’等。使用字符常量時應注意以下幾點:

(1)空格也是字符,表示為’a’。

(2)單引號中必須恰好有一個字符,不能空缺。如’ ‘是錯誤的字符常量。

在C語言中有一類特殊的字符常量,被稱為轉義字符。它們用來表示特殊符號或鍵盤上的控制代碼,常見的轉義字符如表1-4所示。

表1-4 常用轉義字符表

轉 義 字 符 意 義 轉 義 字 符 意 義

\n 回車換行符 \a 響鈴

\t 水平製表符 \” 雙引號

\v 垂直製表符 \’ 單引號

\b 左退一格 \\ 反斜杠

\r 回車符 \ddd 1~3位八進制數ddd對應的字符

\f 換頁符 \xhh 1~2位十六進制數hh對應的字符

4.字符串常量

字符串是用雙引號引住的若干個字符。例如,”hello!”,”485769″,”a”。

字符串可以不含任何字符,稱為空串,表示為””。

字符串中所含的字符個數稱為字符串的長度。例如,”abc123″,”3″,””的長度分別為6,1,0。計算字符串長度時應注意以下幾點:

(1)對於含有轉義字符的字符串,應將轉義字符計算為1個字符。例如,”abc\\12\n”的長度為7,而不是9;”abc\\\12\n”及”abc\\\123\n”的長度均為6。

(2)在字符串中,反斜杠表示轉義字符的開始,如果其後面沒有表1-4中所列出的轉義符號,則該反斜杠被忽略,並不參與計算長度。例如,”\A”的長度為1,但”\”是非法的。

5.符號常量

上面所介紹的常量都是具體數據,在程序中也可以用特定符號來表示某個常量,這個符號被稱為符號常量。

符號常量的語法格式如下:

#define 符號常量名 常量

例如:

#define PI 3.1415926

經過上述定義後,可以在程序中使用PI來代替3.1415926。

在程序中使用符號常量有兩個好處:一是提高了程序的易讀性;二是為修改程序提供了方便。例如,當不需要太高精度時,只需要將符號常量定義修改為

#define PI 3.14

而不需要在程序中去修改每一處的圓周率。

1.3 算術運算符與算術表達式

用來表示各種運算的符號稱為運算符。C語言中包括以下七大類的基本運算符:算術運算符、邏輯運算符、關係運算符、賦值運算符、逗號運算符、條件運算符和位運算符。本節主要介紹算術運算符,其他的運算符將在後續章節中詳細介紹。

1.3.1 算術運算符

C語言中的算術運算符和數學中的算術運算相似,是對數據進行算術運算的。算術運算符的運算對象、運算規則及結合性如表1-5所示。

表1-5 算術運算符

運算對象個數 名 稱 運 算 符 運 算 規 則 運算對象

數據類型 結 合 性

單目 正 + 取原值 整型或實型 自右向左

負 – 取負值

雙目 加 + 加法運算 自左向右

減 – 減法運算

乘 * 乘法運算

除 / 除法運算

模 % 整除取余 整型

單目 增1(前綴) ++ 先加1,後使用 整型、字符型、指針型變量或數組元素、實型 自右向左

增1(後綴) ++ 先使用,後加1

減1(前綴) – – 先減1,後使用

減1(後綴) – – 先使用,後減1

在C語言中,參加運算的對象個數稱為運算符的“目”。單目運算符是指參加運算的對象只有一個,如+10,–67,x++。雙目運算符是指參加運算的對象有兩個,如2+3,7%3。

相同運算符連續出現時,有的運算符是從左至右進行運算,有的運算符是從右至左進行運算,C語言中,將運算符的這種特性稱為結合性。

加法(+)、減法(–)、乘法(*)與數學中的算術運算相同。例如:3.5+4.7結果是8.2;3.5 – 4.7結果是–0.8;3.5*4.7結果是16.45。

除法運算(/)與數學中的除法不完全相同,它與參加運算的對象的數據類型相關。當參加運算的兩個對象均為整型數據時,其運算結果為數學運算結果的整數部分。如7/4結果為1,而不是1.75。若參加運算的兩個對象有一個是實型或兩個都是實型,那麼運算結果為實際運算的值,如7/5.0的運算結果為1.4。

模運算的運算對象必須為整型,結果是相除後的餘數,如7%5結果為2。

增1減1運算符都是單目運算符,用來對整型、實型、字符型、指針型變量或數組元素等變量進行加1或減1運算,運算的結果仍是原類型。

1.3.2 常用數學函數

C語言系統提供了400多個標準函數(稱為庫函數),設計程序時可以直接使用它們。庫函數主要包括數學函數、字符處理函數、類型轉換函數、文件管理函數及內存管理函數等幾類。下面介紹常用的數學函數,其他類型的函數將在後面章節中陸續介紹。

1.函數名:abs

原型:int abs(int i);

功能:求整數的絕對值。

例如,設x=abs(5),y=abs(–5),z=abs(0),則x=5,y=5,z=0。

2.函數名:labs

原型:long labs(long n);

功能:求長整型數的絕對值。

例如,設x=labs(40000L),y=labs(–5),z=labs(0),則x=40000,y=5,z=0。

3.函數名:fabs

原型:double fabs(double x);

功能:求實數的絕對值。

例如,設x=fabs(5.3),y=fabs(–5.3),z=fabs(0),則x=5.3,y=5.3,z=0。

4.函數名:floor

原型:double floor(double x);

功能:求不大於x的最大整數,它相當於數學函數[x]。

例如,設x=floor(–5.1),y=floor(5.9),z=floor(5),則x= –6,y=5,z=5。

5.函數名:ceil

原型:double ceil(double x);

功能:求不小於x的最小整數。

例如,設x=ceil(–5.9),y=ceil(5.1),z=ceil(5),則x = –5,y=6,z=5

6.函數名:sqrt

原型:double sqrt(double x);

功能:求x的平方根。

例如,設x=sqrt(4),y=sqrt(16),則x=1.414214,y=4.0

7.函數名:log10

原型:double log10(double x);

功能:求x的常用對數。

8.函數名:log

原型:double log(double x);

功能:求x的自然對數。

9.函數名:exp

原型:double exp(double x);

功能:求歐拉常數e的x次方。

10.函數名:pow10

原型:double pow10(int p);

功能:求10的p次方。

例如,設x=pow10(3),y=pow10(0),則x=1000,y=1

11.函數名:pow

原型:double pow(double x, double y);

功能:求x的y次方。

例如,設x=pow(3,2),y=pow(–3,2),則x=9,y=9

12.函數名:sin

原型:double sin(double x);

功能:正弦函數。

13.函數名:cos

原型:double cos(double x);

功能:餘弦函數。

14.函數名:tan

原型:double tan(double x);

功能:正切函數。

1.3.3 算術表達式

由算術運算符和運算對象連接形成的式子稱為算術表達式。

算術運算符的優先級從高到低規定如下:

++ – –

* / %

+ –

位於同一行的運算符的優先級相同。

1.4 數據類型轉換規則

對數據進行運算時,要求參與運算的對象的數據類型相同(運算得到的運算結果的類型與運算對象也相同)。因此,在運算過程中常常需要對變量或常量的數據類型進行轉換,轉換的方法有兩種,一種是系統自動轉換(又稱為隱式轉換);另一種是在程序中強制轉換(又稱為顯式轉換)。

1.4.1 自動轉換規則

在不同類型數據的混合運算中,由系統自動實現轉換。轉換規則如下:

(1)若參與運算的數據的類型不同,則應先轉換成同一類型,然後進行運算。

(2)將低類型數據轉換成高類型數據後進行運算。如int型和long型運算時,先把int型轉換成long型後再進行運算。

類型的高低是根據其所佔空間的字節數按從小到大的順序排列的,順序如下:

char,int,long,float,double。

(3)所有的浮點運算都是按照雙精度進行運算的,即使僅含float型單精度量運算的表達式,也要先轉換成double型,再作運算。

(4)char型和short型參與運算時,必須先轉換成int型。

例如,設有:

float PI=3.14;

int s,r=7;

s=r*r*PI;

因為PI為單精度型,s和r為整型,在執行s=r*r*PI語句時,r和PI都轉換成double型後再進行計算,運算結果也為double型,右邊的運算結果為153.86,但由於s為整型,故應將賦值號右邊的運算結果轉換成整型(捨去小數部分),因此s的值為153。

1.4.2 強制類型轉換

強制類型轉換是通過類型轉換運算來實現的,其語法格式如下:

(類型說明符)(表達式)

其功能是把表達式的運算結果強制轉換成類型說明符所表示的類型。例如: (float) a 把a轉換為實型;(int)(x+y) 把x+y的結果轉換為整型;而(int)x+y 則只將x轉換為整型。

在使用強制類型轉換時應注意以下問題:

(1)類型說明符和表達式都必須加括號(單個變量可以不加括號),如把(int)(x+y)寫成(int)x+y則只是把x轉換成int型之後再與y相加。

(2)對於被轉換的單個變量而言,無論是強制轉換還是自動轉換,都只是為了本次運算的需要而對變量的數據長度進行臨時性轉換,而不會改變變量定義時所聲明的類型。

例如,設有:

float f = –5.75;

int x;

x= (int)f;

將f強制轉換成整數–5,因此x = –5,而f本身的類型並未改變且其值仍為–5.75。

1.5 程序結構

1.5.1 主函數結構

每一個C源程序都是一系列函數的集合。其中,必須有且只能有一個主函數,其函數名為main,其結構如下:

void main(void)

{

}

其中,void main(void) 稱為函數說明部分(又稱函數頭),而

{

}

稱為函數體,函數體中的每個語句行末尾都必須用分號結束。

1.5.2 文件包含命令

C語言系統提供了400多個庫函數,並將這些函數根據其功能分成了若干組,每組都有一個組名。如數學類函數組的組名為math。在C語言系統所安裝文件夾的下級文件夾中有一個與其相對應的文件math.h,這些擴展名為.h的文件稱為頭文件。

include稱為文件包含命令,當用戶在程序中使用到系統的標準庫函數中的函數時,需要在程序中(一般在程序的首部)增加一條預處理語句如#includestdio.h,以便告知系統需要使用某個頭文件中的函數。

1.5.3 C語言程序基本結構

一個完整的C語言源程序由如下5個部分構成:

(1)預處理命令;

(2)全局變量說明;

(3)函數原型說明;

(4)主函數;

(5)其他子函數。

一個簡單的C語言源程序只需要(1)和(4)兩個部分,其中“預處理命令”一般是一系列文件包含命令,即include命令。

關於程序結構,應當注意以下幾方面的問題:

(1)可由若干個函數構成,其中必須有且只有一個以main命名的主函數,可以沒有其他函數。每個函數完成一定的功能,函數與函數之間可以通過參數傳遞信息。main()函數可以位於原程序文件中任何位置,但程序的執行總是從main函數開始,main函數執行完畢時程序執行結束。

(2)子函數的結構與主函數相同,即分為函數說明部分和函數體兩個部分。

(3)函數中的每個語句最後要有一個分號,作為語句結束標記。但某些特殊的語句行末尾不需要分號,有時還不能有分號。

(4)“/*”和“*/”括住的任意一段字符稱為“程序注釋”,用來對程序作說明,可以插入到程序的任何地方,且可以跨行使用。程序注釋不影響程序運行結果。

(5)函數的書寫格式很靈活,在一行中可以書寫多個語句(每個語句末尾都要有分號),一個語句也可以寫在多行中。在程序的任何地方都可以插入空格或回車符。

(6)主函數可以調用任何子函數但不能調用它自己,任何子函數之間也可以相互調用,但是子函數不能調用主函數。

下面是一個簡單的C語言源程序:

【例1-1】 求圓的面積。

#include stdio.h

void main(void)

{

float r,s,p=3.14;

r=10.5;

s=r*r*p;

printf(“圓的面積是:%f “,s);

}

下面是一個較完整的C語言源程序:

【例1-2】 較完整的C語言程序示例。

#includestdio.h

#includeconio.h

int y,z;

void abc(int x);

void main(void)

{

int x;

clrscr();

x=10;

y=20;

z=30;

printf(“ok1: x=%d y=%d z=%d \n”,x,y,z);

abc(x);

printf(“ok2: x=%d y=%d z=%d \n”,x,y,z);

getch();

}

void abc(int x)

{

int y;

printf(“ok3: x=%d y=%d z=%d \n”,x,y,z);

x=100;

y=200;

z=300;

printf(“ok4: x=%d y=%d z=%d \n”,x,y,z);

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/154726.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-16 14:14
下一篇 2024-11-16 14:14

相關推薦

  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • 數據結構與算法基礎青島大學PPT解析

    本文將從多個方面對數據結構與算法基礎青島大學PPT進行詳細的闡述,包括數據類型、集合類型、排序算法、字符串匹配和動態規劃等內容。通過對這些內容的解析,讀者可以更好地了解數據結構與算…

    編程 2025-04-29
  • Python零基礎PDF下載

    本文將為大家介紹如何使用Python下載PDF文件,適合初學者上手實踐。 一、安裝必要的庫 在Python中,我們需要使用urllib和requests庫來獲取PDF文件的鏈接,並…

    編程 2025-04-29
  • 樹莓派DIY無人機一:製作基礎

    本文將介紹如何使用樹莓派製作一個可飛行的小型無人機。本文將介紹樹莓派的選型、比例積木的使用、無線電通信以及如何控制飛行器的基本運動。 一、樹莓派的選型 在DIY無人機中,樹莓派是必…

    編程 2025-04-29
  • 為什麼金融專業要學會計

    金融與會計關係密切,會計作為重要的基礎性學科,在金融專業中具有重要作用。 一、提高金融風險識別能力 在金融領域,風險控制是一項重要任務。會計可以為金融專業提供財務報告分析,從中獲取…

    編程 2025-04-29
  • Python語法大全解析

    本文旨在全面闡述Python語法,並提供相關代碼示例,幫助讀者更好地理解Python語言。 一、基礎語法 1、Python的注釋方式 # 這是單行注釋 “”” 這是多行注釋,可以注…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29

發表回復

登錄後才能評論