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

下載本文檔

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

文檔簡介

I計算機等級考試

C語言程序設(shè)計

主講人:楊天霞

Email:yang_tian_xia@163.com

JAo\iangeducation

選擇熨翔

成就夢想

。用5柱序攻計

第一章C語言概述

■本章的考試要求:

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

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

束標志

3.源程序的書寫格式

4.C語言的風格

C語言程序設(shè)計

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

1.1.1c程序

修需要計算機做的工隹寫成一定形式的

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

中,當我彳門給出命令之后,它就按指令順序

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

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

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

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

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

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

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

序、C++程序、Java程序,當然用C語言寫的

程序就叫C程序。

C語言程序設(shè)計

11.L1C程序

計算機本身是不能直接識別由上面所說

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

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

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

“機器語言”。

那么由高級語言寫出來的程序相對于機

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

二進制代碼表示的程序稱為“目標程序”。

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

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

的軟件把源程序翻譯成“目標程序”。每種

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

的編譯程序TurboC.

C語言程序設(shè)計

[1.L1C程序

C語言C語言二進制

源程序編譯程序機器指令

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

個后綴為.OBJ的二進制文件(稱為目標文

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

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

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

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

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

C語言程序設(shè)計

1.1.2程序設(shè)計

簡單程序設(shè)計一般包含以下幾個部分:

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

2.確定算法。

3.編碼。

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

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

C語言程序設(shè)計

1.2算法

學習計算機程序設(shè)計的目的就是在用語言作

為工具,設(shè)計出可供計算機運行的程序。

那么,如何對一個已知的問題進行有效

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

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

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

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

換為程序(編寫程序)。

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

且有限的步驟。

C語言程序設(shè)計

:2算法

算法的五個特性:

1.有窮性;

2.確定性;

3.可行性;

4.有0個或多個輸入;

5.有1個或多人輸出;

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

C語言程序設(shè)計

1.3結(jié)構(gòu)化程序設(shè)計和模塊化結(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è)計

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

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

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

C語言程序設(shè)計

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

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

k

A1A2

c語言程序設(shè)計

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

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

A

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

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

c語言程序設(shè)計

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

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

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

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

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

C語言程序設(shè)計

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

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

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

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

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

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

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

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

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

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

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

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

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

c語言程序設(shè)計

C語言程序設(shè)計

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

當計算機在處理比較復雜的任務(wù)時,所編

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

人來完成的。這時就需要要處理的復雜問題分

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

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

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

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

計方法為“模塊化”的方法,由一個個功能模

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

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

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

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

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

C語言程序設(shè)計

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

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

保留字符,不能再用其作為變量名、標識符。

autobreakcasecharconst

continuedefaultdodoubleelse

enumexternfloatforgotoifint

longregisterreturnshort

Signedsizeofstaticstructswitch

typedefunionunsigned

voidvolatilewhile

c語言程序設(shè)計

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

■本章的考試要求:

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

指針類型、空類型)

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

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

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

C語言程序設(shè)計

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

下面是一個簡單的C程序例子。

例2.1求矩形的面積。

程序如下:

#include<stdio.h>

main()

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

a=1.2;/*將矩形的兩條邊長分別賦給

a和b.*/

C語言程序設(shè)計

b=3.6;

area=a*b;

/*計算矩形的面積并存儲到變量area

中*/

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

b,area);

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

}

運行結(jié)果:

a=1.200000,b=3.600000,area=4.320000

c語言程序設(shè)計

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

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

號中間可以是空的,但這一對圓括號不能省

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

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

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

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

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

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

是定義部分;

C語言程序設(shè)計

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

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

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

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

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

令。

語句最后都有一分號。這是語句

的固定組成部分。

定義語句doublea,b,area;對程序中所

用到的變量a,b,area進行定義,聲明它們是

double類型的變量。

C語言程序設(shè)計

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

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

的作用是計算機出矩形面積并賦給變量area.

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

它后面的括號里面有兩部分組成,格式控制

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

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

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

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

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

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

1.200000,b=3.600000,area=

4.320000."后回車換行。

C語言程序設(shè)計

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

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

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

我們用漢字表示注釋,當然也可以用英語或

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

譯和運行不起作用。注釋可以加在程序十任

何位置。

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

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

C語言程序設(shè)計

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

謂命令行,命令行必須用“曠號開頭,行尾

不能加號,它不是C程序中的語句。一

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

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

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

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

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

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

C語言程序設(shè)計

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

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

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

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

(datastructure)o

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

是算法(algorithm)。

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

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

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

般應(yīng)包括:

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

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

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

加工出不同血味的菜肴。

C語言程序設(shè)計

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

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

名計算機科學家沃思(nikiklausWirth)提出

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

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

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

