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

下載本文檔

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

文檔簡介

全套可編輯PPT課件全套可編輯PPT課件1.1程序設(shè)計語言的發(fā)展計算機程序是一組計算機能識別和執(zhí)行的指令,運行于電子計算機上,滿足人們某種需求的信息化工具。人與計算機之間的信息交流也需要一種語言,這就是計算機語言。從計算機誕生至今,計算機語言的發(fā)展總體分三個階段。1.機器語言2.匯編語言3.高級語言1.2

C語言的發(fā)展和特點C語言的很多概念來源于Martin

Richards開發(fā)的BCPL語言。BCPL對C語言的影響間接地來自B語言。1972年,美國貝爾實驗室的DennisRitchie在B語言基礎(chǔ)上為UNIX操作系統(tǒng)設(shè)計了C語言,并用C語言重寫了UNIX操作系統(tǒng),推出了UNIXV5。以UNIXV7中的C語言編譯程序為基礎(chǔ),1978年BrainW.Kernighan和DennisRitchie合著出版了《TheCProgrammingLanguage》,這本書中介紹的C語言就是第一個C語言標準。1983年,美國國家標準協(xié)會(ANSI)成立了一個委員會以制定一個現(xiàn)代的、全面的C語言定義,于1988年完成的ANSI標準,即ANSIC。1990年,國際標準化組織(InternationalStandardOrganization,ISO)又對C語言標準進行了修訂,在基本保留原來C語言特征的基礎(chǔ)上,針對應用的需要,增加了一些新功能,ISO官方給予的名稱為:ISO/IEC9899,所以ISO/IEC9899:1990也通常被簡稱為“C90”。1999年,在做了一些必要的修正和完善后,ISO發(fā)布了新的C語言標準,命名為ISO/IEC9899:1999,簡稱“C99”。在2011年12月8日,ISO又正式發(fā)布了新的標準,稱為ISO/IEC9899:2011,簡稱為“C11”。1.2.1

C語言的發(fā)展1.2

C語言的發(fā)展和特點C++是BjarneStroustrup于20世紀80年代在貝爾實驗室開發(fā)的一門語言,用他自己的話來說:C++主要是為了我的朋友和我不必再使用匯編語言、C語言或其他現(xiàn)代高級語言來編程而設(shè)計的。它的主要特點是可以更方便地編寫程序,讓每個程序員更加快樂。C++語言是在C語言的基礎(chǔ)上添加了對面向?qū)ο缶幊毯头盒途幊痰闹С帧++繼承了C語言的高效、簡潔、快速和可移植性。C++面向?qū)ο蟮奶匦詭砹巳碌木幊谭椒ā?.2

C語言的發(fā)展和特點C語言是一種結(jié)構(gòu)化語言,它有著清晰的層次,可按照模塊的方式對程序進行編寫,十分有利于程序的調(diào)試,且C語言的處理和表現(xiàn)能力都非常強大,依靠非常全面的運算符和多樣的數(shù)據(jù)類型,可以輕易完成各種數(shù)據(jù)結(jié)構(gòu)的構(gòu)建,通過指針類型更可對內(nèi)存直接尋址以及對硬件進行直接操作,因此既能夠用于開發(fā)系統(tǒng)程序,也可用于開發(fā)應用軟件。1.2.2

C語言的特點具有結(jié)構(gòu)化的控制語句簡潔的語言豐富的運算符豐富的數(shù)據(jù)類型代碼具有較好的可移植性可對物理地址進行直接操作可生成高質(zhì)量、高效率的程序1.3

C程序基本結(jié)構(gòu)在開始學習C語言編程之前,應該了解一下C源程序的基本結(jié)構(gòu),下面是一個簡單的C語言程序?!纠?-1】輸出“Hello,world”。#include<stdio.h>intmain(){printf("Hello,world\n");//輸出一個字符串

return0;}1.3

C程序基本結(jié)構(gòu)一個簡單的C程序的基本格式有以下幾點規(guī)定:(1)C程序是無格式的純文本文件,可以用任何文本編輯器(例如,記事本、寫字板)來編寫C程序。(2)C程序(源代碼)保存為文件時,建議使用默認擴展名.c(也可以保存為.cpp文件,因為C是C++的子集,絕大部分編譯器同時支持C和C++)。文件名最好有一定提示作用,能使人聯(lián)想到程序內(nèi)容或功能。(3)每個C程序都由一個或多個函數(shù)組成,函數(shù)則是具有特定功能的程序模塊。對于一個應用程序來講,還必須有一個main()函數(shù),且只能有一個main()函數(shù)。該函數(shù)標志著執(zhí)行應用程序時的起始點。其中,關(guān)鍵字int表示main()函數(shù)類型為int(整數(shù))類型。在執(zhí)行主函數(shù)后會得到一個值(函數(shù)值),其值為整型。程序第5行的“return0;”的作用就是當main()函數(shù)執(zhí)行結(jié)束前將整數(shù)0作為函數(shù)值返回到調(diào)用函數(shù)處。1.3

C程序基本結(jié)構(gòu)(4)函數(shù)中可以有多條語句。本例的main()函數(shù)中,有兩條語句:printf("Hello,world\n");該語句用來在屏幕上輸出“Hello,world”字符串。\n是換行符,即在輸出“Hello,world”后,顯示終端上的光標位置移動到下一行的開頭。return0;是返回語句,將函數(shù)值返回到調(diào)用函數(shù)處。在使用函數(shù)庫中的輸入輸出函數(shù)時,編譯系統(tǒng)要求程序提供有關(guān)此函數(shù)的信息,程序中第一行“#include<stdio.h>”的作用就是用來提供這些信息的。stdio.h是系統(tǒng)提供的一個標準輸入輸出函數(shù)頭文件,用#include指令把這些信息調(diào)入使用。(5)C程序中的每條語句都要以分號“;”結(jié)束。(6)為了增加程序的可讀性,程序可以加入一些注釋行,例如,用“//”開頭的為單行注釋。1.3

C程序基本結(jié)構(gòu)以/*開始,以*/結(jié)束的為塊注釋,該注釋可以包含多行內(nèi)容,也可以單獨占一行。多行注釋如:/*----------------------------HelloWorld.c------------------------------*/(7)在C程序中,字母的大小寫是有區(qū)分意義的,因此main、Main、MAIN都是不同的名稱。作為程序的入口只能是main()函數(shù)。(8)C程序書寫格式比較自由,一行內(nèi)可以寫多條語句,一個語句可以分寫在多行上,但為了程序的可讀性,建議每行只寫一條語句。1.4程序設(shè)計基本過程用C語言編寫程序,到最后得到結(jié)果,具體的步驟取決于計算機環(huán)境和使用的C編譯器,但大體需要經(jīng)過4個過程,即編寫源程序、編譯源代碼、將目標代碼與其他代碼鏈接起來和運行。其過程如圖所示。1.4.1

