版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1C語言程序設(shè)計(jì)2課程情況介紹教材:《C程序設(shè)計(jì)》(第三版)譚浩強(qiáng)參考書:C語言大全(第四版)
C程序設(shè)計(jì)試題匯編上機(jī)環(huán)境:TurboC2.0VisualC++6.0
3本門課主要內(nèi)容C語言概述算法及其表示方法數(shù)據(jù)類型、運(yùn)算符和表達(dá)式編寫程序(簡單程序設(shè)計(jì),選擇結(jié)構(gòu)程序設(shè)計(jì),循環(huán)結(jié)構(gòu)程序設(shè)計(jì))數(shù)組函數(shù)指針結(jié)構(gòu)體文件4第一章C語言概述本章主要介紹C語言程序的結(jié)構(gòu)和書寫規(guī)則。C語言發(fā)展歷史C語言特點(diǎn)C程序格式和結(jié)構(gòu)特點(diǎn)C程序上機(jī)步驟51、在C語言誕生以前,系統(tǒng)軟件主要是用匯編語言編寫的。2、C語言是貝爾實(shí)驗(yàn)室于70年代初研制出來的,后來又被多次改進(jìn),并出現(xiàn)了多種版本。80年代初,美國國家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI),根據(jù)C語言問世以來各種版本對(duì)C語言的發(fā)展和擴(kuò)充,制定了ANSIC標(biāo)準(zhǔn)(1989年再次做了修訂)。本課程以ANSIC新標(biāo)準(zhǔn)來講解!一、C語言的發(fā)展歷史6C語言的產(chǎn)生背景年份語言名語言特點(diǎn)1960ALGOL60面向問題,離硬件遠(yuǎn),不易寫系統(tǒng)程序1963CPL(組合程序設(shè)計(jì)語言)接近硬件,但規(guī)模較大,難以實(shí)現(xiàn)(劍橋大學(xué))1967BCPL(基本CPL)對(duì)CPL的簡化(劍橋大學(xué),MatinRichards)1970B進(jìn)一步簡化CPL,并在PDP/7上實(shí)現(xiàn)。(貝爾實(shí)驗(yàn)室)1972C汲取了BCPL和B優(yōu)點(diǎn),克服了缺點(diǎn)。用C編寫了UNIX系統(tǒng)90%的代碼198787ANSIC這是國際標(biāo)準(zhǔn)化組織87年公布的C語言標(biāo)準(zhǔn)(1989年再次做了修訂)75254565860626466687072747678808284868890929496AdaALGOL60ALGOL68PascalModula-2CPLBCPLBCC++JavaLISPPROLOGCOBOLFORTRAN77FORTRANPL/1Simula67Smalltalk80BASICANSI-BASICQBASICVBFORTRAN90<>8(3)在微機(jī)上通常使用的C語言編譯系統(tǒng)有TurboC、BorlandC等。Visualc++6.0為了易于以后的c++過渡,本課程上機(jī)采用vc++6.0環(huán)境!9二、C語言的特點(diǎn)
C語言同時(shí)具有匯編語言和高級(jí)語言的優(yōu)勢(shì)。(1)語言簡潔、緊湊,使用方便、靈活。(2)運(yùn)算符和數(shù)據(jù)類型極其豐富。(3)生成的目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。(4)可移植性好(較之匯編語言)。(5)可以直接操縱硬件。中級(jí)語言>1032個(gè)關(guān)鍵字:(由系統(tǒng)定義,不能重作其它定義)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile119種控制語句:if()~else~for()~while()~do~while()continuebreakswitchgotoreturn12例C語言與Pascal語言比較C語言
Pascal語言含義{}
BEGIN….END
復(fù)合語句if(e)s;
IF(e)THENs
條件語句inti;
VARi:INTEGER
定義i為整型變量inta[10];
VARa:ARRAY[1..10]OFINTEGER
定義整型數(shù)組aintf();
FUNCTIONf():INTEGER
定義f為返值整型的函數(shù)int*p;
VARp:INTEGER
定義p為指向整型變量的指針i+=2;
i=i+2
賦值i+2ii++,++i;
i=i+1 i自增值結(jié)論:C比Pascal簡練,源程序短。<1334種運(yùn)算符:算術(shù)運(yùn)算符:+-*/%++--關(guān)系運(yùn)算符:<<===>>=!=邏輯運(yùn)算符:!&&||位運(yùn)算符:<<>>~|^&賦值運(yùn)算符:=及其擴(kuò)展條件運(yùn)算符:?:逗號(hào)運(yùn)算符:,指針運(yùn)算符:*&求字節(jié)數(shù):sizeof強(qiáng)制類型轉(zhuǎn)換:(類型)分量運(yùn)算符:.->下標(biāo)運(yùn)算符:[]其它:()-<14C數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型void數(shù)值類型字符類型char枚舉類型整型浮點(diǎn)型單精度型float雙精度型double短整型short長整型long整型int數(shù)組結(jié)構(gòu)體struct共用體union<15
關(guān)于本門課程的學(xué)習(xí)-C語言程序設(shè)計(jì)學(xué)習(xí)的必要性-語法與程序設(shè)計(jì)方法的關(guān)系-重視實(shí)踐環(huán)節(jié)-注意查閱資料,在實(shí)踐中積累經(jīng)驗(yàn),舉一反三!16三、C程序格式和結(jié)構(gòu)特點(diǎn)例1.1第一個(gè)程序Verygood!/*example1.1ThefirstCProgram*/#include<stdio.h>voidmain(){printf(“Verygood!”);}注釋編譯預(yù)處理函數(shù)語句輸出:Verygood!17例1.2/*example1.1calculatethesumofaandb*/#include<stdio.h>/*Thisisthemainprogram*/Voidmain(){inta,b,sum;a=10;b=24;sum=add(a,b);printf(”sum=%d\n",sum);}/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty){intz;z=x+y;return(z);}運(yùn)行結(jié)果:sum=34函數(shù)語句預(yù)處理命令注釋18格式特點(diǎn)習(xí)慣用小寫字母,大小寫敏感不使用行號(hào),無程序行概念可使用空行和空格常用鋸齒形書寫格式main(){
……………….………………
…………..…………..
……………….
………………………….
……………….………………..}main(){
inti,j,sum;sum=0;for(i=1;i<10;i++){for(j=1;j<10;j++){sum+=i*j;}}printf(“%d\n”,sum);}優(yōu)秀程序員的素質(zhì)之一:使用TAB縮進(jìn){}對(duì)齊有足夠的注釋有合適的空行191.函數(shù)是C語言程序的基本單位。main()函數(shù)的作用,相當(dāng)于其它高級(jí)語言中的主程序;其它函數(shù)的作用,相當(dāng)于子程序。
2.C語言程序總是從main()函數(shù)開始執(zhí)行。
一個(gè)C語言程序,總是從main()函數(shù)開始執(zhí)行,而不論其在程序中的位置。當(dāng)主函數(shù)執(zhí)行完畢時(shí),亦即程序執(zhí)行完畢。習(xí)慣上,將主函數(shù)main()放在最前頭。20
3、函數(shù)的一般結(jié)構(gòu)
任何函數(shù)(包括主函數(shù)main())都是由函數(shù)說明和函數(shù)體兩部分組成。其一般結(jié)構(gòu)如下:
函數(shù)返回值的類型
函數(shù)名(函數(shù)參數(shù)表){
說明語句部分;
執(zhí)行語句部分;
}
函數(shù)首部函數(shù)體intadd(intx,inty){intz;z=x+y;return(z);}211)函數(shù)首部
由函數(shù)返回值類型、函數(shù)名和函數(shù)參數(shù)表三部分組成。
函數(shù)參數(shù)表的格式為:
數(shù)據(jù)類型形參1,數(shù)據(jù)類型形參2……
函數(shù)返回值的類型函數(shù)名函數(shù)參數(shù)表↓↓↓
intadd(intx,inty)圖1-1函數(shù)首部結(jié)構(gòu)圖222)函數(shù)體在函數(shù)說明部分的下面、大括號(hào)(必須配對(duì)使用)內(nèi)的部分。函數(shù)體一般由說明語句和可執(zhí)行語句兩部分構(gòu)成:(1)說明語句部分說明語句部分由變量定義、自定義類型定義、自定義函數(shù)說明、外部變量說明等組成。23
(2)可執(zhí)行語句
一般由若干條可執(zhí)行語句構(gòu)成。圖1-2是[例1.2]的main()函數(shù)體的示意圖。/*主函數(shù)main()*/main(){intnum1,num2;printf("Inputthefirstintegernumber:");scanf("%d",&num1);printf("Inputthesecondintegernumber:");scanf("%d",&num2);printf("max=%d\n",max(num1,num2));}
圖1-2函數(shù)體結(jié)構(gòu)示意圖
函數(shù)體變量定義部分可執(zhí)行語句部分244、源程序書寫格式1.所有語句都必須以分號(hào)";"結(jié)束,函數(shù)的最后一個(gè)語句也不例外。2.程序行的書寫格式自由既允許1行內(nèi)寫幾條語句,也允許1條語句分寫在幾行上。3.允許使用注釋C語言的注釋格式為:/*……*/(1)"/*"和"*/"必須成對(duì)使用,且"/"和"*"、以及"*"和"/"之間不能有空格,否則都出錯(cuò)。25例如:main(){intnum1,num2;printf("Inputthefirstintegernumber:");scanf("%d",&num1);printf("Inputthesecondintegernumber:");scanf("%d",&num2);printf("max=%d\n",max(num1,num2));}如果某條語句很長,一般需要將其分寫在幾行上。26
技巧:為避免遺漏必須配對(duì)使用的符號(hào),例如注釋符號(hào)、函數(shù)體的起止標(biāo)識(shí)符(花括號(hào))、圓括號(hào)等等,在輸入時(shí),可連續(xù)輸入這些起止標(biāo)識(shí)符,然后再在其中進(jìn)行插入來完成內(nèi)容的編輯。在起止標(biāo)識(shí)符嵌套時(shí),以及相距較遠(yuǎn)時(shí),這樣做更有必要。
(2)注釋的位置,可以單占一行,也可以跟在語句的后面。(3)如果一行寫不下,可另起一行繼續(xù)寫。(4)注釋中允許使用漢字。在非中文操作系統(tǒng)下,看到的是一串亂碼,但不影響程序運(yùn)行。(5)使用"http://"可以在一行內(nèi)注釋。例如:printf("max=%d",c);//輸出c的值
27
用C語言編寫的源程序不能由計(jì)算機(jī)直接識(shí)別并執(zhí)行,計(jì)算機(jī)只能識(shí)別機(jī)器語言所編寫的二進(jìn)制代碼文件—目標(biāo)程序,因此必須把高級(jí)語言編寫的源程序翻譯成目標(biāo)程序,然后將該目標(biāo)程序與系統(tǒng)的函數(shù)庫和其他的目標(biāo)程序連接并形成可執(zhí)行程序。為此,在計(jì)算機(jī)內(nèi)須有對(duì)應(yīng)的語言開發(fā)環(huán)境能對(duì)C語言編寫的源程序進(jìn)行編輯、編譯、連接、運(yùn)行。而該開發(fā)環(huán)境又依賴于操作系統(tǒng)和計(jì)算機(jī)硬件,它們共同構(gòu)成了C語言的運(yùn)行環(huán)境,如圖1-1所示。四、C語言的上機(jī)步驟2829編輯鏈接編譯執(zhí)行C程序開發(fā)步驟<>程序代碼的錄入,生成源程序*.c語法分析查錯(cuò),翻譯生成目標(biāo)程序*.obj與其它目標(biāo)程序或庫鏈接裝配,生成可執(zhí)行程序*.exe開始編輯編譯有錯(cuò)?連接執(zhí)行結(jié)果正確?結(jié)束源程序f.c目標(biāo)程序f.o庫函數(shù)和其它目標(biāo)程序可執(zhí)行目標(biāo)程序f.exe有不正確正確無30(二)
VisualC++6.0
的基本操作
參考實(shí)驗(yàn)指導(dǎo)書中的"實(shí)驗(yàn)一c程序集成開發(fā)環(huán)境",掌握在visualc++6.0環(huán)境中如何:1.編輯、2.編譯、3.鏈接、4.運(yùn)行一個(gè)c程序。(一)用TurboC2.0C運(yùn)行C程序的步驟31填空題1.函數(shù)體以符號(hào)______開始,以符號(hào)______結(jié)束。2.一個(gè)完整的C程序至少要有一個(gè)______函數(shù)。3.C程序是以______為基本單位,整個(gè)程序由______組成。4.C源程序文件的擴(kuò)展名是______,C目標(biāo)文件的擴(kuò)展名是______。32填空題1.函數(shù)體以符號(hào)______開始,以符號(hào)______結(jié)束。2.一個(gè)完整的C程序至少要有一個(gè)______函數(shù)。3.C程序是以______為基本單位,整個(gè)程序由______組成。4.C源程序文件的擴(kuò)展名是______,C目標(biāo)文件的擴(kuò)展名是______。33第二章
程序的靈魂------算法34主要內(nèi)容本章主要介紹算法的思想及算法的表示方法,以及結(jié)構(gòu)化程序設(shè)計(jì)方法的概念。一、算法及其概念二、結(jié)構(gòu)化程序設(shè)計(jì)方法35(一)算法在程序中的地位一個(gè)程序應(yīng)包括的兩個(gè)方面:
(1)對(duì)數(shù)據(jù)的描述在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)的結(jié)構(gòu)。
(2)對(duì)操作的描述即操作步驟,也就是算法。數(shù)據(jù)和操作的關(guān)系:數(shù)據(jù)是操作的對(duì)象,操作的目的是對(duì)數(shù)據(jù)進(jìn)行加工,以得到期望的結(jié)果。一、算法及其概念
36著名計(jì)算機(jī)科學(xué)家沃斯(NikiklausWirth)提出了一個(gè)公式:
數(shù)據(jù)結(jié)構(gòu)+算法=程序在設(shè)計(jì)程序時(shí),還要考慮采用好的設(shè)計(jì)方法-------結(jié)構(gòu)化程序設(shè)計(jì)方法。因此有:
程序=數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計(jì)方法+語言工具和環(huán)境以上4個(gè)方面是一個(gè)程序設(shè)計(jì)人員應(yīng)具備的知識(shí)。設(shè)計(jì)一個(gè)程序時(shí)要綜合運(yùn)用這幾方面的知識(shí)。本門課程重點(diǎn)講述算法的設(shè)計(jì)。37上述四個(gè)方面中:
算法是靈魂;數(shù)據(jù)結(jié)構(gòu)是加工對(duì)象;語言是工具;編程需要采取合適的方法。算法解決"做什么"和"怎么做"的問題。程序中的按一定順序列出的操作語句,就是算法的體現(xiàn)。通過本門課,大家學(xué)會(huì)使用c語言的語法編寫不太復(fù)雜的c程序。38(二)算法的概念算法的分類
數(shù)值算法
算法
非數(shù)值算法求數(shù)值解,方程的根,求定積分應(yīng)用范圍廣如:排序廣義算法:為解決一個(gè)問題而采取的方法和步驟。計(jì)算機(jī)的算法:能在計(jì)算機(jī)上執(zhí)行,解決某個(gè)問題的方法和步驟。39(三)簡單算法舉例例1:求1X2X3X4X5最原始的方法:
步驟1:求1×2,得結(jié)果2。步驟2:將第1步得到的結(jié)果再乘以3,得結(jié)果6。步驟3:將第2步得到的結(jié)果再乘以4,得結(jié)果24。步驟4:將第3步得到的結(jié)果再乘以5,得120。即最后結(jié)果。想一想:如果按照此方法,求1×2×3×...×100,要寫多少步?因此,上述計(jì)算方法不可??!99步!40改進(jìn)的方法(或通用的方法):先設(shè)兩個(gè)變量p和i,p代表被乘數(shù),i代表乘數(shù)。并且將每一步乘積直接放入被乘數(shù)變量p中。用循環(huán)算法求結(jié)果。步驟1:令p=1
步驟2:令i=2
步驟3:使p×i,并將乘積放入p中。通常表示為
p
×
i=>p
步驟4:使i的值加1,表示為i+1=>i
步驟5:如果i不大于5,返回到步驟3繼續(xù)向下執(zhí)行;否則算法結(jié)束。p中的值即最后結(jié)果。想一想:采用此方法求1×2×3×...×100,如何?簡練!41先設(shè)兩個(gè)變量p和i,p代表被乘數(shù),i代表乘數(shù)。并且將每一步乘積直接放入被乘數(shù)變量p中。用循環(huán)算法求結(jié)果。步驟1:令p=1
步驟2:令i=3
步驟3:使p×i,并將乘積放入p中。通常表示為p×i=>p
步驟4:使i的值加2,表示為i+2=>i
步驟5:如果i不大于13,返回到步驟3繼續(xù)向下執(zhí)行;否則算法結(jié)束。p中的值即最后結(jié)果。想一想:采用此方法求1×3×5×...×101,如何?如果將題目改為求1x3x5x7x9x11x13,如何設(shè)計(jì)算法呢?42思考:求下式的值,怎么寫算法?提示:注意乘數(shù)大小的變化規(guī)律,重復(fù)相乘過程。43例2:有兩個(gè)數(shù)a,b,按大小順序打印它們。步驟1:輸入a,b的值;步驟2:如果a≥b,則先打印a,再打印b;否則,先打印b,再打印a;算法結(jié)束。44例3:將2000-2500的閏年輸出。
閏年條件:(1)能被4整除,但不能被100整除;(2)能被100整除,又能被400整除的年份是閏年。45步驟7:當(dāng)y<=2500時(shí),轉(zhuǎn)到S2繼續(xù)執(zhí)行;否則結(jié)束。步驟1:
y=2000步驟2:如果y不能被4整除,輸出“y不是閏年”,轉(zhuǎn)到S6;步驟3:如果y能被4整除,且不能被100整除,輸出“y是閏年”,轉(zhuǎn)到S6;步驟4:如果y能被100,且能被400整除,輸出“y是閏年”,轉(zhuǎn)到S6;步驟5:輸出“y不是閏年”步驟6:y=y+146算法的5個(gè)特性:
有窮性確定性有零個(gè)或多個(gè)輸入有一個(gè)或多個(gè)輸出有效性47二、算法的表示用自然語言表示用流程圖表示(傳統(tǒng)流程圖和N-S圖)用偽代碼表示用計(jì)算機(jī)語言表示結(jié)構(gòu)化程序的三種基本結(jié)構(gòu):順序、選擇、循環(huán)結(jié)構(gòu)48(一)用自然語言表示算法上節(jié)中討論的例子的算法是用自然語言寫的。自然語言指人們?nèi)粘J褂玫恼Z言,如漢語、英語等。用自然語言表示算法的特點(diǎn):通俗易懂,但不嚴(yán)謹(jǐn),容易產(chǎn)生歧義。除非問題很簡單,一般不用自然語言描述算法。49(二)用流程圖表示算法流程圖采用一些圖形框表示算法要表述的各種操作。美國國家標(biāo)準(zhǔn)化協(xié)會(huì)ANSI規(guī)定了一些常用的流程圖符號(hào):起止框
處理框
輸入輸出框
流程線
或判斷框
連接點(diǎn)
注釋
開始結(jié)束50例1的算法用流程圖來表示計(jì)算1x3x5x...x11的值
步驟1:令p=1
步驟2:令i=1
步驟3:使pxi,并將乘積放入p中。通常表示為pxi=>p
步驟4:使i的值加2,表示為i+2=>i
步驟5:如果i不大于11,返回到步驟3繼續(xù)向下執(zhí)行;否則算法結(jié)束。p中的值即最后結(jié)果。開始1=>p1=>ip×i=>pi+2=>ii≤11真結(jié)束假輸出p的值51例2的算法用流程圖來表示有兩個(gè)數(shù)a,b,按大小順序打印它們。
步驟1:輸入a,b的值;
步驟2:如果a≥b,則先打印a,再打印b;否則,先打印b,再打印a;算法結(jié)束。
真假開始a≥b結(jié)束輸出b,a的值輸入a,b的值輸出a,b的值52步驟1:
y=2000步驟2:如果y不能被4整除,輸出“y不是閏年”,轉(zhuǎn)到S6;步驟3:如果y能被4整除,且不能被100整除,輸出“y是閏年”,轉(zhuǎn)到S6;步驟4:如果y能被100,且能被400整除,輸出“y是閏年”,轉(zhuǎn)到S6;步驟5:輸出“y不是閏年”;步驟6:y=y+1步驟7:當(dāng)y<=2500時(shí),轉(zhuǎn)到S2繼續(xù)執(zhí)行;否則結(jié)束。例3:將2000-2500的閏年輸出。NY開始Y能被4整除結(jié)束輸出“是閏年”輸出“不是閏年”2000=>yY能被100整除Y能被400整除Yy+1=>yY>2500yNNyN53(三)三種基本結(jié)構(gòu)結(jié)構(gòu)化的概念流程圖中跳轉(zhuǎn)過多,難閱讀,難修改解決上述問題的方案規(guī)定一些基本結(jié)構(gòu),按照規(guī)律組成一個(gè)算法結(jié)構(gòu)。整個(gè)算法的結(jié)構(gòu)是由上而下地將各個(gè)基本結(jié)構(gòu)順序排列起來的,從而保證算法的質(zhì)量。
54順序結(jié)構(gòu):
BA虛線框內(nèi)是一個(gè)順序結(jié)構(gòu)。AB兩個(gè)框是順序執(zhí)行的:按圖中所畫的框的順序,先執(zhí)行A操作,再執(zhí)行B操作。55選擇結(jié)構(gòu)也稱為分支結(jié)構(gòu)。虛線框內(nèi)是一個(gè)選擇結(jié)構(gòu)。此結(jié)構(gòu)包括一個(gè)選擇框,框中寫有一個(gè)條件,根據(jù)給定的條件是否成立,從而選擇執(zhí)行A框還是B框。例如:條件可以是i≤101條件PAB成立不成立條件PA成立不成立B操作為空時(shí),畫成直線56循環(huán)結(jié)構(gòu)(當(dāng)型---while型)虛線框內(nèi)是一個(gè)當(dāng)型循環(huán)結(jié)構(gòu)。當(dāng)給定的條件成立時(shí),執(zhí)行A框中的操作;執(zhí)行完A操作后,判條件P是否成立;如果仍成立,繼續(xù)執(zhí)行A操作;如此反復(fù)執(zhí)行A框中的操作,直到條件P不成立為止。條件PA成立不成立57循環(huán)結(jié)構(gòu)(直到型---until型)條件PA成立不成立虛線框內(nèi)是一個(gè)直到型循環(huán)結(jié)構(gòu)。先執(zhí)行A框中的操作;執(zhí)行完A操作后,判條件P是否成立;如果不成立,繼續(xù)執(zhí)行A操作;如此反復(fù)執(zhí)行A框中的操作,直到條件P成立為止。58三種基本結(jié)構(gòu)的共同點(diǎn):只有一個(gè)入口;一個(gè)出口;結(jié)構(gòu)內(nèi)每一部分都有機(jī)會(huì)被執(zhí)行。結(jié)構(gòu)內(nèi)不存在"死循環(huán)"。如條件永遠(yuǎn)成立時(shí),就成了"死循環(huán)"已經(jīng)證明,用上述三種基本結(jié)構(gòu)順序組成的算法結(jié)構(gòu),可以解決任何復(fù)雜的問題。由基本結(jié)構(gòu)構(gòu)成的算法屬于"結(jié)構(gòu)化"的算法只要符合上述的四個(gè)特點(diǎn)的結(jié)構(gòu),都稱為基本結(jié)構(gòu)。59對(duì)例1算法的流程圖的結(jié)構(gòu)化分析計(jì)算1x3x5x...x101的值
步驟1:令p=1
步驟2:令i=3
步驟3:使pxi,并將乘積放入p中。通常表示為pxi=>p
步驟4:使i的值加2,表示為i+2=>i
步驟5:如果i不大于101,返回到步驟3繼續(xù)向下執(zhí)行;否則算法結(jié)束。p中的值即最后結(jié)果。開始1=>p3=>ip×i=>pi+2=>ii≤101真結(jié)束假輸出p的值這兩個(gè)操作之間是順序關(guān)系這是一個(gè)循環(huán)結(jié)構(gòu)這是一個(gè)順序結(jié)構(gòu)上述算法由基本結(jié)構(gòu)組成60對(duì)例2算法的流程圖的結(jié)構(gòu)化分析有兩個(gè)數(shù)a,b,按大小順序打印它們。
步驟1:輸入a,b的值;
步驟2:如果a≥b,則先打印a,再打印b;否則,先打印b,再打印a;算法結(jié)束。
真假開始a≥b結(jié)束輸出b,a的值輸入a,b的值輸出a,b的值這是一個(gè)選擇結(jié)構(gòu)上述算法由基本結(jié)構(gòu)組成61用基本結(jié)構(gòu)的組合表示算法,從而去掉了流程線。避免了隨意的跳轉(zhuǎn)。1973年兩名美國學(xué)者提出了一種新的流程圖形式,并用二人名字的第一個(gè)字母組合命名了該流程圖。即N-S流程圖,也稱盒圖。三種基本結(jié)構(gòu)的表示:P成立AB(四)用N-S流程圖表示算法AB不成立A當(dāng)條件P成立時(shí)直到條件P1成立A62前面的算法用N-S流程圖來表示計(jì)算1x3x5x...x11的值
步驟1:令p=1
步驟2:令i=1
步驟3:使pxi,并將乘積放入p中。通常表示為pxi=>p
步驟4:使i的值加2,表示為i+2=>i
步驟5:如果i不大于11,返回到步驟3繼續(xù)向下執(zhí)行;否則算法結(jié)束。p中的值即最后結(jié)果。這兩個(gè)操作之間是順序關(guān)系1=>P1=>i直到i>11pxi=>pi+2=>i打印P的值這是一個(gè)順序結(jié)構(gòu)這是一個(gè)循環(huán)結(jié)構(gòu)上述算法由基本結(jié)構(gòu)組成63y=2000yesnoy/4余數(shù)為0打印y“非閏年”y/100的余數(shù)不為0yesno打印y“是閏年”y/400的余數(shù)為0yesno打印y“是閏年”打印y“非閏年”y=y+1直到y(tǒng)>2500NY開始Y能被4整除結(jié)束輸出“是閏年”輸出“不是閏年”2000=>yY能被100整除Y能被400整除Yy+1=>yY>2500yNNyN64
(五)用偽碼表示算法概念:偽代碼是用介于自然語言和計(jì)算機(jī)語言之間的文字和符號(hào)來描述算法。特點(diǎn):它如同一篇文章一樣,自上而下地寫下來。每一行(或幾行)表示一個(gè)基本操作。它不用圖形符號(hào),因此書寫方便、格式緊湊,也比較好懂,也便于向計(jì)算機(jī)語言算法(即程序)過渡。用處:適用于設(shè)計(jì)過程中需要反復(fù)修改時(shí)的流程描述。
65
IFxispositiveTHENprintxELSEprint-x也可以用漢字偽代碼表示:
若x為正打印x
否則打印-x也可以中英文混用,如:
IFx為正
printxELSEprint-x例:“打印x的絕對(duì)值”的算法可以用偽代碼表示為:66開始
置t的初值為1
置i的初值為2
當(dāng)i<=5,執(zhí)行下面操作:使t=t×i
使i=i+1
{循環(huán)體到此結(jié)束}輸出t的值結(jié)束也可以寫成以下形式:
BEGIN{算法開始}
1
t2
iwhilei≤5{t×i
ti+1
i}printtEND{算法結(jié)束}求5!。用偽代碼表示算法:67輸出50個(gè)學(xué)生中成績高于80分者的學(xué)號(hào)和成績。用偽代碼表示算法:BEGIN{算法開始}
1
iwhilei≤50{inputniandgii+1
i}1
iwhilei≤50{ifgi≥80printniandgii+1
i}END{算法結(jié)束}68
(六)用計(jì)算機(jī)語言表示算法概念:用計(jì)算機(jī)實(shí)現(xiàn)算法。計(jì)算機(jī)是無法識(shí)別流程圖和偽代碼的。只有用計(jì)算機(jī)語言編寫的程序才能被計(jì)算機(jī)執(zhí)行。因此在用流程圖或偽代碼描述出一個(gè)算法后,還要將它轉(zhuǎn)換成計(jì)算機(jī)語言程序。特點(diǎn):用計(jì)算機(jī)語言表示算法必須嚴(yán)格遵循所用的語言的語法規(guī)則,這是和偽代碼不同的。用處:要完成一件工作,包括設(shè)計(jì)算法和實(shí)現(xiàn)算法兩個(gè)部分。設(shè)計(jì)算法的目的是為了實(shí)現(xiàn)算法。69#include<stdio.h>voidmain(){inti,t;t=1;i=2;while(i<=5){t=t*i;i=i+1;}printf(″%d\n″,t);}用C語言表示求5!。70應(yīng)當(dāng)強(qiáng)調(diào)說明:寫出了C程序,仍然只是描述了算法,并未實(shí)現(xiàn)算法。只有運(yùn)行程序才是實(shí)現(xiàn)算法。應(yīng)該說,用計(jì)算機(jī)語言表示的算法是計(jì)算機(jī)能夠執(zhí)行的算法。71前面的算法用c語言表示#include<stdio.h>voidmain(){intp,i;p=1;i=1;while(i<=11){p=p*i;i=i+2;}printf(“%d\n”,p);}1=>P1=>i直到i>11pxi=>pi+2=>i打印P的值72
2.5結(jié)構(gòu)化程序設(shè)計(jì)方法一個(gè)結(jié)構(gòu)化程序就是用高級(jí)語言表示的結(jié)構(gòu)化算法。用三種基本結(jié)構(gòu)組成的程序必然是結(jié)構(gòu)化的程序,這種程序便于編寫、便于閱讀、便于修改和維護(hù)。
結(jié)構(gòu)化程序設(shè)計(jì)強(qiáng)調(diào)程序設(shè)計(jì)風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,提倡清晰的結(jié)構(gòu)。結(jié)構(gòu)化程序設(shè)計(jì)方法的基本思路是:把一個(gè)復(fù)雜問題的求解過程分階段進(jìn)行,每個(gè)階段處理的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。73采取以下方法來保證得到結(jié)構(gòu)化的程序:自頂向下;逐步細(xì)化;模塊化設(shè)計(jì);結(jié)構(gòu)化編碼。
兩種不同的方法:自頂向下,逐步細(xì)化;自下而上,逐步積累。
74
用這種方法逐步分解,直到作者認(rèn)為可以直接將各小段表達(dá)為文字語句為止。這種方法就叫做“自頂向下,逐步細(xì)化”。
75自頂向下,逐步細(xì)化方法的優(yōu)點(diǎn):
考慮周全,結(jié)構(gòu)清晰,層次分明,作者容易寫,讀者容易看。如果發(fā)現(xiàn)某一部分中有一段內(nèi)容不妥,需要修改,只需找出該部分修改有關(guān)段落即可,與其它部分無關(guān)。我們提倡用這種方法設(shè)計(jì)程序。這就是用工程的方法設(shè)計(jì)程序。76模塊設(shè)計(jì)的方法:模塊化設(shè)計(jì)的思想實(shí)際上是一種“分而治之”的思想,把一個(gè)大任務(wù)分為若干個(gè)子任務(wù),每一個(gè)子任務(wù)就相對(duì)簡單了。在拿到一個(gè)程序模塊以后,根據(jù)程序模塊的功能將它劃分為若干個(gè)子模塊,如果這些子模塊的規(guī)模還嫌大,還再可以劃分為更小的模塊。這個(gè)過程采用自頂向下方法來實(shí)現(xiàn)。子模塊一般不超過50行。劃分子模塊時(shí)應(yīng)注意模塊的獨(dú)立性,即:使一個(gè)模塊完成一項(xiàng)功能,耦合性愈少愈好。77三、程序設(shè)計(jì)步驟分析問題確定解決方案建立數(shù)學(xué)模型設(shè)計(jì)算法用計(jì)算機(jī)語言描述算法(即寫出源程序)上機(jī)調(diào)試源程序:經(jīng)過編輯、編譯、連接、運(yùn)行,得到可執(zhí)行的程序。運(yùn)行程序,得到需要的結(jié)果。78第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式79
本章要點(diǎn)數(shù)據(jù)的描述規(guī)則數(shù)據(jù)的操作規(guī)則80一、C的數(shù)據(jù)類型二、常量與變量三、基本數(shù)據(jù)類型四、運(yùn)算符與表達(dá)式主要內(nèi)容81一、C的數(shù)據(jù)類型(一)什么是數(shù)據(jù)類型?(二)C語言的數(shù)據(jù)類型有哪些?82(一)什么是數(shù)據(jù)類型?C語言中以“數(shù)據(jù)類型”形式存在對(duì)數(shù)據(jù)的描述對(duì)操作的描述數(shù)據(jù)結(jié)構(gòu)+算法程序83數(shù)據(jù)類型基本類型整型字符型實(shí)型(浮點(diǎn)型)枚舉類型構(gòu)造類型數(shù)組類型結(jié)構(gòu)體類型共用體類型指針類型空類型(無值類型)單精度型雙精度型在程序中對(duì)用到的所有數(shù)據(jù)都必須指定其數(shù)據(jù)類型.?不同類型的數(shù)據(jù),所占內(nèi)存的字節(jié)數(shù)不同,對(duì)應(yīng)的操作也不相同。(二)C的數(shù)據(jù)類型84(一)常量(二)變量二、常量與變量85概念在程序運(yùn)行過程中,其值不能被改變的量。分類字面常量(直接常量):12-44.6'a'符號(hào)常量:用一個(gè)標(biāo)識(shí)符代表一個(gè)常量。
字符常量符號(hào)常量的定義格式:#define常量名字面常量舉例:#definePRICE100
#definePI3.14#defineC1’a’習(xí)慣上常量名用大寫,變量名用小寫。意義1、含義清楚。2、在需要改變一個(gè)常量時(shí),能夠做到“一改全改”。符號(hào)常量的定義放在函數(shù)外面。(一)常量86常量——舉例(求某商品總價(jià))#include<stdio.h>#definePRICE100//定義符號(hào)常量voidmain(){ intsum; sum=PRICE*20; printf("%d\n",sum);}單價(jià)——符號(hào)常量數(shù)量——直接常量注意:如再用賦值語句給PRICE賦值是錯(cuò)的
PRICE=200;/*錯(cuò)誤,不能給符號(hào)常量賦值第四章
最簡單的C程序設(shè)計(jì)【教學(xué)要求】1.了解C語言程序的特點(diǎn):C程序是由函數(shù)組成的2.掌握賦值語句構(gòu)成與使用要點(diǎn)。3.熟練掌握格式輸入/輸出函數(shù)的使用方法。4.能編寫簡單的順序結(jié)構(gòu)程序。教學(xué)要點(diǎn)1、C語句概述
C程序結(jié)構(gòu)
C語句的構(gòu)成2、順序結(jié)構(gòu)程序的設(shè)計(jì):賦值語句的使用要點(diǎn)。3、數(shù)據(jù)的輸入與輸出
C語言輸入輸出的實(shí)現(xiàn):C語言沒有提供輸入輸出語句,而是由輸入輸出函數(shù)來實(shí)現(xiàn)的。標(biāo)準(zhǔn)庫函數(shù)的使用。
輸出函數(shù)putchar()、printf()的使用。輸入函數(shù)getchar()、scanf()的使用。...C程序結(jié)構(gòu)C程序源程序文件1源程序文件2源程序文件n預(yù)編譯命令函數(shù)1函數(shù)n說明部分執(zhí)行部分(語句)§4.1
C語句的構(gòu)成1、控制語句:用于完成一定的控制功能。條件語句:if(條件)~else~循環(huán)語句:for()~條件循環(huán):while(){~}條件循環(huán):do{~}while();結(jié)束本次循環(huán)語句:continue終止循環(huán)或switch語句:break多分支選擇語句:switch(){case...;~}轉(zhuǎn)向語句:goto由函數(shù)返回語句:return2、函數(shù)調(diào)用語句:用于完成一次函數(shù)調(diào)用。組成:由一次函數(shù)調(diào)用+“;”構(gòu)成。例:printf(“ThisisaCstatement!”);3、表達(dá)式語句:用于完成一次表達(dá)式操作。組成:由一個(gè)表達(dá)式+“;”構(gòu)成。例:a=3;i++;等4、空語句:用作被轉(zhuǎn)向點(diǎn)或循環(huán)語句中的循環(huán)體。組成:只由一個(gè)“;”構(gòu)成。5、復(fù)合語句:完成一些特定的操作功能。組成:將一些語句用{}括起來構(gòu)成,在程序中當(dāng)作一個(gè)語句看待。例:
{…{z=x+y;t=z/100;printf(“%f”,t);}…}§4.2賦值語句1、構(gòu)成:由賦值表達(dá)式加上一個(gè)分號(hào)(;)構(gòu)成。如:a=12;2、使用要點(diǎn):(1)在賦值表達(dá)式中,“=”作為賦值運(yùn)算符;理解n=n+1的含義與“存儲(chǔ)覆蓋”的原理(2)區(qū)別賦值表達(dá)式與賦值語句是兩個(gè)不同的概念。如:if((a=b)>0)t=a;
(正確)
if((a=b;)>0)t=a;
(錯(cuò)誤)
§4.3數(shù)據(jù)輸入輸出的概念及在C
語言中的實(shí)現(xiàn)(一).所謂輸入輸出是以計(jì)算機(jī)主機(jī)為主體而言的輸出:從計(jì)算機(jī)向外部輸出設(shè)備(顯示器,打印機(jī))
輸出數(shù)據(jù)輸入:從輸入設(shè)備(鍵盤,鼠標(biāo),掃描儀)向計(jì)算機(jī)輸入數(shù)據(jù).(二).C語言本身不提供輸入輸出語句,輸入和輸出操作是由C函數(shù)庫中的函數(shù)來實(shí)現(xiàn)的例如:字符輸入函數(shù):getchar字符輸出函數(shù):putchar格式輸入函數(shù):scanf
格式輸出函數(shù):printf字符串輸入函數(shù):gets字?jǐn)?shù)穿輸出函數(shù):puts(三).在使用系統(tǒng)庫函數(shù)時(shí),要用預(yù)編譯命令“#include”將有關(guān)的“頭文件”包括到用戶源文件中.例如:在調(diào)用標(biāo)準(zhǔn)輸入輸出庫函數(shù)時(shí),文件開頭應(yīng)該有:
#include“stdio.h”
或:
#include<stdio.h>頭文件格式:putchar(c)參數(shù):c為字符常量、變量或表達(dá)式功能:把字符c輸出到顯示器上返值:正常,為顯示的代碼值;4.4字符數(shù)據(jù)的輸入輸出字符輸出函數(shù)#include<stdio.h>voidmain(){intc;chara;c=65;a='B';putchar(c);putchar('\n');putchar(a);}運(yùn)行結(jié)果:AB例格式:getchar()功能:從鍵盤讀一字符返值:正常,返回讀取的代碼值;字符輸入函數(shù)例#include<stdio.h>voidmain(){intc;printf("Enteracharacter:");c=getchar();printf("%c--->hex%x\n",c,c);}運(yùn)行結(jié)果:Enteracharacter:A
A--->hex41格式:printf(“格式控制串”,輸出表)功能:按指定格式向顯示器輸出數(shù)據(jù)返值:正常,返回輸出字節(jié)數(shù);4.5格式輸入輸出格式輸出函數(shù)輸出表:要輸出的數(shù)據(jù)(可以沒有,多個(gè)時(shí)以“,”分隔)格式控制串:包含兩種信息格式說明:
%[修飾符]格式字符
,用于指定輸出格式普通字符或轉(zhuǎn)義序列:原樣輸出格式字符d,ix,Xoucse,Efg%%格式字符:十六進(jìn)制無符號(hào)整數(shù)不帶符號(hào)十進(jìn)制整數(shù)十進(jìn)制整數(shù)指數(shù)形式浮點(diǎn)小數(shù)單一字符字符串八進(jìn)制無符號(hào)整數(shù)小數(shù)形式浮點(diǎn)小數(shù)e和f中較短一種百分號(hào)本身inta=567;printf(“%d”,a);inta=255;printf(“%x”,a);inta=65;printf(“%o”,a);inta=567;printf(“%u”,a);chara=65;printf(“%c”,a);printf(“%s”,“ABC”);floata=567.789;printf(“%e”,a);floata=567.789;printf(“%f”,a);floata=567.789;printf(“%g”,a);printf(“%%”);567ff101567AABC5.677890e+002567.789000567.789%說明 格式字符要用小寫格式字符與輸出項(xiàng)個(gè)數(shù)應(yīng)相同,按先后順序一一對(duì)應(yīng)輸出轉(zhuǎn)換:格式字符與輸出項(xiàng)類型不一致,自動(dòng)按指定格式輸出例inta=3,b=4;printf(“%d%d\n”,a,b);printf(“a=%d,b=%d\n”,a,b);
例inta=3,b=4;printf(“%d%d\n”,a,b);printf(“a=%d,b=%d\n”,a,b);輸出結(jié)果:34a=3,b=4附加格式說明符(修飾符)n對(duì)實(shí)數(shù),指定小數(shù)點(diǎn)后位數(shù)(四舍五入)對(duì)字符串,指定實(shí)際輸出位數(shù)修飾符功能m輸出數(shù)據(jù)域?qū)?數(shù)據(jù)長度<m,左補(bǔ)空格;否則按實(shí)際輸出輸出數(shù)據(jù)在域內(nèi)左對(duì)齊(缺省右對(duì)齊)-指定在有符號(hào)數(shù)的正數(shù)前顯示正號(hào)(+)+輸出數(shù)值時(shí)指定左面不使用的空位置自動(dòng)填00在八進(jìn)制和十六進(jìn)制數(shù)前顯示前導(dǎo)0,0x#在d,o,x,u前,指定輸出精度為long型在e,f,g前,指定輸出精度為double型l例inta=1234;floatf=123.456;charch=‘a(chǎn)’;printf(“%8d,%2d\n”,a,a);printf(“%f,%8f,%8.1f,%.2f,%.2e\n”,f,f,f,f,f);printf(“%3c\n”,ch);運(yùn)行1234,1234結(jié)果:123.456001,123.456001,123.5,123.46,1.23e+002
a例staticchara[]=“Hello,world!”printf(“%s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a);運(yùn)行結(jié)果:Hello,world!
Hello,world!
HelloHelloHel
例例inta=1234;floatf=123.456;staticcharc[]=“Hello,world!”;printf(“%8d,%-8d\n”,a,a);printf(“%10.2f,%-10.1f\n”,f,f);printf(“%10.5s,%-10.3s\n”,c,c);運(yùn)行結(jié)果:1234,1234
123.46,123.5
Hello,Hel例-例inta=1234;floatf=123.456;printf(“%08d\n”,a);printf(“%010.2f\n”,f);printf(“%+08d\n”,a);printf(“%+010.2f\n”,f);例0、+例inta=123;printf(“%o,%#o,%X,%#X\n”,a,a,a,a);
例#//00001234//0000123.46//+0001234//+000123.56//173,0173,7B,0X7B格式輸入函數(shù)格式:scanf(“格式控制串”,地址表)功能:按指定格式從鍵盤讀入數(shù)據(jù),存入地址表指定的存儲(chǔ)單元中,并按回車鍵結(jié)束返值:正常,返回輸入數(shù)據(jù)個(gè)數(shù)地址表:變量的地址,常用取地址運(yùn)算符&格式字符:d,i,o,x,u,c,s,f,e例scanf(“%d”,&a);
輸入:10
則a=10例scanf(“%x”,&a);
輸入:11
則a=17附加格式說明符(修飾符)l修飾符功能hm*用于d,o,x前,指定輸入為short型整數(shù)用于d,o,x前,指定輸入為long型整數(shù)用于e,f前,指定輸入為double型實(shí)數(shù)指定輸入數(shù)據(jù)寬度,遇空格或不可轉(zhuǎn)換字符則結(jié)束抑制符,指定輸入項(xiàng)讀入后不賦給變量例scanf(“%4d%2d%2d”,&yy,&mm,&dd);
輸入19991015
則1999yy,10mm,15dd例scanf(“%3d%*4d%f”,&k,&f);
輸入12345678765.43則123k,8765.43f例scanf(“%2d%*3d%2d”,&a,&b);
輸入1234567
則12a,67b例scanf(“%3c%2c”,&c1,&c2);
輸入abcde
則‘a(chǎn)’c1,‘d’c2輸入分隔符的指定一般以空格、TAB或回車鍵作為分隔符其它字符做分隔符:格式串中兩個(gè)格式符間字符例scanf(“%d%o%x”,&a,&b,&c);printf(“a=%d,b=%d,c=%d\n”,a,b,c);
輸入123123123
輸出a=123,b=83,c=291例scanf(“%d:%d:%d”,&h,&m,&s);
輸入12:30:45則12h,30m,45s例scanf(“%d,%d”,&a,&b)
輸入3,4
則3a,4b例scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);
輸入a=12,b=24,c=36說明:用“%c”格式符時(shí),空格和轉(zhuǎn)義字符作為有效字符輸入如scanf(“%c%c%c”,&c1,&c2,&c3);
若輸入abc
則ac1,
c2,bc3輸入數(shù)據(jù)時(shí),遇以下情況認(rèn)為該數(shù)據(jù)結(jié)束:遇空格、TAB、或回車遇寬度結(jié)束遇非法輸入如scanf(“%d%c%f”,&a,&b,&c);
若輸入1234a123o.26
則1234a,‘a(chǎn)’b,123c4.6
程序舉例#include<math.h>#include<stdio.h>voidmain(){floata,b,c,s,area;scanf("%f,%f,%f",&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%7.2f,--b=%7.2f,--c=%7.2f,--s=%7.2f\n",a,b,c,s);printf("area=%7.2f\n",area);}例輸入三角形邊長,求面積輸入:3,4,6
輸出:a=3.00,--b=4.00,--c=6.00,--s=6.50area=5.33文件包含預(yù)處理命令變量定義輸入數(shù)據(jù)輸出數(shù)據(jù)例從鍵盤輸入大寫字母,用小寫字母輸出#include"stdio.h"voidmain(){charc1,c2;c1=getchar();printf("%c,%d\n",c1,c1);c2=c1+32;printf("%c,%d\n",c2,c2);}輸入:A
輸出:A,65a,97#include<stdio.h>#include<math.h>voidmain(){floata,b,c,disc,x1,x2,p,q;scanf("a=%f,b=%f,c=%f",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("\n\nx1=%5.2f\nx2=%5.2f\n",x1,x2);}輸入:a=1,b=3,c=2
輸出:x1=-1.00x2=-2.00112概念其值可以改變的量稱為變量。(二)變量要素(1)變量名。每個(gè)變量都必須有一個(gè)名字──變量名,變量命名遵循標(biāo)識(shí)符命名規(guī)則。(2)變量值。在程序運(yùn)行過程中,變量值存儲(chǔ)在內(nèi)存中。在程序中,通過變量名來引用變量的值。113標(biāo)識(shí)符identifier1、標(biāo)識(shí)符就是一個(gè)名字(如常量名、變量名、函數(shù)名……)。2、組成:只能由字母、數(shù)字、下劃線組成。且第一個(gè)字符必須為字母或下劃線。3、長度:標(biāo)識(shí)符的有效長度隨系統(tǒng)而異,如果超長,則超長部分被舍棄。VC++6.0中規(guī)定最大長度為247個(gè)字符。建議不超過8個(gè)字符。4、標(biāo)識(shí)符命名的良好習(xí)慣──見名知意。例如,name(姓名)、age(年齡)114下列標(biāo)識(shí)符是否合法,為什么?suma1b2s_name123#ssa.b.c1a8bc思考?
115變量定義數(shù)據(jù)類型變量名[,變量名2……];inta1,a2;floatx1,x2;doubley1,y2;charc1,c2;習(xí)慣上,變量名用小寫字母。常量名用大寫字母。1161、程序中用到的變量必須“先定義(declare),后使用”。2、C語言的關(guān)鍵字不能用作變量名。3、C語言對(duì)英文字母的大小寫敏感,即同一字母的大小寫,被認(rèn)為是兩個(gè)不同的字符。關(guān)于變量的幾點(diǎn)說明117(一)整數(shù)類型(二)實(shí)數(shù)類型(三)字符類型(四)變量賦初值(五)不同類型數(shù)據(jù)間的轉(zhuǎn)換三、基本數(shù)據(jù)類型118整型數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的,數(shù)值是以補(bǔ)碼表示的。(參見教材P41)(一)整數(shù)類型——存儲(chǔ)方式編碼正數(shù)表示方法負(fù)數(shù)表示方法原碼最高位為符號(hào)位(0-正數(shù),1-負(fù)數(shù))。其他位為此數(shù)絕對(duì)值的二進(jìn)制表示。反碼同原碼最高位為符號(hào)位(1),其他位為原碼表示的各位取反。補(bǔ)碼同原碼最高位為符號(hào)位(1),其他位為原碼表示的各位取反再末位加1。119例如:求-10的補(bǔ)碼表示(按16位存儲(chǔ))。-10的原碼1000000000001010除符號(hào)位外各位取反1111111111110101末位加11111111111110110則得到-10的二進(jìn)制補(bǔ)碼的表示。120整數(shù)類型——變量分類及取值范圍類型比特?cái)?shù)范圍int[signed]int16-32768~32767(215-1)unsignedint160~65535short[int]
[signed]short[int]16-32768~32767(215-1)unsignedshort[int]160~65535long[int][signed]long[int]32-2147483648~2147483647unsignedlong[int]320~4294967295121122
類型類型說明符長度數(shù)的范圍基本型int
2字節(jié)-32768~32767
短整型short2字節(jié)-215~215-1
長整型long4字節(jié)-231~231-1
無符號(hào)整型unsigned2字節(jié)0~65535
無符號(hào)短整型unsignedshort2字節(jié)0~65535
無符號(hào)長整型unsignedlong4字節(jié)0~(232-1)123例如:整數(shù)13在內(nèi)存中實(shí)際存放的情況:124思考?
-13在內(nèi)存中實(shí)際存放的情況?125表示方法十進(jìn)制:123,-456,0八進(jìn)制:0123,-0456,十六進(jìn)制:0x123,-0x456以數(shù)字0開頭以0x開頭整數(shù)類型——常量分類基本整型(數(shù)據(jù)范圍與int型一樣)長整型(在數(shù)值后面加“L(l)”,數(shù)據(jù)范圍與longint型一樣)unsignedint如12345u如123l,315L類型匹配規(guī)則一個(gè)整型常量,可以賦給能容納下其值的整型變量126整數(shù)類型——溢出舉例(P44-例3.3)#include<stdio.h>voidmain(){ inta,b; a=32767; b=a+1; printf("%d\n%d",a,b);}32767-32768運(yùn)行結(jié)果127計(jì)算機(jī)中數(shù)的表示及進(jìn)制轉(zhuǎn)換數(shù)碼、基與權(quán)數(shù)碼:表示數(shù)的符號(hào)基:數(shù)碼的個(gè)數(shù)權(quán):每一位所具有的值數(shù)制128各種進(jìn)制之間的轉(zhuǎn)換二進(jìn)制、八進(jìn)制、十六進(jìn)制轉(zhuǎn)換成十進(jìn)制方法:按權(quán)相加129各種進(jìn)制之間的轉(zhuǎn)換(整數(shù))二進(jìn)制、八進(jìn)制、十六進(jìn)制轉(zhuǎn)換成十進(jìn)制方法:按權(quán)相加十進(jìn)制轉(zhuǎn)換成二進(jìn)制、八進(jìn)制、十六進(jìn)制原理:方法:連續(xù)除以基,從低到高記錄余數(shù),直至商為0例把十進(jìn)制數(shù)59轉(zhuǎn)換成二進(jìn)制數(shù)5922921427232120(59)10=(111011)2110111111011余余余余余余例把十進(jìn)制數(shù)159轉(zhuǎn)換成八進(jìn)制數(shù)1598198280(159)10=(237)8237余7余3余2例把十進(jìn)制數(shù)459轉(zhuǎn)換成十六進(jìn)制數(shù)4591628161160(459)10=(1CB)161CB余11余12余1130二進(jìn)制與八進(jìn)制之間的轉(zhuǎn)換二進(jìn)制轉(zhuǎn)換成八進(jìn)制:從右向左,每3位一組(不足3位左補(bǔ)0),轉(zhuǎn)換成八進(jìn)制八進(jìn)制轉(zhuǎn)換成二進(jìn)制:用3位二進(jìn)制數(shù)代替每一位八進(jìn)制數(shù)例(1101001)2=(001,101,001)2=(151)8例(246)8=(010,100,110)2=(10100110)2000~0001~1010~2011~3100~4101~5110~6111~7131二進(jìn)制與十六進(jìn)制之間的轉(zhuǎn)換二進(jìn)制轉(zhuǎn)換成十六進(jìn)制:從右向左,每4位一組(不足4位左補(bǔ)0),轉(zhuǎn)換成十六進(jìn)制十六進(jìn)制轉(zhuǎn)換成二進(jìn)制:用4位二進(jìn)制數(shù)代替每一位十六進(jìn)制數(shù)例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20000~00001~10010~20011~30100~40101~50110~60111~71000~81001~91010~A1011~B1100~C1101~D1110~E1111~F132數(shù)值的表示方法——原碼、反碼和補(bǔ)碼原碼:最高位為符號(hào)位,其余各位為數(shù)值本身的絕對(duì)值反碼:正數(shù):反碼與原碼相同負(fù)數(shù):符號(hào)位為1,其余位對(duì)原碼取反補(bǔ)碼:正數(shù):原碼、反碼、補(bǔ)碼相同負(fù)數(shù):最高位為1,其余位為原碼取反,再對(duì)整個(gè)數(shù)加1133原碼反碼補(bǔ)碼+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000數(shù)的范圍01111111~11111111(-127~+127)01111111~10000000(-127~+127)01111111~10000000(-128~+127)(用一字節(jié)表示數(shù))負(fù)數(shù)補(bǔ)碼轉(zhuǎn)換成十進(jìn)制數(shù):最高位不動(dòng),其余位取反加1例補(bǔ)碼:11111001
取反:10000110
加1:10000111=-7134表示方法十進(jìn)制小數(shù)形式:123.34,-0.0045,0.0指數(shù)形式:<尾數(shù)>E(e)<整型指數(shù)>
如0.23e2,-0.45e-3,3.0E+5規(guī)范化指數(shù)形式數(shù)字和小數(shù)點(diǎn)組成(二)實(shí)數(shù)類型——常量關(guān)于分類實(shí)型常量不分float型和double型。一個(gè)實(shí)型常量,可以賦給一個(gè)實(shí)型變量(float型或double型)。135指數(shù)形式(數(shù)符+小數(shù)部分+指數(shù)部分)小數(shù)部分占的位數(shù)越多,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ùn)營管理場(chǎng)規(guī)則與格式規(guī)范3篇
- 二零二四年度一致行動(dòng)人文化旅游產(chǎn)業(yè)合作協(xié)議合同3篇
- 2025年水電安裝工程設(shè)備采購與安裝合同6篇
- 2025賓館與旅游公司聯(lián)合運(yùn)營客房租賃合同范本2篇
- 2024物流企業(yè)稅收優(yōu)惠適用合同
- 2025年度充電樁充電樁項(xiàng)目融資與投資合同3篇
- 2025廠房買賣合同模板:工業(yè)地產(chǎn)投資合作框架3篇
- 2025年度龍門吊拆除設(shè)備再利用及資源化利用合同范本4篇
- 2025年度裝飾藝術(shù)玻璃定制銷售合同3篇
- 二零二四年倉儲(chǔ)物流中心停車場(chǎng)租賃及倉儲(chǔ)服務(wù)合同3篇
- 公司SWOT分析表模板
- 小學(xué)預(yù)防流行性感冒應(yīng)急預(yù)案
- 肺癌術(shù)后出血的觀察及護(hù)理
- 聲紋識(shí)別簡介
- 生物醫(yī)藥大數(shù)據(jù)分析平臺(tái)建設(shè)-第1篇
- 基于Android的天氣預(yù)報(bào)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 沖鋒舟駕駛培訓(xùn)課件
- 美術(shù)家協(xié)會(huì)會(huì)員申請(qǐng)表
- 聚合收款服務(wù)流程
- 中石化浙江石油分公司中石化溫州靈昆油庫及配套工程項(xiàng)目環(huán)境影響報(bào)告書
- 搞笑朗誦我愛上班臺(tái)詞
評(píng)論
0/150
提交評(píng)論