2019-02-18 計算機(jī)二級C語言程序設(shè)計之C程序設(shè)計的初步知識

參考資料:高教版《全國計算機(jī)等級考試二級教程 C語言程序設(shè)計》口予、《21天學(xué)通C語言》

簡單的C語言程序的構(gòu)成和格式

例2.1(對原程序的注釋做了一點(diǎn)點(diǎn)修改):

#include <stdio.h>

main()
{
    double a, b, area;
    /*將矩形的兩條長邊分別賦給a和b*/     
    a = 1.2;    
    b = 3.6;
    area = a * b;   //計算矩形的面積并存儲到變量area中
    printf("a = %f, b = %f, area = %f \n", a, b, area) ;  //輸出矩形的兩條長邊和面積
}

以上程序中毡代,main是主函數(shù)名,C語言規(guī)定必須用main作為主函數(shù)名轧拄。函數(shù)是一段執(zhí)行某項任務(wù)的程序代碼。在最簡單的情況下,main()函數(shù)由函數(shù)名main卢佣,其后一對圓括號(其中包含void)和一對花括號{}組成。在大多數(shù)編譯器中箭阶,省略圓括號中的void不影響程序的運(yùn)行(但是虚茶,ANSI標(biāo)準(zhǔn)規(guī)定應(yīng)該在圓括號中寫上void,以表示沒有給main函數(shù)發(fā)送任何消息)尾膊。
每一個C程序都必須有一個且只能有一個主函數(shù)媳危。一個C程序總是從主函數(shù)開始運(yùn)行。

用一對花括號括起來的部分稱為函數(shù)體冈敛。函數(shù)體內(nèi)通常有定義(說明)部分和執(zhí)行語句部分待笑。執(zhí)行部分的語句稱為可執(zhí)行語句,必須放在定義部分之后抓谴。C程序的每一條定義語句和執(zhí)行語句都必須用分號“暮蹂;”結(jié)束。

程序中的#include指令通常稱為命令行癌压,必須用“#”號開頭仰泻,行尾不加分號,它不是C程序的語句滩届。#include指令命令C編譯器集侯,在編譯時將包含文件的內(nèi)容添加進(jìn)程序中。包含文件是獨(dú)立的磁盤文件帜消,內(nèi)含程序或編譯器要使用的信息棠枉。這些包含文件(也稱頭文件)由編譯器提供,所有包含文件的擴(kuò)展名都是.h泡挺。
在例2.1中辈讶,#include指令被解釋為“添加stdio.h文件的內(nèi)容”。

在編寫程序時娄猫,可以在程序中加入注釋贱除,以說明變量的含義、語句的作用和程序段的功能媳溺,從而幫助人們閱讀和理解程序月幌。
程序中以/*開始,以*/結(jié)尾的部分褂删,或者以//開始的單獨(dú)一行都稱為注釋飞醉。編譯器會忽略所有的注釋。第一種風(fēng)格可以寫成多行(跨行),第二種風(fēng)格只用于單行注釋缅帘。
注意:注釋不能嵌套轴术。

標(biāo)識符,常量和變量

標(biāo)識符

在C語言中钦无,有許多符號(如變量名逗栽,函數(shù)名,數(shù)組名等)失暂,都必須遵守一定的規(guī)則彼宠,按此規(guī)則命名的符號稱為標(biāo)識符
合法標(biāo)識符的命名規(guī)則是:標(biāo)識符可由字母弟塞,數(shù)字或下劃線組成凭峡,并且第一個字母必須為字母或下劃線。
在C語言的標(biāo)識符中决记,大寫字母和小寫字母被認(rèn)為是兩個不同的字符摧冀。

對于標(biāo)識符的長度,C語言的編譯系統(tǒng)是有規(guī)定的系宫,一般為31個字符(實際上可能會更長索昂,但是編譯器只會查看前31個字符)。

C語言的標(biāo)識符可以分為以下三類:

關(guān)鍵字

C語言已經(jīng)預(yù)先規(guī)定了一批標(biāo)識符扩借,它們在程序中都代表著固定的含義椒惨,這些標(biāo)識符稱為關(guān)鍵字。例如潮罪,用來說明變量類型的int康谆,double以及if語句中的else等都已有了專門的用途,不能再用作變量名或函數(shù)名嫉到。

預(yù)定義標(biāo)識符

