




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
測繪C語言程序設(shè)計(jì)
太原理工大學(xué)
礦業(yè)工程學(xué)院
測繪科學(xué)與技術(shù)系
測繪C語言程序設(shè)計(jì)
第一章3第一章C語言概述一、程序設(shè)計(jì)語言的發(fā)展二、C語言特點(diǎn)三、簡單的C語言程序介紹四、運(yùn)行C程序的步驟和方法4一、程序設(shè)計(jì)語言的發(fā)展計(jì)算機(jī)程序:一組計(jì)算機(jī)能識別和執(zhí)行的指令只要讓計(jì)算機(jī)執(zhí)行這個程序,計(jì)算機(jī)就會自動地、有條不紊地進(jìn)行工作計(jì)算機(jī)的一切操作都是由程序控制的,離開程序,計(jì)算機(jī)將一事無成計(jì)算機(jī)語言:人和計(jì)算機(jī)交流信息的、計(jì)算機(jī)和人都能識別的語言第一章C語言概述5一、程序設(shè)計(jì)語言的發(fā)展1、機(jī)器語言:由0和1組成的指令2、匯編語言:直接面向處理器的程序設(shè)計(jì)語言3、高級語言通用語言:
Fortran、Basic、C、VB、C++(VC++)數(shù)據(jù)庫語言:Foxbase、FoxPro、SQL、Delphi、PowerBuild網(wǎng)頁制作工具:
HTML、Java第一章C語言概述6一、程序設(shè)計(jì)語言的發(fā)展4、C語言歷史C語言是由著名的計(jì)算機(jī)科學(xué)家DennisRitchie創(chuàng)造的,其歷史可以追溯到ALGOL60。ALGOL60,也稱為A語言,是純粹的面向描述計(jì)算過程的語言。C語言的直接前身B語言就是從BCPL發(fā)展而來的。在1972~1973年間,DenisRitchie改進(jìn)了B語言,為其添加了數(shù)據(jù)類型的概念,并將原來的解釋程序改寫為可以在直接生成機(jī)器代碼的編譯程序,并將其命名為C?,F(xiàn)在,C語言已成為用途最為廣泛的計(jì)算機(jī)高級語言,不僅可以用于編寫系統(tǒng)軟件,還可以用于構(gòu)建各個領(lǐng)域的應(yīng)用軟件。第一章C語言概述7一、程序設(shè)計(jì)語言的發(fā)展5、C語言標(biāo)準(zhǔn)K&RC(Kernighan&Ritchie)C89或ANSIC(AmericanNationalStandardsInstitute)C99或ISO(InternationalOrganizationforStandardization)注意:不同版本的C編譯系統(tǒng)所實(shí)現(xiàn)的語言功能和語法規(guī)則略有差別,因此讀者應(yīng)了解所用的C語言編譯系統(tǒng)的特點(diǎn)(可以參閱相關(guān)手冊),本課程基于ANSIC。第一章C語言概述8二、C語言特點(diǎn)1、語言簡潔、緊湊,使用方便、靈活:32個關(guān)鍵詞、9種控制語句2、運(yùn)算符豐富:34種運(yùn)算符3、數(shù)據(jù)結(jié)構(gòu)豐富:4、C語言是完成模塊化和結(jié)構(gòu)化:5、語法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大,但同時(shí)不易查找錯誤:6、C語言允許直接訪問物理地址,能進(jìn)行位(bit)操作,能實(shí)現(xiàn)匯編語言的大部分功能,可以直接對硬件進(jìn)行操作:有人把C稱為“高級語言中的低級語言”或“中級語言”,意為兼有高級和低級語言的特點(diǎn)。7、生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高:8、用C語言編寫的程序可移植性好(與匯編語言相比)第一章C語言概述9三、簡單的C語言程序介紹例1在屏幕上顯示:Programmingisfun!第一章C語言概述10三、簡單的C語言程序介紹例1在屏幕上顯示:
Programmingisfun!#include<stdio.h>編譯預(yù)處理命令voidmain()主函數(shù){printf("Programmingisfun!\n");語句結(jié)束}輸出函數(shù)3.語句由;結(jié)束換行符第一章C語言概述11三、簡單的C語言程序介紹例2.1:計(jì)算并顯示2個數(shù)的和#include<stdio.h>voidmain(){ intvalue1,value2,sum; 變量定義
value1=5; value2=2; 變量使用
sum=value1+value2; printf("Thesumis%d\n",sum);
輸出結(jié)果}第一章C語言概述12三、簡單的C語言程序介紹例2.2:計(jì)算2個數(shù)的和,以算式的形式顯示#include<stdio.h>voidmain(){ intvalue1,value2,sum; value1=5; value2=2; sum=value1+value2; printf("%d+%d=%d\n",value1,value2,sum);}第一章C語言概述13三、簡單的C語言程序介紹例3:輸入2個數(shù),并求兩數(shù)之和#include<stdio.h>voidmain(){intvalue1,value2,sum;printf("Input2numbers:\n");輸入提示
scanf("%d%d",&value1,&value2);讀入2個數(shù)
sum=value1+value2;printf("%d+%d=%d\n",value1,value2,sum);}第一章C語言概述14三、簡單的C語言程序介紹例4:輸入m,n計(jì)算m!和n!#include<stdio.h>voidmain(){intm,n,resm,resn;scanf("%d%d",&m,&n);resm=fact(m);/*調(diào)用函數(shù)fact計(jì)算m!*/resn=fact(n);
/*調(diào)用函數(shù)fact計(jì)算n!*/printf("%d,%d\n",resm,resn);}求階乘函數(shù)intfact(intk)/*函數(shù)定義*/{inti,y=1;for(i=2;i<=k;i++)y=y*i;/*計(jì)算k!*/returny;/*結(jié)果返回*/}第一章C語言概述15三、簡單的C語言程序介紹1、C程序由函數(shù)構(gòu)成:程序容易實(shí)現(xiàn)模塊化。2、一個函數(shù)由兩部分組成:函數(shù)的首部,即函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)參數(shù)(形參)名、參數(shù)類型。函數(shù)體,即函數(shù)首部下面的大括弧{……}內(nèi)的部分。如果一個函數(shù)內(nèi)有多個大括弧,則最外層的一對{}為函數(shù)體的范圍。聲明部分:在這部分中定義所用到的變量,在聲明部分中要對所調(diào)用的函數(shù)進(jìn)行聲明。執(zhí)行部分:由若干個語句組成。intmax(intx,
inty)↓↓↓↓↓↓函數(shù)類型函數(shù)名函數(shù)參數(shù)類型函數(shù)參數(shù)名函數(shù)參數(shù)類型函數(shù)參數(shù)名一個函數(shù)名后面必須跟一對圓括弧,函數(shù)參數(shù)可以沒有,如main()第一章C語言概述某些情況可既無聲明也無執(zhí)行,即空函數(shù),什么也不執(zhí)行,但合法。16三、簡單的C語言程序介紹3、一個C程序總是從main函數(shù)開始執(zhí)行的,而不論main函數(shù)在整個程序中的位置如何(main函數(shù)可以放在程序最前頭,也可以放在程序最后,或在一些函數(shù)之前,在另一些函數(shù)之后)。4、C程序書寫格式自由,一行內(nèi)可以寫幾個語句,一個語句可以分寫在多行上。C程序沒有行號,也不像Fortran那樣嚴(yán)格規(guī)定書寫格式(語句必須從某一列開始書寫)。5、每個語句和數(shù)據(jù)定義的最后必須有一個分號。分號是C語句的必要組成部分。6、C語言本身沒有輸入輸出語句。輸入和輸出的操作是由庫函數(shù)scanf和printf等函數(shù)來完成的。7、可以用/*……*/對C程序中的任何部分作注釋。第一章C語言概述在C99標(biāo)準(zhǔn)中,提供另外一種注釋符號//……注意://……用于單行注釋;/*……*/用于單行或多行注釋17四、運(yùn)行C程序的步驟和方法1、運(yùn)行C程序的步驟輸入與編輯源程序?qū)υ闯绦蜻M(jìn)行編譯與庫函數(shù)連接運(yùn)行目標(biāo)程序第一章C語言概述18四、運(yùn)行C程序的步驟和方法1、可執(zhí)行代碼源程序
編譯連接運(yùn)行
第一章C語言概述19四、運(yùn)行C程序的步驟和方法2、C程序運(yùn)行方法目前使用的大多數(shù)C編譯系統(tǒng)都是集成環(huán)境(IDE),把編輯、編譯、連接和運(yùn)行等操作全部集中在一個界面上進(jìn)行??梢杂貌煌木幾g系統(tǒng)對C程序進(jìn)行操作。常用的有、TurboC3.0++、VisualC++等第一章C語言概述20四、運(yùn)行C程序的步驟和方法3、環(huán)境下運(yùn)行C程序安裝第一章C語言概述21四、運(yùn)行C程序的步驟和方法3、環(huán)境下運(yùn)行C程序運(yùn)行新建源程序:C++SourceFile、路徑(默認(rèn)創(chuàng)建一個同名的項(xiàng)目和工作區(qū)。當(dāng)?shù)谝淮螆?zhí)行時(shí)還會自動創(chuàng)建一個Debug文件夾,存放調(diào)試文件,最后產(chǎn)生的可執(zhí)行程序也存放在這里。)保存源程序:保存為.c文件第一章C語言概述22四、運(yùn)行C程序的步驟和方法3、環(huán)境下運(yùn)行C程序運(yùn)行測繪C語言程序設(shè)計(jì)
第二章24第二章程序的靈魂一、算法的概念二、簡單算法舉例三、算法的特性四、怎樣表示一個算法五、結(jié)構(gòu)化程序設(shè)計(jì)方法25一、算法的概念
一個程序應(yīng)包括以下兩方面內(nèi)容:數(shù)據(jù)結(jié)構(gòu)(datastructure):對數(shù)據(jù)的描述,在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式。算法(algorithm)
:對操作的描述,即操作步驟。數(shù)據(jù)結(jié)構(gòu)+算法=程序(沃思(NikiklausWirth))完整的程序設(shè)計(jì):程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計(jì)方法+語言工具和環(huán)境↓↓↓↓
靈魂加工對象合適的方法工具第二章程序的靈魂26一、算法的概念1、算法的概念廣義:為解決一個問題而采取的方法和步驟,就稱為“算法”。例:1+2,+3,…,+100 加99次100+(1+99)+(2+98)+…+(49+51)+50=100+49×100+50=5050 加51次第二章程序的靈魂27一、算法的概念1、算法的概念計(jì)算機(jī)能執(zhí)行的算法數(shù)值算法:求數(shù)值解。例如,求方程根等。非數(shù)值算法:包括的面十分廣泛,最常見的是用于事務(wù)管理領(lǐng)域。例如,排序算法、圖書檢索等。
第二章程序的靈魂28二、簡單算法舉例例:求1×2×3×4×5步驟1:先求1×2,得到結(jié)果2。步驟2:將步驟1得到的乘積2再乘以3,得到結(jié)果6。步驟3:將6再乘以4,得24。步驟4:將24再乘以5,得120。這就是最后的結(jié)果。第二章程序的靈魂這樣的算法雖然是正確的,但太繁瑣。如果要求1×2×…×1000,則要寫999個步驟,顯然是不可取的。而且每次都直接使用上一步驟的數(shù)值結(jié)果(如2,6,24等),也不方便。應(yīng)當(dāng)找到一種通用的表示方法。29二、簡單算法舉例可以設(shè)兩個變量,一個變量代表被乘數(shù),一個變量代表乘數(shù)。不另設(shè)變量存放乘積結(jié)果,而直接將每一步驟的乘積放在被乘數(shù)變量中。設(shè)p為被乘數(shù),i為乘數(shù)。用循環(huán)算法來求結(jié)果。可以將算法改寫為:S1:使p=1S2:使i=2S3:使p×i,乘積仍放在變量p中,可表示為p×i=>pS4:使i的值加1,即i+1=>iS5:如果i不大于5,返回重新執(zhí)行步驟S3以及其后的步驟S4和S5;否則,算法結(jié)束。最后得到p的值就是5!的值。第二章程序的靈魂上面的S1,S2…代表步驟1,步驟2……S是step(步)的縮寫。這是寫算法的習(xí)慣用法。30二、簡單算法舉例如果題目改為求1×3×5×7×9×11S1:1=>pS2:3=>iS3:p×i=>pS4:i+2=>iS5:若i≤11,返回S3;否則,結(jié)束。第二章程序的靈魂可以看出,用這種方法表示的算法具有通用性、靈活性。S3到S5組成一個循環(huán),在實(shí)現(xiàn)算法時(shí),要反復(fù)多次執(zhí)行S3、S4、S5等步驟,直到某一時(shí)刻,執(zhí)行S5步驟時(shí)經(jīng)過判斷,乘數(shù)i已超過規(guī)定的數(shù)值而不返回S3步驟為止,此時(shí)算法結(jié)束,變量p的值就是所求結(jié)果。31二、簡單算法舉例例:有50個學(xué)生,要求將他們之中成績在80分以上者打印出來。用n表示學(xué)生學(xué)號,n1代表第一個學(xué)生學(xué)號,ni代表第i個學(xué)生學(xué)號。用g代表學(xué)生成績,gi代表第i個學(xué)生成績,算法可表示如下。S1:1=>iS2:如果gi≥80,則打印ni和gi,否則不打印S3:i+1=>iS4:如果i≤50,返回S2,繼續(xù)執(zhí)行;否則,算法結(jié)束。第二章程序的靈魂變量i作為下標(biāo),用它來控制序號(第幾個學(xué)生,第幾個成績)。當(dāng)i超過50時(shí),表示已對50個學(xué)生的成績處理完畢,算法結(jié)束。32二、簡單算法舉例例:判定2000—2500年中的每一年是否閏年,將結(jié)果輸出。何為閏年?能被4整除,但不能被100整除的年份都是閏年,如1996年,2004年是閏年;能被100整除,又能被400整除的年份是閏年。如1600年、2000年是閏年。第二章程序的靈魂33二、簡單算法舉例算法:設(shè)y為被檢測的年份??刹扇∫韵虏襟E:S1:2000=>yS2:y不能被4整除,則輸出y“不是閏年”。然后轉(zhuǎn)到S6S3:若y能被4整除,不能被100整除,則輸出y“是閏年”。然后轉(zhuǎn)到S6S4:若y能被100整除,又能被400整除,輸出y“是閏年”;否則輸出“不是閏年”。然后轉(zhuǎn)到S6S5:輸出y“不是閏年”S6:y+1=>yS7:當(dāng)y≤2500時(shí),轉(zhuǎn)S2繼續(xù)執(zhí)行,如y>2500,算法停止。第二章程序的靈魂34二、簡單算法舉例算法:第二章程序的靈魂在這個算法中,每做一步,都分別分離出一些范圍(已能判定為閏年或非閏年),逐步縮小范圍,使被判斷的范圍愈來愈小,直至執(zhí)行S5時(shí),只可能是非閏年。“其他”包括能被4整除,又能被100整除,而不能被400整除的那些年份(如1900年),是非閏年。year不能被4整除非閏年year被4整除,但不能被100整除閏年year被100整除,又能被400整除閏年其他非閏年35二、簡單算法舉例例算法:S1:1=>signS2:1=>sumS3:2=>denoS4:(-1)×sign=>signS5:sign×(1/deno)=>termS6:sum+term=>sumS7:deno+1=>denoS8:若deno≤100返回S4;否則算法結(jié)束。第二章程序的靈魂單詞作變量名,算法易于理解sign:數(shù)值符號;sum:累加和;deno:分母;term:某一項(xiàng)反復(fù)執(zhí)行S4到S8,直到分母大于100為止。一共執(zhí)行99次循環(huán),向sum累加了99個分?jǐn)?shù)。-1-1/21-1/2=>sum(1/2)3滿足,返回S436二、簡單算法舉例例算法:S1:1=>signS2:1=>sumS3:2=>denoS4:(-1)×sign=>signS5:sign×(1/deno)=>termS6:sum+term=>sumS7:deno+1=>denoS8:若deno≤100返回S4;否則算法結(jié)束。第二章程序的靈魂11/31/2+1/3=>sum(5/6)4滿足,返回S437二、簡單算法舉例例:對一個大于或等于3的正整數(shù),判斷它是不是一個素?cái)?shù)概念:指除了1和該數(shù)本身之外,不能被其他任何整數(shù)整除的數(shù)。例如,13是素?cái)?shù),因?yàn)樗荒鼙?,3,4,…,12整除。算法:判斷一個數(shù)n(n≥3)是否素?cái)?shù)的方法是:將n作為被除數(shù),將2到(n-1)各個整數(shù)輪流作為除數(shù),如果都不能被整除,則n為素?cái)?shù)。S1:輸入n的值S2:2=>i(i作為除數(shù))S3:n被i除,得余數(shù)rS4:如果r=0,表示n能被i整除,則打印n“不是素?cái)?shù)”,算法結(jié)束;否則執(zhí)行S5S5:i+1=>iS6:如果i≤n-1,返回S3;否則打印n“是素?cái)?shù)”,然后結(jié)束。第二章程序的靈魂38三、算法的特性1、有窮性:一個算法應(yīng)包含有限的操作步驟,而不能是無限的。2、確定性:算法中的每一個步驟都應(yīng)當(dāng)是確定的,而不應(yīng)當(dāng)是含糊的、模棱兩可的。3、有零個或多個輸入:所謂輸入是指在執(zhí)行算法時(shí)需要從外界取得必要的信息。4、有一個或多個輸出:算法的目的是為了求解,“解”就是輸出。沒有輸出的算法是沒有意義的。
5、有效性:算法中的每一個步驟都應(yīng)當(dāng)能有效地執(zhí)行,并得到確定的結(jié)果。第二章程序的靈魂deno>0n被i除,得余數(shù)r(√)n被一個整數(shù)除,得余數(shù)r(×)除數(shù)不能為039四、怎樣表示一個算法自然語言傳統(tǒng)流程圖結(jié)構(gòu)化流程圖偽代碼PAD圖(ProblemAnalysisDiagram)第二章程序的靈魂40四、怎樣表示一個算法1、用自然語言表示算法2、用流程圖表示算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖4、用N-S流程圖表示算法5、用偽代碼表示算法6、用計(jì)算機(jī)語言表示算法第二章程序的靈魂41四、怎樣表示一個算法1、用自然語言表示算法自然語言就是人們?nèi)粘J褂玫恼Z言。用自然語言表示通俗易懂,但文字冗長,容易出現(xiàn)“歧義性”。自然語言表示的含義往往不太嚴(yán)格,要根據(jù)上下文才能判斷其正確含義。此外,用自然語言描述包含分支和循環(huán)的算法,不很方便。因此,除了很簡單的問題以外,一般不用自然語言描述算法。第二章程序的靈魂42四、怎樣表示一個算法2、用流程圖表示算法(傳統(tǒng)流程圖)美國國家標(biāo)準(zhǔn)化協(xié)會ANSI(AmericanNationalStandardInstitute)規(guī)定了一些常用的流程圖符號。第二章程序的靈魂43四、怎樣表示一個算法2、用流程圖表示算法(傳統(tǒng)流程圖)例:求1×2×3×4×5第二章程序的靈魂1ti>5開始2it*iti+1i結(jié)束NY44四、怎樣表示一個算法2、用流程圖表示算法(傳統(tǒng)流程圖)例:有50個學(xué)生,要求將成績在80分以上的學(xué)生的學(xué)號和成績輸出。第二章程序的靈魂1ii>50開始i+1i結(jié)束NY輸入ni、gi1i開始gi≧80輸出ni、gii+1ii>50NYYN①如果包括輸入數(shù)據(jù)部分1ii>50開始i+1i結(jié)束NY輸入ni、gi1igi≧80輸出ni、gii+1ii>50NYYN如果包括輸入數(shù)據(jù)部分①①47四、怎樣表示一個算法2、用流程圖表示算法(傳統(tǒng)流程圖)例:判定2000—2500年中的每一年是否閏年,將結(jié)果輸出。第二章程序的靈魂NYNYYNYN49四、怎樣表示一個算法2、用流程圖表示算法(傳統(tǒng)流程圖)流程圖是表示算法的較好的工具一個流程圖包括以下幾部分:表示相應(yīng)操作的框帶箭頭的流程線(流程線不要忘記畫箭頭,否則難以判定各框的執(zhí)行次序)框內(nèi)外必要的文字說明第二章程序的靈魂50四、怎樣表示一個算法2、用流程圖表示算法(傳統(tǒng)流程圖)傳統(tǒng)的流程圖用流程線指出各框的執(zhí)行順序,對流程線的使用沒有嚴(yán)格限制。因此,使用者可以不受限制地使流程隨意地轉(zhuǎn)來轉(zhuǎn)去,使流程圖變得毫無規(guī)律。第二章程序的靈魂BS型算法Abowlofspaghetti缺點(diǎn):難以閱讀,也難以修改,從而使算法的可靠性和可維護(hù)性難以保證。解決辦法:限制流程的無規(guī)律任意轉(zhuǎn)向。51四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖三種基本結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu),或稱選取結(jié)構(gòu),或稱分支結(jié)構(gòu)循環(huán)結(jié)構(gòu),它又稱重復(fù)結(jié)構(gòu)。有兩類循環(huán)結(jié)構(gòu):當(dāng)型(While型)循環(huán)結(jié)構(gòu)直到型(Until型)循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu),作為表示一個良好算法的基本單元。第二章程序的靈魂52四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖三種基本結(jié)構(gòu)-順序結(jié)構(gòu)、選擇結(jié)構(gòu)第二章程序的靈魂順序結(jié)構(gòu)選擇結(jié)構(gòu)53四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖三種基本結(jié)構(gòu)-循環(huán)結(jié)構(gòu)第二章程序的靈魂While型循環(huán)結(jié)構(gòu)Until型循環(huán)結(jié)構(gòu)54四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖三種基本結(jié)構(gòu)的共同特點(diǎn)只有一個入口。只有一個出口。結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會被執(zhí)行到。對每一個框來說,都應(yīng)有一條從入口到出口的路徑通過它。結(jié)構(gòu)內(nèi)不存在“死循環(huán)”(無終止的循環(huán))。第二章程序的靈魂請注意,一個菱形判斷框有兩個出口,而一個選擇結(jié)構(gòu)只有一個出口。不要將菱形框的出口和選擇結(jié)構(gòu)的出口混淆。區(qū)別于空循環(huán)55四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖不正確的流程圖第二章程序的靈魂沒有一條從入口到出口的路徑通過A框死循環(huán)56四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖總結(jié):由以上三種基本結(jié)構(gòu)順序組成的算法結(jié)構(gòu),可以解決任何復(fù)雜的問題。由基本結(jié)構(gòu)所構(gòu)成的算法屬于“結(jié)構(gòu)化”的算法,它不存在無規(guī)律的轉(zhuǎn)向,只在本基本結(jié)構(gòu)內(nèi)才允許存在分支和向前或向后的跳轉(zhuǎn)。擴(kuò)展:基本結(jié)構(gòu)不一定只限于上面三種,只要具有上述4個特點(diǎn)的都可以作為基本結(jié)構(gòu)。人們可以自己定義基本結(jié)構(gòu),并由這些基本結(jié)構(gòu)組成結(jié)構(gòu)化程序。第二章程序的靈魂57四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖擴(kuò)展:如圖所示的是一個多分支選擇結(jié)構(gòu),根據(jù)給定的表達(dá)式的值決定執(zhí)行哪一個框。結(jié)構(gòu)也是一個入口和一個出口,并且有上述全部的4個特點(diǎn)。由它們構(gòu)成的算法結(jié)構(gòu)也是結(jié)構(gòu)化的算法。但是,可以認(rèn)為此結(jié)構(gòu)是由三種基本結(jié)構(gòu)派生出來的。第二章程序的靈魂多分支選擇結(jié)構(gòu)58四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖用N-S流程圖表示:1973年美國學(xué)者和提出了一種新的流程圖形式。在這種流程圖中,完全去掉了帶箭頭的流程線。全部算法寫在一個矩形框內(nèi),在該框內(nèi)還可以包含其他的從屬于它的框,或者說,由一些基本的框組成一個大的框。這種流程圖又稱N-S結(jié)構(gòu)化流程圖。
第二章程序的靈魂59四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖N-S流程圖表示順序結(jié)構(gòu)、選擇結(jié)構(gòu)
第二章程序的靈魂順序結(jié)構(gòu)選擇結(jié)構(gòu)60四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖N-S流程圖表示循環(huán)結(jié)構(gòu)
第二章程序的靈魂While型循環(huán)結(jié)構(gòu)Until型循環(huán)結(jié)構(gòu)61四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖用以上3種N-S流程圖中的基本框,可以組成復(fù)雜的N-S流程圖,以表示算法。
第二章程序的靈魂圖中的A框或B框,可以是一個簡單的操作,也可以是3個基本結(jié)構(gòu)之一。A框是一個選擇結(jié)構(gòu)B框是一個循環(huán)結(jié)構(gòu)62四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖例:求5!算法用N-S圖表示。
第二章程序的靈魂直到i>51t輸出t2it*iti+1i63四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖例:將50名學(xué)生中成績高于80分的學(xué)號和成績打印出來。
第二章程序的靈魂有輸入數(shù)據(jù)
無輸入數(shù)據(jù)64四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖例:判定閏年的算法用N-S圖表示
第二章程序的靈魂直到y(tǒng)ear>25002000yearyear+1year否是year%4為0否是輸出year非閏年year%100不為0year%400為0是否輸出year非閏年輸出year閏年輸出year閏年65四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖例:
第二章程序的靈魂直到deno>100deno+1deno輸出sum1sum1sign2deno(-1)*signsignsign*(1/deno)termsum+termsum66四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖例:判別素?cái)?shù)的算法用N-S流程圖表示。
第二章程序的靈魂出口1出口2循環(huán)有兩個出口,不符合基本結(jié)構(gòu)的特點(diǎn),無法直接用N-S流程圖的三種基本結(jié)構(gòu)的符號來表示,必須先作必要的變換輸入nr=0是否0w2in%ir1wi+1i直到i>或w≠0w=0是否輸出n是素?cái)?shù)輸出n不是素?cái)?shù)69四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖N-S圖表示算法的優(yōu)點(diǎn):比文字描述直觀、形象、易于理解;它比傳統(tǒng)流程圖緊湊易畫,尤其是它廢除了流程線,整個算法結(jié)構(gòu)是由各個基本結(jié)構(gòu)按順序組成的。N-S流程圖中的上下順序就是執(zhí)行時(shí)的順序,即圖中位置在上面的先執(zhí)行,位置在下面的后執(zhí)行。寫算法和看算法只需從上到下進(jìn)行就可以了,十分方便。用N-S圖表示的算法都是結(jié)構(gòu)化的算法(它不可能出現(xiàn)流程無規(guī)律的跳轉(zhuǎn),而只能自上而下地順序執(zhí)行)。
第二章程序的靈魂70四、怎樣表示一個算法3、三種基本結(jié)構(gòu)和改進(jìn)的流程圖總結(jié)結(jié)構(gòu)化的算法是由一些基本結(jié)構(gòu)順序組成的;每個基本結(jié)構(gòu)又可以包含其他的基本結(jié)構(gòu);在基本結(jié)構(gòu)之間不存在向前或向后的跳轉(zhuǎn),流程的轉(zhuǎn)移只存在于一個基本結(jié)構(gòu)范圍之內(nèi)(如循環(huán)中流程的跳轉(zhuǎn));一個非結(jié)構(gòu)化的算法可以用一個等價(jià)的結(jié)構(gòu)化算法代替,其功能不變。如果一個算法不能分解為若干個基本結(jié)構(gòu),則它必然不是一個結(jié)構(gòu)化的算法。
第二章程序的靈魂71四、怎樣表示一個算法4、偽代碼表示算法概念:偽代碼是用介于自然語言和計(jì)算機(jī)語言之間的文字和符號來描述算法。特點(diǎn):它如同一篇文章,自上而下地寫下來。每一行(或幾行)表示一個基本操作。它不用圖形符號,因此書寫方便、格式緊湊,也比較好懂,便于向計(jì)算機(jī)語言算法(即程序)過渡。
第二章程序的靈魂72四、怎樣表示一個算法4、偽代碼表示算法例“打印x的絕對值”的算法可以用偽代碼表示
第二章程序的靈魂英文IFxispositiveTHEN printxELSEprint–x中文若x為正
打印x否則打印–x中英文混用IFx為正 printxELSEprint–x73四、怎樣表示一個算法4、偽代碼表示算法例求5!。用偽代碼表示的算法
第二章程序的靈魂開始
置t的初值為1
置i的初值為2
當(dāng)i<=5,執(zhí)行下面操作: 使t=t×i
使i=i+1 (循環(huán)體到此結(jié)束) 打印t的值結(jié)束也可以寫成以下形式:BEGIN(算法開始) 1=>t 2=>i whilei<=5 {t×i=>t i+1=>i} printtEND(算法結(jié)束)74四、怎樣表示一個算法4、偽代碼表示算法例:打印出50個學(xué)生中成績高于80分者的學(xué)號和成績。用偽代碼表示的算法
第二章程序的靈魂BEGIN(算法開始) 1=>i whilei<=50 {inputniandgi i+1=>i} 1=>i whilei<=50 {ifgi≥80printniandgi i+1=>i}END(算法結(jié)束)75四、怎樣表示一個算法4、偽代碼表示算法偽代碼書寫格式比較自由,容易表達(dá)出設(shè)計(jì)者的思想。用偽代碼寫的算法很容易修改。用偽代碼很容易寫出結(jié)構(gòu)化的算法。但是用偽代碼寫算法不如流程圖直觀,可能會出現(xiàn)邏輯上的錯誤(例如循環(huán)或選擇結(jié)構(gòu)的范圍搞錯等)。
第二章程序的靈魂76四、怎樣表示一個算法5、用計(jì)算機(jī)語言表示算法概念:計(jì)算機(jī)是無法識別流程圖和偽代碼。只有用計(jì)算機(jī)語言編寫的程序才能被計(jì)算機(jī)執(zhí)行(當(dāng)然還要經(jīng)過編譯成目標(biāo)程序才能被計(jì)算機(jī)識別和執(zhí)行)。因此,在用流程圖或偽代碼描述出一個算法后,還要將它轉(zhuǎn)換成計(jì)算機(jī)語言程序。特點(diǎn):用計(jì)算機(jī)語言表示算法必須嚴(yán)格遵循所用語言的語法規(guī)則,這是和偽代碼不同的。作用:要完成一件工作,包括設(shè)計(jì)算法和實(shí)現(xiàn)算法兩個部分。設(shè)計(jì)算法的目的是為了實(shí)現(xiàn)算法。應(yīng)當(dāng)強(qiáng)調(diào)說明的是,寫出了C程序,仍然只是描述了算法,并未實(shí)現(xiàn)算法,只有運(yùn)行程序才是實(shí)現(xiàn)算法。應(yīng)該說,用計(jì)算機(jī)語言表示的算法是計(jì)算機(jī)能夠執(zhí)行的算法。
第二章程序的靈魂77四、怎樣表示一個算法6、結(jié)構(gòu)化程序設(shè)計(jì)方法一個結(jié)構(gòu)化程序就是用高級語言表示的結(jié)構(gòu)化算法。用三種基本結(jié)構(gòu)組成的程序必然是結(jié)構(gòu)化的程序,這種程序便于編寫、閱讀、修改和維護(hù)。這就減少了程序出錯的機(jī)會,提高了程序的可靠性。結(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ì)方法的基本思路是,把一個復(fù)雜問題的求解過程分階段進(jìn)行,每個階段處理的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。
第二章程序的靈魂78四、怎樣表示一個算法6、結(jié)構(gòu)化程序設(shè)計(jì)方法采取以下方法保證得到結(jié)構(gòu)化的程序自頂向下逐步細(xì)化模塊化設(shè)計(jì)結(jié)構(gòu)化編碼兩種不同的方法自頂向下,逐步細(xì)化自下而上,逐步積累
第二章程序的靈魂79四、怎樣表示一個算法6、結(jié)構(gòu)化程序設(shè)計(jì)方法模塊化程序設(shè)計(jì)方法模塊化設(shè)計(jì)的思想實(shí)際上是一種“分而治之”的思想,把一個大任務(wù)分為若干個子任務(wù),每一個子任務(wù)就相對簡單了。在拿到一個程序模塊(實(shí)際上是程序模塊的任務(wù)書)以后,根據(jù)程序模塊的功能將它劃分為若干個子模塊,如果嫌這些子模塊的規(guī)模大,還可以劃分為更小的模塊。這個過程采用自頂向下的方法來實(shí)現(xiàn)。程序中的子模塊一般不超過50行劃分子模塊時(shí)應(yīng)注意模塊的獨(dú)立性,即使一個模塊完成一項(xiàng)功能,耦合性愈少愈好。
第二章程序的靈魂測繪C語言程序設(shè)計(jì)
第三章81第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式82第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式一、C語言的數(shù)據(jù)類型數(shù)據(jù)類型構(gòu)造類型指針類型(*)空類型(無值類型)
void枚舉類型enum數(shù)組類型結(jié)構(gòu)類型struct聯(lián)合類型union基本類型整型int字符型char實(shí)型(浮點(diǎn)型)單精度實(shí)型float雙精度實(shí)型double長雙精度實(shí)型
longdouble短整型shortint基本整型int長整型longint雙長整型longlongint(C99)枚舉類型enum83第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式一、C語言的數(shù)據(jù)類型類型,就是對數(shù)據(jù)分配存儲單元的安排,包括存儲單元的長度(占多少字節(jié))以及數(shù)據(jù)的存儲形式不同的類型分配不同的長度和存儲形式不同類型數(shù)據(jù)可進(jìn)行的操作也不同84第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式二、常量和變量1、常量和符號常量常量:在程序運(yùn)行過程中,其值不能被改變的量。符號常量:用一個標(biāo)識符來代表一個常量。
整型常量:如1000,12345,0,-345
實(shí)型常量:十進(jìn)制小數(shù)形式:如指數(shù)形式:如12.34e3(代表12.34×103)
字符常量:如'?'轉(zhuǎn)義字符:如'\n'
字符串常量:如"TYUT"
符號常量:字面常量(直接常量)
習(xí)慣符號常量名用大寫
含義清楚
在需要改變一個常量時(shí)能做到“一改全改”85第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式二、常量和變量1、常量和符號常量例3.1符號常量的使用
#definePRICE30
#include<stdio.h>
voidmain()
{
intnum,total;
num=10;
total=num*PRICE;
printf(″total=%d\n″,total);
}運(yùn)行結(jié)果:total=300程序中用#define命令行定義PRICE代表常量30,此后凡在本文件中出現(xiàn)的PRICE都代表30,可以和常量一樣進(jìn)行運(yùn)算注意:如再用賦值語句給PRICE賦值是錯的PRICE=40;//錯誤,不能給符號常量賦值86第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式二、常量和變量2、變量變量在程序運(yùn)行期間,變量的值是可以改變的變量必須先定義,后使用定義變量時(shí)指定該變量的名字和類型
變量名和變量值是兩個不同的概念變量名實(shí)際上是以一個名字代表的一個存儲地址從變量中取值,實(shí)際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)確保變量名正確使用編譯時(shí)為其分配相應(yīng)存儲單元
編譯時(shí)檢查該變量運(yùn)算是否合法87第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式二、常量和變量2、變量標(biāo)識符:C語言中,對變量、符號常量、函數(shù)、數(shù)組、類型等數(shù)據(jù)對象命名的有效字符序列統(tǒng)稱為標(biāo)識符(identifier)。標(biāo)識符命名原則只能由字母、數(shù)字和下劃線3種字符組成第一個字符必須為字母或下劃線大小寫字母是不同的字符sum,_total,month,Student_name,lotus_1_2_3,BASIC,li_ling
M.D.John,¥123,#33,3D64,a>b
88第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式三、整型數(shù)據(jù)1、整型常量的表示方法整型常量即整常數(shù)。在C語言中,整常數(shù)三種表示形式十進(jìn)制整數(shù)
如:123,-456,4八進(jìn)制整數(shù)。以0開頭的數(shù)是八進(jìn)制數(shù)。
如:0123表示八進(jìn)制數(shù)123,等于十進(jìn)制數(shù)83,-011表示八進(jìn)制數(shù)-11,即十進(jìn)制數(shù)-9。十六進(jìn)制整數(shù)。以0x開頭的數(shù)是16進(jìn)制數(shù)。如:0x123代表16進(jìn)制數(shù)123,等于十進(jìn)制數(shù)291。-0x12等于十進(jìn)制數(shù)-10。89第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式三、整型數(shù)據(jù)2、整型變量整型數(shù)據(jù)在內(nèi)存中的存放形式:數(shù)值是以補(bǔ)碼(complement)表示整型變量的分類共六種有符號基本整型無符號基本整型有符號短整型無符號短整型有符號長整型無符號長整型[signed]intunsignedint[signed]short[int]unsignedshort[int][signed]long[int]unsignedlong[int]short,long,signed,unsigned為修飾符(modifer)[]中內(nèi)容為可選short和long可以提供不同的數(shù)據(jù)長度以滿足實(shí)際使用的需要90第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式三、整型數(shù)據(jù)2、整型變量整型變量的定義:C規(guī)定在程序中所有用到的變量都必須在程序中定義,即“強(qiáng)制類型定義”。變量定義一是定義變量的數(shù)據(jù)類型,二是定義變量的名稱,三是說明變量的存儲類型,其一般格式為:
[存儲類型]數(shù)據(jù)類型變量清單;91第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式三、整型數(shù)據(jù)2、整型變量整型變量的定義例3.2整型變量的定義與使用
#include<>
voidmain()
{inta,b,c,d;/*指定a、b、c、d為整型變量*/
unsignedu;/*指定u為無符號整型變量*/
a=12;b=-24;u=10;
c=a+u;d=b+u;
printf(″a+u=%d,b+u=%d\n″,c,d);
}運(yùn)行結(jié)果:a+u=22,b+u=-14說明:可以看到不同種類的整型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算92第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式三、整型數(shù)據(jù)2、整型變量整型數(shù)據(jù)的溢出例3.3整型數(shù)據(jù)的溢出
#include<stdio.h>
voidmain()
{inta,b;
a=32767;
b=a+1;
printf(“%d,%d\n”,a,b);
}運(yùn)行結(jié)果:32767,-32768說明:數(shù)值是以補(bǔ)碼表示的。一個整型變量只能容納-32768~32767范圍內(nèi)的數(shù),無法表示大于32767或小于-32768的數(shù)。遇此情況就發(fā)生“溢出”。93第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式三、整型數(shù)據(jù)整型常量的類型一個整常量后面加一個字母u或U,認(rèn)為是unsignedint型,
如12345u,在內(nèi)存中按unsignedint規(guī)定的方式存放(存儲單元中最高位不作為符號位,而用來存儲數(shù)據(jù))。如果寫成-12345u,則先將-12345轉(zhuǎn)換成其補(bǔ)碼53191,然后按無符號數(shù)存儲。在一個整常量后面加一個字母l或L,則認(rèn)為是longint型常量。
94第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式四、浮點(diǎn)型數(shù)據(jù)1、浮點(diǎn)型常量的表示方法十進(jìn)制小數(shù)形式指數(shù)形式:3e-3字母e(或E)之前必須有數(shù)字。e后面的指數(shù)必須為整數(shù)。
1e3、、-123e-6、e3、、.e3、e
95第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式四、浮點(diǎn)型數(shù)據(jù)1、浮點(diǎn)型常量的表示方法規(guī)范化的指數(shù)形式在字母e(或E)之前的小數(shù)部分中,小數(shù)點(diǎn)左邊應(yīng)有一位(且只能有一位)非零的數(shù)字例如可以表示為:
123.456e0,12.3456e1,一個浮點(diǎn)數(shù)用指數(shù)形式輸出時(shí)。是按規(guī)范化的指數(shù)形式輸出的。規(guī)范化的指數(shù)形式96第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式四、浮點(diǎn)型數(shù)據(jù)2、浮點(diǎn)型變量浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式一個浮點(diǎn)型數(shù)據(jù)一般在內(nèi)存中占4個字節(jié)(32位)。與整型數(shù)據(jù)的存儲方式不同,浮點(diǎn)型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)把一個浮點(diǎn)型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式(二進(jìn)制數(shù)指數(shù)形式存放)。97第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式四、浮點(diǎn)型數(shù)據(jù)2、浮點(diǎn)型變量浮點(diǎn)型變量的分類float型(單精度浮點(diǎn)型):4字節(jié)、6位有效數(shù)字double型(雙精度浮點(diǎn)型):8字節(jié)、15位有效數(shù)字longdouble(長雙精度)型:VC++6.0分配8個字節(jié)98第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式四、浮點(diǎn)型數(shù)據(jù)2、浮點(diǎn)型變量浮點(diǎn)型數(shù)據(jù)的舍入誤差例3.4浮點(diǎn)型數(shù)據(jù)的舍入誤差
#include<>
voidmain()
{
floata,b;
a=123456.789e5;
b=a+20;
printf(“%f\n”,b);
}
運(yùn)行結(jié)果:12345678說明:一個浮點(diǎn)型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個很大的數(shù)和一個很小的數(shù)直接相加或相減,否則就會“丟失”小的數(shù)。例99第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式四、浮點(diǎn)型數(shù)據(jù)3、浮點(diǎn)型常量的類型C編譯系統(tǒng)將浮點(diǎn)型常量作為雙精度來處理例如:系統(tǒng)先把和作為雙精度數(shù),然后進(jìn)行相乘的運(yùn)算,得到的乘也是一個雙精度數(shù)。最后取其前7位賦給浮點(diǎn)型變量f。如是在數(shù)的后面加字母f或F(如1.65f,654.87F),這樣編譯系統(tǒng)就會把它們按單精度(32位)處理。100第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式五、字符型數(shù)據(jù)1、字符常量用單引號包含的一個字符是字符型常量只能包含一個字符‘a(chǎn)’,’A’,‘1’‘a(chǎn)bc’、"a"
101第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式五、字符型數(shù)據(jù)1、字符常量以“\”開頭的特殊字符稱為轉(zhuǎn)義字符:“\”后面的字符轉(zhuǎn)換成另外的意思。
102第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式五、字符型數(shù)據(jù)1、字符常量例轉(zhuǎn)義字符的使用
#include<stdio.h>voidmain(){printf("abc\tde\rf\tg\n");printf("h\ti\b\bjk\n");}
打印機(jī)上的顯示結(jié)果:
例103第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式五、字符型數(shù)據(jù)2、字符變量字符型變量用來存放字符常量,只能放一個字符。字符變量的定義:charc1,c2;一個字符變量在內(nèi)存中占一個字節(jié)104第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式五、字符型數(shù)據(jù)3、字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法一個字符常量存放到一個字符變量中,內(nèi)存中,以ASCII代碼存儲該字符。使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。一個字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。以字符型輸出:將存儲單元中的ASCII碼轉(zhuǎn)換為相應(yīng)字符。以整數(shù)型輸出:直接將ASCII碼作為整數(shù)輸出??蓪ψ址蛿?shù)據(jù)進(jìn)行算術(shù)運(yùn)算。105第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式五、字符型數(shù)據(jù)3、字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法例3.6向字符變量賦以整數(shù)。
#include<stdio.h>
voidmain()
{charc1,c2;
c1=97;
c2=98;
printf(“%c%c\n”,c1,c2);
printf(“%d%d\n”,c1,c2);
}
運(yùn)行結(jié)果:ab
9798例106第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式五、字符型數(shù)據(jù)3、字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法例3.7大小寫字母的轉(zhuǎn)換
#include<stdio.h>
voidmain()
{charc1,c2;
c1=’a’;
c2=’b’;
c1=c1-32;
c2=c2-32;
printf(“%c%c″,c1,c2);
}
說明:(1)程序的作用是將兩個小寫字母a和b轉(zhuǎn)換成大寫字母A和B。(2)ASCII代碼表中:每一個小寫字母比它相應(yīng)的大寫字母的ASCII碼大32。(3)C語言允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)運(yùn)算?!產(chǎn)’(97)-32=65(‘A’)‘b’(98)-32=66(‘B’)運(yùn)行結(jié)果:AB
例107第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式五、字符型數(shù)據(jù)3、字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法VC++6.0將字符變量定義為signedchar型。其存儲單元中的最高位作為符號位,它的取值范圍是-128~127。如果在字符變量中存放一個ASCII碼為0~127間的字符,由于字節(jié)中最高位為0,因此用%d輸出字符變量時(shí),輸出的是一個正整數(shù)。如果在字符變量中存放一個ASCII碼為128~255間的字符,由于在字節(jié)中最高位為1,用%d格式符輸出時(shí),就會得到一個負(fù)整數(shù)。108第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式五、字符型數(shù)據(jù)4、字符串常量字符串常量是一對雙撇號括起來的字符序列。合法的字符串常量:“Howdoyoudo.”,“CHINA”,“a”,“$123.45”可以輸出一個字符串。printf(“Howdoyoudo.”);109第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式五、字符型數(shù)據(jù)4、字符串常量區(qū)分字符常量和字符串常量
字符常量:‘a(chǎn)’,’A’,‘1’
字符串常量:"abc","a"說明:每一個字符串常量的結(jié)尾加一個“字符串結(jié)束標(biāo)志”(\0),以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。說明:占內(nèi)存單元不是5個字符,而是6個字符,最后一個字符為’\0’。但在輸出時(shí)不輸出’\0’。110第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式五、字符型數(shù)據(jù)4、字符串常量區(qū)分?jǐn)?shù)值型字符和數(shù)值
數(shù)值型字符:‘1’(ASCII49)說明:字符’1’只是代表一個形狀為’1’的符號,在需要時(shí)按原樣輸出,在內(nèi)存中以ASCII碼形式存儲,占1個字節(jié)說明:整數(shù)1是以整數(shù)存儲方式(二進(jìn)制補(bǔ)碼方式)存儲的,占2個或4個字節(jié)數(shù)值:1111第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式六、變量賦初值1、字符串常量C語言允許在定義變量的同時(shí)使變量初始化可以使被定義的變量的一部分賦初值inta=3;//指定a為整型變量,初值為3floatf=3.56;//指定f為浮點(diǎn)型變量,初值為charc=‘a(chǎn)’;//指定c為字符變量,初值為‘a(chǎn)’inta,b,c=5;//指定a,b,c為整型變量,但只對c初始化,c的初值為5,a,b的值不確定112第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式六、變量賦初值1、字符串常量同時(shí)對幾個變量賦以同一個初值初始化不是在編譯階段完成的,而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦初值的,相當(dāng)于有一個賦值語句。初始化和賦初值不同初始化發(fā)生在變量創(chuàng)建的同時(shí);賦初值在變量創(chuàng)建后進(jìn)行。初始化是編譯器的責(zé)任;賦初值是程序員的責(zé)任。inta=3,b=3,c=3;//表示a,b,c的初值都是3。inta=b=c=3;//errorC2065:'b''c':undeclaredidentifier
113第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式七、各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算混合運(yùn)算:整型(int,short,long)、浮點(diǎn)型(float,double)可以混合運(yùn)算。在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。說明:絕對轉(zhuǎn)換:+,-,*,/運(yùn)算中float必先轉(zhuǎn)為double;short和char必先轉(zhuǎn)為int,然后進(jìn)行運(yùn)算;視情況轉(zhuǎn)換:如果運(yùn)算的兩個數(shù)等級不同,先將低級別轉(zhuǎn)為高等級(另一個運(yùn)算數(shù)),再運(yùn)算,結(jié)果為高等級;
這種類型轉(zhuǎn)換是由系統(tǒng)自動進(jìn)行的。114第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式八、算術(shù)運(yùn)算符和算術(shù)表達(dá)式1、C運(yùn)算符簡介C的運(yùn)算符算術(shù)運(yùn)算符:+,-,*,/,%關(guān)系運(yùn)算符:>,<,==,>=,<=,!=邏輯運(yùn)算符:!,&&,||位運(yùn)算符:<<,>>,~,|,^,&賦值運(yùn)算符:=及擴(kuò)展賦值運(yùn)算符條件運(yùn)算符:?,:
逗號運(yùn)算符:,指針運(yùn)算符:*,&求字節(jié)數(shù)運(yùn)算符:sizeof
強(qiáng)制類型轉(zhuǎn)換運(yùn)算符:(類型)分量運(yùn)算符:.->下標(biāo)運(yùn)算符:[]
其他:如函數(shù)調(diào)用運(yùn)算符()115第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式八、算術(shù)運(yùn)算符和算術(shù)表達(dá)式2、算術(shù)運(yùn)算符和算術(shù)表達(dá)式基本的算術(shù)運(yùn)算符+、-、*、/%(模運(yùn)算符,或稱求余運(yùn)算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如:7%4的值為3)。負(fù)數(shù)%運(yùn)算:如果第一個操作數(shù)為負(fù)數(shù),結(jié)果為負(fù)數(shù)如果第一個操作數(shù)為正數(shù),結(jié)果為正數(shù)與第二個操作數(shù)無關(guān)116第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式八、算術(shù)運(yùn)算符和算術(shù)表達(dá)式2、算術(shù)運(yùn)算符和算術(shù)表達(dá)式基本的算術(shù)運(yùn)算符/:兩個整數(shù)相除的結(jié)果為整數(shù)如5/3的結(jié)果值為1,舍去小數(shù)部分如果除數(shù)或被除數(shù)中有一個為負(fù)值,舍入方向不固定。例如,-5/3,有的系統(tǒng)中得到的結(jié)果為-1,在有的系統(tǒng)中則得到結(jié)果為-2VC++采取“向零取整”的方法,如5/3=1,-5/3=-1,取整后向零靠攏117第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式八、算術(shù)運(yùn)算符和算術(shù)表達(dá)式2、算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符和算術(shù)表達(dá)式的優(yōu)先級和結(jié)合性C算術(shù)表達(dá)式:用算術(shù)運(yùn)算符和括號將運(yùn)算對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子運(yùn)算對象包括常量、變量、函數(shù)等a*b/c-1.5+′a′//是一個合法的表達(dá)式說明:優(yōu)先級:先高后低,同級看結(jié)合方向結(jié)合性:算數(shù)運(yùn)算符的結(jié)合方向?yàn)樽蠼Y(jié)合性118第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式八、算術(shù)運(yùn)算符和算術(shù)表達(dá)式2、算術(shù)運(yùn)算符和算術(shù)表達(dá)式強(qiáng)制類型轉(zhuǎn)換運(yùn)算符可以將一個表達(dá)式轉(zhuǎn)換成所需類型一般形式:(類型名)(表達(dá)式)
(double)a
//將a轉(zhuǎn)換成double類型(int)(x+y) //將x+y的值轉(zhuǎn)換成整型(float)(5%3)
//將5%3的值轉(zhuǎn)換成float型強(qiáng)制類型轉(zhuǎn)換時(shí),得到一個所需類型的中間數(shù)據(jù),原變量類型不變119第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式八、算術(shù)運(yùn)算符和算術(shù)表達(dá)式2、算術(shù)運(yùn)算符和算術(shù)表達(dá)式例3.8強(qiáng)制類型轉(zhuǎn)換。
#include<stdio.h>
voidmain()
{floatx;
inti;x=3.6;i=(int)x;
printf("x=%f,i=%d\n",x,i);
}
說明:(1)系統(tǒng)自動進(jìn)行的類型轉(zhuǎn)換:例如3.5+5(2)強(qiáng)制類型轉(zhuǎn)換運(yùn)行結(jié)果:x=3.600000,
i=3
120第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式八、算術(shù)運(yùn)算符和算術(shù)表達(dá)式2、算術(shù)運(yùn)算符和算術(shù)表達(dá)式自增、自減運(yùn)算符:作用是使變量的值增1或減1++i,--i:在使用i之前,先使i的值加/減1i++,i--:在使用i之后,使i的值加/減1j=++i;
//如果i值為3,那么執(zhí)行語句時(shí),i的值先變成4,再賦給j,j的值為4,執(zhí)行后j=4,i=4變量的值VS表達(dá)式的值(設(shè)i原值為3)++i:變量i的值為4,表達(dá)式++i的值也為4i++:變量i的值為4,表達(dá)式i++的值也為3j=i++;
//如果i值為3,那么執(zhí)行語句時(shí),先將i的值3賦給j,j的值為3,但i已變?yōu)?,執(zhí)行后j=3,i=4i=i+1j=i
j=i
i=i+1121第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式八、算術(shù)運(yùn)算符和算術(shù)表達(dá)式2、算術(shù)運(yùn)算符和算術(shù)表達(dá)式自增、自減運(yùn)算符自增運(yùn)算符(++),自減運(yùn)算符(--),只能用于變量,不能用于常量或表達(dá)式++和--的結(jié)合方向是“自右至左”5++,(i+y)++
printf(“%d”,-i++)//-和++同級,且都為右結(jié)合,因此先i++,再取負(fù)122第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式八、算術(shù)運(yùn)算符和算術(shù)表達(dá)式2、算術(shù)運(yùn)算符和算術(shù)表達(dá)式有關(guān)表達(dá)式使用中的問題說明ANSIC并沒有具體規(guī)定表達(dá)式中的子表達(dá)式的求值順序,允許各編譯系統(tǒng)自己安排C語言中有的運(yùn)算符為一個字符,有的運(yùn)算符由兩個字符組成,為避免誤解,最好采取大家都能理解的寫法在調(diào)用函數(shù)時(shí),實(shí)參數(shù)的求值順序,C標(biāo)準(zhǔn)并無統(tǒng)一規(guī)定。(i++)+(i++)+(i++)//系統(tǒng)不同,結(jié)果不同不要寫成i+++j的形式,而應(yīng)寫成(i++)+j的形式不要寫出別人看不懂的也不知道系統(tǒng)會怎樣執(zhí)行程序123第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式九、賦值運(yùn)算符和賦值表達(dá)式1、賦值運(yùn)算符賦值運(yùn)算符:=作用:將一個數(shù)據(jù)賦給一個變量2、類型轉(zhuǎn)換如果賦值運(yùn)算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型,在賦值時(shí)進(jìn)行類型轉(zhuǎn)換將浮點(diǎn)型數(shù)據(jù)(單、雙精度)賦給整型變量時(shí),舍棄浮點(diǎn)數(shù)的小數(shù)部分。將整型數(shù)據(jù)賦給單、雙精度變量時(shí),數(shù)值不變,但以浮點(diǎn)數(shù)形式存儲到變量中將23賦給float變量f,則f為將23賦給double型變量d,則d為124第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式九、賦值運(yùn)算符和賦值表達(dá)式2、類型轉(zhuǎn)換將一個double型數(shù)據(jù)賦給float變量時(shí),截取其前面7位有效數(shù)字,存放到float變量的存儲單元(4個字節(jié))中。但應(yīng)注意數(shù)值范圍不能溢出。如果將一個float型數(shù)據(jù)賦給double變量時(shí),數(shù)值不變,有效位數(shù)擴(kuò)展到16位,在內(nèi)存中以8個字節(jié)存儲
floatf;doubled=123.123456789;f=d;//執(zhí)行后,f為
floatf;doubled=123.456789e100;f=d;//溢出錯誤125第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式九、賦值運(yùn)算符和賦值表達(dá)式2、類型轉(zhuǎn)換字符型數(shù)據(jù)賦給整型變量時(shí),將字符數(shù)據(jù)(8個二進(jìn)位)放到整型變量存儲單元的低8位中。第一種情況:低位對應(yīng)、高位補(bǔ)零
若所用系統(tǒng)將字符處理為無符號字符類型,或程序已將字符變量定義為unsignedchar型,則將字符的8位放到整型變量低8位,高8位補(bǔ)零。例如:將字符’\376’賦給int型變量i,i的值為254第二種情況:符號擴(kuò)展若所用系統(tǒng)(VC++6.0)將字符處理為帶符號(signedchar)時(shí),若字符最高位為0,則整型變量高8位補(bǔ)0;若字符最高位為1,則高8位全補(bǔ)1。這稱為“符號擴(kuò)展”,如變量c(字符’\376’)以整數(shù)形式輸出為-2,i的值也是-2。126第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式九、賦值運(yùn)算符和賦值表達(dá)式2、類型轉(zhuǎn)換將一個int、short、long型數(shù)據(jù)賦給一個char型變量時(shí),只將其低8位原封不動地送到char型變量(即截?cái)?c的值為33,如果用“%c"輸出c,將得到字符!(的ASCII碼為33)
127第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式九、賦值運(yùn)算符和賦值表達(dá)式2、類型轉(zhuǎn)換將帶符號的int型賦給long型變量時(shí),要進(jìn)行符號擴(kuò)展,將整型數(shù)的16位送到long型低16位中如果int型數(shù)據(jù)為正值(符號位為0),則long型變量的高16位補(bǔ)0;如果int型變量為負(fù)值(符號位為1),則long型變量的高16位補(bǔ)1。128第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式九、賦值運(yùn)算符和賦值表達(dá)式2、類型轉(zhuǎn)換若將一個long型數(shù)據(jù)賦給一個int型變量,只將long型數(shù)據(jù)中低16位原封不動地送到整型變量(即截?cái)?。如:inta;longb=8;a=b;//a為8如:inta;longb=65536;a=b;//a為0129第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式九、賦值運(yùn)算符和賦值表達(dá)式2、類型轉(zhuǎn)換將unsignedint型數(shù)據(jù)賦給longint型變量時(shí),不存在符號擴(kuò)展問題,只需將高位補(bǔ)0即可。將一個unsigned類型數(shù)據(jù)賦給一個占字節(jié)數(shù)相同的非unsigned型整型變量,將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的范圍,則會出現(xiàn)數(shù)據(jù)錯誤。以兩字節(jié)為例:unsignedinta=65535;intb;b=a; //b為-1130第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式九、賦值運(yùn)算符和賦值表達(dá)式2、類型轉(zhuǎn)換將非unsigned型數(shù)據(jù)賦給長度相同的unsigned型變量,也是原樣照賦(符號位也作為數(shù)值一起傳送)。例3.9有符號數(shù)據(jù)傳送給無符號變量。
#include<stdio.h>
voidmain()
{unsigneda;
intb=-1;
a=b;
printf(″%u\n″,a);}
說明:″%u″是輸出無符號數(shù)時(shí)所用的格式符。運(yùn)行結(jié)果:65535131第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式九、賦值運(yùn)算符和賦值表達(dá)式3、復(fù)合的賦值運(yùn)算符在賦值符“=”之前加上其他運(yùn)算符,可以構(gòu)成復(fù)合的運(yùn)算符a+=3 //等價(jià)于a=a+3
x*=y+8 //等價(jià)于x=x*(y+8)x%=3 //等價(jià)于x=x%3a*=b如果b是包含若干項(xiàng)的表達(dá)式,則相當(dāng)于它有括號。132第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式九、賦值運(yùn)算符和賦值表達(dá)式3、復(fù)合的賦值運(yùn)算符凡是二元(二目)運(yùn)算符,都可以與賦值符一起組合成復(fù)合賦值符。
+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=簡化程序,使程序精煉,提高編譯效率133第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式九、賦值運(yùn)算符和賦值表達(dá)式4、賦值表達(dá)式由賦值運(yùn)算符將一個變量和一個表達(dá)式連接起來的式子稱為“賦值表達(dá)式”。
賦值表達(dá)式求解過程求賦值運(yùn)算符右側(cè)的“表達(dá)式”的值;賦給賦值運(yùn)算符左側(cè)的變量。<變量><賦值運(yùn)算符><表達(dá)式>a=3*5//計(jì)算3*5得15賦給a一個表達(dá)式應(yīng)該有一個值134第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式九、賦值運(yùn)算符和賦值表達(dá)式
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 重慶工程職業(yè)技術(shù)學(xué)院《朗讀與講故事指導(dǎo)》2023-2024學(xué)年第二學(xué)期期末試卷
- 西南民族大學(xué)《古生物學(xué)含實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京農(nóng)業(yè)大學(xué)《教育評價(jià)與測量》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱劍橋?qū)W院《廣告創(chuàng)意與策劃》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西體育高等??茖W(xué)?!峨姶艌隼碚撆c光波導(dǎo)技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025屆河南省周口市西華縣三校聯(lián)考高三上學(xué)期一模歷史試卷
- 贛南師范大學(xué)《幼兒園體育游戲》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇聯(lián)合職業(yè)技術(shù)學(xué)院《分子生物學(xué)(英文)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州城建職業(yè)學(xué)院《銷售管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古經(jīng)貿(mào)外語職業(yè)學(xué)院《整合創(chuàng)新設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 第13課《 擴(kuò)音系統(tǒng)的控制》說課稿 2023-2024學(xué)年 浙教版六年級下冊信息科技
- 高校國有資產(chǎn)管理的三個維度與內(nèi)部控制
- 2025甘肅省事業(yè)單位聯(lián)考招聘(3141人)高頻重點(diǎn)提升(共500題)附帶答案詳解
- JJF 1176-2024(0~2 300) ℃鎢錸熱電偶校準(zhǔn)規(guī)范
- 8.4+同一直線上二力的合成課件+2024-2025學(xué)年人教版物理八年級下冊
- 2024年河北省邢臺市公開招聘警務(wù)輔助人員(輔警)筆試專項(xiàng)訓(xùn)練題試卷(2)含答案
- 家政公司服務(wù)員考試題庫單選題100道及答案解析
- 人工智能:AIGC基礎(chǔ)與應(yīng)用 課件 實(shí)訓(xùn)項(xiàng)目九 使用度加創(chuàng)作工具和剪映進(jìn)行智能化短視頻創(chuàng)作
- 《日影的朝向及長短》課件
- 中職普通話教師教案模板
- 施工后期的場地恢復(fù)措施
評論
0/150
提交評論