《C語言程序設(shè)計 》課件第1章_第1頁
《C語言程序設(shè)計 》課件第1章_第2頁
《C語言程序設(shè)計 》課件第1章_第3頁
《C語言程序設(shè)計 》課件第1章_第4頁
《C語言程序設(shè)計 》課件第1章_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第1章概述1.1程序設(shè)計概述1.2算法及其描述1.3C語言概述1.4C程序的基本結(jié)構(gòu)1.5C語言程序的運行步驟1.6學(xué)習程序設(shè)計應(yīng)注意的幾個問題

1.1程序設(shè)計概述

1.1.1程序、程序設(shè)計與程序設(shè)計語言

1.程序

計算機的每一個操作都是根據(jù)人們事先指定的指令進行的。每一條指令執(zhí)行特定的操作。所謂程序,就是一組計算機能夠識別和執(zhí)行的指令,用以完成一定的功能。計算機執(zhí)行程序的過程就是“自動地”執(zhí)行各條指令的過程。計算機軟件系統(tǒng)包括系統(tǒng)軟件和應(yīng)用軟件兩部分。系統(tǒng)軟件一般由計算機生產(chǎn)廠家提供,是為方便用戶使用、管理和維修計算機而編制的程序的總稱。應(yīng)用軟件一般是指用戶在各自的應(yīng)用領(lǐng)域中,為解決各類實際問題而編制的程序。

2.程序設(shè)計

計算機的一切操作都是由程序來控制的。計算機本質(zhì)上是執(zhí)行程序的機器。只有懂得程序設(shè)計,才能真正使用好計算機這一工具。

計算機作為一個工具,主要用來解決人類所面臨的各種問題。只有最終在計算機上能夠運行良好的程序才能為人們解決特定的實際問題。因此,程序設(shè)計的過程就是利用計算機求解問題的過程。

程序設(shè)計是設(shè)計、編制和調(diào)試程序的過程。程序設(shè)計往往以某種程序設(shè)計語言為工具,給出這種語言下的程序。程序設(shè)計過程應(yīng)當包括分析、設(shè)計、編碼、測試、排錯等不同階段。由于軟件的質(zhì)量主要是通過程序的質(zhì)量來體現(xiàn)的,因此程序設(shè)計在軟件研究中的地位就顯得非常重要,其內(nèi)容涉及有關(guān)的基本概念、規(guī)范、工具、方法以及方法學(xué)。

3.程序設(shè)計語言

程序設(shè)計是一個過程,需要借助程序設(shè)計語言來描述解決問題的方法和步驟。人和人之間的交流需要通過語言。比如,中國人之間用漢語交流,英國人之間用英語交流。人和計算機交流信息,也要解決語言問題。程序設(shè)計語言是為了方便描述計算過程而人為設(shè)計的符號語言,是人與計算機進行信息交流的語言工具。1.1.2程序設(shè)計的一般過程

程序設(shè)計過程不能簡單地理解為只編制一個程序。實際上程序設(shè)計包括多方面的內(nèi)容,具體編制程序只是其中的一個方面。有人將程序設(shè)計描述成如下的一個公式:

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

由此看出,在整個程序設(shè)計的過程中,要涉及算法的設(shè)計、方法的設(shè)計和設(shè)計工具的選擇等諸多方面。雖然人們用計算機求解某一問題時可能編制出各種不同的程序,但是人們編制程序時一般都會按照共同的基本步驟進行,對于大型或復(fù)雜程序更是如此。從這個概念出發(fā),一般來說,可以將程序設(shè)計的過程分為以下幾個步驟:(1)分析問題;

(2)確定解題思路(建立數(shù)學(xué)模型);

(3)繪制流程圖或結(jié)構(gòu)圖(選擇或設(shè)計算法);

(4)編寫源程序;

(5)上機調(diào)試;

(6)修改源程序,最后確定源程序。

無論是什么類型的實際問題,要用計算機來求解,首先必須分析問題,從具體問題抽象出一個適當?shù)臄?shù)學(xué)模型,用這個數(shù)學(xué)模型應(yīng)能得出該問題的精確或近似解。然后確定數(shù)學(xué)模型的計算方法(即算法),根據(jù)問題的具體要求,可在已知的各種算法中選擇一種合適的算法或另設(shè)計一種新的算法。接下來就是用某種程序設(shè)計語言為確定的算法編制計算機程序,同時準備好作為程序處理對象的各種數(shù)據(jù)。再接下來就開始程序的調(diào)試運行,用一些典型的數(shù)據(jù)和描述邊界條件的數(shù)據(jù)對程序進行測試,以便發(fā)現(xiàn)和糾正程序中的錯誤。這一過程可能導(dǎo)致前面步驟的多次反復(fù)。最后,在調(diào)試達到所要求的質(zhì)量標準之后,程序就可正式投入運行,最終在計算機上得出問題的解。1.1.3程序設(shè)計語言發(fā)展

