計(jì)算機(jī)等級(jí)考試1-2_第1頁
計(jì)算機(jī)等級(jí)考試1-2_第2頁
計(jì)算機(jī)等級(jí)考試1-2_第3頁
計(jì)算機(jī)等級(jí)考試1-2_第4頁
計(jì)算機(jī)等級(jí)考試1-2_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

I計(jì)算機(jī)等級(jí)考試

C語言程序設(shè)計(jì)

主講人:楊天霞

Email:yang_tian_xia@163.com

JAo\iangeducation

選擇熨翔

成就夢(mèng)想

。用5柱序攻計(jì)

第一章C語言概述

■本章的考試要求:

1.程序的構(gòu)成)main函數(shù)和其他函數(shù)

2.頭文件、數(shù)據(jù)說明、函數(shù)的開始和結(jié)

束標(biāo)志

3.源程序的書寫格式

4.C語言的風(fēng)格

C語言程序設(shè)計(jì)

?LI程序和程序設(shè)計(jì)

1.1.1c程序

修需要計(jì)算機(jī)做的工隹寫成一定形式的

指令,并把它們存儲(chǔ)在計(jì)算機(jī)內(nèi)部的存儲(chǔ)器

中,當(dāng)我彳門給出命令之后,它就按指令順序

自動(dòng)進(jìn)行操作。我們把這種可以連續(xù)執(zhí)行的

叫做“程序”。所以說,程序就是

人與機(jī)器“溝通”的語言,也就是我們常說

的“程序設(shè)計(jì)語言”。

程序設(shè)計(jì)語言的種類很多,用什么樣的

語言寫的程序指令就叫什么程序,比如說用

VB、C++、Java等語言寫的程序就相應(yīng)叫VB程

序、C++程序、Java程序,當(dāng)然用C語言寫的

程序就叫C程序。

C語言程序設(shè)計(jì)

11.L1C程序

計(jì)算機(jī)本身是不能直接識(shí)別由上面所說

的高級(jí)語言編寫的程序的,它只能接受和處

理由。和1的代碼構(gòu)成的二進(jìn)制指令或數(shù)據(jù)。

這種形式的指令是面向機(jī)器的,因此叫它

“機(jī)器語言”。

那么由高級(jí)語言寫出來的程序相對(duì)于機(jī)

器執(zhí)行的機(jī)器語言來說叫“源程序”,把由

二進(jìn)制代碼表示的程序稱為“目標(biāo)程序”。

因此,在編寫完源程序以后,若想在機(jī)器上

執(zhí)行該程序,就要有一種被叫做“編譯程序”

的軟件把源程序翻譯成“目標(biāo)程序”。每種

高級(jí)語言都有與它對(duì)應(yīng)的編譯程序。如C語言

的編譯程序TurboC.

C語言程序設(shè)計(jì)

[1.L1C程序

C語言C語言二進(jìn)制

源程序編譯程序機(jī)器指令

C源程序經(jīng)過C編譯程序編譯之后生成一

個(gè)后綴為.OBJ的二進(jìn)制文件(稱為目標(biāo)文

件),然后由自然保護(hù)區(qū)為“連接程序”

(Link)的軟件,把.OBJ文件與C語言提供的

各種庫(kù)函數(shù)連接起來生成一個(gè)后綴為.EXE的

可執(zhí)行文件??赏ㄟ^點(diǎn)擊或者輸入該文件的

名字就可以執(zhí)行這個(gè)文件了。

C語言程序設(shè)計(jì)

1.1.2程序設(shè)計(jì)

簡(jiǎn)單程序設(shè)計(jì)一般包含以下幾個(gè)部分:

1.確定數(shù)據(jù)結(jié)構(gòu)。

2.確定算法。

3.編碼。

4.在計(jì)算機(jī)上調(diào)試程序。

5.整理并寫出文檔資料。

C語言程序設(shè)計(jì)

1.2算法

學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)的目的就是在用語言作

為工具,設(shè)計(jì)出可供計(jì)算機(jī)運(yùn)行的程序。

那么,如何對(duì)一個(gè)已知的問題進(jìn)行有效

的求解呢?怎樣才能編寫出程序呢?

一般來說,除了待定合理的數(shù)據(jù)結(jié)構(gòu)外,

關(guān)鍵的一步是設(shè)計(jì)算法,有了一個(gè)好的算法,

就可以用任何一種計(jì)算機(jī)高級(jí)語言把算法轉(zhuǎn)

換為程序(編寫程序)。

算法--為解決某個(gè)特定的問題而采取的確定

且有限的步驟。

C語言程序設(shè)計(jì)

:2算法

算法的五個(gè)特性:

1.有窮性;

2.確定性;

3.可行性;

4.有0個(gè)或多個(gè)輸入;

5.有1個(gè)或多人輸出;

算法的描述方法:偽代碼和流程圖。

C語言程序設(shè)計(jì)

1.3結(jié)構(gòu)化程序設(shè)計(jì)和模塊化結(jié)構(gòu)

*-1.3.-1結(jié)-構(gòu)化程序-

結(jié)構(gòu)化程序由三種基本結(jié)構(gòu)組成:

1.順序結(jié)構(gòu);

2.選擇結(jié)構(gòu);

3.循環(huán)結(jié)構(gòu)。

。順序結(jié)構(gòu)

C語言程序設(shè)計(jì)

L3.1結(jié)構(gòu)化程序

。選擇結(jié)構(gòu)

?二分支選擇結(jié)構(gòu)