C程序的編寫過程C程序運行過程1.4程序設(shè)計基本過程1.編寫源程序編寫源程序代碼可以采用任何文本編輯器,如記事本。但用記事本書寫程序效率較低,一般借助集成開發(fā)工具(IDE)編寫程序代碼。程序編寫完成后,將代碼文件保存為源程序文件(擴展名為.c文件)。2.編譯源代碼計算機不能直接理解任何除機器代碼以外的語言,所以必須把編寫好的程序翻譯成機器語言,計算機才能執(zhí)行程序。將其他語言翻譯成機器語言的工具被稱為編譯器。編譯器翻譯的方式有兩種:編譯和解釋。編譯型語言:程序在執(zhí)行之前需要一個專門的編譯過程,把程序編譯成機器語言的文件,運行時不需要重新翻譯,直接使用編譯的結(jié)果就行了。程序執(zhí)行效率高,依賴編譯器,跨平臺性較差,如C、C++等。解釋型語言:程序不需要在運行前編譯,在運行程序時才翻譯,專門的解釋器負責在每個語句執(zhí)行時解釋程序代碼。這樣解釋型語言每執(zhí)行一次就要翻譯一次,效率比較低,如JAVA、Python等。1.4程序設(shè)計基本過程3.將目標代碼與其他代碼鏈接起來鏈接是指將目標代碼同使用的函數(shù)的目標代碼(如C程序通用庫)以及一些標準的啟動代碼組合起來,生成程序運行階段版本。包含該產(chǎn)品的文件被稱為可執(zhí)行代碼。編譯源代碼將目標代碼與其他代碼鏈接起來可以通過編譯命令一次完成。4.運行程序編譯通過后,可以運行程序,得到程序的運行結(jié)果。通過程序的運行結(jié)果是否正確可以初步判定程序是否正確。如果運行的結(jié)果不正確,則可能是程序的邏輯或算法上有錯誤;還有一些程序運行的結(jié)果可能在某些數(shù)據(jù)上輸出結(jié)果是正確的,在其他數(shù)據(jù)上是錯誤的,這些都需要進一步排查程序的問題并進行改正。1.4程序設(shè)計基本過程1.分析問題對于接收的任務要進行認真分析,研究所給定的條件,分析最后應達到的目標,找出解決問題的規(guī)律,選擇解題的方法,完成實際問題。2.設(shè)計算法設(shè)計算法即設(shè)計出解題的方法和具體步驟。3.編寫程序?qū)⑺惴ㄓ贸绦蛟O(shè)計語言實現(xiàn),對源程序進行編輯、編譯和鏈接(如果是解釋型語言,則直接由解釋器解釋,無須編譯和鏈接),得到可執(zhí)行程序。4.運行程序并分析結(jié)果運行可執(zhí)行程序,得到運行結(jié)果。能得到運行結(jié)果并不意味著程序正確,要對結(jié)果進行分析,看它是否合理。不合理要對程序進行調(diào)試,即通過上機發(fā)現(xiàn)和排除程序中的故障。1.4.2程序設(shè)計過程1.4程序設(shè)計基本過程5.編寫程序文檔許多程序是提供給別人使用的,如同正式的產(chǎn)品應當提供產(chǎn)品說明書一樣,正式提供給用戶使用的程序,必須向用戶提供程序說明書。內(nèi)容應包括:程序名稱、程序功能、運行環(huán)境、程序的裝入和啟動、需要輸入的數(shù)據(jù),以及使用注意事項等。1.5算法的流程描述算法(Algorithm)是指解題方案的準確且完整的描述,是一系列解決問題的清晰指令,算法代表著用系統(tǒng)的方法描述解決問題的策略機制。也就是說,能夠?qū)σ欢ㄒ?guī)范的輸入在有限時間內(nèi)獲得所要求的輸出。一個算法應該具有以下五個重要的特征。有窮性1.確切性2輸入項3輸出項4可行性51.5算法的流程描述自然語言就是人們?nèi)粘J褂玫恼Z言,可以是漢語、英語或其他語言。用自然語言表示算法通俗易懂,但容易出現(xiàn)歧義。當算法中的操作步驟都是順序執(zhí)行時比較直觀、容易理解。缺點是如果算法中包含了判斷結(jié)構(gòu)和循環(huán)結(jié)構(gòu),并且操作步驟較多時,就顯得不那么直觀清晰了。1.5.1自然語言【例1-2】求1+2+3+……+10的和。分析:在本例中,我們常用的計算方法就是采用累加的方式進行計算,即先計算兩個數(shù)相加的結(jié)果,然后再用此結(jié)果加第三個數(shù),依此類推。下面用自然語言進行描述:設(shè)兩個變量sum和i,sum記錄求和結(jié)果,i代表加數(shù)。下面的S1,S2,……代表步驟1,步驟2,……S1:賦初值sum=0S2:賦初值i=11.5算法的流程描述S3:求sum+i的值,然后把結(jié)果存入sum,即sum+i->sumS4:使i的值增加1,即i+1->iS5:如果i的值不超過10,返回S3,繼續(xù)執(zhí)行S4和S5;否則,算法結(jié)束。最后得到的sum值即所求結(jié)果。類似這樣描述算法的過程即自然語言。1.5算法的流程描述【例1-3】判定一個年份是否為閏年。分析:判斷一個年份是否為閏年的條件:①年份能被4整除,但不能被100整除的是閏年,即非整百年數(shù)除以4,無余數(shù)為閏年,有余數(shù)不是閏年;②年份能被400整除是閏年,即整百年數(shù)除以400,無余數(shù)為閏年,有余數(shù)不是閏年。設(shè)y為要判定的年份,用自然語言進行算法描述如下:S1:輸入年份yS2:若y不能被4整除,輸出y“不是閏年”,算法結(jié)束S3:若y能被4整除,但不能被100整除,輸出y“是閏年”,算法結(jié)束S4:若y能被400整除,輸出y“是閏年”,算法結(jié)束S5:輸出y“不是閏年”,算法結(jié)束除了一些比較簡單的問題采用自然語言描述1.5算法的流程描述流程圖(FlowChart),是指用規(guī)定的圖形符號來描述算法。用圖形表示算法,直觀形象,易于理解。常用的流程圖符號見表1-1。1.5.2流程圖1.5算法的流程描述1.順序結(jié)構(gòu)順序結(jié)構(gòu)是基本、常見的結(jié)構(gòu)。在這種結(jié)構(gòu)中,各操作塊按它們出現(xiàn)的先后順序逐個執(zhí)行,如圖1-2所示。在執(zhí)行A框中的操作后,接著執(zhí)行B框中的操作。注:一個操作塊可以是一個操作、一組操作或一個基本結(jié)構(gòu)等。圖1-2順序結(jié)構(gòu)1.5算法的流程描述2.選擇結(jié)構(gòu)在算法中,常要根據(jù)某個給定的條件P是否成立來決定執(zhí)行幾個操作塊中的哪一個操作,具有這種性質(zhì)的結(jié)構(gòu)稱為選擇結(jié)構(gòu)。選擇結(jié)構(gòu)又分為雙分支結(jié)構(gòu)和單分支結(jié)構(gòu)。雙分支結(jié)構(gòu)在條件P成立時執(zhí)行A操作,條件P不成立時執(zhí)行B操作,如圖1-3(a)所示。單分支結(jié)構(gòu)在條件P成立時,執(zhí)行A操作,條件P不成立時不執(zhí)行任何操作,如圖1-3(b)所示。圖1-3選擇結(jié)構(gòu)1.5算法的流程描述3.循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu):程序中經(jīng)常要在某處反復執(zhí)行一連串操作,這種情況應采用循環(huán)結(jié)構(gòu),需要反復執(zhí)行的操作塊稱為循環(huán)體。按照是否進行循環(huán)的條件,可將循環(huán)結(jié)構(gòu)分為當型循環(huán)結(jié)構(gòu)和直到型循環(huán)結(jié)構(gòu)兩類。當型循環(huán)結(jié)構(gòu):當給定條件P成立時,反復執(zhí)行循環(huán)體(A框);當給定條件P不成立時,終止執(zhí)行。若剛開始時條件P就不成立,則循環(huán)體一次也不執(zhí)行。如圖1-4(a)所示。圖1-4循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu):反復執(zhí)行循環(huán)體(A框),一直執(zhí)行到給定條件P成立時,終止執(zhí)行。無論條件P是否成立,都至少執(zhí)行一次循環(huán)體。如圖1-4(b)所示。一個問題如果可以用當型循環(huán)來解決,一般也可以用直到型循環(huán)來解決,即這兩種循環(huán)可以互相轉(zhuǎn)換。1.5算法的流程描述圖1-5求和算法流程三種基本結(jié)構(gòu)有以下共同特點:(1)只有一個入口。(2)只有一個出口。請注意:一個菱形判斷框有兩個出口,而一個選擇結(jié)構(gòu)只有一個出口,不要將菱形框的出口和選擇結(jié)構(gòu)的出口混淆。(3)結(jié)構(gòu)內(nèi)的每部分都有機會被執(zhí)行到。(4)結(jié)構(gòu)內(nèi)不存在“死循環(huán)”(無終止的循環(huán))。下面將例1-2的算法描述改用流程圖表示【例1-4】用流程圖描述求1+2+3+……+10的和。按照流程圖的規(guī)定,連續(xù)求和要用到循環(huán)結(jié)構(gòu),此處選用當型循環(huán)結(jié)構(gòu),算法流程如圖1-5所示。1.5算法的流程描述圖1-6判斷閏年的算法流程【例1-5】用流程圖描述判定一個年份是否為閏年。判斷一個年份是否為閏年的條件:①非整百年數(shù)除以4,無余數(shù)為閏年,有余數(shù)不是閏年;②整百年數(shù)除以400,無余數(shù)為閏年,有余數(shù)不是閏年。算法流程如圖1-6所示。1.5算法的流程描述靈活的流程圖在程序設(shè)計中有它自己的優(yōu)點,但也隱藏著許多導致錯誤的因素。因為它允許用流程線使流程任意轉(zhuǎn)移,這對程序設(shè)計是一個隱患,它使程序流程看起來較亂,使程序難以理解和維護。針對這一弊端,1973年美國學者I.Nassi和B.Shneiderman提出了一種無流程線的流程圖,稱為N-S圖。它的基本表示方法是用一個矩形框,把整個程序算法像堆積木一樣組合起來。其基本結(jié)構(gòu)如圖1-7所示。1.5.3