1.第一代程序設(shè)計語言——機器語言

最初的計算機編程語言是所謂的機器語言。一組機器指令就是程序,稱為機器語言程序。計算機可以理解并執(zhí)行的命令即為指令。每種計算機都有自己的指令集合。計算機能夠執(zhí)行的全部指令集合構(gòu)成計算機的指令系統(tǒng)。每條指令都是由二進制代碼0、1組成的。因此機器語言程序是二進制代碼0、1的集合。每種計算機的指令系統(tǒng)都是不同的,因此同一個題目在不同的計算機上計算時,必須編寫不同的機器語言程序。

機器語言是低級語言,是面向機器的語言。用機器語言編寫程序相當繁瑣,程序產(chǎn)生率很低,質(zhì)量難以保證,并且程序不能通用。另外,用機器語言編寫程序易出錯,程序難以檢查和調(diào)試。

2.第二代程序設(shè)計語言——匯編語言

20世紀50年代出現(xiàn)了匯編語言,它使用助記符表示每條機器指令。用指令助記符及地址符號書寫的指令稱為匯編指令,而用匯編指令編寫的程序稱為匯編語言程序。例如在8086CPU的指令系統(tǒng)中,用MOV表示數(shù)據(jù)傳送,ADD表示加,DEC表示將數(shù)據(jù)減1,可以使用十進制數(shù)和十六進制數(shù)。

需要指出的是,計算機不能直接識別用匯編語言編寫的程序,必須先由一種專門的翻譯程序?qū)R編語言程序翻譯成機器語言程序之后,計算機才能識別和執(zhí)行。這種翻譯的過程稱為“匯編”,負責翻譯的程序稱為匯編程序。匯編語言程序與硬件密切相關(guān),因此這種程序也不能通用。例如,為了計算表達式“5?+?3”的值,用匯編語言編寫的程序與用機器語言(8086CPU的指令系統(tǒng))編寫的程序如下:

PUSH BP 01010101

MOV BP,SP 1000101111101100

DEC SP 01001100

DEC SP 01001100

PUSH SI 01010110

PUSH DI 01010111

MOV DI,0005 101111110000010100000000

MOV SI,0003 101111110000001100000000

MOV AX,DI 1000101111000110

MOV AX,SI 0000001111000110

MOV [BP-02],AX 100010010100011011111110

POP DI 01011111

POP SI 01011110

MOV SP,BP 1000101111100101

POP BP 01011110

RET 11000011

3.第三代程序設(shè)計語言——高級語言

雖然匯編語言相對于機器語言有很大改進,但依然對機器依賴性大,用其開發(fā)的程序通用性差。因此,匯編語言也是低級語言。在保證程序正確的前提下,程序設(shè)計的主要目標是程序的可讀性、易維護性和可移植性。機器語言程序和匯編語言程序很難達到這樣的目標。隨著計算機技術(shù)的發(fā)展以及計算機應(yīng)用領(lǐng)域的不斷擴大,計算機用戶隊伍也不斷壯大。為了使廣大的計算機用戶也能勝任程序的開發(fā)工作,從20世紀50年代中期開始逐步發(fā)展了面向問題的程序設(shè)計語言,稱為高級語言,如Fortran、Basic、Pascal、Java、C和C++等,其中C和C++?是當今流行的高級語言。高級語言與具體的計算機硬件無關(guān),其表達方式接近于被描述的問題,易為人們接受和掌握。用高級語言編寫程序比用低級語言容易得多,并大大簡化了程序的編制和調(diào)試,使編程效率大大提高。高級語言的顯著特點是獨立于具體的計算機硬件,通用性和可移植性較好。用高級語言編寫的程序同自然英語語言非常接近,易于學(xué)習。同時,一條高級語言程序的語句相當于幾條機器語言的指令,用高級語言編寫程序也不需要熟悉計算機硬件。要計算表達式“5?+?3”的值,如果使用高級語言來編程就簡單得多。

用Basic語言編寫的程序如下:

10I=5

20J=3

30K=I+J

用C語言編寫的程序如下:

