《C語(yǔ)言程序設(shè)計(jì)》-第1章-概論_第1頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》-第1章-概論_第2頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》-第1章-概論_第3頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》-第1章-概論_第4頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》-第1章-概論_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C

語(yǔ)言程序設(shè)計(jì)但愿她是你知識(shí)大廈的又一塊基石。但愿她是開(kāi)啟你智慧的又一把鑰匙!CLanguageProgramming學(xué)習(xí)目的通過(guò)學(xué)習(xí)掌握C語(yǔ)言的語(yǔ)法結(jié)構(gòu),理解程序設(shè)計(jì)的一般方法和基本技術(shù)。學(xué)習(xí)算法的概念以及結(jié)構(gòu)化程序設(shè)計(jì)的一般方法,提高分析能力和綜合能力。能夠用C語(yǔ)言編程解決一定的實(shí)際問(wèn)題,提高計(jì)算能力。高級(jí)語(yǔ)言的概念計(jì)算機(jī)的語(yǔ)言在發(fā)展的過(guò)程中經(jīng)歷了三個(gè)階段:如:表示2+301110000110101000010MOV

AC,3ADD

AC,22+3面向機(jī)器的二進(jìn)制語(yǔ)言、CPU直接運(yùn)行。面向機(jī)器符號(hào)化語(yǔ)言,翻譯后運(yùn)行。面向問(wèn)題的類(lèi)自然語(yǔ)言,翻譯后運(yùn)行。編譯或解釋系統(tǒng)SourceObject機(jī)器語(yǔ)言匯編語(yǔ)言高級(jí)語(yǔ)言語(yǔ)言的基本元素、構(gòu)詞方法、句法、程序結(jié)構(gòu)等規(guī)則的集合。解決特定問(wèn)題的步驟描述。結(jié)構(gòu)化程序設(shè)計(jì)的思想方法。學(xué)習(xí)的層次語(yǔ)法算法方法把我所考察的每一個(gè)難題,都盡可能地分成細(xì)小的部分,直到可以而且適于加以圓滿解決的程度為止。

———笛卡爾(法)實(shí)踐FromRequirementtoProgramRequirement:Triangle’sareaInput:a、b、cabcInput:a,b,c

OutputareaBlackboxFromRequirementtoProgram約束:任意兩邊和大于第三邊。第一章概論Chapter1Introduction1.1C語(yǔ)言簡(jiǎn)介

1.計(jì)算機(jī)與程序

C語(yǔ)言是由DennisMRitchie和BrianWKernighan于1972年在B語(yǔ)言的基礎(chǔ)上提出的,他們用C語(yǔ)言重寫(xiě)了在PDP–11小型機(jī)上的Unix,并取得了成功。程序是用計(jì)算機(jī)語(yǔ)言描述的、為解決某一問(wèn)題、滿足一定語(yǔ)法規(guī)則的語(yǔ)句序列。計(jì)算機(jī)是可以按照人們事先編寫(xiě)的程序高速、精確地進(jìn)行數(shù)據(jù)加工、處理的電子裝置。人們通過(guò)程序明確地告訴計(jì)算機(jī)做什么,以及如何去做這些事情,并將事先編寫(xiě)的程序存儲(chǔ)到計(jì)算機(jī)內(nèi)部,啟動(dòng)計(jì)算機(jī)執(zhí)行程序,計(jì)算機(jī)在執(zhí)行程序的過(guò)程中,完成程序規(guī)定的任務(wù)

2.計(jì)算機(jī)的語(yǔ)言

C語(yǔ)言是由DennisMRitchie和BrianWKernighan于1972年在B語(yǔ)言的基礎(chǔ)上提出的,他們用C語(yǔ)言重寫(xiě)了在PDP–11小型機(jī)上的Unix,并取得了成功。(1)機(jī)器語(yǔ)言是由0和1二進(jìn)制代碼按一定的規(guī)則組合而成的指令序列,它是面向具體計(jì)算機(jī)系統(tǒng)的,不同的計(jì)算機(jī)系統(tǒng)識(shí)別的機(jī)器語(yǔ)言是不同的(2)匯編語(yǔ)言 匯編語(yǔ)言是采用英文助記符表示的語(yǔ)言(3)高級(jí)語(yǔ)言 高級(jí)語(yǔ)言是由表達(dá)各種意義的英文單詞和數(shù)學(xué)式子按照一定的語(yǔ)法規(guī)則構(gòu)成的語(yǔ)言C語(yǔ)言是面向過(guò)程的語(yǔ)言,C++語(yǔ)言是面向?qū)ο蟮恼Z(yǔ)言3.C語(yǔ)言的發(fā)展