C語言程序設(shè)計(jì)

J.3.1結(jié)構(gòu)化程序

?多分支選擇結(jié)構(gòu)

k

A1A2

c語言程序設(shè)計(jì)

1.3.1結(jié)構(gòu)化程序

。循環(huán)結(jié)構(gòu)當(dāng)p為真

A

?當(dāng)型循環(huán)結(jié)構(gòu)

直到型循環(huán)結(jié)構(gòu)

c語言程序設(shè)計(jì)

1.3.1結(jié)構(gòu)化程序

已經(jīng)證明,由三種基本結(jié)構(gòu)所絡(luò)組成的

算法可以解決任何復(fù)雜的問題。由三種基本

結(jié)構(gòu)所構(gòu)成的算法稱為結(jié)構(gòu)化算法;由三種

基本結(jié)構(gòu)所構(gòu)成的程序稱為結(jié)構(gòu)化程序。

C語言程序設(shè)計(jì)

例L1先后輸入若干個(gè)整數(shù),要求打印出其中最大的數(shù),

當(dāng)輸入的數(shù)小于0時(shí)結(jié)束。用N-S流程圖表示算法。

解題思路:先輸入一個(gè)數(shù),在沒有其他數(shù)參加比較之前,

它顯然是當(dāng)前最大的數(shù),把它放到變量max

中,讓max始終存放當(dāng)前已比較過的數(shù)中上最大值。

然后輸入第二個(gè)數(shù),并當(dāng)max比較,如果第二個(gè)數(shù)大

于max,則用第二個(gè)數(shù)普換max市原來的值;如果第

二個(gè)數(shù)小于max,則max中原來的值保持不變。如此

循環(huán)下去,直到輸入的數(shù)小于0時(shí)程序結(jié)束。最后

max中的值就是所有輸入數(shù)中的最大值。

根據(jù)上面的思路,畫出N-S流程圖。變量x用來控制循

環(huán)的次數(shù),當(dāng)x>0時(shí),執(zhí)行循環(huán)體;在循環(huán)體內(nèi)進(jìn)行

兩個(gè)數(shù)的比較和和輸入新的x值。

c語言程序設(shè)計(jì)

C語言程序設(shè)計(jì)

J.3.2模塊化結(jié)構(gòu)

當(dāng)計(jì)算機(jī)在處理比較復(fù)雜的任務(wù)時(shí),所編

寫的程序經(jīng)常會(huì)很長(zhǎng),而且通常情況下是由多

人來完成的。這時(shí)就需要要處理的復(fù)雜問題分

解成若干個(gè)子問題,如果這些子問題仍然很大,

可以再劃分更小的子問題,直到劃分的子問題

比較容易求解。而這個(gè)容易求解的小問題我們

可以叫做一個(gè)模塊。通常我們稱這樣的程序設(shè)

計(jì)方法為“模塊化”的方法,由一個(gè)個(gè)功能模

塊構(gòu)成的程序結(jié)構(gòu)為模塊化結(jié)構(gòu)。

C語言是一種結(jié)構(gòu)化程序設(shè)計(jì)語言。提供了

定義“函數(shù)”的功能,沒有子程序的概念,它

提供的函數(shù)可程序的所有功能;C語言允許對(duì)

函數(shù)單獨(dú)進(jìn)行編譯,從而可以實(shí)現(xiàn)模塊化。

C語言程序設(shè)計(jì)

關(guān)鍵字(32個(gè))

■C語言中的關(guān)鍵字(page375):c語言系統(tǒng)中的

保留字符,不能再用其作為變量名、標(biāo)識(shí)符。

autobreakcasecharconst

continuedefaultdodoubleelse

enumexternfloatforgotoifint

longregisterreturnshort

Signedsizeofstaticstructswitch

typedefunionunsigned

voidvolatilewhile

c語言程序設(shè)計(jì)

第二章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式

■本章的考試要求:

1.C語言的數(shù)據(jù)類型(基本類型、構(gòu)造類型、

指針類型、空類型)

2.c語言運(yùn)算符的種類、運(yùn)算符優(yōu)先級(jí)和結(jié)合

3.C語言不通類型數(shù)據(jù)間的轉(zhuǎn)換與運(yùn)算

4.c語言表達(dá)式類型和求值規(guī)則

C語言程序設(shè)計(jì)

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

下面是一個(gè)簡(jiǎn)單的C程序例子。

例2.1求矩形的面積。

程序如下:

#include<stdio.h>

main()

{doublea,b,area;/*變量定義*/

a=1.2;/*將矩形的兩條邊長(zhǎng)分別賦給

a和b.*/

C語言程序設(shè)計(jì)

b=3.6;

area=a*b;

/*計(jì)算矩形的面積并存儲(chǔ)到變量area

中*/

printf("a=b=%f,area=%f\n”,a,

b,area);

/*輸出結(jié)果*/

}

運(yùn)行結(jié)果:

a=1.200000,b=3.600000,area=4.320000

c語言程序設(shè)計(jì)

以上程序中,main是主函數(shù)名,C語言規(guī)定

必須用main作為主函數(shù)名。其后的一對(duì)圓括

號(hào)中間可以是空的,但這一對(duì)圓括號(hào)不能省

略。程序中的main。是主函數(shù)的起始行,也

是C程序執(zhí)行的開始行。每個(gè)可執(zhí)行的C程序

都必須有一個(gè)且只能有一個(gè)主函數(shù)。

函數(shù)體由大括弧。括起來。函數(shù)體通常