main()

{inti,j,k;

i=5;

j=3;

k=i+j;

}必須指出,用高級語言編寫的程序(稱為源程序)都要翻譯成機器語言程序(稱為目標程序)后才能被計算機執(zhí)行。

從程序設(shè)計語言的發(fā)展過程可以看出,程序設(shè)計語言越來越接近人們的自然語言。目前高級語言已經(jīng)形成了一個龐大的家族,包括結(jié)構(gòu)化程序設(shè)計語言、面向?qū)ο蟪绦蛟O(shè)計語言、可視化程序設(shè)計語言、網(wǎng)絡(luò)程序設(shè)計語言等。隨著計算機硬件性能的不斷提高,人們使用計算機解決問題的能力不斷提高,用高級語言編寫的計算機程序也越來越復(fù)雜,但同時也出現(xiàn)了一些問題。1968年,荷蘭數(shù)學(xué)家迪杰斯特拉發(fā)表了論文《GOTO語句的害處》,指出調(diào)試和修改程序的難度與程序中包含GOTO語句的數(shù)量成正比。從此,結(jié)構(gòu)化程序設(shè)計理念逐漸確立起來。結(jié)構(gòu)化程序設(shè)計思想包括:整個程序由若干模塊搭接而成,每個模塊采用順序、選擇和循環(huán)三種基本結(jié)構(gòu)作為程序設(shè)計的基本單元。這樣的程序有以下四個特征:只有一個入口;只有一個出口;無死語句;無死循環(huán)。

C語言是這種程序設(shè)計語言的典型代表。面向?qū)ο蟮某绦蛟O(shè)計最早是在20世紀70年代提出的,其出發(fā)點和基本原則是盡可能地模擬現(xiàn)實世界中人類的思維進程,使程序設(shè)計的方法和過程盡可能接近人類解決現(xiàn)實問題的方法和過程。隨著面向?qū)ο蟪绦蛟O(shè)計方法和工具的成熟,從20世紀90年代開始,面向?qū)ο蟪绦蛟O(shè)計逐漸成為最流行的程序設(shè)計技術(shù)。Java、C++、C#?等都是面向?qū)ο蟪绦蛟O(shè)計語言。

可視化程序設(shè)計是在面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ)上發(fā)展起來的??梢暬绦蛟O(shè)計語言把圖形用戶界面設(shè)計的復(fù)雜性封裝起來,編程人員只需用系統(tǒng)提供的工具在屏幕上畫出各種圖形對象,并設(shè)置這些圖像的屬性,就可以讓語言工具自動生成代碼,這大大提高了編程效率。VisualBasic、VisualC++?等都是可視化程序設(shè)計語言。網(wǎng)絡(luò)程序設(shè)計是在網(wǎng)絡(luò)環(huán)境下進行的程序設(shè)計,包括服務(wù)器端程序設(shè)計和客戶端程序設(shè)計。常用的服務(wù)器端程序設(shè)計語言有JSP、ASP和PHP,常用的客戶端程序設(shè)計語言有JavaScript和VBScript。

4.第四代程序設(shè)計語言——非過程式語言

20世紀80年代初,隨著數(shù)據(jù)庫技術(shù)和微型計算機的發(fā)展,出現(xiàn)了面向問題的非過程式程序設(shè)計語言。利用第四代語言工具開發(fā)軟件只需考慮“做什么”,而不必考慮“如何做”,不涉及太多的算法細節(jié),編程效率大大提高。迄今為止,使用最廣泛的第四代程序設(shè)計語言是數(shù)據(jù)庫查詢語言,如Oracle、Sybase等都包含有第四代語言成分。

5.第五代程序設(shè)計語言——智能型語言

第五代程序設(shè)計語言是智能型的計算機語言。這代程序設(shè)計語言力求擺脫傳統(tǒng)語言的狀態(tài)轉(zhuǎn)換語義模式,以適應(yīng)現(xiàn)代計算機系統(tǒng)知識化、智能化的發(fā)展趨勢,主要用于人工智能的研究。其代表語言是LISP語言和PROLOGE語言。LISP語言屬于函數(shù)型語言,以λ演算為基礎(chǔ)。PROLOGE語言屬于邏輯型語言,以形式邏輯和謂詞演算為基礎(chǔ)。

未來,第四代和第五代程序設(shè)計語言會有很大發(fā)展,但目前它們還很不成熟,還有很多問題。目前常用的程序設(shè)計語言仍然是第三代高級語言。同時,由于匯編語言運行效率較高,因此在實時控制、實時檢測等領(lǐng)域的應(yīng)用軟件中仍然較多地使用匯編語言程序。