C語(yǔ)言的發(fā)展過(guò)程與UNIX操作系統(tǒng)密不可分 1963年英國(guó)的劍橋大學(xué)推出了,并于1967年對(duì)其進(jìn)行了簡(jiǎn)化推出了; 1970年美國(guó)貝爾實(shí)驗(yàn)室以BCPL語(yǔ)言為基礎(chǔ),進(jìn)行了進(jìn)一步簡(jiǎn)化,推出了更簡(jiǎn)單的B語(yǔ)言,并用B語(yǔ)言書(shū)寫(xiě)了第一個(gè)操作系統(tǒng)UNIX。 1973年貝爾實(shí)驗(yàn)室推出了C語(yǔ)言,而且用C語(yǔ)言重新書(shū)寫(xiě)了UNIX操作系統(tǒng),使其成為較完善的操作系統(tǒng)。 1975年,UNIX推出了6.0版本后,C語(yǔ)言的優(yōu)點(diǎn)引起了人們的普遍關(guān)注,特別是1977年出現(xiàn)了不依賴(lài)具體機(jī)器的C語(yǔ)言編譯文本《可移植C語(yǔ)言編譯程序》,使得C語(yǔ)言移植到其他機(jī)器比較容易實(shí)現(xiàn),這也使得UNIX操作系統(tǒng)迅速在各種機(jī)器上實(shí)現(xiàn)。

1983年美國(guó)國(guó)家標(biāo)準(zhǔn)委員會(huì)對(duì)C語(yǔ)言進(jìn)行了標(biāo)準(zhǔn)化,頒布了第一個(gè)C語(yǔ)言的標(biāo)準(zhǔn)草案——83ANSIC;1987年又頒布了新標(biāo)準(zhǔn)——87ANSIC;1990年,國(guó)際標(biāo)準(zhǔn)化組織ISO(InternationalStandardOrganization)接受87ANSIC為ISO-C的標(biāo)準(zhǔn)。目前流行的C編譯系統(tǒng)都以此為基礎(chǔ)。80年代后期,貝爾實(shí)驗(yàn)室又為C語(yǔ)言增加了面向?qū)ο蟮奶匦裕碈++。C語(yǔ)言系統(tǒng)依然保留在C++中,形成了C++的子集。4.C語(yǔ)言的特點(diǎn):(1)功能強(qiáng)大。既可書(shū)寫(xiě)系統(tǒng)軟件,也可書(shū)寫(xiě)應(yīng)用軟件。(2)移植性強(qiáng)。(3)是主流的編程語(yǔ)言之一。

(4)是模塊化、結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言。

(5)有著豐富的運(yùn)算符和數(shù)據(jù)類(lèi)型。(6)語(yǔ)法簡(jiǎn)潔、靈活,使用方便。(7)允許直接訪問(wèn)物理地址,具有一定的低級(jí)語(yǔ)言的特性。(8)程序生成的目標(biāo)代碼質(zhì)量高,程序的執(zhí)行效率高。1.2C程序初探

1.2.1簡(jiǎn)單的C程序【例1-1】字符串的輸出。編寫(xiě)程序代碼1-1如下,其執(zhí)行結(jié)果如圖

圖1-1代碼1-1的執(zhí)行結(jié)果/*example1-1輸出信息*/#include<stdio.h>voidmain(void){

printf("歡迎走進(jìn)C世界!");}程序分析:1)/*example1-1輸出信息*/注釋語(yǔ)句。在C程序中,/*注釋內(nèi)容*/語(yǔ)句為注釋語(yǔ)句,注釋內(nèi)容不影響程序的執(zhí)行,只是為了幫助讀者閱讀和理解程序。(2)#include<stdio.h>文件包含,告訴系統(tǒng)必須包含文件stdio.h,此文件為輸入和輸出提供支持。(3)voidmain(void)表明以下是一個(gè)C程序的主函數(shù)。(4){表明主函數(shù)體由此開(kāi)始。(5)printf("歡迎走進(jìn)C世界!");此行為輸出函數(shù),其功能是在屏幕上顯示雙引號(hào)中的內(nèi)容。(6)}表明主函數(shù)體到此結(jié)束?!纠?-2】求三門(mén)課程的平均成績(jī)。編寫(xiě)程序代碼1-2如下,其執(zhí)行結(jié)果如圖/*example1-2計(jì)算平均數(shù)*/#include<stdio.h>voidmain(void){

