C語(yǔ)言基礎(chǔ)知識(shí)
創(chuàng)新互聯(lián)建站成立以來(lái)不斷整合自身及行業(yè)資源、不斷突破觀念以使企業(yè)策略得到完善和成熟,建立了一套“以技術(shù)為基點(diǎn),以客戶需求中心、市場(chǎng)為導(dǎo)向”的快速反應(yīng)體系。對(duì)公司的主營(yíng)項(xiàng)目,如中高端企業(yè)網(wǎng)站企劃 / 設(shè)計(jì)、行業(yè) / 企業(yè)門戶設(shè)計(jì)推廣、行業(yè)門戶平臺(tái)運(yùn)營(yíng)、手機(jī)APP定制開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)、微信網(wǎng)站制作、軟件開(kāi)發(fā)、成都服務(wù)器托管等實(shí)行標(biāo)準(zhǔn)化操作,讓客戶可以直觀的預(yù)知到從創(chuàng)新互聯(lián)建站可以獲得的服務(wù)效果。
1.1 C語(yǔ)言簡(jiǎn)介
C語(yǔ)言于1972年由美國(guó)的Dennis Ritchie發(fā)明,并首次在配備了UNIX操作系統(tǒng)的DEC PDP-11計(jì)算機(jī)上實(shí)現(xiàn)。它由早期的編程語(yǔ)言BCPL(Basic Combind Programming Language)發(fā)展演變而來(lái)。1970年,ATT貝爾實(shí)驗(yàn)室的Ken Thompson根據(jù)BCPL語(yǔ)言設(shè)計(jì)出了較先進(jìn)并取名為B的語(yǔ)言,通過(guò)不斷修改、完善,更先進(jìn)的C語(yǔ)言問(wèn)世了。
C語(yǔ)言是一種功能強(qiáng)大、應(yīng)用廣泛、具有發(fā)展前途的計(jì)算機(jī)語(yǔ)言。它既可用于系統(tǒng)軟件的設(shè)計(jì),也可用于應(yīng)用軟件的開(kāi)發(fā)。許多著名的系統(tǒng)軟件都是由C語(yǔ)言編寫的。C語(yǔ)言具有下列特點(diǎn):
(1)C語(yǔ)言既具有低級(jí)語(yǔ)言直接操縱硬件的特點(diǎn),又具有高級(jí)語(yǔ)言與 自然語(yǔ)言和人的思維邏輯相似的特點(diǎn),C語(yǔ)言程序易編寫、易查錯(cuò),而且實(shí)用性很強(qiáng)。
(2)C語(yǔ)言具有豐富的數(shù)據(jù)類型和運(yùn)算符,語(yǔ)法結(jié)構(gòu)簡(jiǎn)單。
(3)C語(yǔ)言是一種結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,提供了完整的程序控制語(yǔ)句。
(4)C語(yǔ)言是一種模塊化程序設(shè)計(jì)語(yǔ)言,適合大型軟件的開(kāi)發(fā)和研制。
(5)C語(yǔ)言還有一個(gè)突出的優(yōu)點(diǎn)就是適合于多種操作系統(tǒng),如DOS、UNIX,也適用于多種機(jī)型,其程序移植性好。
1.2 C語(yǔ)言的數(shù)據(jù)類型
數(shù)據(jù)是程序處理的對(duì)象,數(shù)據(jù)類型是數(shù)據(jù)的內(nèi)在表現(xiàn)形式。例如,學(xué)生的年齡和成績(jī)具有一般數(shù)值的特點(diǎn),在C語(yǔ)言中稱為數(shù)值型,其中年齡是整數(shù),稱為整型;成績(jī)可以為小數(shù),稱為實(shí)型。而學(xué)生的姓名和性別是文字,在C語(yǔ)言中稱為字符型數(shù)據(jù)。
C語(yǔ)言具有豐富的數(shù)據(jù)類型,其中基本的數(shù)據(jù)類型有整型、實(shí)型、字符型。
1.2.1 變量
變量是在程序執(zhí)行過(guò)程中其值可以被改變的量。
1.變量命名規(guī)則
和人的取名一樣,變量的命名也有一定的規(guī)則。
(1)由字母、數(shù)字和下劃線組成;
(2)必須以字母或下劃線打頭;
(3)字母區(qū)分大小寫(在系統(tǒng)默認(rèn)狀態(tài)下);
(4)前32個(gè)字符有效(在系統(tǒng)默認(rèn)狀態(tài)下)。
例如:a,Book,book,_Make_Cipher都是合法的變量名,且Book與book是不同的變量名,而123A,x+y都不是變量名。
2.變量的數(shù)據(jù)類型
變量可以是任意的一種數(shù)據(jù)類型,如整型變量、字符型變量、指針變量等。C語(yǔ)言中的基本數(shù)據(jù)類型及其特性如表1-1所示。
表1-1 C語(yǔ)言的基本數(shù)據(jù)類型
數(shù)據(jù)類型名 數(shù)據(jù)類型描述 數(shù)據(jù)類型的長(zhǎng)度(字節(jié)) 數(shù)據(jù)取值范圍
char 字符型 1 0~255
int 有符號(hào)整型 2 –32 768~32 767
unsigned int 無(wú)符號(hào)整型 2 0~65 535
short 短整型 2 –32 768~32 767
long 長(zhǎng)整型 4 –2 147 483 648~2 147 483 647
unsigned long 無(wú)符號(hào)長(zhǎng)整型 4 0~4 294 967 295
float 單精度實(shí)數(shù) 4 |3.4×10–38|~|3.4×1038|
double 雙精度實(shí)數(shù) 8 |1.7×10–308|~|1.7×10308|
long double 長(zhǎng)雙精度實(shí)數(shù) 10 |3.4×10–4932|~|3.4×104932|
3.變量的定義
每個(gè)變量在使用前都必須先定義其數(shù)據(jù)類型,定義變量數(shù)據(jù)類型的語(yǔ)法格式如下:
數(shù)據(jù)類型符 變量名1,變量名2,…;
例如:
int age,score; /* 定義年齡和成績(jī)?yōu)檎?*/
char name[20]; /* 定義姓名為至多含20個(gè)字符的字符數(shù)組 */
4.變量的存儲(chǔ)類型
當(dāng)定義某個(gè)變量時(shí),C語(yǔ)言的編譯系統(tǒng)就要給該變量分配若干個(gè)存儲(chǔ)單元用來(lái)存放該變量的值。而在計(jì)算機(jī)中寄存器和內(nèi)存都可以存放數(shù)據(jù),內(nèi)存又可分為臨時(shí)占用和長(zhǎng)期占用。變量的存儲(chǔ)類型是指變量在計(jì)算機(jī)中的存放位置及時(shí)間。
定義變量存儲(chǔ)類型的語(yǔ)法格式如下:
存儲(chǔ)類型符 數(shù)據(jù)類型符 變量名1,變量名2,…;
變量的存儲(chǔ)類型有自動(dòng)型(auto)、寄存器型(register)、靜態(tài)型(static)和外部型(extern),具體特點(diǎn)和使用方法在后面的章節(jié)中詳細(xì)介紹。
在變量定義時(shí),如未說(shuō)明存儲(chǔ)類型,則系統(tǒng)默認(rèn)為自動(dòng)型(auto)。
5.變量的初始化
變量的初始化是給變量賦初值的一種方法,是指在變量定義時(shí)就給變量賦予初始值。變量初始化的方法很簡(jiǎn)單,在變量定義的語(yǔ)句中,在變量名后加一個(gè)等號(hào)和初值即可。
例如:
int x, age=20, score=100;
在上面的定義中,變量x未賦初值,而變量age和score的初值分別為20和100。
在程序中,變量未賦值之前不允許使用,即要遵循“先賦值后使用”的規(guī)則。
1.2.2 常量
常量是在程序運(yùn)行過(guò)程中值不發(fā)生改變的數(shù)據(jù)。例如,圓周率3.1415926就是一個(gè)常量。常量也有數(shù)據(jù)類型,它們是整型常量、實(shí)型常量、字符常量、字符串常量及符號(hào)常量,整型常量及實(shí)型常量的數(shù)據(jù)長(zhǎng)度及取值范圍與變量的規(guī)定相同。
1.整型常量
整型常量用來(lái)表示整數(shù),整型數(shù)據(jù)可以以不同數(shù)制形式來(lái)表示,不同的進(jìn)位制有其不同的表示方式,其表示方式如表1-2所示。
表1-2 整型常量的表示方式
數(shù) 制 表 示 方 式 示 例
十進(jìn)制 一般整數(shù)的寫法 0,–22,55
八進(jìn)制 在八進(jìn)制整數(shù)前加數(shù)字0 00,–072,+0331
十六進(jìn)制 在十六進(jìn)制整數(shù)前加數(shù)字0和字母x 0x0,0x1B5,–0xb3
另外,對(duì)于長(zhǎng)整型常量,應(yīng)當(dāng)在其后加后綴L或l,例如30L。30L和30數(shù)值一樣,但占用內(nèi)存的大小不一樣。30占用2個(gè)字節(jié)的存儲(chǔ)空間,而30L占用4個(gè)字節(jié)的存儲(chǔ)空間。
2.實(shí)型常量
實(shí)型常量只有十進(jìn)制數(shù)表示方式,它沒(méi)有單精度和雙精度之分。其表示方式有定點(diǎn)數(shù)表示和浮點(diǎn)數(shù)表示兩種。具體表示方式如表1-3所示。
表1-3 實(shí)型常量的書(shū)寫方法
類 別 表 示 方 式 示 例
定點(diǎn)數(shù) 整數(shù)部分.小數(shù)部分 0.0,1.34,–34.0
浮點(diǎn)數(shù) 尾數(shù)E(或e)指數(shù) 3.57E10,–5.6e–9
說(shuō)明:
(1)浮點(diǎn)數(shù)表示方式相當(dāng)于數(shù)學(xué)中的科學(xué)計(jì)數(shù)法,其換算公式如下:
尾數(shù)E(或e)指數(shù)=尾數(shù)×10指數(shù)
(2)浮點(diǎn)數(shù)中的指數(shù)部分只能是整型數(shù),尾數(shù)可以大于或等于10。
3.字符常量
字符常量是用兩個(gè)單引號(hào)引住單個(gè)字符來(lái)表示的。例如:'A'、'*'、'!'等。使用字符常量時(shí)應(yīng)注意以下幾點(diǎn):
(1)空格也是字符,表示為'a'。
(2)單引號(hào)中必須恰好有一個(gè)字符,不能空缺。如' '是錯(cuò)誤的字符常量。
在C語(yǔ)言中有一類特殊的字符常量,被稱為轉(zhuǎn)義字符。它們用來(lái)表示特殊符號(hào)或鍵盤上的控制代碼,常見(jiàn)的轉(zhuǎn)義字符如表1-4所示。
表1-4 常用轉(zhuǎn)義字符表
轉(zhuǎn) 義 字 符 意 義 轉(zhuǎn) 義 字 符 意 義
\n 回車換行符 \a 響鈴
\t 水平制表符 \" 雙引號(hào)
\v 垂直制表符 \' 單引號(hào)
\b 左退一格 \\ 反斜杠
\r 回車符 \ddd 1~3位八進(jìn)制數(shù)ddd對(duì)應(yīng)的字符
\f 換頁(yè)符 \xhh 1~2位十六進(jìn)制數(shù)hh對(duì)應(yīng)的字符
4.字符串常量
字符串是用雙引號(hào)引住的若干個(gè)字符。例如,"hello!","485769","a"。
字符串可以不含任何字符,稱為空串,表示為""。
字符串中所含的字符個(gè)數(shù)稱為字符串的長(zhǎng)度。例如,"abc123","3",""的長(zhǎng)度分別為6,1,0。計(jì)算字符串長(zhǎng)度時(shí)應(yīng)注意以下幾點(diǎn):
(1)對(duì)于含有轉(zhuǎn)義字符的字符串,應(yīng)將轉(zhuǎn)義字符計(jì)算為1個(gè)字符。例如,"abc\\12\n"的長(zhǎng)度為7,而不是9;"abc\\\12\n"及"abc\\\123\n"的長(zhǎng)度均為6。
(2)在字符串中,反斜杠表示轉(zhuǎn)義字符的開(kāi)始,如果其后面沒(méi)有表1-4中所列出的轉(zhuǎn)義符號(hào),則該反斜杠被忽略,并不參與計(jì)算長(zhǎng)度。例如,"\A"的長(zhǎng)度為1,但"\"是非法的。
5.符號(hào)常量
上面所介紹的常量都是具體數(shù)據(jù),在程序中也可以用特定符號(hào)來(lái)表示某個(gè)常量,這個(gè)符號(hào)被稱為符號(hào)常量。
符號(hào)常量的語(yǔ)法格式如下:
#define 符號(hào)常量名 常量
例如:
#define PI 3.1415926
經(jīng)過(guò)上述定義后,可以在程序中使用PI來(lái)代替3.1415926。
在程序中使用符號(hào)常量有兩個(gè)好處:一是提高了程序的易讀性;二是為修改程序提供了方便。例如,當(dāng)不需要太高精度時(shí),只需要將符號(hào)常量定義修改為
#define PI 3.14
而不需要在程序中去修改每一處的圓周率。
1.3 算術(shù)運(yùn)算符與算術(shù)表達(dá)式
用來(lái)表示各種運(yùn)算的符號(hào)稱為運(yùn)算符。C語(yǔ)言中包括以下七大類的基本運(yùn)算符:算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、賦值運(yùn)算符、逗號(hào)運(yùn)算符、條件運(yùn)算符和位運(yùn)算符。本節(jié)主要介紹算術(shù)運(yùn)算符,其他的運(yùn)算符將在后續(xù)章節(jié)中詳細(xì)介紹。
1.3.1 算術(shù)運(yùn)算符
C語(yǔ)言中的算術(shù)運(yùn)算符和數(shù)學(xué)中的算術(shù)運(yùn)算相似,是對(duì)數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算的。算術(shù)運(yùn)算符的運(yùn)算對(duì)象、運(yùn)算規(guī)則及結(jié)合性如表1-5所示。
表1-5 算術(shù)運(yùn)算符
運(yùn)算對(duì)象個(gè)數(shù) 名 稱 運(yùn) 算 符 運(yùn) 算 規(guī) 則 運(yùn)算對(duì)象
數(shù)據(jù)類型 結(jié) 合 性
單目 正 + 取原值 整型或?qū)嵭?自右向左
負(fù) – 取負(fù)值
雙目 加 + 加法運(yùn)算 自左向右
減 – 減法運(yùn)算
乘 * 乘法運(yùn)算
除 / 除法運(yùn)算
模 % 整除取余 整型
單目 增1(前綴) ++ 先加1,后使用 整型、字符型、指針型變量或數(shù)組元素、實(shí)型 自右向左
增1(后綴) ++ 先使用,后加1
減1(前綴) – – 先減1,后使用
減1(后綴) – – 先使用,后減1
在C語(yǔ)言中,參加運(yùn)算的對(duì)象個(gè)數(shù)稱為運(yùn)算符的“目”。單目運(yùn)算符是指參加運(yùn)算的對(duì)象只有一個(gè),如+10,–67,x++。雙目運(yùn)算符是指參加運(yùn)算的對(duì)象有兩個(gè),如2+3,7%3。
相同運(yùn)算符連續(xù)出現(xiàn)時(shí),有的運(yùn)算符是從左至右進(jìn)行運(yùn)算,有的運(yùn)算符是從右至左進(jìn)行運(yùn)算,C語(yǔ)言中,將運(yùn)算符的這種特性稱為結(jié)合性。
加法(+)、減法(–)、乘法(*)與數(shù)學(xué)中的算術(shù)運(yùn)算相同。例如:3.5+4.7結(jié)果是8.2;3.5 – 4.7結(jié)果是–0.8;3.5*4.7結(jié)果是16.45。
除法運(yùn)算(/)與數(shù)學(xué)中的除法不完全相同,它與參加運(yùn)算的對(duì)象的數(shù)據(jù)類型相關(guān)。當(dāng)參加運(yùn)算的兩個(gè)對(duì)象均為整型數(shù)據(jù)時(shí),其運(yùn)算結(jié)果為數(shù)學(xué)運(yùn)算結(jié)果的整數(shù)部分。如7/4結(jié)果為1,而不是1.75。若參加運(yùn)算的兩個(gè)對(duì)象有一個(gè)是實(shí)型或兩個(gè)都是實(shí)型,那么運(yùn)算結(jié)果為實(shí)際運(yùn)算的值,如7/5.0的運(yùn)算結(jié)果為1.4。
模運(yùn)算的運(yùn)算對(duì)象必須為整型,結(jié)果是相除后的余數(shù),如7%5結(jié)果為2。
增1減1運(yùn)算符都是單目運(yùn)算符,用來(lái)對(duì)整型、實(shí)型、字符型、指針型變量或數(shù)組元素等變量進(jìn)行加1或減1運(yùn)算,運(yùn)算的結(jié)果仍是原類型。
1.3.2 常用數(shù)學(xué)函數(shù)
C語(yǔ)言系統(tǒng)提供了400多個(gè)標(biāo)準(zhǔn)函數(shù)(稱為庫(kù)函數(shù)),設(shè)計(jì)程序時(shí)可以直接使用它們。庫(kù)函數(shù)主要包括數(shù)學(xué)函數(shù)、字符處理函數(shù)、類型轉(zhuǎn)換函數(shù)、文件管理函數(shù)及內(nèi)存管理函數(shù)等幾類。下面介紹常用的數(shù)學(xué)函數(shù),其他類型的函數(shù)將在后面章節(jié)中陸續(xù)介紹。
1.函數(shù)名:abs
原型:int abs(int i);
功能:求整數(shù)的絕對(duì)值。
例如,設(shè)x=abs(5),y=abs(–5),z=abs(0),則x=5,y=5,z=0。
2.函數(shù)名:labs
原型:long labs(long n);
功能:求長(zhǎng)整型數(shù)的絕對(duì)值。
例如,設(shè)x=labs(40000L),y=labs(–5),z=labs(0),則x=40000,y=5,z=0。
3.函數(shù)名:fabs
原型:double fabs(double x);
功能:求實(shí)數(shù)的絕對(duì)值。
例如,設(shè)x=fabs(5.3),y=fabs(–5.3),z=fabs(0),則x=5.3,y=5.3,z=0。
4.函數(shù)名:floor
原型:double floor(double x);
功能:求不大于x的最大整數(shù),它相當(dāng)于數(shù)學(xué)函數(shù)[x]。
例如,設(shè)x=floor(–5.1),y=floor(5.9),z=floor(5),則x= –6,y=5,z=5。
5.函數(shù)名:ceil
原型:double ceil(double x);
功能:求不小于x的最小整數(shù)。
例如,設(shè)x=ceil(–5.9),y=ceil(5.1),z=ceil(5),則x = –5,y=6,z=5
6.函數(shù)名:sqrt
原型:double sqrt(double x);
功能:求x的平方根。
例如,設(shè)x=sqrt(4),y=sqrt(16),則x=1.414214,y=4.0
7.函數(shù)名:log10
原型:double log10(double x);
功能:求x的常用對(duì)數(shù)。
8.函數(shù)名:log
原型:double log(double x);
功能:求x的自然對(duì)數(shù)。
9.函數(shù)名:exp
原型:double exp(double x);
功能:求歐拉常數(shù)e的x次方。
10.函數(shù)名:pow10
原型:double pow10(int p);
功能:求10的p次方。
例如,設(shè)x=pow10(3),y=pow10(0),則x=1000,y=1
11.函數(shù)名:pow
原型:double pow(double x, double y);
功能:求x的y次方。
例如,設(shè)x=pow(3,2),y=pow(–3,2),則x=9,y=9
12.函數(shù)名:sin
原型:double sin(double x);
功能:正弦函數(shù)。
13.函數(shù)名:cos
原型:double cos(double x);
功能:余弦函數(shù)。
14.函數(shù)名:tan
原型:double tan(double x);
功能:正切函數(shù)。
1.3.3 算術(shù)表達(dá)式
由算術(shù)運(yùn)算符和運(yùn)算對(duì)象連接形成的式子稱為算術(shù)表達(dá)式。
算術(shù)運(yùn)算符的優(yōu)先級(jí)從高到低規(guī)定如下:
++ – –
* / %
+ –
位于同一行的運(yùn)算符的優(yōu)先級(jí)相同。
1.4 數(shù)據(jù)類型轉(zhuǎn)換規(guī)則
對(duì)數(shù)據(jù)進(jìn)行運(yùn)算時(shí),要求參與運(yùn)算的對(duì)象的數(shù)據(jù)類型相同(運(yùn)算得到的運(yùn)算結(jié)果的類型與運(yùn)算對(duì)象也相同)。因此,在運(yùn)算過(guò)程中常常需要對(duì)變量或常量的數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換的方法有兩種,一種是系統(tǒng)自動(dòng)轉(zhuǎn)換(又稱為隱式轉(zhuǎn)換);另一種是在程序中強(qiáng)制轉(zhuǎn)換(又稱為顯式轉(zhuǎn)換)。
1.4.1 自動(dòng)轉(zhuǎn)換規(guī)則
在不同類型數(shù)據(jù)的混合運(yùn)算中,由系統(tǒng)自動(dòng)實(shí)現(xiàn)轉(zhuǎn)換。轉(zhuǎn)換規(guī)則如下:
(1)若參與運(yùn)算的數(shù)據(jù)的類型不同,則應(yīng)先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。
(2)將低類型數(shù)據(jù)轉(zhuǎn)換成高類型數(shù)據(jù)后進(jìn)行運(yùn)算。如int型和long型運(yùn)算時(shí),先把int型轉(zhuǎn)換成long型后再進(jìn)行運(yùn)算。
類型的高低是根據(jù)其所占空間的字節(jié)數(shù)按從小到大的順序排列的,順序如下:
char,int,long,float,double。
(3)所有的浮點(diǎn)運(yùn)算都是按照雙精度進(jìn)行運(yùn)算的,即使僅含float型單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成double型,再作運(yùn)算。
(4)char型和short型參與運(yùn)算時(shí),必須先轉(zhuǎn)換成int型。
例如,設(shè)有:
float PI=3.14;
int s,r=7;
s=r*r*PI;
因?yàn)镻I為單精度型,s和r為整型,在執(zhí)行s=r*r*PI語(yǔ)句時(shí),r和PI都轉(zhuǎn)換成double型后再進(jìn)行計(jì)算,運(yùn)算結(jié)果也為double型,右邊的運(yùn)算結(jié)果為153.86,但由于s為整型,故應(yīng)將賦值號(hào)右邊的運(yùn)算結(jié)果轉(zhuǎn)換成整型(舍去小數(shù)部分),因此s的值為153。
1.4.2 強(qiáng)制類型轉(zhuǎn)換
強(qiáng)制類型轉(zhuǎn)換是通過(guò)類型轉(zhuǎn)換運(yùn)算來(lái)實(shí)現(xiàn)的,其語(yǔ)法格式如下:
(類型說(shuō)明符)(表達(dá)式)
其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說(shuō)明符所表示的類型。例如: (float) a 把a(bǔ)轉(zhuǎn)換為實(shí)型;(int)(x+y) 把x+y的結(jié)果轉(zhuǎn)換為整型;而(int)x+y 則只將x轉(zhuǎn)換為整型。
在使用強(qiáng)制類型轉(zhuǎn)換時(shí)應(yīng)注意以下問(wèn)題:
(1)類型說(shuō)明符和表達(dá)式都必須加括號(hào)(單個(gè)變量可以不加括號(hào)),如把(int)(x+y)寫成(int)x+y則只是把x轉(zhuǎn)換成int型之后再與y相加。
(2)對(duì)于被轉(zhuǎn)換的單個(gè)變量而言,無(wú)論是強(qiáng)制轉(zhuǎn)換還是自動(dòng)轉(zhuǎn)換,都只是為了本次運(yùn)算的需要而對(duì)變量的數(shù)據(jù)長(zhǎng)度進(jìn)行臨時(shí)性轉(zhuǎn)換,而不會(huì)改變變量定義時(shí)所聲明的類型。
例如,設(shè)有:
float f = –5.75;
int x;
x= (int)f;
將f強(qiáng)制轉(zhuǎn)換成整數(shù)–5,因此x = –5,而f本身的類型并未改變且其值仍為–5.75。
1.5 程序結(jié)構(gòu)
1.5.1 主函數(shù)結(jié)構(gòu)
每一個(gè)C源程序都是一系列函數(shù)的集合。其中,必須有且只能有一個(gè)主函數(shù),其函數(shù)名為main,其結(jié)構(gòu)如下:
void main(void)
{
…
}
其中,void main(void) 稱為函數(shù)說(shuō)明部分(又稱函數(shù)頭),而
{
…
}
稱為函數(shù)體,函數(shù)體中的每個(gè)語(yǔ)句行末尾都必須用分號(hào)結(jié)束。
1.5.2 文件包含命令
C語(yǔ)言系統(tǒng)提供了400多個(gè)庫(kù)函數(shù),并將這些函數(shù)根據(jù)其功能分成了若干組,每組都有一個(gè)組名。如數(shù)學(xué)類函數(shù)組的組名為math。在C語(yǔ)言系統(tǒng)所安裝文件夾的下級(jí)文件夾中有一個(gè)與其相對(duì)應(yīng)的文件math.h,這些擴(kuò)展名為.h的文件稱為頭文件。
include稱為文件包含命令,當(dāng)用戶在程序中使用到系統(tǒng)的標(biāo)準(zhǔn)庫(kù)函數(shù)中的函數(shù)時(shí),需要在程序中(一般在程序的首部)增加一條預(yù)處理語(yǔ)句如#includestdio.h,以便告知系統(tǒng)需要使用某個(gè)頭文件中的函數(shù)。
1.5.3 C語(yǔ)言程序基本結(jié)構(gòu)
一個(gè)完整的C語(yǔ)言源程序由如下5個(gè)部分構(gòu)成:
(1)預(yù)處理命令;
(2)全局變量說(shuō)明;
(3)函數(shù)原型說(shuō)明;
(4)主函數(shù);
(5)其他子函數(shù)。
一個(gè)簡(jiǎn)單的C語(yǔ)言源程序只需要(1)和(4)兩個(gè)部分,其中“預(yù)處理命令”一般是一系列文件包含命令,即include命令。
關(guān)于程序結(jié)構(gòu),應(yīng)當(dāng)注意以下幾方面的問(wèn)題:
(1)可由若干個(gè)函數(shù)構(gòu)成,其中必須有且只有一個(gè)以main命名的主函數(shù),可以沒(méi)有其他函數(shù)。每個(gè)函數(shù)完成一定的功能,函數(shù)與函數(shù)之間可以通過(guò)參數(shù)傳遞信息。main()函數(shù)可以位于原程序文件中任何位置,但程序的執(zhí)行總是從main函數(shù)開(kāi)始,main函數(shù)執(zhí)行完畢時(shí)程序執(zhí)行結(jié)束。
(2)子函數(shù)的結(jié)構(gòu)與主函數(shù)相同,即分為函數(shù)說(shuō)明部分和函數(shù)體兩個(gè)部分。
(3)函數(shù)中的每個(gè)語(yǔ)句最后要有一個(gè)分號(hào),作為語(yǔ)句結(jié)束標(biāo)記。但某些特殊的語(yǔ)句行末尾不需要分號(hào),有時(shí)還不能有分號(hào)。
(4)“/*”和“*/”括住的任意一段字符稱為“程序注釋”,用來(lái)對(duì)程序作說(shuō)明,可以插入到程序的任何地方,且可以跨行使用。程序注釋不影響程序運(yùn)行結(jié)果。
(5)函數(shù)的書(shū)寫格式很靈活,在一行中可以書(shū)寫多個(gè)語(yǔ)句(每個(gè)語(yǔ)句末尾都要有分號(hào)),一個(gè)語(yǔ)句也可以寫在多行中。在程序的任何地方都可以插入空格或回車符。
(6)主函數(shù)可以調(diào)用任何子函數(shù)但不能調(diào)用它自己,任何子函數(shù)之間也可以相互調(diào)用,但是子函數(shù)不能調(diào)用主函數(shù)。
下面是一個(gè)簡(jiǎn)單的C語(yǔ)言源程序:
【例1-1】 求圓的面積。
#include stdio.h
void main(void)
{
float r,s,p=3.14;
r=10.5;
s=r*r*p;
printf("圓的面積是:%f ",s);
}
下面是一個(gè)較完整的C語(yǔ)言源程序:
【例1-2】 較完整的C語(yǔ)言程序示例。
#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);
}
#include stdio.h
#include math.h
float solut(float a,float b,float c, float d)
{
float x=1,x0,f,f1;
do
{
x0=x;
f=((a*x0+b)*x0+c)*x0+d;
f1=(3*a*x0+2*b)*x0+c;
x=x0-f/f1;
}
while(fabs(x-x0)-1e-3);
return(x);
}
main()
{
float a,b,c,d;
printf("\ninput a,b,c,d:");
scanf("%f,%f,%f",a,b,c,d);
printf("equation is:%5.2fx^3+%5.2fx^2+%5.2fx+%5.2f=0",a,b,c,d);
printf(\nx=%10.7\n",solut(a,b,c,d);
}
#include stdio.h
#include stdlib.h
void Maxnum(int []);
float Avenum(int []);
void Ordernum(int []);
void main(){
int a[10];
int i;
printf("輸入十個(gè)數(shù)字:\n?");
for (i=0;i=9;i++){
scanf("%d",a[i]);
if (i!=9)
printf("?");
}
Maxnum(a);
printf("平均值為:%.3f\n",Avenum(a));
Ordernum(a);
system("pause");
}
void Maxnum(int b[]){
int temp1=0,temp2=b[0],m;
for (m=0;m=9;m++){
if (b[m]temp1)
temp1=b[m];
if(b[m]temp2)
temp2=b[m];
}
printf("最大值:%d\n最小值:%d\n",temp1,temp2);
}
float Avenum( int b[]){
int n,sum=0;
for (n=0;n=9;n++){
sum+=b[n];
}
return (float)sum/10;
}
void Ordernum(int b[]){
int i,j,k,temp;
for (i=1;i=10;i++)
for (j=0;j=8;j++)
if (b[j]b[j+1]){
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
printf("排序:\n");
for (k=0;k=9;k++)
printf("%d ",b[k]);
printf("\n");
}
好像你提過(guò)這個(gè)問(wèn)題,我還是繼續(xù)回答。
C語(yǔ)言學(xué)習(xí)從入門到精通的一套經(jīng)典視頻教程,本課程通過(guò)高清晰的視頻、概念詳解、實(shí)例精講、習(xí)題測(cè)試讓你很快的掌握C語(yǔ)言的相關(guān)知識(shí),并領(lǐng)略運(yùn)用到實(shí)例中去。在針對(duì)一些用戶認(rèn)為C語(yǔ)言比較難學(xué)的情況下,本課程從初中級(jí)用戶的角度出發(fā),進(jìn)行合理的內(nèi)容安排,突出學(xué)、練、用、鞏固相結(jié)合的特點(diǎn),以通俗易懂的語(yǔ)言,豐富多彩的實(shí)例,詳細(xì)介紹了使用C語(yǔ)言進(jìn)行程序開(kāi)發(fā)應(yīng)該掌握的各方面知識(shí)。本課程主要給大家講解了C語(yǔ)言概述,算法,數(shù)據(jù)類型,運(yùn)算符與表達(dá)式,常用的數(shù)據(jù)輸入、輸出函數(shù),選擇結(jié)構(gòu)程序設(shè)計(jì),循環(huán)控制,數(shù)組,函數(shù),指針,結(jié)構(gòu)體和共用體,位運(yùn)算,預(yù)處理,模塊化編程,編程規(guī)范,C語(yǔ)言常見(jiàn)問(wèn)題及分析,習(xí)題測(cè)試等內(nèi)容。所有知識(shí)都結(jié)合具體實(shí)例進(jìn)行介紹,涉及的程序代碼給出了詳細(xì)的講解,可以使讀者輕松領(lǐng)會(huì)C語(yǔ)言程序開(kāi)發(fā)的精髓,快速提高開(kāi)發(fā)技能。
課程內(nèi)容詳盡,實(shí)例豐富,非常適合作為單片機(jī)及編程初學(xué)者的學(xué)習(xí)課程,也可作為大中院校相關(guān)專業(yè)在校學(xué)生及畢業(yè)生的教學(xué)輔導(dǎo)課程、短期C語(yǔ)言培訓(xùn)課程,是C語(yǔ)言編程愛(ài)好者從入門到深入的經(jīng)典課程。
課程共分為15講,每節(jié)課的內(nèi)容大綱如下:
第1課 C語(yǔ)言概述
1、幾種常見(jiàn)的程序設(shè)計(jì)語(yǔ)言
2、C語(yǔ)言出現(xiàn)的歷史背景
3、C語(yǔ)言的特點(diǎn)
4、簡(jiǎn)單的C程序介紹
5、C程序的上機(jī)步驟
6、習(xí)題測(cè)試
第2課 程序的靈魂-算法
1、程序設(shè)計(jì)過(guò)程
2、算法的基本概念
3、算法的特征
4、算法的表示方法(流程圖)
5、結(jié)構(gòu)化程序設(shè)計(jì)方法
6、習(xí)題測(cè)試
第3課 C語(yǔ)言的數(shù)據(jù)類型
1、預(yù)備知識(shí)
2、C語(yǔ)言的數(shù)據(jù)類型
3、常量與變量
4、不同數(shù)據(jù)類型之間的轉(zhuǎn)換
5、運(yùn)算符號(hào)和表達(dá)
6、習(xí)題測(cè)試
第4課 C語(yǔ)言順序程序設(shè)計(jì)
1、C語(yǔ)句概述
2、賦值語(yǔ)句
3、數(shù)據(jù)的輸入輸出
4、字符數(shù)據(jù)輸入輸出
5、格式輸入輸出
6、順序程序舉例
7、習(xí)題測(cè)試
第5課 C語(yǔ)言選擇程序設(shè)計(jì)
1、關(guān)系運(yùn)算符和關(guān)系表達(dá)式
2、邏輯運(yùn)算符和邏輯表達(dá)式
3、if 語(yǔ)句---條件判斷
4、條件運(yùn)算符
5、switch 語(yǔ)句
6、選擇程序舉例
7、習(xí)題測(cè)試
第6課 C語(yǔ)言的循環(huán)控制
1、概述
2、goto語(yǔ)句及與if語(yǔ)句構(gòu)成循環(huán)
3、while語(yǔ)句
4、do …while語(yǔ)句
5、for語(yǔ)句
6、循環(huán)的嵌套
7、幾種循環(huán)的比較
8、break語(yǔ)句和contiune語(yǔ)句
9、程序舉例
10、習(xí)題測(cè)試
第7課 C語(yǔ)言數(shù)組
1、一維數(shù)組
2、二維數(shù)組及多維數(shù)組
3、字符數(shù)組和字符串
4、程序舉例
5、習(xí)題測(cè)試
第8課 函數(shù)
1、概述
2、函數(shù)定義的一般格式
3、函數(shù)的返回值
4、函數(shù)的調(diào)用
5、函數(shù)參數(shù)及其傳遞方式
6、函數(shù)的嵌套與遞歸調(diào)用
7、數(shù)組作為函數(shù)參數(shù)
8、變量的存儲(chǔ)屬性
9、內(nèi)部函數(shù)和外部函數(shù)
10、習(xí)題測(cè)試
第9課 C語(yǔ)言預(yù)處理命令
1、編譯預(yù)處理
2、宏定義
3、文件包含
4、條件編譯
5、習(xí)題測(cè)試
第10課 指針
1、指針的概念
2、指針變量
3、指針與數(shù)組
4、指針與字符串
5、指針與函數(shù)
6、返回指針值的函數(shù)
7、指針數(shù)組和多級(jí)指針
8、習(xí)題測(cè)試
第11課 結(jié)構(gòu)體與共用體
1、結(jié)構(gòu)類型與結(jié)構(gòu)變量的定義
2、結(jié)構(gòu)變量的引用與初始化
5、結(jié)構(gòu)數(shù)組
6、指向結(jié)構(gòu)類型數(shù)據(jù)的指針
7、用指針處理鏈表
8、共用體
9、枚舉類型
10、用typedef定義別名
11、程序舉例
12、習(xí)題測(cè)試
第12課 位運(yùn)算
1、位運(yùn)算概述
2、位運(yùn)算符的使用方法
3、習(xí)題測(cè)試
第13課 單片機(jī)C語(yǔ)言的模塊化編程
1、模塊化編程的優(yōu)點(diǎn)
2、C語(yǔ)言源文件(*.c)文件和頭文件(*.h)的的作用
3、模塊化編程設(shè)計(jì)步驟
4、程序?qū)嵗?/p>
5、模塊化程序的移植
6、習(xí)題測(cè)試
第14課 C語(yǔ)言編程規(guī)范
1、編碼規(guī)范概述
2、編程排版規(guī)范
3、編程注釋規(guī)范
4、命名規(guī)則
5、可讀性規(guī)范
6、變量與結(jié)構(gòu)規(guī)范
7、函數(shù)與過(guò)程規(guī)范
8、編程效率規(guī)范
9、質(zhì)量保證規(guī)范
10、宏規(guī)范
11、代碼編輯
12、編譯
13、審查
14、代碼測(cè)試
15、維護(hù)
16、習(xí)題測(cè)試
第15課 C語(yǔ)言編程常見(jiàn)出錯(cuò)問(wèn)題及分析
1、C語(yǔ)言的一些基本概念
2、位(bit)和字節(jié)(byte)
3、變量和數(shù)據(jù)存儲(chǔ)
4、數(shù)據(jù)文件
5、字符串操作
6、數(shù)組
7、指針和內(nèi)存分配
8、函數(shù)
9、編譯預(yù)處理
10、標(biāo)準(zhǔn)庫(kù)函數(shù)
11、系統(tǒng)調(diào)用
12、可移植性
13、編程風(fēng)格和標(biāo)準(zhǔn)
14、程序的編寫和編譯
15、調(diào)試