1.2算法及其描述

(1)輸入:一個算法可以有零個(即算法可以沒有輸入)或多個輸入,這些輸入通常取自于某個特定的對象集合。

(2)輸出:一個算法有一個或多個輸出(即算法必須有輸出),通常輸出與輸入之間有某種特定的關(guān)系。

(3)有窮性:一個算法必須是在執(zhí)行有窮步之后結(jié)束(對任何合法的輸入),且每一步都在有窮時間內(nèi)完成。

(4)確定性:算法中每一條指令必須有確切的含義,不存在二義性,并且在任何條件下,對于相同的輸入只能得到相同的輸出。

(5)可行性:算法描述的操作可以通過已經(jīng)實現(xiàn)的基本操作執(zhí)行有限次來實現(xiàn)。1.2.2算法的表示

算法的表示可以有多種方法,常用的有自然語言、偽代碼、傳統(tǒng)流程圖、結(jié)構(gòu)化流程圖(NS流程圖)和PAD圖等。下面以求兩個自然數(shù)的最大公約數(shù)的問題為例,分別用幾種不同的方法描述算法。

我們采用歐幾里得算法求兩個自然數(shù)的最大公約數(shù),該算法的基本思想是:

設(shè)兩個自然數(shù)是m和n,且m≥n。歐幾里得算法的基本思想是將m和n輾轉(zhuǎn)相除直到余數(shù)為0。例如,m?=?36,n?=?16,m除以n的余數(shù)用r表示,計算過程如下:

被除數(shù)m除數(shù)n余數(shù)r

36

164

16

40

當余數(shù)r為0時,除數(shù)n就是m和n的最大公約數(shù)。

1.自然語言

用自然語言描述算法,其優(yōu)點是容易理解,缺點是算法冗長、繁瑣,容易出現(xiàn)二義性。歐幾里得算法的自然語言描述如下:

步驟1:將m除以n得到余數(shù)r;

步驟2:若r等于0,則n為最大公約數(shù),算法結(jié)束,否則執(zhí)行步驟3;

步驟3:將n的值放在m中,將r的值放在n中,重新執(zhí)行步驟1。

2.偽代碼

偽代碼是介于自然語言和程序設(shè)計語言之間的描述方法,它保留了程序設(shè)計語言的結(jié)構(gòu)、語句的形式和控制成分等,處理和條件部分允許使用自然語言來表達。至于算法中的自然語言的成分有多少,取決于算法的抽象級別。

歐幾里得算法的偽代碼描述如下:

step1:?r←m%n;

step2:當r?≠?0時,重復(fù)執(zhí)行下述操作;

step2.1:m←n;

step2.2:n←r;

step2.3:r←m%n;

step3:輸出n。

3.流程圖

人們在程序設(shè)計實踐的過程中,總結(jié)出了一套用圖形來描述問題的處理方法,從而使流程更直觀,更易被一般人所接受。用圖形描述處理流程的工具稱為流程圖。目前用得比較普遍的是傳統(tǒng)流程圖和結(jié)構(gòu)化流程圖(NS圖)。

(1)傳統(tǒng)流程圖。傳統(tǒng)流程圖是使用一些約定的幾何圖形來描述算法的組合圖,比如用矩形框表示某種操作,用箭頭表示算法的執(zhí)行方向。傳統(tǒng)流程圖的主要優(yōu)點是對控制流程的描述很直觀,便于初學(xué)者掌握。表1-1所示的圖例就是美國標準化協(xié)會(ANSI)規(guī)定的一些常用的流程圖符號,它們已被世界各國程序工作者普遍采用。圖1-1為歐幾里得算法的流程圖。圖1-1歐幾里得算法的流程圖

(2)結(jié)構(gòu)化流程圖(NS圖)。在結(jié)構(gòu)化程序設(shè)計中,經(jīng)常使用的工具是結(jié)構(gòu)化流程圖,即NS圖。

NS圖是一種不允許破壞結(jié)構(gòu)化原則的圖形算法描述工具,又稱盒圖。在NS圖中,去掉了傳統(tǒng)流程圖中容易引起麻煩的流程線,全部算法都寫在一個框內(nèi),每一種基本結(jié)構(gòu)也被表示為一個框。用基本結(jié)構(gòu)的順序組合可以表示任何復(fù)雜的算法結(jié)構(gòu)。