N-S流程圖圖1-7N-S流程圖1.5算法的流程描述(1)順序結(jié)構(gòu),由若干個前后銜接的矩形框組成,如圖1-7(a)所示,先執(zhí)行A,然后執(zhí)行B。(2)選擇結(jié)構(gòu),如圖1-7(b)所示,當條件成立時執(zhí)行A分支,條件不成立時執(zhí)行B分支。(3)循環(huán)結(jié)構(gòu),包含當型循環(huán)(圖1-7(c))和直到型循環(huán)(圖1-7(d))兩種結(jié)構(gòu)。當型循環(huán)結(jié)構(gòu)先判斷條件,當條件成立時反復執(zhí)行A操作(循環(huán)體),直到條件不成立時結(jié)束循環(huán)。直到型循環(huán)結(jié)構(gòu)先執(zhí)行A操作(循環(huán)體),然后判斷條件是否成立,如果不成立則返回繼續(xù)執(zhí)行A操作,當條件成立后,結(jié)束循環(huán)。圖1-7中的A和B可以是一個簡單的操作,也可以是三種基本結(jié)構(gòu)之一。1.5算法的流程描述【例1-6】用N-S流程圖表示例1-4。用N-S流程圖描述求和算法如圖1-8所示。圖1-8用N-S流程圖描述求和算法1.5算法的流程描述【例1-7】用N-S流程圖表示例1-5。用N-S流程圖描述判斷閏年算法如圖1-9所示。流程圖中用到3個選擇結(jié)構(gòu)。圖1-9用N-S流程圖描述判斷閏年算法1.5算法的流程描述偽代碼是用介于自然語言和計算機語言之間的一種文字和符號來描述算法,不涉及圖形,書寫方便,格式緊湊,修改方便,容易看懂。用偽代碼書寫算法無固定的、嚴格的語法規(guī)則,可以用英文、中文或中英文混用。【例1-8】用偽代碼描述求1+2+3+……+10的和。1.5.4偽代碼sum=0i=1while(i≤10){sum=sum+ii=i+1}輸出sum1.6結(jié)構(gòu)化程序設(shè)計方法結(jié)構(gòu)化程序設(shè)計(Structured

Programming)是一種軟件開發(fā)方法,旨在提高程序的可讀性和可維護性。它的核心思想是使用少數(shù)幾種定義清晰的控制結(jié)構(gòu)來構(gòu)造程序,避免使用復雜、難以理解的程序結(jié)構(gòu)。1.自頂向下在軟件系統(tǒng)設(shè)計時,應先考慮總體,搭建起系統(tǒng)架構(gòu),后考慮細節(jié),先考慮全局目標,后考慮局部目標。一開始不要過多追求細節(jié),先從最上層總目標開始設(shè)計,逐步使問題具體化。2.逐步細化對復雜問題,應設(shè)計一些子目標作為過渡,逐步細化。逐步細化和自頂向下常常結(jié)合使用,把逐步細化看作自頂向下設(shè)計的具體體現(xiàn)。1.6結(jié)構(gòu)化程序設(shè)計方法3.模塊化一個復雜問題,是由若干稍簡單的問題構(gòu)成。模塊化是把程序要解決的總目標分解為多個子目標,再進一步分解為具體的小目標,每一個小目標稱為一個模塊。每個模塊相對獨立、功能單一,每個模塊負責完成一項特定的任務。結(jié)構(gòu)化程序設(shè)計有順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種基本控制結(jié)構(gòu),通過組合和嵌套實現(xiàn)任何單入口單出口的程序。4.結(jié)構(gòu)化程序設(shè)計的步驟開發(fā)一個軟件系統(tǒng),無論這個系統(tǒng)規(guī)模有多大,我們通常需要按照下述步驟進行分析與實現(xiàn)。(1)分析問題對要解決的問題,首先必須分析清楚,明確問題的要求,列出所有已知量,找出題目的求解范圍、解的精度等。通過分析,主要獲取問題所涉及的數(shù)據(jù),包括已有數(shù)據(jù)、中間結(jié)果及最終要得到的數(shù)據(jù)。1.6結(jié)構(gòu)化程序設(shè)計方法(2)建立模型對實際問題進行分析,找出數(shù)據(jù)間的內(nèi)在規(guī)律,在已有數(shù)據(jù)和最終要得到的數(shù)據(jù)之間建立模型,利用計算機來解決。(3)設(shè)計算法建立模型后,還不能開始編寫程序,必須先根據(jù)數(shù)據(jù)的結(jié)構(gòu)設(shè)計解決算法的問題(解題步驟)。選擇算法一般要注意:?算法的邏輯結(jié)構(gòu)盡可能簡單;?算法所要求的存儲量應盡可能少,即算法的空間復雜度盡可能小;?避免不必要的循環(huán)和遞歸,減少算法的執(zhí)行時間,即算法的時間復雜度盡可能小;?在滿足題目要求條件下,使所需的計算量最小。1.6結(jié)構(gòu)化程序設(shè)計方法(4)編寫程序采用某種計算機語言,將前面所涉及的數(shù)據(jù)和算法進行詳細描述,把整個程序看作一個整體,先全局后局部,自頂向下,逐層分解處理,如果某些子問題的算法相同而僅參數(shù)不同,可以用子程序來表示。(5)調(diào)試運行將整個程序編譯、調(diào)試后,運行程序得出結(jié)論。(6)程序測試根據(jù)運行結(jié)果分析程序,通過數(shù)據(jù)驗證程序的正確性。(7)撰寫程序文檔主要是對程序中的變量、函數(shù)或過程做必要的說明,解釋編程思路,討論運行結(jié)果等。1.7集成開發(fā)環(huán)境1.啟動VisualStudio本節(jié)以VisualStudio2010為例,后續(xù)版本使用方法一致。當VisualStudio2010成功安裝后,在Windows桌面依次選擇“開始”→“所有程序”→“MicrosoftVisualStudio2010”,可以啟動VisualStudio2010。VisualStudio2010的集成開發(fā)環(huán)境如圖1-10所示。1.7.1