所謂預(yù)定義標(biāo)識符是指在C語言中預(yù)先定義并具有特殊含義的標(biāo)識符秉宿,如C語言提供的庫函數(shù)名(如printf)和預(yù)編譯處理命令(如define)等。C語言允許把這類標(biāo)識符重新定義另作他用屯碴,但這將使這些標(biāo)識符失去預(yù)先定義的原意。

用戶標(biāo)識符

由用戶根據(jù)需要定義的標(biāo)識符稱為用戶標(biāo)識符膊存,又稱自定義標(biāo)識符导而。用戶標(biāo)識符一般用來給變量、函數(shù)隔崎、數(shù)組等命名今艺。

常量

所謂常量是指在程序運(yùn)行過程中,其值不能被改變的量爵卒。在C語言中虚缎,有字面常量和符號常量兩種類型的常量,它們分別有特殊的用途。

字面常量

字面常量是根據(jù)需要直接鍵入源代碼中的值实牡。下面是字面常量的兩個示例:

int count = 20;
float tax_rate = 0.28;

20和0.28都是字面常量陌僵,分別儲存在count和tax_rate中。是否有小數(shù)點(diǎn)決定了是整型常量還是浮點(diǎn)型常量创坞。小數(shù)點(diǎn)導(dǎo)致C編譯器將該常量視為雙精度數(shù)碗短,如果沒有小數(shù)點(diǎn),C編譯器將其視為整型常量题涨。

整型常量可以用十進(jìn)制偎谁,八進(jìn)制,十六進(jìn)制等形式來表示纲堵。

十進(jìn)制基本常量用一串連續(xù)的數(shù)字來表示巡雨,例如32767,-32768,0等席函。
八進(jìn)制數(shù)也是用一串連續(xù)的數(shù)字表示铐望,但其開頭必須為數(shù)字0,例如010,011,016等是合法的八進(jìn)制數(shù)向挖,018不是合法的八進(jìn)制數(shù)蝌以。
十六進(jìn)制數(shù)用數(shù)字0和字母x(或X)開頭,如0x10,0xde,0xf等都是合法的16進(jìn)制數(shù)何之。十六進(jìn)制數(shù)中的字母a,b,c,d,e,f既可以用小寫也可以用大寫跟畅。

符號常量

在C語言中,可以用一個符號名來代表一個常量溶推,稱為符號常量徊件。這個符號名必須在程序中進(jìn)行特別的“指定”,并符合標(biāo)識符的命名規(guī)則蒜危。
符號常量的值只需要輸入一次虱痕,在首次定義它時完成。

定義符號常量

C語言有兩種方法定義符號常量:#define指令和const關(guān)鍵字辐赞。#define指令的格式如下:

#define CONSTNAME literal

以上代碼創(chuàng)建了一個名為CONSTNAME部翘,值為literal的符號常量。按照慣例响委,符號常量名中所有字母都要大寫新思,這樣做很容易區(qū)分常量名和變量名(都是小寫)。

define的工作原理

例2.2 計算圓的面積(把原程序的注釋改了一下風(fēng)格赘风,因為自己比較習(xí)慣用這個風(fēng)格的注釋):

#include <stdio.h>
#define PI 3.14159    //定義了一個常量PI

main()
{
    double r, s;
    r = 5.0;
    s = PI * r * r;
    printf("s = %f \n", s);
}

程序中用#define命令行定義PI代表一串字符3.14159夹囚。#define的工作原理是,在對程序進(jìn)行編譯時邀窃,凡是本程序中出現(xiàn)PI的地方荸哟,編譯程序均用3.14159進(jìn)行代替。注意,#define不會替換名稱鞍历、雙引號或程序注釋中與常量名相同的部分舵抹。

用const關(guān)鍵字定義符號常量

從嚴(yán)格意義上來說,用const關(guān)鍵字定義的符號常量實質(zhì)是變量堰燎。const是一個修飾符掏父,可應(yīng)用于任何變量聲明之前。在程序執(zhí)行期間秆剪,不能修改用const聲明的變量赊淑。下面是const使用的示例:

const int count = 100;
const float pi = 3.14159;
const long debt = 12000000, float tax_rate = 0.21;

const影響本行聲明的所有變量。

如果要在程序中修改const變量仅讽,編譯器會給出一條錯誤消息陶缺。

變量