NS圖比文字描述直觀、形象,便于理解,比傳統(tǒng)流程圖緊湊易畫,尤其是它去除了流程線,結(jié)構(gòu)更清晰。圖1-2是歐幾里得算法的NS圖。圖1-2歐幾里得算法的NS圖 1.3C語言概述

1.3.1C語言的發(fā)展

C語言是目前國際上廣泛流行的一種基礎(chǔ)的結(jié)構(gòu)化程序設(shè)計語言,它不僅是很好的開發(fā)系統(tǒng)軟件的工具,而且也是很好的開發(fā)應(yīng)用軟件的程序設(shè)計語言。因此,它深受廣大程序設(shè)計者的歡迎。

C語言是在20世紀70年代初由美國貝爾實驗室設(shè)計的,并首先在安裝UNIX操作系統(tǒng)的DECPDP-11計算機上實現(xiàn)。1973年,K.Thompson和DennisM.Ritchie把UNIX90%以上的內(nèi)容用C語言進行了改寫,即大家熟知的UNIX第五版。因此,當初的C語言是為開發(fā)UNIX操作系統(tǒng)而研制的,它隨著UNIX而聞名于世。隨著微型計算機的普及,出現(xiàn)了較多的C語言系統(tǒng),其中多數(shù)系統(tǒng)接受的源程序都能高度兼容,但是因為沒有統(tǒng)一的標準,再怎么兼容,也存在一定的差異。

隨著C語言被廣泛應(yīng)用,新的C語言版本不斷推出,其性能也越來越強。到了1975年,隨著UNIX第六版的推出和面向?qū)ο蟪绦蛟O(shè)計技術(shù)的出現(xiàn),C語言的突出優(yōu)點引起了人們的普遍關(guān)注。為了克服多個C語言系統(tǒng)沒有統(tǒng)一標準的不利局面,ANSI(美國國家標準協(xié)會)于1983年成立了專門定義C語言標準的委員會,花了6年時間使C語言邁向了標準化。ANSIC標準于1989年被采用,該標準一般稱為ANSI/ISOStandardC,簡稱為C89。其中詳細說明了使用C語言書寫程序的形式,規(guī)范了對這些程序的解釋。其主要內(nèi)容包括:

(1)?C語言程序的表示法;

(2)?C語言的語法和約束;

(3)解釋C語言程序的語義規(guī)則;

(4)?C語言程序輸入和輸出的表示;

(5)一份標準的實現(xiàn)的限定和約束。

1995年,出現(xiàn)了C的修訂版,其中增加了一些庫函數(shù),出現(xiàn)了初步的C++,在此基礎(chǔ)上,C89成為C++?的子集。此后,C語言不斷發(fā)展,在1999年又推出了C99。C99在基本保留C語言的特性的基礎(chǔ)上增加了一系列新的特性,隨后又幾經(jīng)修改和完善,從面向過程的編程語言發(fā)展到面向?qū)ο蟮某绦蛟O(shè)計語言。1.3.2C語言的特點

C語言之所以能被推廣并被廣泛使用,概括地說主要因其具有如下特點:

(1)?C語言是一種表達能力非常強的程序設(shè)計語言。它既有高級語言面向用戶、容易記憶、便于閱讀和書寫的優(yōu)點,又有面向硬件和系統(tǒng)、像匯編語言那樣可以直接訪問內(nèi)存物理地址,允許對位、字節(jié)和地址這些計算機功能中的基本成分進行操作的功能。C語言集低級語言和高級語言的開發(fā)于一體,因此常被稱為中級語言。

(2)?C語言代碼緊湊、高效,使用方便、靈活。其程序的目標碼執(zhí)行效率僅比匯編語言低10%~20%。C語言僅有32個關(guān)鍵字和9種控制語句,語言規(guī)則也不復(fù)雜,核心小巧,所以學(xué)習C語言相對簡單。

(3)?C語言數(shù)據(jù)類型豐富,具有現(xiàn)代程序設(shè)計語言的各種數(shù)據(jù)類型。C語言的數(shù)據(jù)類型主要有整型、實型、字符型、指針類型、數(shù)組類型、結(jié)構(gòu)類型等。用它們可以實現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹、圖、棧等)。因此,C語言具有較強的數(shù)據(jù)處理能力。

(4)?C語言運算符豐富。C語言的運算符共有34種,括號、賦值、強制類型轉(zhuǎn)換等都被作為運算符處理,從而使C語言的運算類型極其豐富,表達式類型多樣化,可以靈活實現(xiàn)其他高級語言難以實現(xiàn)的運算。

