




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章C語(yǔ)言概述知識(shí)目標(biāo):
1.了解C語(yǔ)言的特點(diǎn)、C語(yǔ)言程序開發(fā)步驟。
2.初步了解C程序的組成結(jié)構(gòu),主函數(shù)的作用。
3.初步掌握C語(yǔ)言流程圖、N-S圖圖例特點(diǎn)與屬性。能力目標(biāo):
1.能夠啟動(dòng)VisualC++6.0,并能正確進(jìn)入編程窗口。
2.學(xué)會(huì)與人打交道,完成調(diào)查任務(wù)。
3.能初步掌握“班級(jí)學(xué)生成績(jī)管理系統(tǒng)”工作模塊構(gòu)成。
4.能調(diào)查了解本校學(xué)生成績(jī)管理系統(tǒng)的工作流程,畫出本校學(xué)生成績(jī)管理系統(tǒng)工作模塊圖。1.1C語(yǔ)言的發(fā)展歷史及特點(diǎn)1.1.1C語(yǔ)言的發(fā)展歷史
C語(yǔ)言是目前世界上流行、使用非常廣泛的高級(jí)程序設(shè)計(jì)語(yǔ)言。C語(yǔ)言對(duì)操作系統(tǒng)和系統(tǒng)使用程序以及需要對(duì)硬件進(jìn)行操作的場(chǎng)合,用C語(yǔ)言明顯優(yōu)于其它高級(jí)語(yǔ)言,許多大型應(yīng)用軟件都是用C語(yǔ)言編寫的。C語(yǔ)言具有繪圖能力強(qiáng),可移植性,并具備很強(qiáng)的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件,同時(shí)它也是數(shù)值計(jì)算的高級(jí)語(yǔ)言。
C語(yǔ)言的發(fā)展頗為有趣。它的原型ALGOL
60語(yǔ)言。(也成為A語(yǔ)言)
1963年,劍橋大學(xué)將ALGOL60語(yǔ)言發(fā)展成為CPL(CombinedProgrammingLanguage)語(yǔ)言。1967年,劍橋大學(xué)的MatinRichards對(duì)CPL語(yǔ)言進(jìn)行了簡(jiǎn)化,于是產(chǎn)生了BCPL語(yǔ)言。
1970年,美國(guó)貝爾實(shí)驗(yàn)室的Ken
Thompson將BCPL進(jìn)行了修改,并為它起了一個(gè)有趣的名字“B語(yǔ)言”。意思是將CPL語(yǔ)言煮干,提煉出它的精華。并且他用B語(yǔ)言寫了第一個(gè)UNIX操作系統(tǒng)。
而在1973年,B語(yǔ)言也給人“煮”了一下,美國(guó)貝爾實(shí)驗(yàn)室的D.M.RITCHIE在B語(yǔ)言的基礎(chǔ)上最終設(shè)計(jì)出了一種新的語(yǔ)言,他取了BCPL的第二個(gè)字母作為這種語(yǔ)言的名字,這就是C語(yǔ)言。為了使UNIX操作系統(tǒng)推廣,1977年Dennis
M.Ritchie
發(fā)表了不依賴于具體機(jī)器系統(tǒng)的C語(yǔ)言編譯文本《可移植的C語(yǔ)言編譯程序》。1978年Brian
W.Kernighian和Dennis
M.Ritchie出版了名著《The
C
Programming
Language》,從而使C語(yǔ)言成為目前世界上流行最廣泛的高級(jí)程序設(shè)計(jì)語(yǔ)言。
1988年,隨著微型計(jì)算機(jī)的日益普及,
出現(xiàn)了許多C語(yǔ)言版本。由于沒有統(tǒng)一的標(biāo)準(zhǔn),使得這些C語(yǔ)言之間出現(xiàn)了一些不一致的地方。為了改變這種情況,美國(guó)國(guó)家標(biāo)準(zhǔn)研究所(ANSI)為C語(yǔ)言制定了一套ANSI標(biāo)準(zhǔn),
成為現(xiàn)行的C語(yǔ)言標(biāo)準(zhǔn)
3.C語(yǔ)言的主要特點(diǎn)
。C語(yǔ)言發(fā)展迅速,
而且成為最受歡迎的語(yǔ)言之一,
主要因?yàn)樗哂袕?qiáng)大的功能。許多著名的系統(tǒng)軟件,
如DBASE
Ⅲ
PLUS、DBASE
Ⅳ
都是由C
語(yǔ)言編寫的。用C語(yǔ)言加上一些匯編語(yǔ)言子程序,
就更能顯示C語(yǔ)言的優(yōu)勢(shì)了,象PC-
DOS
、WORDSTAR等就是用這種方法編寫的。
目前最流行的C語(yǔ)言有以下幾種:
MicrosoftC或稱MSC
BorlandTurboC或稱TurboC
這些C語(yǔ)言版本不僅實(shí)現(xiàn)了ANSIC標(biāo)準(zhǔn),而且在此基礎(chǔ)上各自作了一些擴(kuò)充,使之更加方便、完美。
在C的基礎(chǔ)上,一九八三年又由貝爾實(shí)驗(yàn)室的BjarneStrou-strup推出了C++。C++進(jìn)一步擴(kuò)充和完善了C語(yǔ)言,成為一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。C++目前流行的最新版本是BorlandC++4.5,SymantecC++6.1,和MicrosoftVisualC++2.0。C++提出了一些更為深入的概念,它所支持的這些面向?qū)ο蟮母拍钊菀讓栴}空間直接地映射到程序空間,為程序員提供了一種與傳統(tǒng)結(jié)構(gòu)程序設(shè)計(jì)不同的思維方式和編程方法。因而也增加了整個(gè)語(yǔ)言的復(fù)雜性,掌握起來有一定難度。1.1.2C語(yǔ)言的特點(diǎn)
總之,一種語(yǔ)言之所以能存在和發(fā)展,并且具有較強(qiáng)的生命力,總是有其不同于其他語(yǔ)言的特點(diǎn)。C語(yǔ)言的主要特點(diǎn)如下:
1.簡(jiǎn)潔緊湊、靈活方便
C語(yǔ)言一共只有32個(gè)關(guān)鍵字,9種控制語(yǔ)句,程序書寫自由,主要用小寫字母表示。它把高級(jí)語(yǔ)言的基本結(jié)構(gòu)和語(yǔ)句與低級(jí)語(yǔ)言的實(shí)用性結(jié)合起來。C語(yǔ)言可以象匯編語(yǔ)言一樣對(duì)位、字節(jié)和地址進(jìn)行操作,而這三者是計(jì)算機(jī)最基本的工作單元。
2.運(yùn)算符豐富
C的運(yùn)算符包含的范圍很廣泛,共有種34個(gè)運(yùn)算符。C語(yǔ)言把括號(hào)、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理。從而使C的運(yùn)算類型極其豐富表達(dá)式類型多樣化,靈活使用各種運(yùn)算符可以實(shí)現(xiàn)在其它高級(jí)語(yǔ)言中難以實(shí)現(xiàn)的運(yùn)算。
3.數(shù)據(jù)結(jié)構(gòu)豐富
C的數(shù)據(jù)類型有:整型、實(shí)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。能用來實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)類型的運(yùn)算。并引入了指針概念,使程序效率更高。另外C語(yǔ)言具有強(qiáng)大的圖形功能,支持多種顯示器和驅(qū)動(dòng)器。且計(jì)算功能、邏輯判斷功能強(qiáng)大。
4.C是結(jié)構(gòu)式語(yǔ)言
結(jié)構(gòu)式語(yǔ)言的顯著特點(diǎn)是代碼及數(shù)據(jù)的分隔化,即程序的各個(gè)部分除了必要的信息交流外彼此獨(dú)立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦?便于使用、維護(hù)以及調(diào)試。C語(yǔ)言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便的調(diào)用,并具有多種循環(huán)、條件語(yǔ)句控制程序流向,從而使程序完全結(jié)構(gòu)化。
5.C語(yǔ)法限制不太嚴(yán)格、程序設(shè)計(jì)自由度大
一般的高級(jí)語(yǔ)言語(yǔ)法檢查比較嚴(yán),能夠檢查出幾乎所有的語(yǔ)法錯(cuò)誤。而C語(yǔ)言允許程序編寫者有較大的自由度。
6.C語(yǔ)言允許直接訪問物理地址,可以直接對(duì)硬件進(jìn)行操作因此既具有高級(jí)語(yǔ)言的功能,又具有低級(jí)語(yǔ)言的許多功能,能夠象匯編語(yǔ)言一樣對(duì)位、字節(jié)和地址進(jìn)行操作,而這三者是計(jì)算機(jī)最基本的工作單元,可以用來寫系統(tǒng)軟件。
7.C語(yǔ)言程序生成代碼質(zhì)量高,程序執(zhí)行效率高
一般只比匯編程序生成的目標(biāo)代碼效率低10へ20%。
8.C語(yǔ)言適用范圍大,可移植性好1.2C程序的基本結(jié)構(gòu)分析
C語(yǔ)言有一個(gè)突出的優(yōu)點(diǎn)就是適合于多種操作系統(tǒng),如DOS、UNIX,也適用于多種機(jī)型。為了說明C語(yǔ)言源程序結(jié)構(gòu)的特點(diǎn),先看以下幾個(gè)程序。這幾個(gè)程序由簡(jiǎn)到難,表現(xiàn)了C語(yǔ)言源程序在組成結(jié)構(gòu)上的特點(diǎn)。雖然有關(guān)內(nèi)容還未介紹,但可從這些例子中了解到組成一個(gè)C源程序的基本部分和書寫格式。【例1.1】0102030405#include<stdio.h>main(){printf("GoodMoning!\n");}代碼貼士
在程序中,第01行main是主函數(shù)的函數(shù)名,表示這是一個(gè)主函數(shù)。每一個(gè)C源程序都必須有,且只能有一個(gè)主函數(shù)(main函數(shù))。第03行是函數(shù)調(diào)用語(yǔ)句,printf函數(shù)的功能是把要輸出的內(nèi)容送到顯示器去顯示。printf函數(shù)是一個(gè)由系統(tǒng)定義的標(biāo)準(zhǔn)函數(shù),可在程序中直接調(diào)用。
這是一個(gè)最簡(jiǎn)單的C語(yǔ)言程序。main前面的void表示此主函數(shù)是“空類型”,void是“空”的意思,即執(zhí)行此函數(shù)后不產(chǎn)生一個(gè)函數(shù)值。每一個(gè)C語(yǔ)言程序都必須有一個(gè)main函數(shù)。每一個(gè)函數(shù)要有函數(shù)名,也要有函數(shù)體(即函數(shù)的實(shí)體)。函數(shù)體由一對(duì)花括號(hào){}括起來。本例中主函數(shù)內(nèi)只有一行。printf是C編譯系統(tǒng)提供的標(biāo)準(zhǔn)函數(shù)庫(kù)中的輸出函數(shù)(詳見第4章)。程序第4行是一個(gè)printf語(yǔ)句,圓括號(hào)中雙撇號(hào)內(nèi)的字符串按原樣輸出?!埃躰”是換行符,在執(zhí)行程序時(shí),輸出“GoodMoning!”,然后執(zhí)行回車換行。語(yǔ)句最后有一個(gè)分號(hào)。
在使用標(biāo)準(zhǔn)函數(shù)庫(kù)中的輸入輸出函數(shù)時(shí),編譯系統(tǒng)要求程序提供有關(guān)的信息(例如對(duì)這些輸入輸出函數(shù)的聲明),程序第01行“#include<stdio.h>”的作用就是用來提供這些信息的,stdio.h是C編譯系統(tǒng)提供的一個(gè)文件名,stdio是“standardinput&output”的縮寫,即有關(guān)“標(biāo)準(zhǔn)輸入輸出”的信息。在開始時(shí)對(duì)此可暫不必深究,以后會(huì)有詳細(xì)介紹的。在此只須記?。涸诔绦蛑杏玫较到y(tǒng)提供的標(biāo)準(zhǔn)函數(shù)庫(kù)中的輸入輸出函數(shù)時(shí),應(yīng)在程序的開頭寫這樣一行:
#include<stdio.h>01020304050607080910111213141516#include<stdio.h>main(){intx,y,z;/*變量說明*/intmax(inta,intb);/*函數(shù)聲明*/printf("inputtwonumbers:\n");scanf("%d%d",&x,&y);/*輸入x,y值*/z=max(x,y);/*調(diào)用max函數(shù)*/printf("max=%d\n",z);/*輸出*/}intmax(inta,intb)/*定義max函數(shù)/{if(a>b)returna;/*把結(jié)果返回主調(diào)函數(shù)*/Elsereturnb;/*把結(jié)果返回主調(diào)函數(shù)*/}【例1.2】:任意輸入兩個(gè)數(shù),求兩個(gè)數(shù)中最大的那個(gè)數(shù)。代碼貼士在程序中,第03行是變量說明,說明變量x、y、z的數(shù)據(jù)類型。在程序中第04行是函數(shù)聲明。第06行為輸入語(yǔ)句,調(diào)用scanf函數(shù),接受鍵盤上輸入的數(shù)并存入變量x、y中。在程序中第07行調(diào)用了max函數(shù)。程序第10~16行是一個(gè)用戶自定義的max函數(shù)。
上例中程序的功能是由用戶輸入兩個(gè)整數(shù),程序執(zhí)行后輸出其中較大的數(shù)。本程序由兩個(gè)函數(shù)組成,主函數(shù)main和max函數(shù)。函數(shù)之間是并列關(guān)系。但可從主函數(shù)中調(diào)用其它函數(shù)。本例中的主函數(shù)體中又分為兩部分:一部分為說明部分(第03~04行),另一部分為執(zhí)行部分(第05~08行)。在程序的說明部分中,不僅可以有變量說明,還可以有函數(shù)說明。
行結(jié)果如下:
inputtwonumbers:8,5↙max=8
通過以上幾個(gè)例子,可以看到C源程序的結(jié)構(gòu)特點(diǎn):
1.一個(gè)C語(yǔ)言源程序可以由一個(gè)或多個(gè)源文件組成。
2.每個(gè)源文件可由一個(gè)或多個(gè)函數(shù)組成。
3.一個(gè)源程序不論由多少個(gè)函數(shù)組成,都有一個(gè)且只能有一個(gè)main函數(shù),即主函數(shù)。
4.源程序中可以有預(yù)處理命令(include
命令僅為其中的一種),預(yù)處理命令通常應(yīng)放在源文件或源程序的最前面。
5.每一個(gè)說明,每一個(gè)語(yǔ)句都必須以分號(hào)結(jié)尾。但預(yù)處理命令,函數(shù)頭和花括號(hào)“}”之后不能加分號(hào)。
6.標(biāo)識(shí)符,關(guān)鍵字之間必須至少加一個(gè)空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。
1.3程序設(shè)計(jì)時(shí)的算法描述1.3.1程序的三種基本結(jié)構(gòu)一個(gè)程序包含一系列的執(zhí)行指令,每一個(gè)指令使計(jì)算機(jī)完成一種操作。程序中的指令不是任意書寫而無規(guī)律的。1966年,Bohra和Jacopini提出了以下三種基本結(jié)構(gòu),用這三種基本結(jié)構(gòu)作為表示一個(gè)良好算法的基本單元。因此,任何一個(gè)復(fù)雜程序都是由三種基本結(jié)構(gòu)組成,即:順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循序結(jié)構(gòu)。它們的含義如下:①順序結(jié)構(gòu):順序結(jié)構(gòu)的程序是一條語(yǔ)句接一條語(yǔ)句順序地往下執(zhí)行的。順序結(jié)構(gòu)的程序是最簡(jiǎn)單的程序。如圖1-1為順序結(jié)構(gòu)結(jié)構(gòu)圖圖1-1
②分支結(jié)構(gòu):若在程序執(zhí)行過程中,程序的流程可由多路分支組成,根據(jù)不同的條件去執(zhí)行不同的任務(wù)。如圖1-2為選擇結(jié)構(gòu)結(jié)構(gòu)圖。圖1-2③循環(huán)結(jié)構(gòu):若在程序中需要根據(jù)某項(xiàng)條件重復(fù)地執(zhí)行某項(xiàng)任務(wù)若干次或直到滿足或不滿足某條件為止,這就構(gòu)成了循環(huán)結(jié)構(gòu)。如圖1-3為循環(huán)結(jié)構(gòu)結(jié)構(gòu)圖。圖1-31.3.2程序的算法描述算法的概念計(jì)算機(jī)所進(jìn)行的一切操作都是由程序決定的,而程序是人事先編寫好并輸入給計(jì)算機(jī)的。從前面的程序中可知,一個(gè)程序包括以下兩個(gè)方面的內(nèi)容:
(1)對(duì)數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(datastructure)。
(2)對(duì)操作的描述。即操作步驟,也就是算法(algorithm)。數(shù)據(jù)是操作的對(duì)象,操作的目的是對(duì)數(shù)據(jù)進(jìn)行加工處理,以得到期望的結(jié)果。打個(gè)比方,廚師制作菜肴,需要有菜譜,菜譜一般應(yīng)包括:①配料,指出應(yīng)使用哪些原料;②操作步驟,指出如何使用這些原料按規(guī)定的步驟加工成所需的菜肴。沒有原料是無法加工成所需菜肴的。但是用同一些原料可以加工出不同的菜肴。作為程序設(shè)計(jì)人員,必須認(rèn)真考慮和設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)和操作步驟(即算法)。著名計(jì)算機(jī)科學(xué)家沃思(NikildausWirth)提出一個(gè)公式:數(shù)據(jù)結(jié)構(gòu)+算法=程序
2.算法的表示構(gòu)思好一個(gè)算法后,可以選擇不同的方式表示。(1)用自然語(yǔ)言表示自然語(yǔ)言就是人們?nèi)粘J褂玫恼Z(yǔ)言,可以是漢語(yǔ)、英語(yǔ),或其他語(yǔ)言。用自然語(yǔ)言表示通俗易懂,但文字冗長(zhǎng),容易出現(xiàn)歧義性。自然語(yǔ)言表示的含義往往不太嚴(yán)格,要根據(jù)上下文才能判斷其正確含義。假如有這樣一句話:“張先生對(duì)李先生說他的孩子考上了大學(xué)”。請(qǐng)問是張先生的孩子考上大學(xué)呢還是李先生的孩子考上大學(xué)呢?光從這句話本身難以判斷。此外,用自然語(yǔ)言來描述包含分支和循環(huán)的算法,不很方便。因此,除了那些很簡(jiǎn)單的問題以外,一般不用自然語(yǔ)言描述算法。
(2)用傳統(tǒng)流程圖表示算法流程圖是用一些圖框來表示各種操作。用圖形表示算法,直觀形象,易于理解。美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)ANSI(AmericanNationalStandardlnstitute)規(guī)定了一些常用的流程圖符號(hào)見圖1-4,已為世界各國(guó)程序工作者普遍采用。圖1-4【例1.3】:任意輸入兩個(gè)數(shù),求兩個(gè)數(shù)中最大的那個(gè)數(shù)。說明:用傳統(tǒng)流程圖表示此題的算法見圖1-5。圖1-5
N開始輸入x,yx>yx→maxy→max輸出max結(jié)束Y
(3)用N-S流程圖表示算法
1973年美國(guó)學(xué)者I.Nassi和B.Shneiderman提出了一種新的流程圖形式。在這種流程圖中,完全去掉了帶箭頭的流程線。全部算法寫在一個(gè)矩形框內(nèi),在該框內(nèi)還可以包含其他的從屬于它的框,或者說,由一些基本的框組成一個(gè)大的框。這種流程圖又稱N-S結(jié)構(gòu)化流程圖(N和S是兩位美國(guó)學(xué)者的英文姓氏的首字母)。這種流程圖適于結(jié)構(gòu)化程序設(shè)計(jì),而且作圖簡(jiǎn)單,占用面積小。N-S流程圖用以下的流程圖符號(hào)。圖1-6順序結(jié)構(gòu)圖1-7選擇結(jié)構(gòu)【例1.4】:將【例1.3.1】的算法用N-S流程圖來表示。輸入x,yx>y是否x→maxy→max輸出max圖1-8循環(huán)結(jié)構(gòu)圖1-9
4.用偽代碼表示算法用傳統(tǒng)的流程圖和N-S圖表示算法直觀易懂,但畫起來比較費(fèi)事,在設(shè)計(jì)一個(gè)算法時(shí),可能要反復(fù)修改,而修改流程圖是比較麻煩的。為了設(shè)計(jì)算法時(shí)方便,常用一種稱為偽代碼(pseudocode)的工具。偽代碼是用介于自然語(yǔ)言和計(jì)算機(jī)語(yǔ)言之間的文字和符號(hào)來描述算法。它如同一篇文章一樣,自上而下地寫下來。每一行(或幾行)表示一個(gè)基本操作。它不用圖形符號(hào),因此書寫方便,格式緊湊,也比較好懂,也便于向計(jì)算機(jī)語(yǔ)言算法(即程序)過渡。
【例1.5】:將例【例1.3.1】的算法用偽代碼表示。
ifx>ythenx→maxelsey→max
用偽代碼寫算法并無固定的、嚴(yán)格的語(yǔ)法規(guī)則,只要把意思表達(dá)清楚,并且書寫的格式要寫成清晰易讀的形式。總之,在以上幾種表示算法的方法中,具有熟練編程經(jīng)驗(yàn)的專業(yè)人士喜歡用偽代碼,初學(xué)者喜歡用傳統(tǒng)流程圖或N-S圖,比較形象,易于理解。
1.4VisualC++6.0環(huán)境下調(diào)試C實(shí)例1.4.1C程序的編譯通過前面二個(gè)例子我們已經(jīng)了解了C語(yǔ)言的程序結(jié)構(gòu)。所謂程序,就是一組計(jì)算機(jī)能識(shí)別和執(zhí)行的指令。每一條指令使計(jì)算機(jī)執(zhí)行特定的操作。用高級(jí)語(yǔ)言編寫的程序成為源程序。但是一個(gè)源程序文件只是可以存儲(chǔ),并不能運(yùn)行。因?yàn)橛?jì)算機(jī)并不認(rèn)識(shí)源程序中的語(yǔ)句。要讓計(jì)算機(jī)直接運(yùn)行,還要將它翻譯成計(jì)算機(jī)可以直接辨認(rèn)并可以執(zhí)行的機(jī)器語(yǔ)言程序。這一過程成為編譯。對(duì)于C語(yǔ)言程序來說,這一過程一般分為4步。
圖1-10運(yùn)行C程序的流程
第一步:編輯源程序。編輯源程序,就是用高級(jí)語(yǔ)言編寫并修改源程序。源程序的編輯要在編輯器中進(jìn)行。編輯器具有字符的修改、添加等功能。編輯好的源程序,可以先以源程序文件的形式保存起來。如前所述,C語(yǔ)言源程序的文件名后綴為.c。源程序僅僅是按照C語(yǔ)言的詞法和語(yǔ)法編寫的,并能被編輯器處理的文字字符的集合。它還圖1-10運(yùn)行C程序的流程不能被計(jì)算機(jī)執(zhí)行。
第二步:編譯。編譯就是把用C語(yǔ)言描述的程序(或程序模塊)翻譯成計(jì)算機(jī)可以理解并執(zhí)行的機(jī)器語(yǔ)言命令組成的程序(或程序模塊)。C語(yǔ)言的編譯過程分為兩個(gè)階段:首先是編譯預(yù)處理,系統(tǒng)要先掃描程序,處理所有預(yù)處理命令,如把文件包含命令要求的文件包含(嵌入)到程序(或程序模塊)中;然后才開始編譯。
編譯后得到的文件稱為目標(biāo)文件,目標(biāo)文件就是用機(jī)器語(yǔ)言描述的文件。C語(yǔ)言的目標(biāo)文件的后綴為.obj。目標(biāo)文件的主文件名,一般與源程序文件名相同。在編譯過程中,還要對(duì)源程序中的語(yǔ)法和邏輯結(jié)構(gòu)進(jìn)行檢查。編譯任務(wù)是由稱做編譯器(compiler)的軟件完成的。程序在編譯過程中,也可能發(fā)現(xiàn)錯(cuò)誤。這時(shí)要重新進(jìn)入編輯器進(jìn)行編輯。目標(biāo)程序文件還不能被執(zhí)行,它們只是一些在內(nèi)存中可重定位的目標(biāo)程序模塊。
第三步:鏈接。接是將與當(dāng)前程序有關(guān)的、已經(jīng)存在的幾個(gè)目標(biāo)模塊鏈接在一起,形成一個(gè)完整的程序代碼文件。這些已經(jīng)存在的目標(biāo)模塊包括:庫(kù)函數(shù),如前面使用的printf;對(duì)于大的程序,常常分成幾個(gè)模塊,分別編寫、編輯和編譯,形成不同的目標(biāo)模塊。正確鏈接所生成的文件才是可執(zhí)行文件。可執(zhí)行文件的文件名后綴為.exe程序在鏈接過程中,也可能發(fā)現(xiàn)錯(cuò)誤。這時(shí)也要重新進(jìn)入編輯器進(jìn)行編輯。第四步:執(zhí)行。接后得到的可執(zhí)行文件名,對(duì)操作系統(tǒng)來說,相當(dāng)于一條命令。在操作系統(tǒng)提供的命令界面上輸入這個(gè)命令,就可以開始執(zhí)行這個(gè)程序。1.4.2C程序的運(yùn)行為了編譯、連接和運(yùn)行C程序,必須要有相應(yīng)的C編譯系統(tǒng)。目前使用的大多數(shù)C編譯系統(tǒng)都是集成開發(fā)環(huán)境(IDE)的,把程序的編輯、編譯、連接和運(yùn)行等操作全部集中在一個(gè)界面上進(jìn)行,功能豐富,使用方便,直觀易用。
目前學(xué)習(xí)C++的人大多使用VisualC++6.0集成環(huán)境,因此不少人在學(xué)習(xí)C時(shí)也使用VisualC++集成開發(fā)環(huán)境,這樣有利于今后方便地學(xué)習(xí)C++。本節(jié)主要介紹在VisualC++6.0中怎樣編輯、編譯、連接和運(yùn)行C程序。本書中的程序都是在VisualC++6.0環(huán)境下調(diào)試和運(yùn)行的。
1.進(jìn)入VisualC++6.0集成開發(fā)環(huán)境
VisualC++6.0是在Windows環(huán)境下工作的。VisualC++6.0有英文版和中文版,二者使用方法相同。本節(jié)介紹的是VisualC++6.0中文版。為了能使用VisualC++6.0集成環(huán)境,必須事先在所用的計(jì)算機(jī)上安裝VisualC++6.0系統(tǒng)。在安裝后最好在桌面上設(shè)立VisualC++6.0的快捷方式圖標(biāo),以方便使用。雙擊桌面上VisualC++6.0圖標(biāo),就能進(jìn)入VisualC++6.0集成開發(fā)環(huán)境,屏幕上出現(xiàn)VisualC++6.0的主窗口,見圖1-12。
在VisualC++主窗口的頂部是VisualC++的主菜單欄。其中包含9個(gè)菜單項(xiàng):文件編輯查看插入項(xiàng)目組建工具窗口幫助主窗口的左側(cè)是項(xiàng)目工作區(qū)窗口,右側(cè)是程序編輯窗口。工作區(qū)窗口用來顯示所設(shè)定的工作區(qū)的信息,程序編輯窗口用來輸入和編輯源程序。
2.輸入和編輯源程序(1)新建一個(gè)源程序可采取以下的步驟:在VisualC++主窗口的主菜單欄中選擇“文件”,然后選擇“新建”,見圖l-13。
屏幕上出現(xiàn)一個(gè)“新建”對(duì)話框(見圖l-14)。單擊此對(duì)話框的上方的“文件”標(biāo)簽,在其下拉菜單中選擇C++SourceFile項(xiàng),表示要建立新的C++源程序文件,然后在對(duì)話框
右半部分的位置文本框中輸入準(zhǔn)備編輯的源程序文件的存儲(chǔ)路徑(今假設(shè)為E:\zc),表示準(zhǔn)備編輯的源程序文件將存放在E:\zc子目錄下。在其上方的文件名文本框中輸入準(zhǔn)備編輯的源程序文件的名字(今輸入cl_1.c)。這樣,即將進(jìn)行輸入和編輯的源程序就以c1_1.c為文件名存放在E盤的zc目錄下。在單擊OK按鈕后,回到VisualC++主窗口,可以看到光標(biāo)在程序編輯窗口閃爍,表示程序編輯窗口已激活,可以輸入和編輯源程序了。輸入例1.1中的程序(見圖l-15)。在輸入過程中如發(fā)現(xiàn)有錯(cuò)誤,可以利用全屏幕編輯方法進(jìn)行修改編輯。
如果經(jīng)檢查無誤,則將源程序保存在前面指定的文件cl-l1.c中,方法是:在主菜單欄中選擇“文件”,并在其下拉菜單中選擇“保存”項(xiàng)。見圖l-16。
(2)打開一個(gè)已有的程序如果已經(jīng)編輯并保存過C源程序,而希望打開所需要的源程序文件,并對(duì)它進(jìn)行修改,方法是:①在“我的電腦”中按路徑找到已有的C程序名(如cl-1.c)。②雙擊此文件名,則進(jìn)入了VisualC++集成開發(fā)環(huán)境,并打開了該文件,程序已顯示在編輯窗口中。③修改后選擇“文件”→“保存”,保存在原來的文件中。
3.程序的編譯在編輯和保存了源文件(如cl-l.c)以后,若需要對(duì)該源文件進(jìn)行編譯。選擇主菜單欄中的“組建”,在其下拉菜單中選擇“編譯[c1-1.c]”項(xiàng)。見圖l-17。由于剛才建立(或保存)文件時(shí)已指定了源文件的名字c1-l.c,因此在“組建”菜單的“編譯[c1-1.c]”項(xiàng)中自動(dòng)顯示了現(xiàn)在要編譯的源文件名c1-1.c。
在選擇“編譯”命令后,屏幕上出現(xiàn)一個(gè)對(duì)話框,內(nèi)容是Thisbuildcommandrequiresanactiveprojectworkspace,Wouldyouliketocreateadefaultprojectworkspace?(此編譯命令要求一個(gè)有效的項(xiàng)目工作區(qū),你是否同意建立一個(gè)默認(rèn)的項(xiàng)目工作區(qū)),見圖l-18。單擊“是”按鈕,表示同意由系統(tǒng)建立默認(rèn)的項(xiàng)目工作區(qū),然后開始編譯。也可以不用選擇菜單的方法,而直接按Ctrl+F7鍵來完成編譯。
在進(jìn)行編譯時(shí),編譯系統(tǒng)檢查源程序中有無語(yǔ)法錯(cuò)誤,然后在主窗口下部的調(diào)試信息窗口輸出編譯的信息,如果無錯(cuò),則生成目標(biāo)文件cl-1.obj,如果有錯(cuò),則會(huì)指出錯(cuò)誤的位置和性質(zhì),提示用戶改正錯(cuò)誤。
4.程序的連接在得到后綴為.obj的目標(biāo)程序后,還不能直接運(yùn)行,還要把程序和系統(tǒng)提供的資源(如函數(shù)庫(kù)、頭文件)建立連接。此時(shí)應(yīng)選擇“組建”→“組建[c1-1.exe]”,見圖l-19。表示要求連接并建立一個(gè)可執(zhí)行文件cl-1.exe。
在執(zhí)行連接后,在調(diào)試輸出窗口中顯示連接時(shí)的信息,說明沒有發(fā)現(xiàn)錯(cuò)誤,生成了一個(gè)可執(zhí)行文件cl-1.exe。見圖1-20。
以上介紹的是分別進(jìn)行程序的編譯與連接,也可以選擇菜單“組建”→“組建”(或按F7鍵)一次完成編譯與連接。對(duì)于初學(xué)者來說,還是提倡分步進(jìn)行程序的編譯與連接,因?yàn)槌绦虺鲥e(cuò)的機(jī)會(huì)較多,最好等到上一步完全正確后才進(jìn)行下一步。對(duì)于有經(jīng)驗(yàn)的程序員來說,在對(duì)程序比較有把握時(shí),可以一步完成編譯與連接。
5.程序的執(zhí)行在得到可執(zhí)行文件c1-1.exe后,就可以直接執(zhí)行c1-1.exe了。選擇“組建”→“!執(zhí)行[c1-1.exe]”,見圖1-21。
在選擇“!執(zhí)行[c1-1.exe]”項(xiàng)后,即開始執(zhí)行c1-1.exe。也可以不通過選擇菜單,而直接按Ctrl+F5鍵來實(shí)現(xiàn)程序的執(zhí)行。程序執(zhí)行后,屏幕切換到輸出結(jié)果的窗口,顯示出運(yùn)行結(jié)果,見圖1-22。
可以看到,在輸出結(jié)果的窗口中的第1行是程序的輸出:
GoodMoning!然后換行。第2行“Pressanykeytocontinue”并非程序所指定的輸出,而是VisualC++在輸出完運(yùn)行結(jié)果后由VisualC++6.0系統(tǒng)自動(dòng)加上的一行信息,通知用戶“按任何一鍵以便繼續(xù)”。當(dāng)你按下任何一鍵后,輸出窗口消失,回到VisualC++的主窗口,你可以繼續(xù)對(duì)源程序進(jìn)行修改補(bǔ)充或進(jìn)行其他工作。如果已完成對(duì)一個(gè)程序的操作,不再對(duì)它進(jìn)行其他處理,應(yīng)當(dāng)選擇“文件”→“關(guān)閉工作區(qū)”,以結(jié)束對(duì)該程序的操作。1.4“學(xué)生成績(jī)管理系統(tǒng)”初步總體規(guī)劃設(shè)計(jì)
1.4.1應(yīng)用程序的開發(fā)過程應(yīng)用程序的開發(fā)過程一般分為三個(gè)階段:分析、設(shè)計(jì)、實(shí)施。
1.系統(tǒng)分析系統(tǒng)分析主要完成三個(gè)任務(wù),一是需求報(bào)告,二是可行性分析,三是系統(tǒng)詳細(xì)分析并建立邏輯模型。在進(jìn)行系統(tǒng)分析以前,必須首先確定用戶究竟需要應(yīng)用系統(tǒng)完成什么樣的工作?達(dá)到什么目標(biāo)?預(yù)期完成的時(shí)間要求等。這些即稱為需求報(bào)告,這種需求報(bào)告應(yīng)該是由用戶寫出,其中應(yīng)包括系統(tǒng)的名稱、預(yù)期目標(biāo)、輸入輸出格式說明以及完成時(shí)間等。
可行性分析是應(yīng)用程序開發(fā)中的重要一環(huán),它是在用戶提交的需求報(bào)告的基礎(chǔ)上實(shí)事求是地分析提出需求的可能性與必要性,其作用是盡量減少開發(fā)過程中的盲目性,避免不必要的損失??尚行苑治鰬?yīng)該從技術(shù)可行性、經(jīng)濟(jì)可行性、操作可行性等三個(gè)方面進(jìn)行分析。可行性分析之后,必須由開發(fā)人員寫出書面的可行性報(bào)告,它應(yīng)該反映這樣幾個(gè)問題:系統(tǒng)簡(jiǎn)述、系統(tǒng)目標(biāo)、系統(tǒng)開發(fā)的條件與結(jié)論。結(jié)論是根據(jù)可行性分析對(duì)所提出的應(yīng)用系統(tǒng)研制工作是否可以繼續(xù)進(jìn)行作出判斷。在可行性報(bào)告被認(rèn)可以后,就要從系統(tǒng)的組織、功能、業(yè)務(wù)等各個(gè)方面進(jìn)行調(diào)查分析以確定應(yīng)用系統(tǒng)的邏輯模型。它一般分為三個(gè)階段:調(diào)查研究、綜合分析、編寫系統(tǒng)說明書。工作的重點(diǎn)在于對(duì)數(shù)據(jù)流程的調(diào)查分析,在說明書中應(yīng)包含數(shù)據(jù)流程圖。因?yàn)檫@是建立邏輯模型的基礎(chǔ)。2.系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)是在系統(tǒng)分析的基礎(chǔ)上,規(guī)劃系統(tǒng)規(guī)模、設(shè)計(jì)系統(tǒng)結(jié)構(gòu),最終提出系統(tǒng)的實(shí)施方案,建立系統(tǒng)的物理模型。這一階段是系統(tǒng)開發(fā)的核心,這主要的工作任務(wù)包括繪制系統(tǒng)結(jié)構(gòu)圖、代碼設(shè)計(jì)、輸入輸出設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)、模塊處理流程設(shè)計(jì)等。繪制系統(tǒng)結(jié)構(gòu)圖實(shí)際上是進(jìn)行系統(tǒng)的結(jié)構(gòu)設(shè)計(jì),也就是進(jìn)行模塊化設(shè)計(jì)。所謂的模塊化設(shè)計(jì)指將一個(gè)系統(tǒng)按功能自頂向下,由抽象到具體,由粗到細(xì),逐層分解,一直分解到功能明確、大小適中、彼此獨(dú)立、能用程序?qū)崿F(xiàn)的模塊為止。系統(tǒng)結(jié)構(gòu)圖一般是在數(shù)據(jù)流程圖的基礎(chǔ)上變換而來的。代碼設(shè)計(jì)是指將系統(tǒng)中涉及的實(shí)體的名稱、屬性、狀態(tài)等用一定的符號(hào)(數(shù)字或字母不同組合)來定義,使數(shù)據(jù)標(biāo)準(zhǔn)化、系統(tǒng)化,便于計(jì)算機(jī)對(duì)其進(jìn)行處理。代碼設(shè)計(jì)應(yīng)具唯一性、可擴(kuò)充性、通用性、便于記憶與識(shí)別等特性。代碼的編碼方法很多,如順序碼、層次碼、組碼、多面碼、助記碼、縮寫碼等。例如:一個(gè)學(xué)生的學(xué)號(hào)可以這樣編:20000102002,其中前四位2000表示該學(xué)生入學(xué)的時(shí)間,01表示所在的系,02表示該系所屬的專業(yè),002表示該生的順序號(hào),這種碼就是多面碼。輸入輸出設(shè)計(jì)一般是先進(jìn)行輸出設(shè)計(jì),再進(jìn)行輸入設(shè)計(jì)。輸出設(shè)計(jì)是確定輸出信息的需求,確定輸出信息的內(nèi)容,輸出介質(zhì)和設(shè)備,輸出格式的設(shè)計(jì)等。輸入設(shè)計(jì)是確定原始信息的輸入方式,主要有菜單法、表格法、應(yīng)答法等三種輸入方法。這三種方法可以混合使用,取長(zhǎng)補(bǔ)短,其目的是為了簡(jiǎn)化操作,提高輸入速度。在確定了輸入方式以后還要設(shè)計(jì)數(shù)據(jù)校驗(yàn)方法,對(duì)輸入的數(shù)據(jù)還要進(jìn)行校驗(yàn)以保證數(shù)據(jù)輸入的正確性。數(shù)據(jù)庫(kù)設(shè)計(jì)包括數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì)與數(shù)據(jù)庫(kù)的物理設(shè)計(jì),邏輯設(shè)計(jì)的任務(wù)是建立數(shù)據(jù)模型,物理設(shè)計(jì)的目的是確定數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)如字段的類型、寬度等。通常在一個(gè)數(shù)據(jù)庫(kù)中往往要包含多個(gè)表,物理設(shè)計(jì)還要確定數(shù)據(jù)庫(kù)中應(yīng)包含那些表,各個(gè)表之間的關(guān)系等。模塊處理流程設(shè)計(jì)的任務(wù)是分析各個(gè)模塊內(nèi)的信息流動(dòng)情況,選擇信息處理的方法并組織處理的過程。3.系統(tǒng)實(shí)施系統(tǒng)實(shí)施是繼系統(tǒng)分析與設(shè)計(jì)之后的最重要的開發(fā)階段。這個(gè)階段的主要任務(wù)是將前兩個(gè)階段所完成的“做什么?怎么做?”真正付諸實(shí)現(xiàn)。其主要工作包括編制程序、系統(tǒng)的調(diào)試與測(cè)試、試運(yùn)行與維護(hù)、系統(tǒng)評(píng)價(jià)等。程序設(shè)計(jì)是利用程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)各個(gè)功能模塊的要求。要廣泛使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,在程序設(shè)計(jì)過程中實(shí)現(xiàn)功能要求是不言而喻的,但更要強(qiáng)調(diào)程序的可靠性、可維護(hù)性與程序的界面友好性。
系統(tǒng)的調(diào)試是開發(fā)人員為了排除程序錯(cuò)誤,檢查能否實(shí)現(xiàn)模塊功能而進(jìn)行的工作??煞譃樽酉到y(tǒng)分調(diào)和應(yīng)用系統(tǒng)聯(lián)調(diào)。分調(diào)重點(diǎn)在于程序的功能與數(shù)據(jù)處理的正確性,而聯(lián)調(diào)則側(cè)重于整個(gè)應(yīng)用系統(tǒng)中相關(guān)模塊的相互影響、參數(shù)傳遞的正確性及程序整體控制的正確性檢查。系統(tǒng)維護(hù)主要是指針對(duì)應(yīng)用系統(tǒng)在運(yùn)行過程中出現(xiàn)的各種問題進(jìn)行糾正、修改、升級(jí)等??梢苑譃榧m正性維護(hù)、完善性維護(hù)和適應(yīng)性維護(hù)三種。系統(tǒng)維護(hù)主要包括數(shù)據(jù)維護(hù)、程序維護(hù)、硬件與系統(tǒng)軟件的維護(hù)等三個(gè)方面的工作。系統(tǒng)的評(píng)價(jià)是在系統(tǒng)運(yùn)行了一段時(shí)間后,對(duì)系統(tǒng)的性能指標(biāo)、經(jīng)濟(jì)指標(biāo)和管理指標(biāo)作出一個(gè)公正而又準(zhǔn)確的評(píng)價(jià)。1.4.2“學(xué)生成績(jī)管理系統(tǒng)”總體規(guī)劃設(shè)計(jì)
學(xué)生成績(jī)的統(tǒng)計(jì)與管理,是學(xué)校教學(xué)管理中的重要管理內(nèi)容,它關(guān)系到學(xué)生是否能正常畢業(yè)。隨著學(xué)校規(guī)模的擴(kuò)大和管理要求的提高,傳統(tǒng)的手工管理的方法就不適應(yīng)當(dāng)前學(xué)校教學(xué)管理的需要,學(xué)生學(xué)習(xí)成績(jī)的計(jì)算機(jī)自動(dòng)化管理也是衡量一個(gè)學(xué)校管理水平的標(biāo)志。學(xué)生學(xué)習(xí)成績(jī)的計(jì)算機(jī)自動(dòng)化管理能高效、方便的管理學(xué)生成績(jī)。要開發(fā)一個(gè)班級(jí)學(xué)生成績(jī)管理系統(tǒng)軟件,可以先走訪本校的教務(wù)管理部門,了解學(xué)生成績(jī)管理方法,經(jīng)過分析得出管理流程,按管理流程設(shè)計(jì)出管理模塊,如果是正式開發(fā)管理軟件,這個(gè)工作要經(jīng)過與用戶單位充分的討論、論證,最后得出一致的意見。下面就開發(fā)學(xué)習(xí)型的“班級(jí)學(xué)生成績(jī)管理系統(tǒng)”的主要功能說明如下:班級(jí)學(xué)生成績(jī)管理系統(tǒng)共設(shè)計(jì)了6大模塊:
(1)打開文件模塊,能夠打開保存在磁盤上的學(xué)生成績(jī)文件。(2)保存文件模塊,能將一個(gè)班40個(gè)學(xué)生,每個(gè)學(xué)生包括學(xué)號(hào)、姓名、三門課程學(xué)習(xí)成績(jī)和總成績(jī)以及平均成績(jī)?nèi)勘4嬖诖疟P文件中。(3)編輯成績(jī)模塊,能編輯學(xué)生信息和學(xué)生成績(jī),并能進(jìn)行相應(yīng)的增加、刪除、修改等操作。(4)顯示成績(jī)模塊,能顯示全部學(xué)生信息、指定學(xué)生信息、不及格學(xué)生信息和按總成績(jī)排序后的學(xué)生信息。(5)計(jì)算模塊,能對(duì)學(xué)生成績(jī)進(jìn)行總成績(jī)與平均成績(jī)計(jì)算,能找出全班學(xué)習(xí)成績(jī)最好的和最差的學(xué)生。(6)程序說明模塊,能對(duì)軟件的版本、功能、使用方法、開發(fā)者信息等進(jìn)行相應(yīng)說明。另外,本系統(tǒng)只有一個(gè)出口,程序只能通過該出口正常結(jié)束,以保證安全退出系統(tǒng)。6大功能模塊可以用圖1-23表示。圖1-23
開發(fā)“班級(jí)學(xué)生成績(jī)管理系統(tǒng)”項(xiàng)目遵循“軟件開發(fā)工作流程”和“循序漸進(jìn)”原則,分任務(wù)實(shí)施。每個(gè)單元首先以一至二個(gè)任務(wù)為驅(qū)動(dòng),圍繞完成任務(wù)設(shè)計(jì)必備知識(shí)與理論,力爭(zhēng)程序開發(fā)步驟與知識(shí)水平、能力緊密結(jié)合,使學(xué)習(xí)與應(yīng)用熔為一體,學(xué)用結(jié)合,學(xué)用相長(zhǎng)。通過學(xué)習(xí)的深入逐步完善程序功能,最后形成一個(gè)完整的程序。隨著知識(shí)介紹的逐漸增多,學(xué)習(xí)者也可以自己增加新模塊,使程序更趨完善,更加實(shí)用。項(xiàng)目開發(fā)實(shí)施方案:任務(wù)1:“班級(jí)學(xué)生成績(jī)管理系統(tǒng)”總體規(guī)劃設(shè)計(jì)。任務(wù)2:“班級(jí)學(xué)生成績(jī)管理系統(tǒng)”中相關(guān)數(shù)據(jù)設(shè)計(jì)。任務(wù)3:用輸入輸出函數(shù)初步設(shè)計(jì)項(xiàng)目封面與菜單。任務(wù)4:項(xiàng)目封面、菜單的順序執(zhí)行設(shè)計(jì)。
任務(wù)5:用if語(yǔ)句實(shí)現(xiàn)菜單的選擇執(zhí)行設(shè)計(jì)。任務(wù)6:用switch語(yǔ)句實(shí)現(xiàn)菜單的選擇執(zhí)行設(shè)計(jì)。任務(wù)7:用循環(huán)語(yǔ)句實(shí)現(xiàn)項(xiàng)目主菜單的選擇執(zhí)行設(shè)計(jì)。
任務(wù)8:用循環(huán)語(yǔ)句實(shí)現(xiàn)項(xiàng)目主、子菜單的選擇執(zhí)行設(shè)計(jì)。任務(wù)9:項(xiàng)目整體框架設(shè)計(jì)。任務(wù)10:初步完善學(xué)生最高、最低等成績(jī)查找。任務(wù)11:初步完善學(xué)生成績(jī)排序。任務(wù)12:用指針實(shí)現(xiàn)學(xué)生最高、最低等成績(jī)查找。任務(wù)13:用指針實(shí)現(xiàn)學(xué)生成績(jī)排序。任務(wù)14:用結(jié)構(gòu)體實(shí)現(xiàn)數(shù)據(jù)的增加、刪除、修改和顯示。任務(wù)15:項(xiàng)目中學(xué)生數(shù)據(jù)的存儲(chǔ)和重復(fù)使用。
“學(xué)生信息管理系統(tǒng)”項(xiàng)目的整體框架設(shè)計(jì)應(yīng)當(dāng)充分的進(jìn)行調(diào)查研究,充分與用戶進(jìn)行溝通,充分了解用戶的需要,在此基礎(chǔ)上給出項(xiàng)目的總體規(guī)則設(shè)計(jì)方案。本章小結(jié):本單元主要介紹班級(jí)學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)要點(diǎn)和主要模塊,介紹C語(yǔ)言程序設(shè)計(jì)中的一些基本概念以及開發(fā)應(yīng)用程序的主要步驟。通過本單元的學(xué)習(xí),使讀者對(duì)用C語(yǔ)言開發(fā)程序有一個(gè)概括性的了解,并能夠模仿例題編寫一些簡(jiǎn)單程序。
知識(shí)目標(biāo):掌握C語(yǔ)言的數(shù)據(jù)類型;深刻理解常量與變量;深刻理解整型、實(shí)型和字符型數(shù)據(jù)常量和變量的表示方法;掌握賦值運(yùn)算符和賦值表達(dá)式、變量的賦值方法;理解各種數(shù)據(jù)類型之間的混合運(yùn)算。能力目標(biāo):能正確定義“班級(jí)學(xué)生成績(jī)管理系統(tǒng)”中的相關(guān)數(shù)據(jù)的類型。
第2章“學(xué)生成績(jī)管理系統(tǒng)”中相關(guān)數(shù)據(jù)設(shè)計(jì)
2.1任務(wù)1“學(xué)生成績(jī)管理系統(tǒng)”中相關(guān)數(shù)據(jù)設(shè)計(jì)2.1.1任務(wù)情境
“學(xué)生成績(jī)管理系統(tǒng)”中的數(shù)據(jù)有常量與變量、簡(jiǎn)單類型數(shù)據(jù)和復(fù)雜類型數(shù)據(jù)。這些變量有簡(jiǎn)單類型變量,還有一些復(fù)雜類型變量,如數(shù)組、結(jié)構(gòu)體、共用體、指針類型等變量。在這里我們只對(duì)“學(xué)生成績(jī)管理系統(tǒng)”中的數(shù)據(jù)做一些簡(jiǎn)單的分析。“學(xué)生成績(jī)管理系統(tǒng)”中的學(xué)生信息主要有:學(xué)號(hào)、性別、年齡、三門功課成績(jī)、總成績(jī)和平均成績(jī),再加上一些與計(jì)算全班成績(jī)有關(guān)的最高成績(jī)、最低成績(jī)等。如學(xué)號(hào)、性別這類數(shù)據(jù)只是起到描述一些基本信息的作用,通常情況下不進(jìn)行算術(shù)運(yùn)算;而年齡、三門功課成績(jī)、總成績(jī)和平均成績(jī)以及最高成績(jī)、最低成績(jī)等這類數(shù)據(jù)有可能進(jìn)行算術(shù)運(yùn)算。所以針對(duì)這二類數(shù)據(jù)我們?cè)诙x數(shù)據(jù)類型時(shí),要根據(jù)實(shí)際情況選擇不同的數(shù)據(jù)類型。下面我們通過相關(guān)理論的學(xué)習(xí),掌握如何將“學(xué)生成績(jī)管理系統(tǒng)”中的數(shù)據(jù)定義成C語(yǔ)言能夠處理的數(shù)據(jù)。2.1.2知識(shí)必備引例:已知圓的半徑,求圓的周長(zhǎng)、面積。程序代碼如下:010203040506070809#include<stdio.h>#definePI=3.14159\\定義符號(hào)常量main(){floatr,perimeter,area;\\定義變量
scanf(〝%f〝,&r);\\輸入半徑perimeter=2*PI*r;area=PI*R*R;printf(〝周長(zhǎng)=%f\n〝,perimeter);\\輸出周長(zhǎng)及面積
printf(〝面積=%f\n〝,area);}代碼貼士
該程序中,在第02行定義了符號(hào)常量PI,其值在程序中不改變。在04行定義了半徑、周長(zhǎng)、面積三個(gè)實(shí)型變量。由于輸入的半徑不同,計(jì)算的周長(zhǎng)、面積也不相同。因此,在程序中半徑、周長(zhǎng)和面積這三個(gè)變量的值是變化的。1.C語(yǔ)言的數(shù)據(jù)類型通過實(shí)例分析,我們已經(jīng)看到程序中使用的各種變量都應(yīng)預(yù)先加以定義,即先定義,后使用。對(duì)變量的定義可以包括三個(gè)方面:數(shù)據(jù)類型存儲(chǔ)類型作用域在本章中,我們只介紹數(shù)據(jù)類型的說明。其它說明在以后各章中陸續(xù)介紹。所謂數(shù)據(jù)類型是按被定義變量的性質(zhì),表示形式,占據(jù)存儲(chǔ)空間的多少,構(gòu)造特點(diǎn)來劃分的。在C語(yǔ)言中,數(shù)據(jù)類型可分為:基本數(shù)據(jù)類型,構(gòu)造數(shù)據(jù)類型,指針類型三大類。浮點(diǎn)型雙精度浮點(diǎn)型(double)
單精度浮點(diǎn)型(float)枚舉類型(enum)結(jié)構(gòu)體類型(struct{…})共用體類型(union{…})構(gòu)造類型指針類型(T*)基本類型數(shù)據(jù)類型型整型字符型(char)短整型(short)長(zhǎng)整型(long)整型(int)2.常量與變量對(duì)于基本數(shù)據(jù)類型量,按其取值是否可改變又分為常量和變量?jī)煞N。在程序執(zhí)行過程中,其值不發(fā)生改變的量稱為常量,其值可變的量稱為變量。
(1)常量與符號(hào)常在程序執(zhí)行過程中,其值不發(fā)生改變的量稱為常量。直接常量(字面常量):整型常量:12、0、-3;實(shí)型常量:4.6、-1.23;字符常量:‘a(chǎn)’、‘b’。符號(hào)常量:用標(biāo)識(shí)符代表一個(gè)常量。在C語(yǔ)言中,可以用一個(gè)標(biāo)識(shí)符來表示一個(gè)常量,稱之為符號(hào)常量。符號(hào)常量在使用之前必須先定義,其一般形式為:#define標(biāo)識(shí)符常量說明:①用標(biāo)識(shí)符代表一個(gè)常量,稱為符號(hào)常量。②習(xí)慣上符號(hào)常量的標(biāo)識(shí)符用大寫字母,變量標(biāo)識(shí)符用小寫字母,以示區(qū)別。③使用符號(hào)常量的好處是:含義清楚;能做到“一改全改”?!纠?.1】符號(hào)常量的使用。
#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf(“total=%d”,total);}
(2)變量其值可以改變的量稱為變量。一個(gè)變量應(yīng)該有一個(gè)名字,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元。變量定義必須放在變量使用之前。一般放在函數(shù)體的開頭部分。要區(qū)分變量名和變量值是兩個(gè)不同的概念。3變量值變量名存儲(chǔ)單元a圖2-13.整型數(shù)據(jù)(1)整型常量表示方法整型常量就是整常數(shù)。在C語(yǔ)言中,使用的整常數(shù)有八進(jìn)制、十六進(jìn)制和十進(jìn)制三種。
1)十進(jìn)制整常數(shù):十進(jìn)制整常數(shù)沒有前綴。其數(shù)碼為0~9。以下各數(shù)是合法的十進(jìn)制整常數(shù):
237、-568、65535、1627;
2)八進(jìn)制整常數(shù):八進(jìn)制整常數(shù)必須以0開頭,即以0作為八進(jìn)制數(shù)的前綴。數(shù)碼取值為0~7。八進(jìn)制數(shù)通常是無符號(hào)數(shù)。以下各數(shù)是合法的八進(jìn)制數(shù):015(十進(jìn)制為13)、0101(十進(jìn)制為65)、0177777(十進(jìn)制為65535);十六進(jìn)制整常數(shù):十六進(jìn)制整常數(shù)的前綴為0X或0x。其數(shù)碼取值為0~9,A~F或a~f。以下各數(shù)是合法的十六進(jìn)制整常數(shù):0X2A(十進(jìn)制為42)、0XA0(十進(jìn)制為160)、0XFFFF(十進(jìn)制為65535);
(2)整型變量整型變量用來存放整數(shù)。在16位字長(zhǎng)的機(jī)器上,基本整型的長(zhǎng)度也為16位,因此表示的數(shù)的范圍也是有限定的。
1.整型變量的分類基本型:類型說明符為int,在內(nèi)存中占2個(gè)字節(jié)。短整量:類型說明符為shortint或short。所占字節(jié)和取值范圍均與基本型相同。長(zhǎng)整型:類型說明符為longint或long,在內(nèi)存中占4個(gè)字節(jié)。無符號(hào)型:類型說明符為unsigned。無符號(hào)型又可與上述三種類型匹配而構(gòu)成:無符號(hào)基本型:類型說明符為unsignedint或unsigned。無符號(hào)短整型:類型說明符為unsignedshort。無符號(hào)長(zhǎng)整型:類型說明符為unsignedlong。各種無符號(hào)類型量所占的內(nèi)存空間字節(jié)數(shù)與相應(yīng)的有符號(hào)類型量相同。但由于省去了符號(hào)位,故不能表示負(fù)數(shù)。表2.1列出了TurboC和VisualC++6.0中各類整型量所分配的內(nèi)存字節(jié)數(shù)及數(shù)的表示范圍。類型說明符TurboC2.0VisualC++6.0字節(jié)數(shù)數(shù)值范圍字節(jié)數(shù)數(shù)值范圍int2-32768~327674-2147483648~2147483647unsignedint20~6553540~4294967295shortint2-32768~327672-32768~32767unsignedshortint20~6553520~65535longint4-2147483648~21474836474-2147483648~2147483647unsignedlong40~429496729540~4294967295表2.1整型量所分配的內(nèi)存字節(jié)數(shù)及數(shù)的表示范圍2.整型變量的定義變量定義的一般形式為:類型說明符變量名標(biāo)識(shí)符,變量名標(biāo)識(shí)符,...;例如:
inta,b,c;(a,b,c為整型變量)longx,y;(x,y為長(zhǎng)整型變量)unsignedp,q;(p,q為無符號(hào)整型變量)
在書寫變量定義時(shí),應(yīng)注意以下幾點(diǎn):①允許在一個(gè)類型說明符后,定義多個(gè)相同類型的變量。各變量名之間用逗號(hào)間隔。類型說明符與變量名之間至少用一個(gè)空格間隔。②最后一個(gè)變量名之后必須以“;”號(hào)結(jié)尾。③變量定義必須放在變量使用之前。一般放在函數(shù)體的開頭部分。【例2.2】整型變量的定義與使用。
main(){inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d\n”,c,d);}
(3)整形常量的類型整型常量和整型變量一樣也有數(shù)據(jù)類型,才能在賦值時(shí)匹配。如果int型數(shù)據(jù)在內(nèi)存中占2個(gè)字節(jié),longint型變量占4個(gè)字節(jié),按下面的規(guī)則處理:①如果整常數(shù)的值在–32768~32767范圍內(nèi),認(rèn)為它是int型,分配2個(gè)字節(jié)。它可以賦值給int型和longint型變量。②如果其值超出上述范圍,而在–2147483648~2147483647范圍內(nèi),則認(rèn)為它是長(zhǎng)整型,分配4個(gè)字節(jié)??梢詫⑺x值給一個(gè)longint型變量。③在一個(gè)常量后面加一個(gè)字母l或L,則認(rèn)為是長(zhǎng)整型常量,例如123l、423L等;一個(gè)整型常量后面加一個(gè)字母u或U,認(rèn)為是unsignedint型,如12345u在內(nèi)存中按unsignedint型規(guī)定的方式存放。4.實(shí)型數(shù)據(jù)
(1)實(shí)型常量的表示方法
1)十進(jìn)制數(shù)形式:由數(shù)碼0~9和小數(shù)點(diǎn)組成。例如:
0.0、25.0、5.789、0.13、5.0、300.、-267.8230等均為合法的實(shí)數(shù)。注意,必須有小數(shù)點(diǎn)。
2)指數(shù)形式:由十進(jìn)制數(shù),加階碼標(biāo)志“e”或“E”以及階碼(只能為整數(shù),可以帶符號(hào))組成。其一般形式為:aEn(a為十進(jìn)制數(shù),n為十進(jìn)制整數(shù))其值為a*10n。
如:
2.1E5(等于2.1*105)3.7E-2(等于3.7*10-2)0.5E7(等于0.5*107)-2.8E-2(等于-2.8*10-2)(2)實(shí)型變量實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式實(shí)型數(shù)據(jù)一般占4個(gè)字節(jié)(32位)內(nèi)存空間。按指數(shù)形式存儲(chǔ)。實(shí)數(shù)3.14159在內(nèi)存中的存放形式如下:+.3141591
數(shù)符小數(shù)部分指數(shù)
小數(shù)部分占的位(bit)數(shù)愈多,數(shù)的有效數(shù)字愈多,精度愈高。指數(shù)部分占的位數(shù)愈多,則能表示的數(shù)值范圍愈大。
2)實(shí)型變量的分類實(shí)型變量分為:?jiǎn)尉龋╢loat型)、雙精度(double型)和長(zhǎng)雙精度(longdouble型)三類。在VisualC++6.0中單精度型占4個(gè)字節(jié)(32位)內(nèi)存空間,其數(shù)值范圍為3.4E-38~3.4E+38,只能提供七位有效數(shù)字。雙精度型占8個(gè)字節(jié)(64位)內(nèi)存空間,其數(shù)值范圍為1.7E-308~1.7E+308,可提供16位有效數(shù)字。
實(shí)型變量定義的格式和書寫規(guī)則與整型相同。例如:
floatx,y;(x,y為單精度實(shí)型量)doublea,b,c;(a,b,c為雙精度實(shí)型量)3)實(shí)型數(shù)據(jù)的舍入誤差由于實(shí)型變量是由有限的存儲(chǔ)單元組成的,因此能提供的有效數(shù)字總是有限的。如下例。
【例2.3】實(shí)型數(shù)據(jù)的舍入誤差。
main(){floata,b;a=123456.789e5;b=a+20printf("%f\n",a);printf("%f\n",b);}
運(yùn)行結(jié)果a和b的值均是12345678848.000000
由于a是單精度浮點(diǎn)型,有效位數(shù)只有七位。因此,從將20加到最后二位上是無意義的。4)實(shí)型常數(shù)的類型實(shí)型常數(shù)不分單、雙精度,在機(jī)器內(nèi)部都按雙精度double型處理。
5.字符型數(shù)據(jù)字符型數(shù)據(jù)包括字符常量和字符變量。(1)字符常量字符常量是用單引號(hào)括起來的一個(gè)字符。例如:'a'、'b'、'='、'+'、'?'都是合法字符常量。在C語(yǔ)言中,字符常量有以下特點(diǎn):
1.字符常量只能用單引號(hào)括起來,不能用雙引號(hào)或其它括號(hào)。
2.字符常量只能是單個(gè)字符,不能是字符串。
3.字符可以是字符集中任意字符。但數(shù)字被定義為字符型之后就不能參與數(shù)值運(yùn)算。如'5'和5是不同的。'5'是字符常量,不能參與運(yùn)算。
轉(zhuǎn)義字符是一種特殊的字符常量。轉(zhuǎn)義字符以反斜線"\"開頭,后跟一個(gè)或幾個(gè)字符。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱“轉(zhuǎn)義”字符。例如,在前面各例題printf函數(shù)的格式串中用到的“\n”就是一個(gè)轉(zhuǎn)義字符,其意義是“回車換行”。轉(zhuǎn)義字符主要用來表示那些用一般字符不便于表示的控制代碼。轉(zhuǎn)義字符轉(zhuǎn)義字符的意義ASCII代碼 \n回車換行10 \t橫向跳到下一制表位置9 \b退格8 \r回車13 \f走紙換頁(yè)12 \\反斜線符"\"92 \'單引號(hào)符39\”雙引號(hào)符34 \a鳴鈴7 \ddd1~3位八進(jìn)制數(shù)所代表的字符 \xhh1~2位十六進(jìn)制數(shù)所代表的字符表2.2常用的轉(zhuǎn)義字符及其含義
(2)字符變量字符變量用來存儲(chǔ)字符常量,即單個(gè)字符。字符變量的類型說明符是char。字符變量類型定義的格式和書寫規(guī)則都與整型變量相同。例如:
charc1,c2;c1=’a’;c2=’b’;(3)字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及使用方法每個(gè)字符變量被分配一個(gè)字節(jié)的內(nèi)存空間,因此只能存放一個(gè)字符。字符值是以ASCII碼的形式存放在變量的內(nèi)存單元之中的。如x的十進(jìn)制ASCII碼是120。對(duì)字符變量a賦予'x'值:
a='x';
實(shí)際上是在a,b兩個(gè)單元內(nèi)存放120的二進(jìn)制代碼:
a:01111000
所以也可以把它們看成是整型量。C語(yǔ)言允許對(duì)整型變量賦以字符值,也允許對(duì)字符變量賦以整型值。在輸出時(shí),允許把字符變量按整型量輸出,也允許把整型量按字符量輸出。【例2.4】向字符變量賦以整數(shù)。
main(){chara,b;a=120;b=121;printf("%c,%c\n",a,b);printf("%d,%d\n",a,b);}運(yùn)行結(jié)果:
xy120121
本程序中定義a,b為字符型,但在賦值語(yǔ)句中賦以整型值。從結(jié)果看,a,b值的輸出形式取決于printf函數(shù)格式串中的格式符,當(dāng)格式符為"c"時(shí),對(duì)應(yīng)輸出的變量值為字符,當(dāng)格式符為"d"時(shí),對(duì)應(yīng)輸出的變量值為整數(shù)?!纠?.5】main(){chara,b;a='a';b='b';a=a-32;b=b-32;printf("%c,%c\n%d,%d\n",a,b,a,b);}
運(yùn)行結(jié)果:
A,B,65,66
本例中,a,b被說明為字符變量并賦予字符值,C語(yǔ)言允許字符變量參與數(shù)值運(yùn)算,即用字符的ASCII碼參與運(yùn)算。由于大小寫字母的ASCII碼相差32,因此運(yùn)算后把小寫字母換成大寫字母。然后分別以整型和字符型輸出。2.1.3任務(wù)實(shí)施通過相關(guān)理論學(xué)習(xí)后,我們可以對(duì)“學(xué)生成績(jī)管理系統(tǒng)”中相關(guān)數(shù)據(jù)進(jìn)行分析及定義了。將現(xiàn)實(shí)中的數(shù)據(jù)處理成C語(yǔ)言能夠理解的數(shù)據(jù)。1.常量定義在“學(xué)生成績(jī)管理系統(tǒng)”中我們假定本系統(tǒng)能處理一個(gè)班40個(gè)學(xué)生的數(shù)據(jù)。通常情況下,學(xué)生人數(shù)這個(gè)數(shù)據(jù)在程序的運(yùn)行過程中是不變的。因此,要把表示一個(gè)班學(xué)生總?cè)藬?shù)的數(shù)據(jù)定義成符號(hào)常量。定義符號(hào)常量的格式如下:#defineSTUNUM40說明:符號(hào)常量(STUNUM)必須用大寫字母。
2.簡(jiǎn)單類型“學(xué)生成績(jī)管理系統(tǒng)”中的學(xué)生信息主要包括:學(xué)號(hào)、姓名、性別、年齡、三門功課成績(jī)、總成績(jī)和平均成績(jī),另外還有一些與計(jì)算全班成績(jī)有關(guān)的最高成績(jī)、最低成績(jī)等。這些數(shù)據(jù)在程序運(yùn)行過程中是可能改變的,這里只對(duì)部分表示學(xué)生信息的簡(jiǎn)單數(shù)據(jù)定義,我們?cè)诙x變量時(shí)最好能做到“見名知義”。
intstunum;//整數(shù)類型的學(xué)號(hào)
charstusex;//字符類型的性別
intstuage;//整數(shù)類型的年齡
floatscore1;//單精度類型的成績(jī)1
floatscore2;//單精度類型的成績(jī)2floatscore3;//單精度類型的成績(jī)3floatavescore;//單精度類型的平均成績(jī)
floatmaxscore;//單精度類型的最高分
floatminscore;//單精度類型的最低分由于性別這類數(shù)據(jù)只是起到描述一些基本信息的作用,通常情況下不進(jìn)行算術(shù)運(yùn)算,所以我們定義為字符型;而年齡、三門功課成績(jī)、總成績(jī)和平均成績(jī)以及最高成績(jī)、最低成績(jī)等這類數(shù)據(jù)有可能進(jìn)行算術(shù)運(yùn)算,所以我們定義為數(shù)值型。另外,在編程實(shí)踐中還會(huì)遇到一些這里不能一一列舉出來的變量、數(shù)組變量和指針變量,我們將在后續(xù)的學(xué)習(xí)逐漸認(rèn)識(shí)與掌握。在“班級(jí)學(xué)生成績(jī)管理系統(tǒng)”中變量定義完成以后,接下來我們還要在知識(shí)擴(kuò)展環(huán)節(jié)里進(jìn)一步學(xué)習(xí)如何給變量賦值。2.1.4知識(shí)擴(kuò)展
1.變量賦初值在程序中常常需要對(duì)變量賦初值,以便使用變量。語(yǔ)言程序中可有多種方法為變量提供初值。本小節(jié)先介紹在作變量定義的同時(shí)給變量賦以初值的方法。這種方法稱為初始化。在變量定義中賦初值的一般形式為:類型說明符變量1=值1,變量2=值2,……;例如:
inta=3;
intb,c=5;floatx=3.2,y=3f,z=0.75;
charch1='K',ch2='P';
應(yīng)注意,在定義中不允許連續(xù)賦值,如a=b=c=5是不合法的。
【例2.6】main(){inta=3,b,c=5;b=a+c;printf("a=%d,b=%d,c=%d\n",a,b,c);}2.各類數(shù)值型數(shù)據(jù)之間的混合運(yùn)算變量的數(shù)據(jù)類型是可以轉(zhuǎn)換的。轉(zhuǎn)換的方法有兩種,一種是自動(dòng)轉(zhuǎn)換,一種是強(qiáng)制轉(zhuǎn)換。自動(dòng)轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型的量混合運(yùn)算時(shí),由編譯系統(tǒng)自動(dòng)完成。自動(dòng)轉(zhuǎn)換遵循以下規(guī)則:若參與運(yùn)算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。轉(zhuǎn)換按數(shù)據(jù)長(zhǎng)度增加的方向進(jìn)行,以保證精度不降低。如int型和long型運(yùn)算時(shí),先把int量轉(zhuǎn)成long型后再進(jìn)行運(yùn)算。
所有的浮點(diǎn)運(yùn)算都是以雙精度進(jìn)行的,即使僅含float單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成double型,再作運(yùn)算。
char型和short型參與運(yùn)算時(shí),必須先轉(zhuǎn)換成int型。在賦值運(yùn)算中,賦值號(hào)兩邊量的數(shù)據(jù)類型不同時(shí),賦值號(hào)右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長(zhǎng)度左邊長(zhǎng)時(shí),將丟失一部分?jǐn)?shù)據(jù),這樣會(huì)降低精度,丟失的部分按四舍五入向前舍入。下圖表示了類型自動(dòng)轉(zhuǎn)換的規(guī)則。char,shortdoublelongunsignedintfloat【例2.7】main(){floatPI=3.14159;ints,r=5;s=r*r*PI;printf("s=%d\n",s);}
本例程序中,PI為實(shí)型;s,r為整型。在執(zhí)行s=r*r*PI語(yǔ)句時(shí),r和PI都轉(zhuǎn)換成double型計(jì)算,結(jié)果也為double型。但由于s為整型,故賦值結(jié)果仍為整型,舍去了小數(shù)部分。
3.強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換是通過類型轉(zhuǎn)換運(yùn)算來實(shí)現(xiàn)的。其一般形式為:
(類型說明符)(表達(dá)式)
其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。例如:
(float)a把a(bǔ)轉(zhuǎn)換為實(shí)型
(int)(x+y)把x+y的結(jié)果轉(zhuǎn)換為整型
在使用強(qiáng)制轉(zhuǎn)換時(shí)應(yīng)注意以下問題:
1)類型說明符和表達(dá)式都必須加括號(hào)(單個(gè)變量可以不加括號(hào)),如把(int)(x+y)寫成(int)x+y則成了把x轉(zhuǎn)換成int型之后再與y相加了。
2)無論是強(qiáng)制轉(zhuǎn)換或是自動(dòng)轉(zhuǎn)換,都只是為了本次運(yùn)算的需要而對(duì)變量的數(shù)據(jù)長(zhǎng)度進(jìn)行的臨時(shí)性轉(zhuǎn)換,而不改變數(shù)據(jù)說明時(shí)對(duì)該變量定義的類型。
【例2.8】main(){floatf=5.75;printf("(int)f=%d,f=%f\n",(int)f,f);}
本例表明,f雖強(qiáng)制轉(zhuǎn)為int型,但只在運(yùn)算中起作用,是臨時(shí)的,而f本身的類型并不改變。因此,(int)f的值為5(刪去了小數(shù))而f的值仍為5.75。
4.算術(shù)運(yùn)算符和算術(shù)表達(dá)式C語(yǔ)言中運(yùn)算符和表達(dá)式數(shù)量之多,在高級(jí)語(yǔ)言中是少見的。正是豐富的運(yùn)算符和表達(dá)式使C語(yǔ)言功能十分完善。這也是C語(yǔ)言的主要特色之一。C語(yǔ)言的運(yùn)算符不僅具有不同的優(yōu)先級(jí),而且還有一個(gè)特點(diǎn),就是它的結(jié)合性。在表達(dá)式中,各運(yùn)算量參與運(yùn)算的先后順序不僅要遵守運(yùn)算符優(yōu)先級(jí)別的規(guī)定,還要受運(yùn)算符結(jié)合性的制約,以便確定是自左向右進(jìn)行運(yùn)算還是自右向左進(jìn)行運(yùn)算。這種結(jié)合性是其它高級(jí)語(yǔ)言的運(yùn)算符所沒有的,因此也增加了C語(yǔ)言的復(fù)雜性。
(1)C運(yùn)算符簡(jiǎn)介C語(yǔ)言的運(yùn)算符可分為以下幾類:
1)算術(shù)運(yùn)算符:用于各類數(shù)值運(yùn)算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運(yùn)算,%)、自增(++)、自減(--)共七種。
2)關(guān)系運(yùn)算符:用于比較運(yùn)算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六種。
3)邏輯運(yùn)算符:用于邏輯運(yùn)算。包括與(&&)、或(||)、非(!)三種。
4)位操作運(yùn)算符:參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。
5)賦值運(yùn)算符:用于賦值運(yùn)算,分為簡(jiǎn)單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運(yùn)算賦值(&=,|
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司組織滑雪策劃方案
- 2025年物流與供應(yīng)鏈管理考試卷及答案
- 2025年現(xiàn)代文學(xué)與書法藝術(shù)考試試題及答案
- 2025年企業(yè)文化與內(nèi)部管理的考核試卷及答案
- 2025年品牌傳播與市場(chǎng)聯(lián)系考核考試試卷及答案
- 2025年可持續(xù)發(fā)展與環(huán)境政策基礎(chǔ)知識(shí)考試卷及答案
- 2025年媒體傳播與社會(huì)學(xué)習(xí)研究考試試卷及答案
- 2025年計(jì)算機(jī)網(wǎng)絡(luò)與信息安全課程考試題及答案
- 2025年材料科學(xué)與工程專業(yè)綜合能力測(cè)試卷及答案
- 2025年初中歷史學(xué)科教育考試試題及答案
- 《無衣》教學(xué)設(shè)計(jì) 統(tǒng)編版高中語(yǔ)文選擇性必修上冊(cè)
- 合肥市住宅小區(qū)物業(yè)服務(wù)等級(jí)標(biāo)準(zhǔn)
- 創(chuàng)造心智與創(chuàng)新訓(xùn)練智慧樹知到期末考試答案2024年
- 食品廠員工衛(wèi)生培訓(xùn)方案
- 危房改造工程投標(biāo)方案(技術(shù)標(biāo))
- 北京市西城區(qū)2022年五年級(jí)下冊(cè)《數(shù)學(xué)》期末試卷與參考答案
- (完整)大體積混凝土測(cè)溫記錄表
- 國(guó)開電大本科《中國(guó)法律史》在線形考(任務(wù)一至十二)試題及答案
- 提高住院病歷完成及時(shí)性持續(xù)改進(jìn)(PDCA)
- 山東省濟(jì)寧市兗州區(qū)2022-2023學(xué)年八年級(jí)下學(xué)期期末數(shù)學(xué)試題(含答案)
- 加強(qiáng)中小學(xué)生作業(yè)管理完整PPT
評(píng)論
0/150
提交評(píng)論