VisualStudio圖1-10VisualStudio2010的集成開發(fā)環(huán)境1.7集成開發(fā)環(huán)境2.創(chuàng)建工程(1)依次單擊“文件”→“新建”→“項目”,如圖1-11所示。圖1-11“新建”菜單1.7集成開發(fā)環(huán)境(2)“新建項目”對話框如圖1-12所示,在左側(cè)“已安裝的模板”選擇“VisualC++”→“Win32”,右側(cè)選擇“Win32控制臺應用程序”,在下面“名稱”欄后文本框輸入項目名稱,“位置”欄文本框選擇項目的保存位置,或單擊“瀏覽(B)”按鈕進行選擇,然后選中“為解決方案創(chuàng)建目錄”,最后單擊“確定”按鈕。圖1-12“新建項目”對話框1.7集成開發(fā)環(huán)境(3)出現(xiàn)如圖1-13所示“Win32應用程序向?qū)А?單擊“下一步”按鈕。圖1-13Win32應用程序向?qū)?1)1.7集成開發(fā)環(huán)境(4)如圖1-14所示,其中“應用程序類型”選擇“控制臺應用程序”,“附加選項”選擇“空項目”。最后單擊“完成”按鈕完成項目的創(chuàng)建工作。圖1-14Win32應用程序向?qū)?2)1.7集成開發(fā)環(huán)境3.編輯C源程序(1)在集成開發(fā)環(huán)境窗口右邊“解決方案資源管理器”中右擊“源文件”,依次選擇“添加”→“新建項”,如圖1-15所示,或單擊“項目”菜單下子菜單“添加新項”。圖1-15新建項1.7集成開發(fā)環(huán)境圖1-16“添加新項”對話框(2)打開“添加新項”對話框,如圖1-16所示,左側(cè)“已安裝的模板”中選擇“VisualC++”下面的“代碼”,右側(cè)選擇“C++文件(.cpp)”,下面名稱欄文本框中輸入文件名稱,“位置”選擇保存路徑(建議用缺省,和項目在同一目錄下),最后單擊“添加”按鈕。(3)在代碼編輯區(qū)輸入如圖1-17所示代碼。再單擊“文件”菜單下的“保存”子菜單,保存好源代碼。圖1-17編輯C源代碼1.7集成開發(fā)環(huán)境4.編輯和運行(1)在“生成”菜單中單擊“生產(chǎn)解決方案”或按快捷鍵“F7”,如圖1-18所示。(2)編譯成功后,單擊“調(diào)試”菜單中的“開始執(zhí)行(不調(diào)試)”,或按快捷鍵“Ctrl+F5”執(zhí)行程序,如圖1-19所示。(3)運行結(jié)果如圖1-20所示。圖1-18“生成”菜單圖1-19“調(diào)試”菜單圖1-20運行結(jié)果1.7集成開發(fā)環(huán)境Dev-C++是一個Windows下的C和C++程序的集成開發(fā)環(huán)境。它使用MingW32/GCC編譯器,遵循C/C++標準。開發(fā)環(huán)境包括多頁面窗口、工程編輯器及調(diào)試器等,在工程編輯器中集合了編輯器、編譯器、連接程序和執(zhí)行程序,提供高亮度的語法顯示,以減少編輯錯誤,還具有完善的調(diào)試功能。Dev-C++還為很多程序設(shè)計競賽提供比賽環(huán)境。1.啟動Dev-C++當Dev-C++成功安裝后,通過選擇Windows桌面的“開始”→“所有程序”→“Blood-shedDev-C++”→“Dev-C++”,可以啟動Dev-C++。Dev-C++的集成開發(fā)環(huán)境如圖1-21所示。1.7.2

Dev-C++1.7集成開發(fā)環(huán)境圖1-21Dev-C++的集成開發(fā)環(huán)境1.7集成開發(fā)環(huán)境2.創(chuàng)建項目在Dev-C++環(huán)境中,開發(fā)應用程序的第一步是創(chuàng)建一個項目。(1)依次單擊“文件”→“新建”→“項目”,彈出“新項目”對話框,選擇“ConsoleApplication”,在“名稱”欄文本框輸入項目的名稱,選擇“C項目”或“C++項目”選項,此處選擇“C項目”,如圖1-22所示。圖1-22“新項目”對話框1.7集成開發(fā)環(huán)境(2)單擊“確定”按鈕,將彈出保存對話框,選擇項目保存的位置,選擇保存位置后,系統(tǒng)創(chuàng)建項目,并自動創(chuàng)建一個main.c源程序文件,如圖1-23所示。圖1-23main.c源程序文件(1)1.7集成開發(fā)環(huán)境3.編輯C源程序在如圖1-23所示編輯區(qū)main函數(shù)中輸入如下代碼:intmain(intargc,char*argv[]){printf("Helloworld");//新加入代碼

return0;}在編輯區(qū)輸入完代碼后,再單擊“文件”菜單下的“保存”子菜單,保存代碼。1.7集成開發(fā)環(huán)境4.編譯和運行(1)單擊工具欄中的“編譯”圖標,或“運行”菜單下的“編譯”子菜單或按快捷鍵“Ctrl+F9”編譯程序,如果編譯成功,顯示結(jié)果如圖1-24所示。(2)運行程序,單擊工具欄中的“運行”圖標或“運行”菜單下的“運行”子菜單,運行程序。圖1-24編譯結(jié)果信息(1)1.7集成開發(fā)環(huán)境(3)運行結(jié)果如圖1-25所示。圖1-25運行結(jié)果(1)1.7集成開發(fā)環(huán)境Code::Blocks簡寫成CodeBlocks,是一款開源的C++集成設(shè)計環(huán)境。CodeBlocks支持跨平臺,不僅支持Linux和Windows,也支持Mac系統(tǒng)。多編譯器支持,對于C++語言,CodeBlocks支持包括BorlandC++、VC++、InterC++等超過20個不同廠家或版本編譯器。另外CodeBlocks也支持多種編程語言的編譯,包括“D”語言。通常情況下,我們采用開源g++編譯器作為C++默認的編譯器。在Linux下,g++由操作系統(tǒng)自帶。Windows環(huán)境下,需要mingw32庫支持。不過,Code::Blocks在安裝包中已經(jīng)自帶了mingw32的庫文件。1.7.3

CodeBlocks1.7集成開發(fā)環(huán)境1.啟動CodeBlocks當CodeBlocks成功安裝后,通過選擇Windows桌面的“開始”→“所有程序”→“CodeBlocks”,啟動CodeBlocks。它的集成開發(fā)環(huán)境如圖1-26所示。圖1-26

CodeBlocks的集成開發(fā)環(huán)境1.7集成開發(fā)環(huán)境2.創(chuàng)建工程和源文件在CodeBlocks環(huán)境中,開發(fā)應用程序的第一步是創(chuàng)建一個工程。(1)依次單擊“File”→“New”→“Project”,如圖1-27所示。選擇“Console