(5)?C語言是一種結(jié)構(gòu)化程序設(shè)計語言。它具有諸如if-else、for、do-while、while、switch等結(jié)構(gòu)化語句,便于采用自頂向下、逐步求精的結(jié)構(gòu)化程序設(shè)計技術(shù)。

(6)?C語言是便于模塊化軟件設(shè)計的程序語言。C語言程序可以分割成幾個源文件分別進行編譯。C語言的函數(shù)結(jié)構(gòu)利于功能模塊的分解,并且為程序模塊間的相互調(diào)用以及數(shù)據(jù)傳遞提供了便利。這一特點也為大型軟件模塊化、由多人同時進行集體開發(fā)的軟件工程技術(shù)方法提供了強有力的支持。

(7)?C語言具有很好的可移植性。大部分代碼不用改動就可以從一種機器移植到另一種機器上運行。

(8)?C語言是C++?的基礎(chǔ),而C++?是目前最流行的面向?qū)ο蟮某绦蛟O(shè)計語言。從以上特點不難看出,用C語言編寫出的程序,既可達到匯編級的效率,又有良好的程序結(jié)構(gòu)。因此,C語言不僅在各類程序設(shè)計中得到廣泛運用,而且對于初學(xué)者來說,易學(xué)易用。

同時,C語言也存在一些不足。C語言類型轉(zhuǎn)換比較隨便,對數(shù)值越界及變量類型的一致性不作語法上的嚴格檢查,這雖然給編程提供了較大的靈活性,但是也限制了編譯程序查錯的能力。因此,不能過分依賴C編譯程序而要強調(diào)由程序員自己去保證程序的正確性。

1.4C程序的基本結(jié)構(gòu)

1.4.1簡單的C語言程序例子

為了使讀者對C語言程序有個初步印象,下面介紹幾個例子,以便讀者了解C程序的基本結(jié)構(gòu)和組成。

【例1.1】編寫顯示字符串“ThisismyfirstCprogram”的C語言程序。

程序如下:

#include<stdio.h>

main()

{

printf(“ThisismyfirstCprogram\n”);

}

這是一個最簡單的C程序,它把字符串“ThisismyfirstCprogram”顯示在屏幕上。該程序由一個函數(shù)main(叫主函數(shù))構(gòu)成。任何一個程序都必須有此函數(shù)。花括號所括的內(nèi)容是main的函數(shù)體。每個C語言程序的函數(shù)都至少有一對{}。

“printf(?)”是C提供的標準庫函數(shù),它完成輸出功能。C語言的輸出不像有的高級語言那樣由語句完成,而是由函數(shù)來完成的,這是它的特點之一。為了順利調(diào)用函數(shù)庫中的函數(shù)printf,還需要嵌入stdio.h這個頭文件。C的系統(tǒng)中預(yù)定義了很多不同的頭文件,供用戶調(diào)用,以滿足基本要求。頭文件中定義了許多函數(shù)原型。在頭文件stdio.h中就定義了函數(shù)printf的原型,因此,這里要調(diào)用系統(tǒng)預(yù)定義函數(shù)printf,就必須在程序的最前面增加#include<stdio.h>?這個預(yù)處理命令;否則,printf函數(shù)將無法工作。printf()后的分號是語句結(jié)束符。C語言的每一個語句都以分號終止?!纠?.2】編寫程序,計算三個實型數(shù)的平均值。

程序如下:

#include<stdio.h> /*嵌入頭文件*/

main() /*主函數(shù)入口*/

{

floata,b,c,aver; /*定義變量的數(shù)據(jù)類型為實型*/

printf(“請輸入三個實型數(shù)\n:”); /*輸出語句,作為提示*/

scanf(“%f,%f,%f”,&a,&b,&c);/*從鍵盤輸入a、b、c三個實型數(shù)*/

aver=(a+b+c)/3; /*求平均值*/

print("\naverage=%f\n",aver); /*輸出計算結(jié)果*/

}運行該程序時,首先提示用戶輸入三個實型數(shù)a、b和c,然后用戶輸入三個數(shù),例如1、2、3,計算機根據(jù)用戶輸入的三個數(shù)求出其平均值,然后把結(jié)果以如下形式顯示在屏幕上:

average=2.0000