所謂變量是指在程序運(yùn)行過程中其值可以改變的量。一個變量實質(zhì)上是代表了內(nèi)存中的若干個存儲單元洁灵。

C語言規(guī)定饱岸,所有的變量都必須先定義后使用。對變量的定義通常放在函數(shù)體內(nèi)的前部徽千,但也可以放在函數(shù)的外部或復(fù)合語句的開頭苫费。

數(shù)值類型

C語言提供多種不同類型的數(shù)值變量,不同類型的數(shù)值需要不同的內(nèi)存空間双抽,而且不同類型數(shù)值的數(shù)學(xué)運(yùn)算也有所不同百框。

C語言的數(shù)值變量包含以下兩大類:

  • 整型變量,儲存沒有小數(shù)部分的值牍汹。
  • 實型變量(浮點(diǎn)型變量)铐维,儲存帶有小數(shù)部分的值。

上述兩大類又包含兩種或多種指定的變量類型慎菲。

變量類型 關(guān)鍵字 所需內(nèi)存(字節(jié)) 取值范圍
字符 char 1 -128~127
短整型 short 2 -32768~32767
整形 int 4 -2147483648~214738647
長整型 long 4 --2147483648~214738647
長長整型 long long 8 -9223372036854775808~9223372036854775807
無符號字符 unsigned char 1 0~255
無符號短整型 unsigned short 2 0~65535
無符號整型 unsigned int 4 0~4292967295
無符號長整型 unsigned long 4 0~4292967295
無符號長長整型 unsigned long long 8 0~18446744073709551615
單精度浮點(diǎn)型 float 4 1.2E-38~3.4E38
雙精度浮點(diǎn)型 double 8 2.2E-308~1.8E308

雖然數(shù)據(jù)類型的大小依不同的計算機(jī)平臺而異嫁蛇,但是C語言保證在不同平臺下這5條規(guī)則不變:

  • char的大小是1字節(jié)。
  • short的大小不超過(小于或等于)int的大小露该。
  • int的大小不超過long的大小睬棚。
  • unsigned的大小與int的大小相等。
  • float的大小不超過doube的大小解幼。

整數(shù)在內(nèi)存中的存儲形式

內(nèi)存儲器的最小存儲單位稱為位(bit)闸拿,由于只能存放0或1,因此稱為二進(jìn)制位书幕。
大多數(shù)計算機(jī)把8個二進(jìn)制位組成一個字節(jié)(byte),并給每一個字節(jié)分配一個地址揽趾。
若干個字節(jié)組成一個字(word)台汇,用一個字來存放一條機(jī)器指令或一個數(shù)據(jù)。

通常把一個字節(jié)中的最右邊一位稱為最低位,最左邊一位稱為最高位苟呐。
對于一個有符號整數(shù)痒芝,其中最高位用來存放整數(shù)的符號,稱為符號位牵素。若是正整數(shù)严衬,最高位放置0;若是負(fù)整數(shù)笆呆,最高位放置1请琳。

變量聲明

在C程序中,要先聲明變量才能使用赠幕。變量聲明的格式如下:

typename varname;

typename指定變量類型俄精,varname指定變量名¢叛撸可以在一行聲明多個變量竖慧,各變量之間用逗號隔開。如:

int count, number, start;

typedef關(guān)鍵字

typedef關(guān)鍵字用于為已存在的數(shù)據(jù)類型創(chuàng)建新的名稱逆屡。實際上圾旨,typedef創(chuàng)建了一個別名。例如:

typedef int integer;

這條語句為int創(chuàng)建了一個別名integer魏蔗。在隨后的程序中砍的,可以用integer來定義int類型的變量。

初始化變量

在使用變量前沫勿,應(yīng)該用已知的值初始化它挨约,也可以在定義變量后,通過賦值表達(dá)式語句來初始化變量产雹。
如:

int count;     //為count留出存儲空間
count = 0;     //將0儲存在count中

int count = 0; //在聲明變量的同時初始化它

注意诫惭,初始化變量的值不能超過該變量類型的取值范圍。

算術(shù)表達(dá)式

基本的算術(shù)運(yùn)算符