int

mathscore,physscore,chemscore;/*代表三門(mén)成績(jī)*/ floatavescore;/*代表平均成績(jī)*/

mathscore=75;

physscore=85;

chemscore=95;/*三門(mén)成績(jī)賦初值*/

avescore=(mathscore+physscore+chemscore)/3.0;/*計(jì)算平均成績(jī)*/

printf("avescore=%f",avescore);/*輸出平均成績(jī)*/}程序分析:(1)/*example1-2計(jì)算平均數(shù)*/注釋語(yǔ)句。(2)#include<stdio.h>文件包含,告訴系統(tǒng)必須包含文件stdio.h。(3)voidmain(void)表明以下是一個(gè)C程序的主函數(shù)。(4){此行表明主函數(shù)體由此開(kāi)始。(5)int

mathscore,physscore,chemscore;說(shuō)明語(yǔ)句,說(shuō)明本程序需要用這3個(gè)變量,而且它們的數(shù)據(jù)類(lèi)型是整型。(6)floatavescore;說(shuō)明語(yǔ)句,說(shuō)明本程序需要用這個(gè)變量,而且它的數(shù)據(jù)類(lèi)型是浮點(diǎn)型。程序分析:(7)mathscore=75;

physscore=85;

chemscore=95;賦值語(yǔ)句,表明給這3個(gè)變量的初始值分別為:75、85、95。(8)avescore=(mathscore+physscore+chemscore)/3.0;此行為賦值語(yǔ)句,利用3個(gè)變量的初始值計(jì)算平均值。(9)printf("avescore=%f",avescore);此行為輸出函數(shù),在屏幕上輸出平均成績(jī)(10)}表明主函數(shù)體到此結(jié)束【例1-3】求兩個(gè)數(shù)中的大數(shù),由主函數(shù)獨(dú)立完成。編寫(xiě)程序代碼1-3如下,其執(zhí)行結(jié)果如圖/*example1-3求最大數(shù)*/#include<stdio.h>voidmain(void){int

a,b,maxvalue;/*定義3個(gè)變量*/printf("請(qǐng)輸入2個(gè)數(shù):");/*輸出提示信息*/

scanf("%d%d",&a,&b);/*由鍵盤(pán)輸入2個(gè)數(shù)*/if(a>b)/*比較2個(gè)數(shù)的大小*/

maxvalue=a;else

maxvalue=b; printf("2個(gè)數(shù)中的最大數(shù)是:%d",maxvalue);/*輸出最大數(shù)*/}程序分析:(1)inta,b,maxvalue;說(shuō)明語(yǔ)句,說(shuō)明本程序需要用這3個(gè)整型變量。(2)printf("請(qǐng)輸入2個(gè)數(shù):");在屏幕上輸出提示信息。(3)scanf("%d%d",&a,&b);利用輸入函數(shù),要求用戶(hù)從鍵盤(pán)輸入2個(gè)整數(shù),分別存放到a和b的存儲(chǔ)單元。(4)if(a>b)maxvalue=a;elsemaxvalue=b;此4行為if語(yǔ)句,比較2個(gè)數(shù)的大小,取其中的大數(shù)給maxvalue。(5)printf("2個(gè)數(shù)中的最大數(shù)是:%d",maxvalue);輸出函數(shù),輸出最大數(shù)。【例1-4】求兩個(gè)數(shù)中的大數(shù),由主函數(shù)和子函數(shù)合作完成。編寫(xiě)程序代碼1-4如下,其執(zhí)行結(jié)果如圖/*example1-4利用子函數(shù)求最大數(shù)*/#include<stdio.h>int

Getmax(int,int);/*聲明子函數(shù)*/voidmain(void){

int

a,b,maxvalue;/*定義3個(gè)變量*/

printf("請(qǐng)輸入2個(gè)數(shù):");/*輸出提示信息*/

scanf("%d%d",&a,&b);/*由鍵盤(pán)輸入2個(gè)數(shù)*/

maxvalue=Getmax(a,b);/*調(diào)用子函數(shù)求最大數(shù)*/

printf("最大數(shù)是:%d",maxvalue);/*輸出最大數(shù)*/}int