在此程序中,“/**/”是注釋標識符,其間的內(nèi)容是注釋內(nèi)容,它在程序的編譯過程中不產(chǎn)生任何執(zhí)行代碼,只是在編程中起到備忘錄的作用?!癴loata,b,c,aver”是數(shù)據(jù)類型說明語句,它把a、b、c和aver定義為實型變量。值得注意的是,所有C語言程序中的變量,在使用之前都必須先定義其數(shù)據(jù)類型?!皊canf(?);”是輸入語句,它是格式化的輸入函數(shù),是一個由系統(tǒng)提供的標準庫函數(shù),其原型也是在stdio.h這個頭文件中定義的。scanf函數(shù)的圓括弧內(nèi)為參數(shù)表,“%f,%f,%f”為格式串,%f表示實型數(shù)格式,指明賦給變量a、b和c的值的數(shù)據(jù)類型是實型。執(zhí)行該語句時,數(shù)據(jù)從鍵盤上輸入。

“aver=(a+b+c)/3;”是一個計算表達式,表示把表達式右邊的運算結(jié)果賦給aver?!皃rintf("\naverage=%f\n",aver);”為輸出語句,它首先在新的一行上輸出字符串“average=”,然后按實型數(shù)格式(%f)輸出變量aver的值,并使光標移至下一行?!纠?.3】編寫程序,求兩個整型數(shù)中較大的那個數(shù)的值。

程序如下:

main() /*主函數(shù)*/

{

inta,b,c; /*定義變量*/

scanf("%d,%d",&a,&b);/*輸入變量a和b的值*/

c=max(a,b); /*調(diào)用max函數(shù),將值賦給c*/

printf("max=%d",c);

}

intmax(intx,inty) /*定義max函數(shù),對形式參數(shù)x,y

作類型說明*/

{

if(x>y)

return(x); /*如果x?>?y,則返回x的值*/

else

return(y); /*否則返回y的值*/

}此程序由兩個函數(shù)組成,除了主函數(shù)main之外,還有計算最大值的函數(shù)max。“intmax(intx,inty)”說明函數(shù)的返回值類型為int(整型),函數(shù)的參數(shù)為整型數(shù)x、y,“return(y)”將求解結(jié)果返回給主函數(shù)。

該程序的執(zhí)行是從main函數(shù)開始的(C語言中程序的運行都是從main函數(shù)開始的),當主函數(shù)執(zhí)行到“c=max(a,b);”語句時,控制被傳遞給max函數(shù),當執(zhí)行“return(y);”語句時,控制又被傳遞給main函數(shù),并把max函數(shù)的計算結(jié)果帶給main函數(shù)的c變量。當主函數(shù)執(zhí)行結(jié)束時,整個程序的執(zhí)行也就結(jié)束了。1.4.2C語言的基本結(jié)構(gòu)

從上述幾個簡單例子可以看出,C程序是由函數(shù)構(gòu)成的。一個C程序至少包含一個主函數(shù)(main函數(shù)),還可以包含若干個其他函數(shù)。C語言程序的基本結(jié)構(gòu)如圖1-3所示。其特點如下:

(1)除主函數(shù)必須命名為main外,程序中的其他函數(shù)由用戶自行命名。

(2)各函數(shù)在程序中排列的位置并不十分重要,main函數(shù)也可以放在其他函數(shù)后面,但程序總是從main函數(shù)開始執(zhí)行。

(3)在各函數(shù)之外,可以出現(xiàn)預(yù)處理命令和全局數(shù)據(jù)描述。

(4)?C程序書寫格式自由,一行內(nèi)可以寫多個語句,一個語句可以分寫在多行上。當然,清晰易讀的書寫格式是值得提倡的。

(5)每個語句和數(shù)據(jù)定義的最后必須有一個分號,但是預(yù)處理命令和復(fù)合語句的花括號之后不能有分號。圖1-3C語言程序基本結(jié)構(gòu)

1.5C語言程序的運行步驟

當完成C語言程序的代碼編寫之后,就可以在機器上運行它了。C語言是一種程序設(shè)計語言,它很容易被人們看懂和接受;但是,計算機不能直接接受這種語言,而只能接受機器語言。為此必須首先把C語言程序翻譯成相應(yīng)的機器語言程序,這個工作叫編譯。

編寫好的C語言程序叫C源程序。從只有C源程序,到在計算機上得到運行結(jié)果,其操作過程如圖1-4所示。圖1-4C語言程序執(zhí)行過程

1.源文件的編輯

為了編譯C源程序,首先要用系統(tǒng)提供的編輯器建立一個C語言程序的源文件。一個C源文件是一個編譯單位,它是以文本格式保存的。源文件名可自定,文件的擴展名(或后綴名)為?.c或?.cpp,例如a1.c、a1.cpp。