在C語言中蔓挖,基本的算術(shù)運(yùn)算符是:+夕土、-、*瘟判、/、%篮撑,分別為加,減匆瓜,乘赢笨,除未蝌,求余茧妒。這些運(yùn)算符需要兩個運(yùn)算對象,稱為雙目運(yùn)算符桐筏。
注1:求余運(yùn)算符的運(yùn)算對象只能是整形纸型,在%運(yùn)算符的左側(cè)是被除數(shù),右側(cè)是除數(shù)梅忌。
注2:+和-也可用作單目運(yùn)算符,運(yùn)算符必須出現(xiàn)在運(yùn)算數(shù)的左邊铸鹰。運(yùn)算數(shù)可以為整形,也可以為實型展姐。

運(yùn)算符的優(yōu)先級剖毯、結(jié)合性和算術(shù)表達(dá)式

算術(shù)運(yùn)算符的優(yōu)先級

從左到右優(yōu)先級降低:

( )、+(單目)逊谋、-(單目)、*板鬓、/究恤、%、+抄腔、-

算術(shù)運(yùn)算符和圓括號的結(jié)合性

以上所列的運(yùn)算符中理张,只有單目運(yùn)算符+和-的結(jié)合性是從右到左的,其余運(yùn)算符的結(jié)合性都是從左到右悟耘。

算術(shù)表達(dá)式

用算術(shù)運(yùn)算符和一對圓括號將運(yùn)算數(shù)(或稱操作數(shù))連接起來的织狐、符合C語言語法的表達(dá)式稱為算術(shù)表達(dá)式掘殴。

算術(shù)表達(dá)式中粟誓,運(yùn)算對象可以是常量起意、變量和函數(shù)等。如:

2+sqrt(c)*b;

強(qiáng)制類型轉(zhuǎn)換表達(dá)式

強(qiáng)制類型轉(zhuǎn)換表達(dá)式的形式如下:

(類型名) (表達(dá)式);

(類型名)稱為強(qiáng)制類型轉(zhuǎn)換運(yùn)算符悲酷。
利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符可以將一個表達(dá)式的值轉(zhuǎn)換為指定的類型亲善。例如,表達(dá)式(double)(10 % 3)把10%3所得結(jié)果1轉(zhuǎn)換成雙精度數(shù)顿肺。

賦值表達(dá)式

賦值運(yùn)算符和賦值表達(dá)式

賦值運(yùn)算符是一個等號(=)渣蜗。
賦值表達(dá)式語句中,運(yùn)算符的右側(cè)可以是任意表達(dá)式讼昆,而左側(cè)必須是一個變量名骚烧。因此,賦值的格式是:

變量 = 表達(dá)式

執(zhí)行該語句時既峡,將對表達(dá)式求值凭戴,并將結(jié)果賦值給變量。

復(fù)合賦值表達(dá)式

在賦值運(yùn)算符之前加上其他運(yùn)算符可以構(gòu)成復(fù)合賦值運(yùn)算符者冤。C語言規(guī)定可以使用10種復(fù)合賦值運(yùn)算符档痪,其中與算術(shù)運(yùn)算有關(guān)的復(fù)合賦值運(yùn)算符有:+=,-=愿汰,*=,/=摇予,%=(兩個符號間不能有空格)吗跋。復(fù)合賦值運(yùn)算符的優(yōu)先級與賦值運(yùn)算符的優(yōu)先級相同。

賦值運(yùn)算中的類型轉(zhuǎn)換

在賦值運(yùn)算中酗宋,只有在賦值號右側(cè)表達(dá)式的類型與左側(cè)變量類型完全一致時疆拘,賦值操作才能進(jìn)行。

在C語言的表達(dá)式(不包括賦值表達(dá)式)中回右,如果運(yùn)算符兩邊的整數(shù)類型不相同芬失,將進(jìn)行類型之間的轉(zhuǎn)換,規(guī)則如下:

  1. 一個是短整型租漂,一個是長整型颊糜,則短整型轉(zhuǎn)長整型。
  2. 一個有符號整型业筏,一個無符號整型鸟赫,則有符號整形轉(zhuǎn)無符號整型。