application”,如圖1-28所示,單擊“Go”按鈕,再次出現(xiàn)“Consoleapplication”對話框,直接單擊“Next”按鈕。圖1-27“New”菜單圖1-28“Newfromtemplate”對話框1.7集成開發(fā)環(huán)境(2)在“Consoleapplication”中選擇編程語言,可以選擇C或者C++,C++編譯器一般都可以編譯C程序,這里選擇“C”,再單擊“Next”按鈕,如圖1-29所示。(3)在出現(xiàn)的對話框中,“Projecttitle”文本框輸入工程的名稱,“Foldertocreateprojectin:”選擇工程的存放位置,之后會自動生成工程文件名*.cbp(cbp是Code::BlocksProject),再單擊“Next”按鈕,如圖1-30所示。圖1-29選擇語言圖1-30工程名稱和位置設(shè)置對話框1.7集成開發(fā)環(huán)境(4)編譯器一般選擇“GNUGCCCompiler”,其他采用默認即可,再單擊“Finish”按鈕,如圖1-31所示。圖1-31選擇編譯器1.7集成開發(fā)環(huán)境(5)系統(tǒng)創(chuàng)建好工程,并自動創(chuàng)建一個“main.c”的源程序文件,如圖1-32所示。打開main.c文件后,我們就可以到這里輸入源代碼文件了,輸入完源代碼后,保存文件。這里也可以不創(chuàng)建工程,而直接創(chuàng)建一個C源文件,依次單擊“File”→“New”→“File”,即可創(chuàng)建一個空的源程序文件,可以在里面輸入源程序。圖1-32main.c源程序文件(2)1.7集成開發(fā)環(huán)境3.編譯和運行(1)單擊工具欄中的“Build”選項,或“Build”菜單下的“Build”子菜單或按快捷鍵“Ctrl+F9”編譯程序,如圖1-33所示,如果編譯成功,編譯結(jié)果如圖1-34所示,編譯出錯則會出現(xiàn)錯誤提示信息。圖1-33“Build”菜單圖1-34編譯結(jié)果(2)1.7集成開發(fā)環(huán)境(2)運行程序,單擊工具欄中的“Run”按鈕或“Build”菜單下的“Run”子菜單或按快捷鍵“Ctrl+F10”運行程序。(3)運行結(jié)果如圖1-35所示。有關(guān)程序的調(diào)試請查看附錄B和附錄C圖1-35運行結(jié)果(2)1.8程序設(shè)計競賽國際大學生程序設(shè)計競賽(International

CollegiateProgrammingContest,ICPC)是世界上規(guī)模較大、水平較高的國際大學生程序設(shè)計競賽之一,其宗旨是使大學生通過計算機充分展示分析和解決問題的能力。全球總決賽第一名將獲得獎杯。另外,成績靠前的參賽隊伍也將獲得金、銀和銅牌。而成績在中等以下的隊伍會得到確認但不會進行排名。1.8.1

ICPC國際大學生程序設(shè)計競賽1.8程序設(shè)計競賽1.參賽隊組成ICPC以團隊的形式代表各學校參賽,參賽隊可以是來自任何國家和地區(qū)的高校,每個賽區(qū)的優(yōu)勝隊伍將獲得參加國際大學生程序設(shè)計競賽全球總決賽資格。2.競賽過程(1)競賽中至少命題8道,比賽時間為5小時。(2)參賽隊員可以攜帶諸如手冊、程序清單等參考資料。(3)試題的解答提交裁判稱為運行,每一次運行會被判為正確或者錯誤,判定結(jié)果會及時通知參賽隊伍。1.8.2競賽規(guī)則1.8程序設(shè)計競賽(4)正確解答中等數(shù)量及中等數(shù)量以上試題的隊伍會根據(jù)解題數(shù)目進行排名。在決定獲獎和參加全球總決賽的隊伍時,如果多支隊伍解題數(shù)量相同,則根據(jù)總用時加上懲罰時間進行排名。總用時和懲罰時間由每道解答正確的賽題的用時加上罰時而成。每道題用時將從競賽開始到該題解答被判定為正確為止,其間每一次錯誤的運行將被加罰20分鐘時間,未正確解答的試題不計時。(5)亞洲區(qū)域賽語言包括C++、C和Java。(6)每支隊伍使用一臺計算機,所有隊伍使用計算機的規(guī)格配置完全相同。1.8程序設(shè)計競賽中國大學生程序設(shè)計競賽(ChinaCollegiateProgrammingContest,CCPC)是工業(yè)和信息化部教育與考試中心主辦的“強國杯”技術(shù)技能大賽項目,由中國大學生程序設(shè)計競賽組委會組織承辦,旨在激發(fā)高校學生學習計算機領(lǐng)域?qū)I(yè)知識與技能的興趣,鼓勵學生靈活運用計算機知識和技能解決實際問題,有效提升算法設(shè)計、邏輯推理、數(shù)學建模、編程實現(xiàn)和計算機系統(tǒng)能力,培養(yǎng)團隊合作意識、挑戰(zhàn)精神和創(chuàng)新能力,培育和選拔出一大批素質(zhì)優(yōu)良、結(jié)構(gòu)合理的高素質(zhì)信息技術(shù)人才隊伍,服務“兩個強國”建設(shè)。CCPC的比賽規(guī)則與ICPC一致。1.8.3

CCPC中國大學生程序設(shè)計競賽1.8程序設(shè)計競賽團體程序設(shè)計天梯賽屬于中國高校計算機大賽之一,分為3個組別:珠峰爭鼎(本科組)、華山論劍(本科組)、滄海競舟(??平M)。本科生限參加“華山論劍”組或“珠峰爭鼎”組;專科生可參加任一組。每支參賽隊由最多10名隊員組成。每名參賽隊員必須是參賽隊所屬高等學校的在冊本科生或?qū)?粕R恢ш犖橹兄灰幸幻究粕?即不可報名“滄海競舟”組。每所高校報名參賽的隊數(shù)不限,但只有成績最好的3支隊伍參加計分與評獎。同一所高校的參賽隊若同時報名參加不同組別,則按最高組別確定高校排名,并且只計算最高組別的前3支參賽隊的得分。原則上,獲得兩屆競賽冠軍(高校、團隊、個人)的隊員,將被謝絕參賽。但如果高校獲獎的組別升級,則在高組別參賽的次數(shù)可重新計算。每個參賽隊必須有至少1名教練,教練必須是參賽隊所屬高等學校的正式教師。一位教練可以作為多支參賽隊的代表,負責競賽活動中的指導和聯(lián)系等工作。教練必須保證所有隊員符合本規(guī)程的規(guī)定。每所學校教練的人數(shù)原則上不應超過參賽隊員人數(shù)的1/5。1.8.4團體程序設(shè)計天梯賽1.8程序設(shè)計競賽Online