有兩部分組成:定義(說明)部分和執(zhí)行部

分(語句)。上面的"doublea,b,area;"就

是定義部分;

C語言程序設(shè)計(jì)

從“a=l.2;”到uprintf(a=%f,b=

%f?area=%f\n",a,b,area);"是執(zhí)

行部分。執(zhí)行部分的語句稱為可執(zhí)行語句,

必須放在定義部分之后,語句的數(shù)量不限,

程序中由這些語句向計(jì)算機(jī)系統(tǒng)發(fā)出操作指

令。

語句最后都有一分號(hào)。這是語句

的固定組成部分。

定義語句doublea,b,area;對(duì)程序中所

用到的變量a,b,area進(jìn)行定義,聲明它們是

double類型的變量。

C語言程序設(shè)計(jì)

程序中的ua=l.2;"和"b=3.6;”的作

用分別是給矩形的兩條邊賦值,uarea=a*b;"

的作用是計(jì)算機(jī)出矩形面積并賦給變量area.

輸出語句,printf是C語言中的輸出函數(shù),

它后面的括號(hào)里面有兩部分組成,格式控制

和輸出袤列。格式控制就是雙引號(hào)(雙括號(hào))

內(nèi)的字符串,這里面的字符原樣輸出(除了格

式說明部分和轉(zhuǎn)義字符)。/f”是格式說

明,轉(zhuǎn)義字符“\n”是換行符?!拜敵霰砹小?/p>

是需要輸出的一些數(shù)據(jù),也可以是表達(dá)式。

如例子中的a,b,areao即在輸出“a=

1.200000,b=3.600000,area=

4.320000."后回車換行。

C語言程序設(shè)計(jì)

c程序有比較自由的書寫格式,但一般而

言,我們要從一開始就養(yǎng)成良好的格式習(xí)慣。

/**/表示注釋部分,為便于理解,

我們用漢字表示注釋,當(dāng)然也可以用英語或

漢字拼音作注釋。注釋只是給人看的,對(duì)編

譯和運(yùn)行不起作用。注釋可以加在程序十任

何位置。

注意:/才口*之間不能有空格。不可以嵌套。

如1*1*...*1*1是非法的。

C語言程序設(shè)計(jì)

程序中的#include<stdio.h>通常稱

謂命令行,命令行必須用“曠號(hào)開頭,行尾

不能加號(hào),它不是C程序中的語句。一

對(duì)括號(hào)和之間的stdio.h是系統(tǒng)提

供的頭文件,該文件中包含著有關(guān)輸入輸出

函數(shù)的說明信息。在程序中調(diào)用不同的標(biāo)準(zhǔn)

庫(kù)函數(shù),應(yīng)當(dāng)包含相應(yīng)的文件,以使程序含

有所調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù)的說明信息。至于應(yīng)該

調(diào)用哪個(gè)文件,以后用到時(shí)再——介紹。

C語言程序設(shè)計(jì)

2.2C的數(shù)據(jù)類型

一■個(gè)程序應(yīng)包括以下兩方面內(nèi)容:

(1)對(duì)數(shù)據(jù)的描述。在程序中要指定數(shù)

據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)

(datastructure)o

(2)對(duì)操作的描述。即操作步驟,也就

是算法(algorithm)。

數(shù)據(jù)是操作的對(duì)象,操作的目的是對(duì)數(shù)

據(jù)進(jìn)行加工處理,以得到期望的結(jié)果。打個(gè)

比方,廚師做菜肴,需要有菜譜。菜譜上一

般應(yīng)包括:

①配料,指出應(yīng)使用哪些原料;②操

作步驟,指出如何使用這些原料按規(guī)定的步

驟加工成所需的菜肴。面對(duì)向一些原料可以

加工出不同血味的菜肴。

C語言程序設(shè)計(jì)

作為程序設(shè)計(jì)人員,必須認(rèn)真考慮和設(shè)

計(jì)數(shù)據(jù)結(jié)構(gòu)和掾作步驟(即算法)。因此,著

名計(jì)算機(jī)科學(xué)家沃思(nikiklausWirth)提出

一個(gè)公式:數(shù)據(jù)結(jié)構(gòu)+算法=程序。實(shí)際上,

一個(gè)程序除了以上兩個(gè)主要要素之外,還應(yīng)

當(dāng)采用結(jié)構(gòu)化程序設(shè)計(jì)方法進(jìn)行程序設(shè)計(jì),

并且用某一種計(jì)算機(jī)語言表示。因此,可以

這樣表示:

程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計(jì)方法+語言工

具和環(huán)境

C語言程序設(shè)計(jì)

也就是說,以上4個(gè)方面是一個(gè)程序設(shè)計(jì)

人員所應(yīng)具春的知識(shí)。在設(shè)并一人程序后要

綜合運(yùn)用這幾方面的知識(shí)。在本書中不可能

全面介紹這些內(nèi)容,它們都屬于宥關(guān)的專門

課程范嶙。在這4個(gè)方面中,算法是靈魂,數(shù)

據(jù)結(jié)構(gòu)是加工好象,語言是工具,編程需要

采用合適的方法。算法是解決“做什么”和

“怎么做”的問題。程序中的操作語句,實(shí)

際上就是算法的體現(xiàn)。算法處理的對(duì)象是數(shù)

據(jù),而數(shù)鬼是以某種存定的形式存點(diǎn)的(例如

整數(shù)、實(shí)數(shù)、字符等形式)。不同的數(shù)據(jù)之間