Getmax(intx,inty)/*定義子函數(shù)*/{

intz;

if(x>y)/*比較2個(gè)數(shù)的大小*/ z=x; else z=y; returnz;/*返回最大數(shù)*/}程序分析:(1)int

Getmax(int

,int);聲明子函數(shù),表明以下有一個(gè)名為Getmax的子函數(shù),它有2個(gè)整型參數(shù),子函數(shù)的返回值為整型。(2)maxvalue=Getmax(a,b);調(diào)用語(yǔ)句,調(diào)用名為Getmax的子函數(shù),將參數(shù)a和b傳遞給子函數(shù),并將返回結(jié)果賦給變量。(3)int

Getmax(intx,inty)子函數(shù)定義,表明以下是名為Getmax的子函數(shù)。(4){(子函數(shù)中的大括號(hào))表明子函數(shù)體由此開(kāi)始。(5)returnz;返回語(yǔ)句,返回最大數(shù)。(6)}(子函數(shù)中的大括號(hào))表明子函數(shù)體到此結(jié)束。1.2.2C程序的基本結(jié)構(gòu)實(shí)例:輸入兩個(gè)數(shù)及其算術(shù)運(yùn)算關(guān)系,輸出運(yùn)算結(jié)果。/*ThisismyfirstCprogramfilename:first.c*/#include<stdio.h>voidmain(void){

charch;int

iA,iB,c;scanf(“%d%c%d”,&iA,&ch,&iB);c=fun(iA,ch,iB);printf(“%d%c%d=%d”,iA,

ch,iB,c);}intfun(intx,charop,inty){intz;switch(op){case‘+’:z=x+y;break;case‘-‘:z=x-y;break;case‘*’:z=x*y;break;case‘/’:z=x/y;}returnz;/*返回運(yùn)算結(jié)果*/}子函數(shù)主函數(shù)chp1ex11.函數(shù)是構(gòu)成C程序的基本單位

⒈C程序是由函數(shù)組成,其中有且僅有一個(gè)名為main的主函數(shù),根據(jù)實(shí)際編程的需要還可以有若干個(gè)子函數(shù),如Getmax為子函數(shù),函數(shù)是構(gòu)成C程序的基本單位

⒉一個(gè)C程序總是從主函數(shù)main開(kāi)始執(zhí)行,也是從主函數(shù)結(jié)束,無(wú)論主函數(shù)書(shū)寫(xiě)在什么位置。

⒊函數(shù)在執(zhí)行過(guò)程中根據(jù)需要可以調(diào)用系統(tǒng)提供的庫(kù)函數(shù)(如printf()),也可以調(diào)用用戶(hù)定義的函數(shù)(如Getmax())。如果調(diào)用系統(tǒng)提供的庫(kù)函數(shù),在調(diào)用之前必須將相應(yīng)的文件包含到本文件中,如果調(diào)用用戶(hù)定義的函數(shù),在調(diào)用之前必須聲明2.函數(shù)的組成

⒈每一個(gè)函數(shù)由函數(shù)首部和函數(shù)體組成

⒉函數(shù)首部由函數(shù)類(lèi)型、函數(shù)名、函數(shù)參數(shù)類(lèi)型、函數(shù)參數(shù)名組成

⒊函數(shù)體由說(shuō)明和執(zhí)行兩部分組成,且函數(shù)體以左大括號(hào)開(kāi)始,以右大括號(hào)結(jié)束3.函數(shù)體的組成

⒈函數(shù)體內(nèi)由若干條C的語(yǔ)句組成,C的語(yǔ)句有許多,如:intz;為說(shuō)明語(yǔ)句;c=a;為賦值語(yǔ)句;returnz;為返回語(yǔ)句;/*……*/為注釋語(yǔ)句等

⒉C的語(yǔ)句必須以分號(hào)“;”作為語(yǔ)句的結(jié)束

⒊C的語(yǔ)句書(shū)寫(xiě)比較自由,如:可在一行書(shū)寫(xiě)多條語(yǔ)句,也可將一條語(yǔ)句寫(xiě)在多行,但盡量一行只寫(xiě)一條語(yǔ)句,以養(yǎng)成良好的、規(guī)范的程序設(shè)計(jì)風(fēng)格