一個比較大的C語言程序往往可劃分為若干模塊,每個模塊由不同的開發(fā)者或開發(fā)小組負責編寫。對每個模塊可建立一個源文件。因此,一個大的C程序可包含多個源文件,這些源文件都可以獨立進行編譯。

2.編譯

源文件建立好后,經(jīng)檢查無誤后就可進行編譯。編譯是由系統(tǒng)提供的編譯器完成的。編譯命令隨系統(tǒng)的不同而異,對于不同的編譯環(huán)境來說,一般通過編譯軟件界面的Compile菜單中的Compile命令進行編譯,具體操作可參考相應(yīng)的系統(tǒng)手冊。編譯器在編譯時對源文件進行語法和語義檢查,并給出所發(fā)現(xiàn)的錯誤。用戶可根據(jù)錯誤的情況,使用編輯器對源程序進行修改,然后對修改后的源文件再度編譯。

3.連接

若在上述步驟中,用戶選擇Compile命令進行編譯,則編譯所生成的目標文件(*.obj)是相對獨立的模塊,還不能直接執(zhí)行,用戶還必須用連接程序把它和其他目標文件以及系統(tǒng)所提供的庫函數(shù)進行連接裝配,生成可執(zhí)行文件后才能執(zhí)行??蓤?zhí)行文件的名字可自由指定,默認的執(zhí)行文件的名字與源文件的名字一致,可執(zhí)行文件的擴展名為?.exe。

4.執(zhí)行

執(zhí)行文件生成后,就可執(zhí)行它了。若執(zhí)行的結(jié)果達到預(yù)想的結(jié)果,則說明程序編寫正確。否則,就需進一步檢查修改源程序,重復(fù)上述步驟,直至得到正確的運行結(jié)果為止。

1.6學(xué)習程序設(shè)計應(yīng)注意的幾個問題

1.學(xué)習過程中應(yīng)注意的問題

初學(xué)C語言時,可能會遇到有些問題理解不透,或者不習慣其表達方式(如運算符等),此時應(yīng)多問多想,鼓足勇氣繼續(xù)學(xué)習,待學(xué)完后面的章節(jié)知識,前面的問題也就迎刃而解了。學(xué)習C語言要經(jīng)過幾個反復(fù),才能融會貫通,真正掌握所學(xué)知識。

(1)學(xué)好C語言的運算符和表達式。C語言的運算符非常靈活多樣,功能十分豐富,表達式較其他程序設(shè)計語言更簡潔,但初學(xué)者往往會覺得表達式難讀,主要原因就是對運算符和運算順序理解不透、不全。當多種運算符組成一個運算表達式時,對運算的優(yōu)先順序和結(jié)合規(guī)則的把握顯得十分重要。在學(xué)習中對有些運算符在理解后要牢記心中,以便將來用起來得心應(yīng)手,而有些可暫時放棄不記,等用到時再記不遲。

(2)學(xué)好C語言的三種基本結(jié)構(gòu),理解模塊化程序設(shè)計的基本思想。

順序結(jié)構(gòu)程序設(shè)計是最簡單的,只要按照解決問題的順序?qū)懗鱿鄳?yīng)的語句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。

對于要先做判斷再選擇的問題就要使用選擇結(jié)構(gòu)。選擇結(jié)構(gòu)是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴格按照語句出現(xiàn)的物理順序來執(zhí)行的。選擇結(jié)構(gòu)程序設(shè)計方法的關(guān)鍵在于構(gòu)造合適的選擇條件和分析程序流程,根據(jù)不同的程序流程選擇適當?shù)倪x擇語句。

循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書寫的工作量,用來描述重復(fù)執(zhí)行某段算法的問題,這是程序設(shè)計中最能發(fā)揮計算機特長的程序結(jié)構(gòu)。三種結(jié)構(gòu)并不彼此孤立,在循環(huán)結(jié)構(gòu)中可以有選擇、順序結(jié)構(gòu),在選擇結(jié)構(gòu)中也可以有循環(huán)、順序結(jié)構(gòu),其實不管哪種結(jié)構(gòu),均可廣義地把它們看成一條語句。

實際編程過程中常將這三種結(jié)構(gòu)相互結(jié)合以實現(xiàn)各種算法,設(shè)計出相應(yīng)程序,但是如果編程的問題較大,編寫出的程序往往很長,

溫馨提示

  • 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

提交評論