往往還存在某些聯(lián)系(例如由若干個(gè)整數(shù)組成

一個(gè)整數(shù)數(shù)組)。所謂數(shù)堀結(jié)構(gòu)指的是數(shù)堀的

組織形

C語言程序設(shè)計(jì)

例如,C語言提供了“結(jié)構(gòu)體”這樣一種數(shù)據(jù)

結(jié)構(gòu),而fortran語言就不提供這種數(shù)據(jù)結(jié)構(gòu)。

處理同一類問題,如果數(shù)據(jù)結(jié)構(gòu)不同,算法

也會(huì)不同。

例如,對(duì)10個(gè)整數(shù)排序和對(duì)由10個(gè)整數(shù)構(gòu)成

的數(shù)組排序的算法是不同的。因此,在考慮

算法時(shí),必須注意數(shù)據(jù)結(jié)構(gòu)。實(shí)際上,應(yīng)當(dāng)

綜合考慮算法和數(shù)據(jù)結(jié)構(gòu),選擇最佳的數(shù)據(jù)

結(jié)構(gòu)和算法。

C語言的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類型形式出現(xiàn)

的。C的數(shù)據(jù)類型如下:

C語言程序設(shè)計(jì)

短整型short

[%型<整型int

長(zhǎng)整型long

基本類型\[單精度型float

重型<

雙精度型double

字符類型char

________________

“數(shù)組數(shù)據(jù)類型決定:

C

結(jié)構(gòu)體struct1.數(shù)據(jù)占內(nèi)存字節(jié)數(shù)

數(shù)

<2.數(shù)據(jù)取值范圍

據(jù)構(gòu)造類型共用體union

3.其上可進(jìn)行的操作

類:枚舉類型enum

指針類型

空類型void

定義類型typedef

c語言程序設(shè)計(jì)

產(chǎn).2標(biāo)識(shí)符、常量、變量

C語言中數(shù)據(jù)有常量與變量之分,它們分

別屬于以上這些類型。由以上這些數(shù)據(jù)類型

還可以構(gòu)成更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。例如利用指

針和結(jié)構(gòu)體類型可以構(gòu)成表、樹、棧等復(fù)雜

的數(shù)據(jù)結(jié)構(gòu)。在程序中對(duì)用到的所有數(shù)據(jù)都

必須指定其數(shù)據(jù)類型。在本章中主要介紹基

本數(shù)據(jù)類型。

C語言程序設(shè)計(jì)

22標(biāo)識(shí)符、常量、變量

2.2.1標(biāo)識(shí)符定義:

用于變量名、函數(shù)名、標(biāo)號(hào)及其其他各

種用戶定義對(duì)象的名字稱為標(biāo)識(shí)符。

命名規(guī)范:

標(biāo)識(shí)符只能由字母、數(shù)字和下劃線

第一個(gè)字符必須是字母或下劃線

合法的標(biāo)識(shí)符:

sumaverage_total

不合法的標(biāo)識(shí)符:

M.D3df

C語言區(qū)分大小寫,price和Price是不同的標(biāo)識(shí)符。

C語言程序設(shè)計(jì)

22標(biāo)識(shí)符、常量、變量

標(biāo)識(shí)符可以分為三類:

一、關(guān)鍵字

定義:在c語言中有些標(biāo)識(shí)符留作特殊用途,它們?cè)诔绦?/p>

果a固固定的含義,不能另作它用,這些標(biāo)識(shí)符稱為

注:所有的關(guān)鍵字都是由小寫字母組成。

C語言中標(biāo)準(zhǔn)的32個(gè)關(guān)鍵字:

數(shù)據(jù)類型說明:

char,int,long,short,unsigned,float,double,struct,union;

存儲(chǔ)類型說明:auto,extern,register,static

語句說明:

if,else,switch,case,default,while,do,for,return,continue,break,

goto;

其他:sizeof,typeof

c語言程序設(shè)計(jì)

22標(biāo)識(shí)符、常量、變量

二、預(yù)定義標(biāo)識(shí)符

用預(yù)先定義的并具有特定含義的標(biāo)識(shí)符,如:

庫(kù)函數(shù)名printf、預(yù)編譯處理命令define等。

三、用戶標(biāo)識(shí)符

用戶自己定義的標(biāo)識(shí)符,用來給變量、函數(shù)、

數(shù)組或文件命名。

要求:1,符合命名規(guī)范,2,見名知意

C語言程序設(shè)計(jì)

2.2.2常量和符號(hào)常量

在程序運(yùn)行過程中,其值不能被改變的

量稱為常量。常量區(qū)分為不同的類型,如12,

0,-3為整型常量,4.6、-1.23為實(shí)型常量,

冶‘,F(xiàn)'為字符常量。常量一般從其字

面形式即可判別。這種常量稱為字面常量或

直接常量。

也可以用一個(gè)標(biāo)識(shí)符代表一個(gè)常量,如:

例2.2符號(hào)常量的使用。

#definePRICE30

main()

C語言程序設(shè)計(jì)

intnum,total;

num=10;

total=num*PRICE;

printf("total=%dH,total);

)

程序中用#define命令行定義PRICE代表常量

30,此后凡在本文件中出現(xiàn)的PRICE都代表30,

可以和常量一樣進(jìn)行運(yùn)算,程序運(yùn)行結(jié)果為

total=300

有關(guān)#(1.£ine命令行的詳細(xì)用法參見后面章節(jié)。

C語言程序設(shè)計(jì)

這種用一個(gè)標(biāo)識(shí)符代表一個(gè)常量的,稱

為符號(hào)常量,即標(biāo)識(shí)符形式的常量。請(qǐng)注意

符號(hào)常量不同于變量,它的值在其作用域(在

本例中為主函數(shù))內(nèi)不能改變,也不能再被賦

值。如再用以下賦值語句給PRICE賦值是錯(cuò)誤

的。

PRICE=40;

習(xí)慣上,符號(hào)常量名用大寫,變量用小

寫,以示區(qū)別。

使用符號(hào)常量的好處是:

C語言程序設(shè)計(jì)

(1)含義清楚。如上面的程序中,看程序時(shí)

從PRICE就可知道它代表價(jià)格。因此定義符號(hào)

常量名時(shí)應(yīng)考慮“見名知意”。在一個(gè)規(guī)范

的程序中不提倡使用很多的常數(shù),如:sum=

15*30*23.5*43O在檢查程序時(shí)搞不清

各個(gè)常數(shù)究竟代表什么。應(yīng)盡量使用“見名

知意”的變量名和符號(hào)常量。

C語言程序設(shè)計(jì)

⑵在需要改變一個(gè)常量時(shí)能做到“一改全

改”。例如在程序中多處用到某物品的價(jià)格,

如果價(jià)格用常數(shù)表示,則在價(jià)格調(diào)整時(shí),就

需要在程序中作多處修改,若用符號(hào)常量

PRICE代表價(jià)格,只需改動(dòng)一處即可。如:

#definePRICE35

在程序中所有以PRICE代表的價(jià)格就會(huì)一

律自動(dòng)改為35。

C語言程序設(shè)計(jì)

,23變量

其值可以改變的量稱為變量。一個(gè)變量

應(yīng)該有一個(gè)名字,在內(nèi)存中占據(jù)一定的存儲(chǔ)

單元。在該存儲(chǔ)單元中存放變量的值。請(qǐng)注

意區(qū)分變量名和變量值這兩個(gè)不同的概念,

見圖2.1。變量名實(shí)際上是一個(gè)符號(hào)地址,在

對(duì)程序編譯連接時(shí)由系統(tǒng)給每一個(gè)變量名分

酉己一個(gè)內(nèi)存地址o

變量名

3-I——變量值

X、——存儲(chǔ)單元

c語言程序設(shè)計(jì)

注意,大寫字母和小寫字母被認(rèn)為是兩個(gè)不同的字符。

因此,sum和suM,class和Class是兩個(gè)不同的變量名。

一般,變量名用小寫字母表示,與人們?nèi)粘A?xí)慣一致,