并且用某一種計算機語言表示。因此,可以

這樣表示:

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

具和環(huán)境

C語言程序設(shè)計

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

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

綜合運用這幾方面的知識。在本書中不可能

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

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

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

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

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

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

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

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

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

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

組織形

C語言程序設(shè)計

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

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

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

也會不同。

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

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

算法時,必須注意數(shù)據(jù)結(jié)構(gòu)。實際上,應(yī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è)計

短整型short

[%型<整型int

長整型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.其上可進行的操作

類:枚舉類型enum

指針類型

空類型void

定義類型typedef

c語言程序設(shè)計

產(chǎn).2標識符、常量、變量

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

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

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

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

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

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

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

C語言程序設(shè)計

22標識符、常量、變量

2.2.1標識符定義:

用于變量名、函數(shù)名、標號及其其他各

種用戶定義對象的名字稱為標識符。

命名規(guī)范:

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

第一個字符必須是字母或下劃線

合法的標識符:

sumaverage_total

不合法的標識符:

M.D3df

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

C語言程序設(shè)計

22標識符、常量、變量

標識符可以分為三類:

一、關(guān)鍵字

定義:在c語言中有些標識符留作特殊用途,它們在程序

果a固固定的含義,不能另作它用,這些標識符稱為

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

C語言中標準的32個關(guān)鍵字:

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

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

存儲類型說明:auto,extern,register,static

語句說明:

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

goto;

其他:sizeof,typeof

c語言程序設(shè)計

22標識符、常量、變量

二、預(yù)定義標識符

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

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

三、用戶標識符

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

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

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

C語言程序設(shè)計

2.2.2常量和符號常量

在程序運行過程中,其值不能被改變的

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

0,-3為整型常量,4.6、-1.23為實型常量,

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

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

直接常量。

也可以用一個標識符代表一個常量,如:

例2.2符號常量的使用。

#definePRICE30

main()

C語言程序設(shè)計

intnum,total;

num=10;

total=num*PRICE;

printf("total=%dH,total);

)

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

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

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

total=300

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

C語言程序設(shè)計

這種用一個標識符代表一個常量的,稱

為符號常量,即標識符形式的常量。請注意

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

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

值。如再用以下賦值語句給PRICE賦值是錯誤

的。

PRICE=40;

習慣上,符號常量名用大寫,變量用小

寫,以示區(qū)別。

使用符號常量的好處是:

C語言程序設(shè)計

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

從PRICE就可知道它代表價格。因此定義符號

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

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

15*30*23.5*43O在檢查程序時搞不清

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

知意”的變量名和符號常量。

C語言程序設(shè)計

⑵在需要改變一個常量時能做到“一改全

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

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

需要在程序中作多處修改,若用符號常量

PRICE代表價格,只需改動一處即可。如:

#definePRICE35

在程序中所有以PRICE代表的價格就會一

律自動改為35。

C語言程序設(shè)計

,23變量

其值可以改變的量稱為變量。一個變量

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

單元。在該存儲單元中存放變量的值。請注

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

見圖2.1。變量名實際上是一個符號地址,在

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

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

變量名

3-I——變量值

X、——存儲單元

c語言程序設(shè)計

注意,大寫字母和小寫字母被認為是兩個不同的字符。

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

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

以增加可讀性。

ANSIC標準沒有規(guī)定標識符的長度(字符個數(shù)),

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

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

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

被識別。例如,有兩個變量:student_name和

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

認為這兩個變量是一回事而不加區(qū)別??梢孕匏鼈兏?/p>

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

C語言程序設(shè)計

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

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

(或箕縮寫)作標識符,如count、name、day、

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

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

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

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

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

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

序中都如此。

C語言程序設(shè)計

在C語言中,要求對所有用到的變量作強

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

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

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

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

如果在定義部分寫了

intstudent;

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

staent=30;

C語言程序設(shè)計

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

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

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

名使用時出錯。

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

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

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

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

C語言程序設(shè)計

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

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

算是否合法。例如,整型變量a和b,可以進

行求余運算:

a%b

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

b指定為實型變量,則不允許進行“求余”運

算,在編譯時會給出有關(guān)“出錯信息”。

下面各節(jié)分別介紹整型、實型(浮點

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

C語言程序設(shè)計

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

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

十進制:21,-45,0

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

注意:018不是合法的八進制數(shù),因為8不是八

進制數(shù)字

0,123,4,5,6,7

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

如:

0xl0,0xde,0xf

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

以是大寫字母)

C語言程序設(shè)計

2.3.1整型變量

■整型變量可分為:基本

型、短整型、長整型和

無符號型四種。

■一般的微機中個整型所

占位數(shù)如下:

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

int基本整型32-2147483648?2147483648

short或shortint短整型16-32768?32767

long或longint長整型32-2147483648?2147483648

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

unsignedshort無符號短整型160-65535

unsignedlong無符號長整型320-4294967295

C語言程序設(shè)計

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

2.4.1實型常量的表示方法

實數(shù)(realnumber)又稱浮點數(shù)(floating-

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

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

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

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

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

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

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

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

C語言程序設(shè)計

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

如123.456可以表示為123.456e0,

12.3456el、1.23456e2、0.123456e3.

0.0123456e4.0.00123456e5等。把其中的

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

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

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

如2.3478e2、3.0999e5、6.46832el2都屬

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

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

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

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

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

5.68965e+003,而不會是0.568965e+004或

56.8965e+002o

C語言程序設(shè)計

2.4.2實型變量

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

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

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

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

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

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

形式。

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

III

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

以用圖2.7示意。

+,314159X101—-3.14159

C語言程序設(shè)計

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

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

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

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

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

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

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

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

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

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

夫。

C語言程序設(shè)計

2,實型變量

實型變量:單精度

(float)和雙精度

(double)

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

單精度(float)327位

雙精度6415?16位

(doub⑹

C語言程序設(shè)計

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

由于實型變量是由有限的存儲單元組成

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

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

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

比a大。請分析下面的程序:

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

main()

{floata,b;

a=123456.789e5;

b=a+20;

printf(n%f",b);

)

c語言程序設(shè)計

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

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

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

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

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

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

運行程序得到的a和b的值是:

12345678848.000000,可以看到,前7位是準

確的,后幾位是不準確而,把26加在后幾位

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

和一個很小的藪直接相加或相減,否則就會

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

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

C語言程序設(shè)計

2.4?3實型常量的類型

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

例如:已定義一個實型變量f,有如下語句:

f=2.45678*4523.65

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

存儲(占64位)和運算,得到一個雙精度的乘

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

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

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

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

處理。一個實型常量可以賦給一個float型、

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

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

C語言程序設(shè)計

假如a已指定為單精度實型變量:

floata;

a=llllll.Ill;

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

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

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

在變量a中。

C語言程序設(shè)計

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

字符型常量:

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

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

頭的字符序列。

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

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

\t橫向跳格\\字符'

\v豎向跳格\''字符

\b退格\ddd1到3位8進制所代表的字符

\r回車\xhh1到2位16進制所代表的字符

C語言程序設(shè)計

[2.5.1字符常量

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

的一個字符。如匕‘,‘X’,d,

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

和是不同的字符常量。

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

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

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

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

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

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

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

C語言程序設(shè)計

262字符變量

字符型變量用來存放字符常量,請注意

只能放一個字符,不要以為在一個字符變量

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

變量的定義形£4口卡:

charcl,c2;

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

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

cl、c2賦值:

cl=/az;c2=,bz;

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

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

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

C語言程序設(shè)計

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

將一個字符常量放到

clc2

一個字符變量中,實際上HH

并不是把該字符本身放到

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

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

到存儲單元中。例如字符0110000101100010

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

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

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

示。實際上是以二進制形圖2.8

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

示。

C語言程序設(shè)計

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

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

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

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

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

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

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

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

對字符數(shù)據(jù)進行算術(shù)運算,此時相當于對它

們的ASCH碼進行算術(shù)運算,只是將其一個字

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

C語言程序設(shè)計

例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,它的

作用相當于以下兩個賦值語句:

C語言程序設(shè)計

cl='a';c2='';

因為冶'和&的ASCH碼為97和98。在

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

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

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

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

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

第5行輸出兩個字符a和b。V是輸出

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

個整數(shù)97和98。

C語言程序設(shè)計

a01100001存儲(ASCH碼)

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

a97顯示

程序運行時輸出如下:

ab

9798

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

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

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

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

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

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

main()

{charcl,c2;

cl=/az;

c2=/bz;

cl=cl-32;

c2=c2-32;

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

}

運行結(jié)果為

AB

c語言程序設(shè)計

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

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

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

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

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

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

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

C語言程序設(shè)計

字符數(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è)計

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

—前面已提到,字符常量是由一對單引號

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

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

量是一對雙引號括起來的字符序列。如:

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

字符串常量??梢暂敵鲆粋€字符串,如:

printf("howdoyoudo.H);

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

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

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

C語言程序設(shè)計

charc;

c=zaz;

是正確的。

而?=匕";是錯誤的。

c="CHINA”也是錯誤的。

不能把一個字符串賦給一個字符變量。

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

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

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

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

串結(jié)束標志。

C語言程序設(shè)計

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

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

字符”,即它不引起任何控制動作,也不是

一個可顯示的字符。如果有一'個字符串

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

A\0

它的長度不是5個

溫馨提示

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

評論

0/150

提交評論