當前位置:編程學習大全網 - 編程語言 - C語言入門知識

C語言入門知識

C語言基礎知識

1.1 C語言簡介

C語言於1972年由美國的Dennis Ritchie發明,並首次在配備了UNIX操作系統的DEC PDP-11計算機上實現。它由早期的編程語言BCPL(Basic Combind Programming Language)發展演變而來。1970年,AT&T貝爾實驗室的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稱為文件包含命令,當用戶在程序中使用到系統的標準庫函數中的函數時,需要在程序中(壹般在程序的首部)增加壹條預處理語句如#include<stdio.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語言程序示例。

#include<stdio.h>

#include<conio.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);

}

  • 上一篇:聖誕節有什麽習俗?
  • 下一篇:仿生機器人詳細資料大全
  • copyright 2024編程學習大全網