以增加可讀性。

ANSIC標(biāo)準(zhǔn)沒有規(guī)定標(biāo)識(shí)符的長(zhǎng)度(字符個(gè)數(shù)),

但各個(gè)C編譯系統(tǒng)都有自己的規(guī)定。有的系統(tǒng)(如IBM

PC的MsC)取8個(gè)字符,假如程序中出現(xiàn)的變量名長(zhǎng)

度大于8個(gè)字符,則只有前面8個(gè)字符有效,后面的不

被識(shí)別。例如,有兩個(gè)變量:student_name和

student-number,由于二者的前8個(gè)字符相同,系統(tǒng)

認(rèn)為這兩個(gè)變量是一回事而不加區(qū)別。可以修它們改

為stud_name和stud_num,以使之區(qū)別。

C語言程序設(shè)計(jì)

在選擇變量名和其他標(biāo)識(shí)符時(shí),應(yīng)注意

做到“見名知意”,即選有含意的英文單詞

(或箕縮寫)作標(biāo)識(shí)符,如count、name、day、

month、total、country等,除了數(shù)值計(jì)算超

序外,一般不要用代數(shù)符號(hào)(如a、b、c、xl、

yl等)作變量名,以增加程序的可讀性。這是

結(jié)構(gòu)化程序的'一個(gè)特征。本書在'一些簡(jiǎn)單的

舉例中,為方便起見,仍用單字符的變量,如

a?b、c等),請(qǐng)讀者注意不要在其他所有程

序中都如此。

C語言程序設(shè)計(jì)

在C語言中,要求對(duì)所有用到的變量作強(qiáng)

制定義,也就是“先定義,后使用”,如例

2.1、例2.2那樣。這樣做的目的是:

(1)凡未被事先定義的,不作為變量名,

這就能保證程序中變量名使用得正確。例如,

如果在定義部分寫了

intstudent;

而在執(zhí)行語句中錯(cuò)寫成staent。如:

staent=30;

C語言程序設(shè)計(jì)

在編譯時(shí)檢查出statent未經(jīng)定義,不

作為變量名。因此輸出“變量statent未經(jīng)聲

明”的信息,便于用戶發(fā)現(xiàn)錯(cuò)誤,避免變量

名使用時(shí)出錯(cuò)。

(2)每一個(gè)變量被指定為一確定類型,

在編譯時(shí)就能為其分配相應(yīng)的存儲(chǔ)單元。如

指定a、b為int型,VC6.0系統(tǒng)為a和b各分配4

個(gè)字節(jié),并按整數(shù)方式存儲(chǔ)數(shù)據(jù)。

C語言程序設(shè)計(jì)

(3)指定每一變量屬于一個(gè)類型,這就

便于在編譯時(shí),據(jù)此檢查該變量所進(jìn)行的運(yùn)

算是否合法。例如,整型變量a和b,可以進(jìn)

行求余運(yùn)算:

a%b