Judge系統(tǒng)(簡稱OJ)是一個在線的判題系統(tǒng)。用戶可以在線提交多種程序(如C、C++、JAVA)源代碼,系統(tǒng)對源代碼進行編譯和執(zhí)行,并通過預先設(shè)計的測試數(shù)據(jù)來檢驗程序源代碼的正確性?,F(xiàn)在國內(nèi)外很多高校都建有自己的OJ,大家可以在網(wǎng)絡(luò)上搜索,免費注冊并進行練習。1.評測系統(tǒng)反饋ICPC國際大學生程序設(shè)計競賽中,自動評測系統(tǒng)所給的反饋信息極少,主要包括:?Accepted(AC):正確。祝賀您!您的程序是正確的,并且運行時間和內(nèi)存開銷均不超過相應的限制。?PresentationError(PE):格式錯。您的程序輸出了正確的結(jié)果,但是輸出格式并非嚴格滿足題目說明。請檢查空格、換行、左右對齊等。?WrongAnswer(WA):答案錯。您的程序?qū)σ唤M或者多組評測系統(tǒng)內(nèi)部的非公開測試數(shù)據(jù)給出了錯誤的結(jié)果,因此還需要更進一步的調(diào)試。1.8.5自動評測系統(tǒng)1.8程序設(shè)計競賽?RuntimeError(RE):運行錯。您的程序在運行結(jié)束之前存在段錯誤(SegmentationFault)、訪問沖突(ACCESSVIOLATION)、數(shù)組下標超出范圍(ARRAYBOUNDSEXCEEDED)、浮點異常(FLOATPOINTEXCEPTION)或其他類似錯誤、除零錯誤(DIVISIONBYZERO)、棧溢出(STACKOVERFLOW)等。請仔細檢查程序中類似的錯誤。?TimeLimitExceeded(TLE):超時。您的程序在某一組或多組數(shù)據(jù)上運行的時間過長,該程序可能存在效率問題。?MemoryLimitExceeded(MLE):超內(nèi)存。您的程序試圖使用超過評測系統(tǒng)規(guī)定大小的內(nèi)存。?OutputLimitExceeded(OLE):超輸出。您的程序輸出了過多的信息,這通常意味著您的程序陷入了一個帶輸出的無限循環(huán)中。?CompileError(CE):編譯錯。編譯器無法成功地編譯您的程序,錯誤信息將返回給用戶,編譯過程中產(chǎn)生的警告信息不會導致此錯誤。?SystemError:系統(tǒng)錯。例如您的程序需要超過了硬件限制的內(nèi)存。1.8程序設(shè)計競賽2.在線評測系統(tǒng)-ACM網(wǎng)站(1)國內(nèi)①湖南師范大學ACM網(wǎng)站含有涉及數(shù)據(jù)結(jié)構(gòu)、算法、計算幾何、湖南省大學生程序設(shè)計比賽題目等超過1600道題目。②杭州電子科技大學功能比較齊全,國內(nèi)比較權(quán)威的ACM網(wǎng)站。有超過5000道題目,亞洲區(qū)域賽國內(nèi)賽站的網(wǎng)絡(luò)預賽和現(xiàn)場賽的題目均可在本網(wǎng)站找到。此外,還可以在網(wǎng)站上組織比賽(DIYcontest)。③北京大學題目是全英文的,題目的數(shù)量、質(zhì)量都很高,是國內(nèi)知名的在線評測系統(tǒng)。1.8程序設(shè)計競賽(2)國外①俄羅斯烏拉爾大學(URAL),題目為全英文,題目的數(shù)量、質(zhì)量都很高。②西班牙瓦拉杜利德大學(UVA)OJ,歷年區(qū)域賽和全球總決賽的題目均可以在此OJ上找到。③美國USACO在線評測系統(tǒng)具有遞進的層次結(jié)構(gòu),由易到難,形成鮮明知識結(jié)構(gòu)的特點。定期有各種比賽可以參與,不僅能在網(wǎng)站上看自己提交的代碼,而且可以查看別人提交的代碼,并且提供題目的測試數(shù)據(jù)。④俄羅斯CodeforcesCodeforces是一個提供在線評測系統(tǒng)的網(wǎng)站。1.9習題1.熟悉C語言的集成開發(fā)環(huán)境的使用。2.掌握C應用程序的編輯、編譯、鏈接和運行過程。3.將本章中的例題程序在集成開發(fā)環(huán)境中進行測試。4.熟悉OJ的使用,在OJ上注冊自己的賬號。5.分別用自然語言、流程圖、N-S流程圖和偽代碼描述下面問題的算法。(1)求N的階乘。(2)判斷一個數(shù)是否為素數(shù)。6.什么是結(jié)構(gòu)化程序設(shè)計方法?它的主要內(nèi)容包括哪些?

2.1順序結(jié)構(gòu)程序設(shè)計概述在C語言中,程序的基本結(jié)構(gòu)包括順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。已經(jīng)證明:任何可解問題的解決過程都是由這三種結(jié)構(gòu)通過有限次組合而成的。其中,順序結(jié)構(gòu)是最基本的結(jié)構(gòu),它按照代碼的順序從上到下依次執(zhí)行。在順序結(jié)構(gòu)中,程序的執(zhí)行流程是線性的,從頭到尾依次執(zhí)行每個語句。順序結(jié)構(gòu)通常用于簡單的程序,例如計算一個數(shù)的加法或減法等?!纠?-1】下面是一個簡單的C語言程序,計算a加b的結(jié)果,它演示了順序結(jié)構(gòu)的基本用法。#include<stdio.h>intmain(){

inta=5;

intb=10;

intsum=a+b;

printf("Thesumof%dand%dis%d\n",a,b,sum);

return0;}2.2數(shù)據(jù)類型C語言是一門強數(shù)據(jù)類型語言,類型是C語言中非常重要的概念。C語言中的所有數(shù)據(jù)都屬于且只屬于某一種類型。C語言不存在沒有類型的數(shù)據(jù),也不存在擁有多種類型的數(shù)據(jù)。C語言將類型劃分為基本類型與復合類型,基本類型包括整型、實型和字符型,復合類型包括數(shù)組、指針、結(jié)構(gòu)體、共用體、枚舉以及空類型。2.2數(shù)據(jù)類型1.常量在程序運行過程中,其值不能改變的數(shù)據(jù)對象稱為常量(constants)。(1)整型常量:整型常量可以是十進制、八進制或十六進制。例如:123、0123(八進制,前綴為數(shù)字0)、0x2F(十六進制,前綴為數(shù)字0和字符x,x大寫和小寫均可)。(2)浮點型常量:浮點型常量由整數(shù)部分、小數(shù)點、小數(shù)部分和指數(shù)部分組成。可以用兩種形式表示,一是十進制小數(shù)形式,例如:123.456。二是指數(shù)形式,例如:3.14e+002(代表3.14×102),e或E代表以10為底的指數(shù)。(3)字符型常量:字符型常量是用單引號括起來的單個字符。例如:'a'、'1'。值得注意的是,字符常量在內(nèi)存中是以ASCII碼的形式存儲的,因此,一個字符常量也是一個整數(shù)。例如:字符'0'的ASCII碼值為48,字符'1'的ASCII碼值為49,字符'A'的ASCII碼值為65,字符'a'的ASCII碼值為97,同一個字符的大小寫字符的ASCII碼值相差32。字符常量可以像其他整數(shù)一樣參與數(shù)值運算。2.2.1常量和變量2.2數(shù)據(jù)類型C語言還有一種特殊形式的字符常量,即轉(zhuǎn)義字符。轉(zhuǎn)義字符以反斜線\開頭(注意與除號/的區(qū)別),形式仍然需要加單引號,反斜線后面的內(nèi)容又可分為3種:第1種是規(guī)定的11個簡單轉(zhuǎn)義字符;第2種是反斜線后接1到3個數(shù)字,這1到3個數(shù)字代表一個八進制數(shù),對應所表示字符的ASCII碼值;第3種則是反斜線后面接一個小寫字母x,然后接若干個數(shù)字表示一個十六進制數(shù),對應所表示字符的ASCII碼值。轉(zhuǎn)義字符見表2-1。2.2數(shù)據(jù)類型(4)字符串常量:字符串常量也稱為字符串字面值,是由雙引號括起來的0個或多個字符組成的字符序列。例如:“Hello,World!”,""(空字符串)。字符串常量在內(nèi)存中由連續(xù)的字符組成,以'\0'作為結(jié)束標志。(5)符號常量:在C語言中,符號常量是指在代碼中使用一個標識符來表示一個固定的值,這個標識符就稱為符號常量。符號常量的特點是編譯后寫在代碼區(qū),不可尋址,不可更改,屬于指令的一部分。符號常量在使用之前必須先定義,其一般形式為:#define標識符常量。例如:#definePI3.14159常量的值可以是整數(shù)、浮點數(shù)、字符等類型。一旦定義了符號常量,就可以在程序中多次使用該標識符,預處理器會在編譯時將其替換為對應的常量值。2.2數(shù)據(jù)類型(6)枚舉常量:枚舉類型是一種用戶定義的數(shù)據(jù)類型,它包含一組常量整型值的列表。例如:enumcolor{RED,GREEN,BLUE};在沒有顯示說明的情況下,enum類型中第一個枚舉名的值為0,第二個為1,依此類推。2.變量變量是一個有名字的、在內(nèi)存中占據(jù)一定存儲單元,用來存放數(shù)據(jù),也就是存放變量的值。在程序運行期間,變量的值是可以改變的。在C語言中,變量必須先聲明后使用。聲明變量時,需要指定變量的名稱和數(shù)據(jù)類型。2.2數(shù)據(jù)類型(1)標識符標識符是用來表示常量、變量、函數(shù)、數(shù)組、類型等命名的有效字符序列。構(gòu)造一個標識符的名字,需要按照一定的規(guī)則。C語言標識符的命名規(guī)則是:①由字母或下劃線“_”開頭,后面接字母、數(shù)字或者下劃線。②用戶自定義的標識符不能與關(guān)鍵字同名。例如:school_id,_age,es10為合法的標識符。school-id,man*,2year,class為不合法的標識符。(2)關(guān)鍵字關(guān)鍵字是一種特殊的標識符,又稱保留字,是C系統(tǒng)為完成語言功能特別保留下來的一些單詞。C語言關(guān)鍵字見表2-2。2.2數(shù)據(jù)類型(3)變量的定義和初始化C語言使用變量定義語句來定義變量,其格式為:類型名變量名列表;其中,類型名表示數(shù)據(jù)類型的名字;變量名列表的格式為“變量名1,變量名2,…”,變量名就是前文所述的標識符;注意后面的分號是不可以缺少的。例如:inta;//定義了一個int類型的變量,名字為afloatx,y;//定義了2個float類型的變量,名字分別為x、yDoubled1,d2,d3;//定義了3個double類型的變量,名字分別是d1、d2和d32.2數(shù)據(jù)類型C語言中,變量最重要的4個屬性:名、型、值、址。以第一個例子為例,該變量的名為a,類型是int,其取值的可能范圍就是int的取值范圍,且通過合法的語句是可以變化其值的,a的址就是指a在內(nèi)存空間中的保存地址(關(guān)于地址將在指針一章詳細講述)。實際上,變量一旦被定義,名、型、址都是不能變的,能變的只有值。變量的值可以通過若干方法去改變,在定義時確定其值則稱為初始化。例如:inta=3;Floatx=3.1,y=4.6;doubled1=.1,d2=1.,d3=2.31415925;2.2數(shù)據(jù)類型整型是C語言基本的數(shù)據(jù)類型之一,不嚴格地說,整型就是用來表示整數(shù)的。但嚴格地加以分辨,整數(shù)是一個數(shù)學概念,而整型是一個計算機概念,二者既有聯(lián)系又有區(qū)別。C語言使用關(guān)鍵字int來表示整型,根據(jù)其能不能加正負號以及所占內(nèi)存大小又可細分為以下幾種:unsignedshortint,signedshort,unsignedint,signedint,unsignedlongint,signedlongint,unsignedlonglongint,signedlonglongint。如果只寫int,則默認表示signedint。C標準本身并不規(guī)定一個int在內(nèi)存中應該占據(jù)多少字節(jié),由于32位CPU占據(jù)市場主流非常長的時間,直到今天也仍然沒有完全退出。所以事實是一個int占據(jù)4個字節(jié)。所以int類型總共擁有232