4.與任何一種語(yǔ)言一樣,C的語(yǔ)句也必須滿足一定的語(yǔ)法規(guī)則4.C的語(yǔ)句的組成

C程序的語(yǔ)句中含有各種符號(hào)、名稱(chēng)、數(shù)值等,如:int是英語(yǔ)單詞integer(整型)的縮寫(xiě),表示整型;avescore=(mathscore+physscore+chemscore)/3.0;類(lèi)似于數(shù)學(xué)式子;x>y類(lèi)似于不等式;3.0代表一個(gè)數(shù)值;returnz代表的功能也與英文原意相同5.C語(yǔ)言程序的書(shū)寫(xiě)字母由于C語(yǔ)言區(qū)分大小寫(xiě)字母,一般使用小寫(xiě)字母,因此命名時(shí)應(yīng)特別注意1.2.2C程序的基本結(jié)構(gòu)1.字符集⑴字母:A、a、B、b…、Z、z52個(gè)⑵數(shù)字符號(hào):0、1…、910個(gè)⑶特殊符號(hào):+-*/…系統(tǒng)保留字系統(tǒng)占用詞(共32個(gè))auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while建議不要使用:define、undef、include、ifdef、ifndef、endif、line、error、elif、pragma2.關(guān)鍵字關(guān)鍵字又稱(chēng)保留字,是C語(yǔ)言預(yù)先規(guī)定的、具有固定意義的一些單詞,如:int、return等,用戶(hù)只能按其預(yù)先規(guī)定的意義來(lái)使用它們,不能改變其原來(lái)的意義。C語(yǔ)言的關(guān)鍵字如表所示關(guān)鍵字語(yǔ)義關(guān)鍵字語(yǔ)義關(guān)鍵字語(yǔ)義關(guān)鍵字語(yǔ)義auto自動(dòng)double雙精度int整型struct結(jié)構(gòu)break中斷else否則long長(zhǎng)整型switch開(kāi)關(guān)char字符enum枚舉register寄存器typedef自定義類(lèi)型case情況extern外部return返回union共同體const常量float浮點(diǎn)short短整型unsigned無(wú)符號(hào)continue繼續(xù)for循環(huán)signed有符號(hào)void空類(lèi)型default缺省goto轉(zhuǎn)向sizeof字節(jié)數(shù)volatile可變的do循環(huán)if如果static靜態(tài)while循環(huán)3.標(biāo)識(shí)符C語(yǔ)言的標(biāo)識(shí)符有系統(tǒng)預(yù)定義標(biāo)識(shí)符和用戶(hù)自定義標(biāo)識(shí)符,一般用小寫(xiě)

⒈系統(tǒng)預(yù)定義標(biāo)識(shí)符。系統(tǒng)預(yù)定義標(biāo)識(shí)符是由系統(tǒng)預(yù)先定義的,如:main、printf等,與關(guān)鍵字不同的是,系統(tǒng)預(yù)定義標(biāo)識(shí)符允許用戶(hù)改變它的意義,但這樣做會(huì)失去其原有的含義,從而造成誤解,因而這類(lèi)標(biāo)識(shí)符用戶(hù)也不要更改其原意

⒉用戶(hù)自定義標(biāo)識(shí)符。用戶(hù)自定義標(biāo)識(shí)符是由用戶(hù)自己根據(jù)需要定義的標(biāo)識(shí)符,通常用作變量名、數(shù)組名、函數(shù)名等,如:score、aver等,標(biāo)識(shí)符是滿足以下規(guī)則的字符序列。組成規(guī)則:⑴字母和數(shù)字以及下劃線_組成。⑵以字母和下劃線_開(kāi)頭。⑶長(zhǎng)度不超過(guò)31個(gè)字符。⑷不能使用保留字。作用:用戶(hù)為各種自定義數(shù)據(jù)命名。4.運(yùn)算符C語(yǔ)言提供了豐富的運(yùn)算符,如例1-2中的加法運(yùn)算符(+)和除法運(yùn)算符(/),以及例1-3中的關(guān)系運(yùn)算符(>)等5.分隔符

用C語(yǔ)言書(shū)寫(xiě)的C程序中含有許多具有特定含義的符號(hào),與自然語(yǔ)言一樣,各種符號(hào)之間必須有一些分隔符。C語(yǔ)言的分隔符有空格、逗號(hào)、分號(hào)、回車(chē)(換行)等,它們用在不同的場(chǎng)合以區(qū)分不同的對(duì)象6.?dāng)?shù)據(jù)