%是“求余力,得到a/b的余數(shù)。如果將a、

b指定為實(shí)型變量,則不允許進(jìn)行“求余”運(yùn)

算,在編譯時(shí)會(huì)給出有關(guān)“出錯(cuò)信息”。

下面各節(jié)分別介紹整型、實(shí)型(浮點(diǎn)

型)、字符型數(shù)據(jù)。

C語言程序設(shè)計(jì)

產(chǎn)3整型數(shù)據(jù)

2.3.1整型常量一三種表示方法

十進(jìn)制:21,-45,0

八進(jìn)制:以數(shù)字O開始,如:010,011,017

注意:018不是合法的八進(jìn)制數(shù),因?yàn)?不是八

進(jìn)制數(shù)字

0,123,4,5,6,7

十六進(jìn)制:以數(shù)字O和字母乂或X開始,

如:

0xl0,0xde,0xf

0,l,2,3,4,5,6,7,8,9,a,b,c,d,e,f(可

以是大寫字母)

C語言程序設(shè)計(jì)

2.3.1整型變量

■整型變量可分為:基本

型、短整型、長(zhǎng)整型和

無符號(hào)型四種。

■一般的微機(jī)中個(gè)整型所

占位數(shù)如下:

類型說明所占位數(shù)數(shù)的范圍

int基本整型32-2147483648?2147483648

short或shortint短整型16-32768?32767

long或longint長(zhǎng)整型32-2147483648?2147483648

unsigned(int)無符號(hào)整型320-4294967295

unsignedshort無符號(hào)短整型160-65535

unsignedlong無符號(hào)長(zhǎng)整型320-4294967295

C語言程序設(shè)計(jì)

24實(shí)型數(shù)據(jù)

2.4.1實(shí)型常量的表示方法

實(shí)數(shù)(realnumber)又稱浮點(diǎn)數(shù)(floating-

pointnumber)o實(shí)數(shù)有兩種表示形式:

⑴十進(jìn)制小數(shù)形式。它由數(shù)字和小數(shù)點(diǎn)組成

(注意必須有小數(shù)點(diǎn))o.123、123.、

123.0、0.0都是十進(jìn)制小數(shù)形式。

⑵指數(shù)形式。如123e3代表123x103。但注意

字母E(或e)之前必須有數(shù)字,且e后面的指數(shù)

必須為整數(shù),如e3、2.1e3.5、.e3、e等都

不是合法的指數(shù)形式。

C語言程序設(shè)計(jì)

一個(gè)實(shí)數(shù)可以有多種指數(shù)表示形式。例

如123.456可以表示為123.456e0,

12.3456el、1.23456e2、0.123456e3.

0.0123456e4.0.00123456e5等。把其中的

L23456e2稱為“規(guī)范化的指數(shù)形式”,即

點(diǎn)字母e(或e)之前的小數(shù)部分工小數(shù)點(diǎn)左

邊應(yīng)宥一位(且只能有一位)非零的數(shù)字。例

如2.3478e2、3.0999e5、6.46832el2都屬

于規(guī)范化的指數(shù)形式,而12.908el0、

0.4578e3.756e0則不屬于規(guī)范化的指數(shù)形

式。一個(gè)實(shí)數(shù)在用指數(shù)形式輸出時(shí),是按規(guī)

范化的指數(shù)形式輸出的。例如,指定I尋實(shí)數(shù)

5689.65按指數(shù)形式輸出,必然輸出

5.68965e+003,而不會(huì)是0.568965e+004或

56.8965e+002o

C語言程序設(shè)計(jì)

2.4.2實(shí)型變量

1.實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式

在常用的微機(jī)系統(tǒng)中,一個(gè)實(shí)型數(shù)據(jù)在內(nèi)存

中占4個(gè)字節(jié)(32位)。與整型數(shù)據(jù)的存儲(chǔ)方

式不同,實(shí)型數(shù)據(jù)是按照指數(shù)形式存儲(chǔ)的。

系統(tǒng)把一個(gè)實(shí)型數(shù)據(jù)分成小數(shù)部分和指數(shù)部

分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)

形式。

實(shí)數(shù)3.14159在內(nèi)+.3141591

III

存中的存放形式可數(shù)符小數(shù)部分指數(shù)

以用圖2.7示意。

+,314159X101—-3.14159

C語言程序設(shè)計(jì)

圖中是用十進(jìn)制數(shù)來示意的,實(shí)際上在

計(jì)算機(jī)中是用二進(jìn)制數(shù)來表示小數(shù)部分以及

用2的賽次來表示指數(shù)部分的。在4個(gè)字節(jié)(32

位)中,究竟用多少位來表示小數(shù)部分,多少

位來表示指數(shù)部分,標(biāo)準(zhǔn)C并無具體規(guī)定,由

各C編譯系統(tǒng)自定。不少c編譯系統(tǒng)以24位表

示小數(shù)部分(包括符號(hào)),以8位表示指數(shù)部分

(包括指數(shù)的符號(hào))。小數(shù)部分占的位(bit)數(shù)

愈多,數(shù)的有效數(shù)字愈多,精度愈高。指數(shù)

部分占的位數(shù)愈多,則能表示的數(shù)殖范圍愈

夫。

C語言程序設(shè)計(jì)

2,實(shí)型變量

實(shí)型變量:?jiǎn)尉?/p>

(float)和雙精度

(double)

類型所占位數(shù)有效數(shù)字

單精度(float)327位

雙精度6415?16位