在C語言的賦值表達(dá)式中抛蚤,賦值號右邊的值先轉(zhuǎn)換成與賦值號左邊的變量相同的類型岁经,然后進(jìn)行賦值。應(yīng)當(dāng)注意:

  1. 賦值號左邊是短整型缀壤,右邊是長整型時,短整型變量只能接受長整型數(shù)低位上兩個字節(jié)中的數(shù)據(jù)筋夏,高位上兩個字節(jié)的數(shù)據(jù)將丟失条篷。
  2. 當(dāng)賦值號左邊的變量為無符號整型,右邊的值為有符號整形時拥娄,則把內(nèi)存中的內(nèi)容原樣復(fù)制瞳筏,右邊數(shù)值的范圍不應(yīng)超過左邊變量可以接受的數(shù)值范圍姚炕。這時負(fù)整數(shù)將轉(zhuǎn)換為正數(shù)。
  3. 當(dāng)賦值號左邊的變量為有符號整型些椒,右邊的值為無符號整型時掸刊,復(fù)制機(jī)理同上。若符號位為1石窑,將按負(fù)數(shù)處理蚓炬。

自加、自減運(yùn)算符和逗號運(yùn)算符

自加運(yùn)算符“++”和自減運(yùn)算符“--”

  1. 自加運(yùn)算符“++”和自減運(yùn)算符“--”的運(yùn)算結(jié)果是使運(yùn)算對象的值增1或減1经宏。i++相當(dāng)于i = i + 1驯击,i--相當(dāng)于i = i - 1。
  2. 自加缚柏、自減運(yùn)算符是單目運(yùn)算符碟贾,運(yùn)算對象可以是整型變量也可以是實型變量轨域,但不能是常量或表達(dá)式杀餐。
  3. 自加史翘、自減運(yùn)算符可以放在運(yùn)算對象的前面,也可以放在后面琼讽。如i++,++i,i--,--i都是合法的钻蹬。但是,在表達(dá)式中放在前面或后面可能有不同的值肝匆。
  4. 自加顺献、自減運(yùn)算符的結(jié)合方向是自右至左
  5. 不要在一個表達(dá)式中對同一個變量進(jìn)行多次諸如i++或i--等運(yùn)算能曾,在不同的編譯系統(tǒng)里可能會有不同的結(jié)果设捐。

逗號運(yùn)算和逗號表達(dá)式

逗號“,”是C語言提供的一種特殊運(yùn)算符蚂斤,用逗號將表達(dá)式連接起來的式子稱為逗號表達(dá)式槐沼。逗號的作用是將兩個子表達(dá)式組成一個表達(dá)式。規(guī)則如下:

  • 兩個表達(dá)式都會被計算纽窟,先計算逗號左邊的表達(dá)式兼吓。
  • 整個表達(dá)式的結(jié)果是右邊表達(dá)式的值。
  • 在所有運(yùn)算符中审孽,逗號運(yùn)算符的優(yōu)先級最低。

例如式散,下面的語句將b的值賦給x打颤,然后遞增a编饺,接著再遞增b:

x = (a++, b++);

又如,在這個逗號表達(dá)式中透且,y的值(也就是這個逗號表達(dá)式的值)是10石蔗,i的值為5:

y =( i = 3, i++, ++i, i + 5);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畅形,一起剝皮案震驚了整個濱河市日熬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竖席,老刑警劉巖毕荐,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異员寇,居然都是意外死亡第美,警方通過查閱死者的電腦和手機(jī)什往,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躯舔,“玉大人,你說我怎么就攤上這事仔拟§撸” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵炒事,是天一觀的道長挠乳。 經(jīng)常有香客問我姑躲,道長,這世上最難降的妖魔是什么卖怜? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任阐枣,我火速辦了婚禮蔼两,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘额划。我一直安慰自己俊戳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布储笑。 她就那樣靜靜地躺著圆恤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羽历。 梳的紋絲不亂的頭發(fā)上秕磷,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機(jī)與錄音疏尿,去河邊找鬼易桃。 笑死,一個胖子當(dāng)著我的面吹牛敌呈,可吹牛的內(nèi)容都是我干的造寝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赐稽!你這毒婦竟也來了浑侥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤括丁,失蹤者是張志新(化名)和其女友劉穎伶选,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體构资,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吐绵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了唉窃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纹笼。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡廷痘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蠢笋,到底是詐尸還是另有隱情鳞陨,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布援岩,位于F島的核電站掏导,受9級特大地震影響趟咆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜值纱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一虐唠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咱筛,春花似錦杆故、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽投队。三九已至爵川,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扒披,已是汗流浹背圃泡。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工颇蜡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鳖目。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓缤弦,卻偏偏與公主長得像碍沐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子累提,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容