例1-1中的“歡迎走進(jìn)C世界!”是一種字符數(shù)據(jù);例1-2中的mathscore、physscore、chemscore是一種整型數(shù)據(jù);avescore是一種實(shí)型數(shù)據(jù);分母3是一個(gè)常量;例1-3中的a>b的比較結(jié)果有2種可能,即正確(Yes)或錯(cuò)誤(No),比較的結(jié)果又為以下進(jìn)行什么操作指明了道路一個(gè)程序一般都由說(shuō)明數(shù)據(jù)、輸入數(shù)據(jù)、加工數(shù)據(jù)、輸出數(shù)據(jù)幾個(gè)部分組成1.3算法及其描述1.3.1小試身手:【例1-5】已知三角形的3條邊長(zhǎng),利用海倫公式計(jì)算三角形的面積

1.方案一——數(shù)學(xué)解法已知三角形的3條邊a=3,b=4,c=5,利用海倫公式先求三角形的半周長(zhǎng):再利用半周長(zhǎng)t計(jì)算公式得面積答:由邊長(zhǎng)為3、4、5的三條邊組成的三角形的面積是6

2.方案二——利用C程序解決

/*example1-5(a)計(jì)算三角形的面積*/#include<stdio.h>#include<math.h>voidmain(void){ floata,b,c;/*定義3個(gè)浮點(diǎn)變量*/ doublet,area;/*定義2個(gè)雙精度變量*/ a=3; b=4; c=5;/*為3個(gè)變量賦值*/ t=(a+b+c)/2;/*計(jì)算中間變量*/ area=sqrt(t*(t-a)*(t-b)*(t-c));/*計(jì)算三角形的面積*/

printf("三角形的面積是:%f",area);/*輸出三角形的面積*/}

3.方案三——改進(jìn)C程序

/*example1-5(b)計(jì)算三角形的面積*/#include<stdio.h>#include<math.h>voidmain(void){ floata,b,c;/*定義3個(gè)浮點(diǎn)變量*/doublet,area;/*定義2個(gè)雙精度變量*/

printf("請(qǐng)輸入3條邊長(zhǎng):");/*輸出提示信息*/

scanf("%f%f%f",&a,&b,&c);/*由鍵盤(pán)輸入3個(gè)數(shù)*/t=(a+b+c)/2;/*計(jì)算中間變量*/ area=sqrt(t*(t-a)*(t-b)*(t-c));/*計(jì)算三角形的面積*/

printf("三角形的面積是:%f",area);/*輸出三角形的面積*/}

4.方案四——再改進(jìn)C程序

/*example1-5(c)計(jì)算三角形的面積*/#include<stdio.h>#include<math.h>voidmain(void){ floata,b,c;/*定義3個(gè)浮點(diǎn)變量*/ doublet,area;/*定義2個(gè)雙精度變量*/

printf("請(qǐng)輸入3條邊長(zhǎng):");/*輸出提示信息*/

scanf("%f%f%f",&a,&b,&c);/*由鍵盤(pán)輸入3個(gè)數(shù)*/ if(a+b>c&&b+c>a&&a+c>b)/*對(duì)輸入的3個(gè)數(shù)進(jìn)行判斷*/ {/*可以組成三角形*/t=(a+b+c)/2;/*計(jì)算中間變量*/ area=sqrt(t*(t-a)*(t-b)*(t-c));/*計(jì)算三角形的面積*/

printf("三角形的面積是:%f",area);/*輸出三角形的面積*/ } else/*不可以組成三角形*/

printf("這3個(gè)數(shù)無(wú)法組成三角形");/*輸出提示信息*/}

5.方案五——再次改進(jìn)C程序

/*example1-5(d)計(jì)算三角形的面積*/#include<stdio.h>#include<math.h>voidGetarea(float,float,float);/*聲明子函數(shù)*/voidmain(void){ floata,b,c;/*定義3個(gè)浮點(diǎn)變量*/

printf("請(qǐng)輸入3條邊長(zhǎng):");/*輸出提示信息*/

scanf("%f%f%f",&a,&b,&c);/*由鍵盤(pán)輸入3個(gè)數(shù)*/