(doub⑹

C語言程序設(shè)計(jì)

實(shí)型數(shù)據(jù)的舍入誤差

由于實(shí)型變量是由有限的存儲(chǔ)單元組成

的,因此能提供的有效數(shù)字總是有限的,在

有效位以外的數(shù)字將被舍去。由此可能會(huì)產(chǎn)

星一些誤差。例如,a力口、的結(jié)果顯然應(yīng)該

比a大。請(qǐng)分析下面的程序:

例2.5實(shí)型數(shù)據(jù)的舍入誤差。

main()

{floata,b;

a=123456.789e5;

b=a+20;

printf(n%f",b);

)

c語言程序設(shè)計(jì)

程序內(nèi)printf函數(shù)中的"f”是輸出一

個(gè)實(shí)數(shù)日才的花式符。程序運(yùn)行時(shí),輸出b的值

與a彳目等。原因是:a的值比20關(guān)很多,a+20

的理論值應(yīng)是12345678920,而一個(gè)實(shí)型變量

只能保證的有效數(shù)字是7位有效數(shù)字,后面的

數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。

運(yùn)行程序得到的a和b的值是:

12345678848.000000,可以看到,前7位是準(zhǔn)

確的,后幾位是不準(zhǔn)確而,把26加在后幾位

上,是無意義的。應(yīng)當(dāng)避免將一個(gè)很大的數(shù)

和一個(gè)很小的藪直接相加或相減,否則就會(huì)

“丟失”小的數(shù)。與此類似,用程序計(jì)算

1.0/3*3的結(jié)果并不等于L

C語言程序設(shè)計(jì)

2.4?3實(shí)型常量的類型

?C編譯系統(tǒng)將實(shí)型常量作為雙精度來處理。

例如:已定義一個(gè)實(shí)型變量f,有如下語句:

f=2.45678*4523.65

系統(tǒng)將2.45678和4523.65按雙精度數(shù)據(jù)

存儲(chǔ)(占64位)和運(yùn)算,得到一個(gè)雙精度的乘

積,然后取前7位賦給實(shí)型變量f。這樣做可

以保證計(jì)算結(jié)果更精確,但是運(yùn)算速度降低

了??梢詫脭?shù)的后面加字母f或f(如1.65f,

654.87f),這樣編譯系統(tǒng)就會(huì)按單精度(32位)

處理。一個(gè)實(shí)型常量可以賦給一個(gè)float型、

double型變量。根據(jù)變量的類型藏取實(shí)型常

量中相應(yīng)的有效位數(shù)字。

C語言程序設(shè)計(jì)

假如a已指定為單精度實(shí)型變量:

floata;

a=llllll.Ill;

由于float型變量只能接收7位有效數(shù)字,

因此最后兩位小數(shù)不起作用。如果a改為

doub1e型,則能全部接收上述9位數(shù)字并存儲(chǔ)

在變量a中。

C語言程序設(shè)計(jì)

2.5字符型數(shù)據(jù)

字符型常量:

舉傷|:'A','n','?'等

轉(zhuǎn)義字符:就是以‘'‘開

頭的字符序列。

字符形式功能字符形式功能

\n換行\(zhòng)f走紙換頁

\t橫向跳格\\字符'

\v豎向跳格\''字符

\b退格\ddd1到3位8進(jìn)制所代表的字符

\r回車\xhh1到2位16進(jìn)制所代表的字符

C語言程序設(shè)計(jì)

[2.5.1字符常量

C的字符常量是用單引號(hào)(即撇號(hào))括起來

的一個(gè)字符。如匕‘,‘X’,d,

等都是字符常量。注意,,『

和是不同的字符常量。

除了以上形式的字符常量外,c還允許用

一種特殊形式的字符常量,就是以一個(gè)

開頭的字符序列。例如,前面已經(jīng)遇到過的,

在printf函數(shù)中的\n',它代表一個(gè)“換

行”符。這是一種“控制字符”,在屏幕上

是不能顯示的。在程序中也無法用一個(gè)一般

形式的字符表示,只能采用特殊形式來表示。

C語言程序設(shè)計(jì)

262字符變量

字符型變量用來存放字符常量,請(qǐng)注意

只能放一個(gè)字符,不要以為在一個(gè)字符變量

中可以放一個(gè)字符串(包括若干字符)。字符

變量的定義形£4口卡:

charcl,c2;

它表示cl和c2為字符型變量,各可以放

一個(gè)字符,因此在函數(shù)中可以用下面語句對(duì)

cl、c2賦值:

cl=/az;c2=,bz;

在所有的編譯系統(tǒng)中都規(guī)定以一個(gè)字節(jié)

來存放一個(gè)字符,或者說一個(gè)字符變量在內(nèi)

存中占一個(gè)字節(jié)。

C語言程序設(shè)計(jì)

2.6.3字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式

將一個(gè)字符常量放到

clc2

一個(gè)字符變量中,實(shí)際上HH

并不是把該字符本身放到

內(nèi)存單元中去,而是I尋該(a)

字符的相應(yīng)的ASCH代碼放clc2

到存儲(chǔ)單元中。例如字符0110000101100010

冶'的ASCH代碼為97,(b)

為98,在內(nèi)存中變量

cl、c2的值如圖2.8(a)所

示。實(shí)際上是以二進(jìn)制形圖2.8

式存放的,如圖2.8(b)所

示。

C語言程序設(shè)計(jì)

既然在內(nèi)存中,字符數(shù)據(jù)以ASCH碼存儲(chǔ),

它的存儲(chǔ)形式就與整數(shù)的存儲(chǔ)形式類似。這

樣,在字符型數(shù)據(jù)和整型數(shù)據(jù)之間的轉(zhuǎn)換就

比較方便了。一個(gè)字符數(shù)據(jù)既可以以字符形

式輸出,也可以以整數(shù)形式輸出。以字符形

式輸出時(shí),需要先將存儲(chǔ)單元中的ASCH碼轉(zhuǎn)

換成相應(yīng)字符,然后輸出。以整數(shù)形式輸

出時(shí),直接修ASCH碼作為整數(shù)輸出。也可以

對(duì)字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,此時(shí)相當(dāng)于對(duì)它

們的ASCH碼進(jìn)行算術(shù)運(yùn)算,只是將其一個(gè)字

節(jié)轉(zhuǎn)化為4個(gè)字節(jié),然后參加運(yùn)算。

C語言程序設(shè)計(jì)

例2.6向字符變量賦以整數(shù)。

main()

{charcl,c2;

cl=97;

c2=98;

printf(n%c%c\nn,cl,c2);/*以字符形式

輸出*/

printf(n%d%d\nH,cl,c2);/*轉(zhuǎn)換為整數(shù)

形£輸由*/

}

cl、c2被指定為字符變量。但在第3和第

4行中,將整數(shù)97和98分別賦給cl和c2,它的

作用相當(dāng)于以下兩個(gè)賦值語句:

C語言程序設(shè)計(jì)

cl='a';c2='';

因?yàn)橐?和&的ASCH碼為97和98。在

程序的第3和第4行是把97和98兩個(gè)整數(shù)直接

存放至ijcl和c2的內(nèi)存單元中。而cl='a'和

c2=b則是先將字符匕'和E化成

ASCII碼97和98,然后放到內(nèi)存單元中。二者

的作用和結(jié)果是相同的。

第5行輸出兩個(gè)字符a和b。V是輸出

字符時(shí)必須使用的格式符。程序第6行輸出兩

個(gè)整數(shù)97和98。

C語言程序設(shè)計(jì)

a01100001存儲(chǔ)(ASCH碼)

〃%c〃"%d〃輸出格式符圖2.9

a97顯示

程序運(yùn)行時(shí)輸出如下:

ab

9798

可以看到:字符型數(shù)據(jù)和整型數(shù)據(jù)是通用的。

它們既可以用字符形式輸出(用%c),也可以

用整數(shù)形式輸出(用%d),見圖2.9。但是應(yīng)注

意字符數(shù)據(jù)只占一個(gè)字節(jié),它只能存放。?

255范圍內(nèi)的整數(shù)。C語言程序設(shè)計(jì)

"例2.7大小寫字母的轉(zhuǎn)換。

main()

{charcl,c2;

cl=/az;

c2=/bz;

cl=cl-32;

c2=c2-32;

printf("%c%c",cl,c2);

}

運(yùn)行結(jié)果為

AB

c語言程序設(shè)計(jì)

程序的作用是將兩個(gè)小寫字母a和b轉(zhuǎn)換

成大寫字母A和B。冶'的ascii碼為97,而2

為65,力,為98,'B'為66。從ASCII代碼表

中可以看到每一個(gè)小寫字母比它相應(yīng)的大寫

字母的ascii碼大32。c語言允許字符數(shù)據(jù)與

整數(shù)直接進(jìn)行算術(shù)運(yùn)算,即公+32會(huì)得到整

數(shù)97,冶'-32會(huì)得到整數(shù)65。

C語言程序設(shè)計(jì)

字符數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值。如:

inti;

charc;

i=,az;

c=97;

是A法的。如果用格式符“%d”修i的值輸出,

可得到97。用V輸出c,可得字符匕'。

如果在上面語句之后執(zhí)行以下語句:

printf(H%c,%d\nH,c,c);

printf(n%c,%d\n",i,i);

輸出:

a,97

a,97

c語言程序設(shè)計(jì)

]]2,6,4字符串常量