種可能的狀態(tài),也就是int一共可以表示232個不同的數(shù)值。2.2.2整型2.2數(shù)據(jù)類型大家都知道數(shù)學上的整數(shù)是無窮的,那么C語言中int到底包含哪232

個整數(shù)呢?這就跟另外2個關(guān)鍵字有關(guān)。如果是unsignedint,就說明該類型包含的是無符號整數(shù),其實就是無負號整數(shù),包括0,所以unsignedint的取值范圍是[0,232-1]。如果是signedint,那么就有正有負了,C++規(guī)定負數(shù)占一半,0和正數(shù)占另一半,所以取值范圍是[-231,231-1]。整型數(shù)據(jù)常見類型和取值范圍見表2-3。2.2數(shù)據(jù)類型C語言允許整型常量(3種形式的整型常量都可以)后面接2組4個后綴,分別是u、U和l、L。其中,u或U表示該整型常量是無符號整型常量,而l或L表示該整型常量是一個長整型常量,連續(xù)兩個ll或者LL表示該整型常量是一個長長整型常量(64位整型)。同時U和L也可以不計秩序地進行組合。例如:255U、255L、255LL、255UL、255LU、255ULL、255LLU都是合法的整型常量。雖然這些常量的值都是255,但它們的類型并不完全相同。2.2數(shù)據(jù)類型【例2-2】從鍵盤輸入兩個整數(shù),使用簡單計算器求它們的和并輸出。分析:在程序設(shè)計中,大部分程序都可以看成是由輸入、處理、輸出三部分組成的,但部分程序也可以缺少其中部分成分。輸入即從鍵盤或文件讀取需要的數(shù)據(jù);處理是實現(xiàn)要完成的功能,比如計算;輸出是將結(jié)果展示給用戶。對應到簡單計算器:輸入———兩個整數(shù);處理———計算兩個整數(shù)的和;輸出———把計算出來的和展示給用戶。輸入使用scanf函數(shù),2.5節(jié)將詳細介紹。代碼如下:2.2數(shù)據(jù)類型#include<stdio.h>intmain(){inta,b,sum;scanf("%d%d",&a,&b);//給變量a,b輸入值,%d表示整數(shù)

sum=a+b;printf("%d\n",sum);//輸出和sumreturn0;}2.2數(shù)據(jù)類型C中的浮點型分為3類:float、double和longdouble,一般稱之為單精度實型、雙精度實型和長精度實型。同樣,C標準本身并不規(guī)定實型在內(nèi)存中應該占據(jù)多少個字節(jié)。但目前的事實是:float占據(jù)4個字節(jié),double占據(jù)8個字節(jié),而longdouble還沒有達成一致,有的系統(tǒng)給它分配12個字節(jié),有的則分配16個字節(jié)(所以longdouble一般使用較少)??梢钥闯?C能夠表達的實數(shù)是有限的。C可以表達的不同單精度實型數(shù)一共有232個,雙精度實型有264