Getarea(a,b,c);/*調(diào)用子函數(shù)*/}voidGetarea(float

a,float

b,floatc)/*定義子函數(shù)*/{ doublet,s;/*定義2個(gè)雙精度變量*/ if(a+b>c&&b+c>a&&a+c>b)/*對(duì)輸入的3個(gè)數(shù)進(jìn)行判斷*/ {/*可以組成三角形*/t=(a+b+c)/2;/*計(jì)算中間變量*/ s=sqrt(t*(t-a)*(t-b)*(t-c));/*計(jì)算三角形的面積*/

printf("三角形的面積是:%f",s);/*輸出三角形的面積*/ } else/*不可以組成三角形*/

printf("這3個(gè)數(shù)無(wú)法組成三角形");/*輸出提示信息*/}1.3.2

算法的基本概念

1.算法(Algorithm)的概念:廣義地講:算法是解決問(wèn)題的邏輯步驟,是對(duì)特定問(wèn)題求解步驟的一種描述。計(jì)算機(jī)算法:是用程序解決問(wèn)題的邏輯步驟,是指令的有限序列。只有通過(guò)算法能夠描述出來(lái)的問(wèn)題,才能夠通過(guò)計(jì)算機(jī)求解。能夠用算法描述的問(wèn)題稱(chēng)為可以形式化的問(wèn)題。正確的算法有三個(gè)條件:

⑴每個(gè)邏輯步驟有可以實(shí)現(xiàn)的語(yǔ)句來(lái)完成;

⑵每個(gè)步驟間的關(guān)系是唯一的;

⑶算法要能終止(防止死循環(huán))。算法的兩個(gè)關(guān)鍵要素動(dòng)作(Action);順序(Order)。算法舉例⒈求數(shù)列n=1+2+…+m的值n,當(dāng)n>10000時(shí)結(jié)束。

⒉歐幾里德求m,n(m>n)的最大公約數(shù)算法S1:mModn

kS2:k不為0:

nm,kn

(原除數(shù)變成新的被除數(shù),余數(shù)變成新的除數(shù))。重復(fù)S1

否則:到S3。S3:輸出n的值為最大公約數(shù)。步驟:S1:初始化0n,0tS2:t+1tn+tnS3:n>10000?

滿足到S4,否則到S2。S4:OUTPUTn⒊算法的特征有窮性:在有限的時(shí)間和有限的資源下完成算法;確定性:各步驟之間的關(guān)系要確定;有輸入:有0到多個(gè)原始數(shù)據(jù)輸入;有輸出:有結(jié)果輸出;可行性:可以編程實(shí)現(xiàn);高效性:執(zhí)行速度快、占用資源少;健壯性:對(duì)數(shù)據(jù)響應(yīng)正確。1.自然語(yǔ)言【例1-6】已知三角形的3條邊長(zhǎng),利用海倫公式,計(jì)算三角形的面積。自然語(yǔ)言算法可表示如下:(1)設(shè)5個(gè)變量,其中a、b、c代表3條邊,t代表中間變量,S代表面積。(2)輸入3條邊。(3)如任意2邊之和大于第3邊(可以組成三角形),則計(jì)算中間變量t,再計(jì)算面積S,輸出面積S。否則,輸出不能組成三角形的提示信息。(4)結(jié)束算法。1.3.2

算法的各種描述方法【例1-7】輸入兩個(gè)數(shù),求其中的最大數(shù)。自然語(yǔ)言算法可表示如下:(1)設(shè)兩個(gè)數(shù)為x和y,最大數(shù)為z。(2)輸入兩個(gè)數(shù)給x和y。(3)如x大于或等于y,則最大數(shù)z的值等于x的值。否則,最大數(shù)z的值等于y的值。(4)輸出最大數(shù)z。(5)結(jié)束算法。

概念:以特定的圖形符號(hào)加上說(shuō)明,表示算法的圖,稱(chēng)為流程圖或框圖。規(guī)則:從上到下,從左到右。符號(hào)及其意義:2.用傳統(tǒng)流程圖表示

⒈用框圖描述函數(shù)

1x0y=

-1

x<0輸入xAx0?y=1y=-1yesnoA輸出y流程圖描述算法舉例startend⒉用框圖描述求s=1+2+…+100的算法。start1

t0ss+tst+1tt>100?noyesOutputsA0A0end【例1-8】已知三角形的3條邊長(zhǎng),利用海倫公式,計(jì)算三角形的面積。其流程圖描

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論