—前面已提到,字符常量是由一對(duì)單引號(hào)

括起來的單個(gè)字符。c語言除了允許使用字符

常量外,還允許使用字符串常量。字符串常

量是一對(duì)雙引號(hào)括起來的字符序列。如:

“howdoyoudo.",“CHINA",“a”,都是

字符串常量。可以輸出一個(gè)字符串,如:

printf("howdoyoudo.H);

不要將字符常量與字符串常量混淆。W

是字符常量,“屋是字符串常量,二者不同。

假設(shè)c被指定為字符變量:

C語言程序設(shè)計(jì)

charc;

c=zaz;

是正確的。

而?=匕";是錯(cuò)誤的。

c="CHINA”也是錯(cuò)誤的。

不能把一個(gè)字符串賦給一個(gè)字符變量。

有人不能理解冶'和匕”究竟有什么

區(qū)別?c規(guī)定:在每一個(gè)字符串的結(jié)尾加一個(gè)

“字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字

符串是否結(jié)束。C規(guī)定以字符作為字符

串結(jié)束標(biāo)志。

C語言程序設(shè)計(jì)

’\0’是一個(gè)ASCH碼為。的字符,從ascii代碼

表中可以看到ascii碼為0的字符是“空操作

字符”,即它不引起任何控制動(dòng)作,也不是

一個(gè)可顯示的字符。如果有一'個(gè)字符串

“CHINA",實(shí)際上在內(nèi)存中是CHIN

A\0

它的長(zhǎng)度不是5個(gè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論