個。由于C采用了IEEE的浮點數(shù)表示法,所以C能夠表示的實數(shù)是以取值范圍和精度來衡量的。浮點數(shù)據(jù)取值范圍見表2-4。2.2.3浮點型2.2數(shù)據(jù)類型C使用關(guān)鍵字char來定義字符型變量,同時前面可加signed或者unsigned。C使用1個字節(jié)來存儲字符型變量,所以signedchar的取值范圍是[-128,127],unsignedchar的取值范圍是[0,255]。計算機內(nèi)部原則上只能保存二進制的整數(shù),所以當要存儲和表示字符數(shù)據(jù)時就需要進行編碼(實際上存儲、表示任何類型都需要編碼)?;旧纤械腃實現(xiàn)都采取ASCII編碼。ASCII編碼的全稱是AmericanStandardCodeforInformationInterchange,簡單地說就是用[0,127]這128個數(shù)字分別表示對應的128個字符。具體哪個數(shù)字對應哪個字符請參考本書附錄A。2.2.4字符型2.2數(shù)據(jù)類型#include<stdio.h>intmain(){charc1='e',c2=75;printf("%d\n",c1);printf("%c\n",c2);printf("%d\n",c1-c2);printf("%c\n",c1+2);return0;}2.2數(shù)據(jù)類型運行結(jié)果:101K26g程序說明:printf("%d\n",c1);以整型輸出c1的值,輸出結(jié)果為101,即字符'e'的ASCII碼值。printf("%c\n",c2);以字符型輸出c2的值,輸出結(jié)果為字符'K',即整數(shù)75對應字符'K'。printf("%d\n",c1-c2);以整型輸出c1-c2的值,即字符的ASCII碼值相減,結(jié)果為101-75=26。printf("%c\n",c1+2);以字符型輸出c1+2的值,c1+2的值為101+2=103,即字符'g'。因此,字符型可以當成整型使用,并進行算術(shù)運算。2.2數(shù)據(jù)類型在C語言中,沒有內(nèi)置的bool類型。但是,從C99標準開始,C語言引入了一個可選的stdbool.h頭文件,該文件定義了bool類型。使用stdbool.h頭文件,可以在代碼中使用bool類型,它是一個整數(shù)類型,通常具有兩個可能的值:true(1)和false(0),其中非0值表示true,0值表示false。2.2.5布爾型2.2數(shù)據(jù)類型【例2-4】布爾類型的使用。#include<stdio.h>#include<stdbool.h>intmain(){boola=100;printf("%d\n",a);a='F’;printf("%d\n",a);a=false;printf("%d\n",a);a=0;printf("%d\n",a);return0;}2.2數(shù)據(jù)類型運行結(jié)果:1100從運行結(jié)果可以看出,非0值在輸出的時候均輸出1,表示true。2.3運算符和表達式C語言的運算符是一種特殊字符,它指明用戶對操作數(shù)進行的某種操作。表達式則是由若干個變量、常量及運算符按一定格式形成組合后生成新的值,同時單獨的變量或者常量也視為一個表達式。每一個表達式都有一個計算結(jié)果,計算表達式的過程稱之為估值。例如:3+4就是一個表達式,其估值結(jié)果為7;單獨的3也是一個表達式,其估值結(jié)果就是3。2.3運算符和表達式算術(shù)運算符用于算術(shù)運算,C的算術(shù)運算符共5個:+、-、*、/、%,分別是加、減、乘、除、取模(取余),都是雙目中綴運算符。加、減的優(yōu)先級顯然低于乘、除、取模,這5個運算符的結(jié)合性都是左結(jié)合。在使用的時候特別要注意乘法和除法的符號與數(shù)學中符號的區(qū)別?!纠?-5】交換變量的值。有兩個瓶子a和b,分別盛放醋和油,現(xiàn)要求將它們互換,即把a瓶子中的醋倒入b瓶子,b瓶子中的油倒入a瓶子。模擬交換的過程。分析:設(shè)a瓶子中有150毫升醋,b瓶子中有180毫升油,要交換a瓶子里的醋與b瓶子里的油,需要借助一個空瓶子t。(1)把a瓶子中的醋倒入t瓶子;(2)把b瓶子中的油倒入a瓶子;(3)把t瓶子中的醋倒入b瓶子。輸出交換a、b瓶子中的物品質(zhì)量。2.3.1算術(shù)運算符2.3運算符和表達式程序代碼如下:#include<stdio.h>intmain(){inta,b,t;a=150;b=180;t=a;a=b;b=t;printf("a=%d,b=%d",a,b);return0;}運行結(jié)果:a=180,b=1502.3運算符和表達式知識引申:請讀者思考,交換兩個變量的值的時候,可不可以不借助變量t完成兩個變量值的交換。分析:如果兩個變量存放的值對應的數(shù)據(jù)類型是數(shù)字類型,則可以進行交換,如a=150,b=180,計算過程如下:(1)若a=a+b,則a=330;(2)b=a-b,則b=150;(3)a=a-b,則a=180。通過三步計算完成了a和b值的交換,程序代碼如下:#include<stdio.h>intmain(){inta,b;a=150;b=180;a=a+b;b=a-b;a=a-b;printf("a=%d,b=%d",a,b);return0;}2.3運算符和表達式關(guān)系運算符用于對兩個操作數(shù)進行關(guān)系比較,關(guān)系運算符的運算結(jié)果是一個邏輯值,即true(其值為1)或者false(其值為0)。關(guān)系運算符一共有6個:==、!=、<、<=、>、>=,分別是等于、不等于、小于、小于等于、大于、大于等于。其運算含義就是當運算符描述的數(shù)學關(guān)系成立時結(jié)果為true,否則為false。例如:3==3的結(jié)果是true,而3<2的結(jié)果是false。關(guān)系運算符都是雙目中綴運算符,==、!=的優(yōu)先級要低于另外4個,所有關(guān)系運算符都是左結(jié)合的。2.3.2關(guān)系運算符2.3運算符和表達式【例2-6】分析程序中關(guān)系表達式的值。#include<stdio.h>intmain(){printf("65==65.0的值為%d\n",65==65.0);printf("9.0+1e-306>9+0的值為%d\n",9.0+1e-306>9+0);printf("68>'A'的值為%d\n",68>'A');return0;}運行結(jié)果:65==65.0的值為19.0+1e-306>9+0的值為068>'A'的值為12.3運算符和表達式C語言有3個邏輯運算符:!、&&、||,分別是非(NOT)、與(AND)、或(OR)。其中非運算符是單目前綴運算符、右結(jié)合,與和或運算符都是雙目中綴運算符、左結(jié)合,它們的優(yōu)先級從高到低依次為非、與、或。邏輯運算的結(jié)果可以由真值表確定。邏輯運算的真值表見表2-5~表2-7。2.3.3邏輯運算符2.3運算符和表達式【例2-7】分析程序中邏輯表達式的值。#include<stdio.h>intmain(){inta=10,b=0;printf("a&&b=%d\n",a&&b);printf("a||b=%d\n",a||b);printf("!a=%d\n",!a);printf("!b=%d\n",!b);printf("(a>=5)&&(a<=10)=%d\n",(a>=5)&&(a<=10));return0;}運行結(jié)果:a&&b=0a||b=1!a=0!b=1(a>=5)&&(a<=10)=12.3運算符和表達式自增運算符的形式為++,俗稱“加加”;自減運算符的形式為--,俗稱“減減”。自增運算符一共有兩種,但形式上是一樣的,都是++。一個是單目前綴運算符,另一個是單目后綴運算符,所以可以通過操作數(shù)的位置來判斷到底是哪一種自增運算符。自減運算符也有兩種,情況與自增運算符類似。自增運算符和自減運算符的操作數(shù)都必須是左值,也就是能夠出現(xiàn)在賦值符號左邊的量,所以++3、(a+b)++等都是語法錯誤的表達式。前綴自增運算符的含義是將操作數(shù)的原值取出加1,并將加1后的值賦給操作數(shù),同時整個前綴自增運算符表達式的估值結(jié)果是使用加1后的值。后綴自增運算符的含義則是將操作數(shù)的原值取出加1,再將加1后的值賦給操作數(shù),同時整個后綴自增運算符表達式的估值結(jié)果是原值,即加1以前的值。所以前綴自增運算符和后綴自增運算符對操作數(shù)的操作是一致的,不一致的地方是表達式的估值結(jié)果。此外,前綴自增運算符表達式返回的是左值,后綴自增運算符表達式返回的是右值。自減運算符則是對操作數(shù)的原值進行減1操作再將新值賦給操作數(shù),自減運算符的前綴運算符與后綴運算符的區(qū)別與自增運算符一致。2.3.4自增運算符和自減運算符的使用2.3運算符和表達式【例2-8】分析程序中自增和自減運算的值。#include<stdio.h>intmain(){inta=10,b;b=a++;printf("a=%d,b=%d\n",a,b);b=++a;printf("a=%d,b=%d\n",a,b);b=a--;printf("a=%d,b=%d\n",a,b);b=--a;printf("a=%d,b=%d\n",a,b);return0;}運行結(jié)果:a=11,b=10a=12,b=12a=11,b=12a=10,b=102.3運算符和表達式C語言位運算符廣義上分為狹義位運算符和移位運算符。移位運算符下一節(jié)講述,本節(jié)所指的位運算符就是狹義位運算符,共4個:~、&、^、|,分別是位非、位與、位異或、位或,優(yōu)先級也是按照這個順序排列。其中,位非是單目前綴運算符,右結(jié)合,其余都是雙目中綴運算符,左結(jié)合。位與運算符(&):該運算符將兩個整數(shù)的二進制位進行與操作,只有當兩個相應的二進制位都為1時,結(jié)果位才為1,否則為0。位或運算符(|):該運算符將兩個整數(shù)的二進制位進行或操作,只要兩個相應的二進制位中有一個為1,結(jié)果位就為

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論