c++全冊(cè)配套完整課件3_第1頁
c++全冊(cè)配套完整課件3_第2頁
c++全冊(cè)配套完整課件3_第3頁
c++全冊(cè)配套完整課件3_第4頁
c++全冊(cè)配套完整課件3_第5頁
已閱讀5頁,還剩278頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

c++全冊(cè)配套完整課件3C

語言程序設(shè)計(jì)但愿她是你知識(shí)大廈的又一塊基石。但愿她是開啟你智慧的又一把鑰匙!CLanguageProgramming高級(jí)語言的概念

計(jì)算機(jī)的語言在發(fā)展的過程中經(jīng)歷了三個(gè)階段:如:表示2+301110000110101000010MOV

AC,3ADD

AC,22+3面向機(jī)器的二進(jìn)制語言、CPU直接運(yùn)行。面向機(jī)器符號(hào)化語言,翻譯后運(yùn)行。面向問題的類自然語言,翻譯后運(yùn)行。編譯或解釋系統(tǒng)SourceObject機(jī)器語言匯編語言高級(jí)語言

語言的基本元素、構(gòu)詞方法、句法、程序結(jié)構(gòu)等規(guī)則的集合。解決特定問題的步驟描述。結(jié)構(gòu)化程序設(shè)計(jì)的思想方法。學(xué)習(xí)的層次語法算法方法

把我所考察的每一個(gè)難題,都盡可能地分成細(xì)小的部分,直到可以而且適于加以圓滿解決的程度為止。

———笛卡爾(法)實(shí)踐FromRequirementtoProgramRequirement:Triangle’sareaInput:a、b、cabcInput:a,b,cOutputareaBlackboxFromRequirementtoProgram約束:任意兩邊和大于第三邊。第一章C語言概論Chapter1Introduction1.1C語言的特點(diǎn)C語言是由DennisMRitchie和BrianWKernighan于1972年在B語言的基礎(chǔ)上提出的,他們用C語言重寫了在PDP–11小型機(jī)上的Unix,并取得了成功。C語言的特點(diǎn):C語言功能完善、效率高。C語言可以對(duì)硬件操作,是一種中級(jí)語言。C語言是結(jié)構(gòu)化的程序設(shè)計(jì)語言。C語言具有豐富的數(shù)據(jù)類型和運(yùn)算類型。C語言具有良好的移植性。C語言書寫靈活,表達(dá)簡潔。1.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ù)chp1ex1程序結(jié)構(gòu)說明

⒈程序是由函數(shù)組成的,函數(shù)是由語句組成的。其中主函數(shù)有且唯一,主函數(shù)名固定為main。子函數(shù)可有可無也可以有多個(gè)。

⒉C語言的系統(tǒng)構(gòu)詞必須用小寫,用戶構(gòu)詞可以大小寫混用,各詞之間用一個(gè)或幾個(gè)space分隔。

⒊C語言的語句用;作為結(jié)束,因此,一句可以用一行或幾行書寫,但不能割裂構(gòu)詞。

⒋程序中可通過/*…(注釋內(nèi)容)…*/

包含對(duì)程序的注釋。注釋在編譯時(shí)忽略注釋,不產(chǎn)生代碼。⒌程序中可以包含編譯預(yù)處理命令。1.3C語言的詞法⒈C語言的字符集⑴字母: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、pragma⒊標(biāo)識(shí)符(用戶構(gòu)詞規(guī)則)

作用:用戶為各種自定義數(shù)據(jù)命名。組成規(guī)則:⑴字母和數(shù)字以及下劃線_組成。⑵以字母和下劃線_開頭。⑶長度不超過31個(gè)字符。⑷不能使用保留字。aa1b_iArea_fLoadiStatusfaS2Abinta/1注意:系統(tǒng)區(qū)分大小寫字母。

aBcAbc1.4

計(jì)算機(jī)算法的概念⒈算法(Algorithm)的定義:

廣義地講:算法是解決問題的邏輯步驟,是對(duì)特定問題求解步驟的一種描述。計(jì)算機(jī)算法:是用程序解決問題的邏輯步驟,是指令的有限序列。

只有通過算法能夠描述出來的問題,才能夠通過計(jì)算機(jī)求解。能夠用算法描述的問題稱為可以形式化的問題。正確的算法有三個(gè)條件:

⑴每個(gè)邏輯步驟有可以實(shí)現(xiàn)的語句來完成;⑵每個(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⒉算法與計(jì)算方法計(jì)算方法(ComputationalMethod):

求數(shù)學(xué)近似解的方法,如SinX=X-X3/3!+X5/5!-X7/7!+…算法(Algorithm):邏輯步驟,解決問題的過程。⒊算法的特征有窮性:在有限的時(shí)間和有限的資源下完成算法;確定性:各步驟之間的關(guān)系要確定;有輸入:有0到多個(gè)原始數(shù)據(jù)輸入;有輸出:有結(jié)果輸出;可行性:可以編程實(shí)現(xiàn);高效性:執(zhí)行速度快、占用資源少;健壯性:對(duì)數(shù)據(jù)響應(yīng)正確。算法確定性示例商店a圖書館l三岔路口b如果走近路如果路過醫(yī)院如果路過教室醫(yī)院h教室s死過程abif(dmin)blelseif(to

h)bh,hlelseif(tos)bs,slendabif(toh)bh,hlelseif(tos)bs,slelseif(dmin)blend⒋算法的表示自然語言偽代碼圖形工具——流程圖1.5程序流程圖

概念:以特定的圖形符號(hào)加上說明,表示算法的圖,稱為流程圖或框圖。規(guī)則:從上到下,從左到右。符號(hào)及其意義:流程線連接點(diǎn)處理框判斷框I/O框過程框端點(diǎn)框

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

1x0y=

-1

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

t0ss+tst+1tt>100?noyesOutputsA0A0end1.6C語言上機(jī)的過程編輯startf.c編譯語法錯(cuò)?有無f.obj連接、運(yùn)行邏輯錯(cuò)?有無f.exeendSourceObjectExecutable⒈用程序流程圖描述算法

1x>0y=0x=0-1x<0思考題:

⒉用框圖描述,歐幾里德求最大公約數(shù)算法。⒊從生活或?qū)W習(xí)中找出可以用算法描述的一件事,并通過符號(hào)化的偽語言以及框圖加以抽象的描述。TheTipofChap.2數(shù)據(jù)表示及其類型運(yùn)算及表達(dá)式輸入/輸出程序的基本處理方式第二章C語言基礎(chǔ)程序處理的基本過程開始輸入數(shù)據(jù)x=2,y=3外設(shè)z=x+y數(shù)據(jù)處理輸出數(shù)據(jù)5外設(shè)結(jié)束數(shù)據(jù)表示主要內(nèi)容⒈數(shù)據(jù)及其表示方法;

⒉數(shù)據(jù)的基本運(yùn)算;

⒊基本輸入輸出。

程序是對(duì)數(shù)據(jù)按照算法處理,并輸出結(jié)果的過程,因此,以上三個(gè)問題是程序設(shè)計(jì)的基本問題。2.1基本數(shù)據(jù)類型1/2?

數(shù)據(jù)是對(duì)客觀事物特征抽象的符號(hào)化表示,客觀事物不同,表示的方法也不同(人數(shù)以整數(shù)表示,圓面積用小數(shù)表示,燈的狀態(tài)用開關(guān)表示,信件要用文字表示),計(jì)算機(jī)的處理方法也不同,因此根據(jù)程序處理的數(shù)據(jù)對(duì)象,應(yīng)規(guī)定數(shù)據(jù)的類型。

計(jì)算機(jī)由于工程的限制,只能在有限精度和有限范圍內(nèi)在工程上近似地描述操作的對(duì)象——數(shù)據(jù)。

數(shù)據(jù)類型決定了數(shù)據(jù)的如下特征:⑴數(shù)據(jù)的外部表示方式和內(nèi)部存儲(chǔ)方式不同;⑵表示的范圍和精度不同;⑶對(duì)數(shù)據(jù)的處理方式不同。C語言的數(shù)據(jù)類型C語言的數(shù)據(jù)類型基本類型字符型char浮點(diǎn)型floatdouble構(gòu)造類型數(shù)組、結(jié)構(gòu)、聯(lián)合、枚舉型enum指針類型空類型void整型int2.2常量(Constant)及其類型⒈常量的概念

在程序中不能改變的量稱為常量。常量的類型由數(shù)據(jù)的外部表現(xiàn)形式確定。⒉常量的外部形式及其確定的類型⑴整型常量的表示

整型常量根據(jù)表示的范圍可以有一般整型和長整型,還可以表示為十進(jìn)制、八進(jìn)制、十六進(jìn)制形式。一般整型常量的表示進(jìn)制表示舉例范圍字節(jié)數(shù)十進(jìn)制2304-32768~+327672八進(jìn)制

044000~0177777

2十六進(jìn)制0xaa000x0000~0xffff2長整型常量的表示進(jìn)制表示舉例范圍字節(jié)數(shù)十進(jìn)制-21234l

-231~+231-1

4八進(jìn)制

04400l

0~037777777777

4十六進(jìn)制0XAA00L

0x0000----0xffffffff4⑵浮點(diǎn)型常量的表示(只有十進(jìn)制表示)

浮點(diǎn)型常量有兩種表示方式:小數(shù)表示方法,指數(shù)表示方法。不區(qū)分單、雙精度。小數(shù)表示方式規(guī)則:一個(gè)小數(shù)點(diǎn)、符號(hào)和至少一位數(shù)字。-2.01.0.11113-15.指數(shù)表示方式規(guī)則:規(guī)則:ne±m(xù)表示n×10

mn小數(shù)部分,整型常量或小數(shù)形式表示的實(shí)型常量。指數(shù)部分,兩位整數(shù)。n決定精度,一般精度為7位;m決定范圍,范圍10-38到10+38,當(dāng)超過范圍時(shí)稱為“溢出”,小于10-38稱為下溢,當(dāng)0處理,大于10+38,稱為上溢,系統(tǒng)出錯(cuò)!123.456

表示為0.123456E+3-10000000

表示為-1e70.0000123

表示為0.123e-4⑶字符常量的表示

表示ASCII字符集中的一個(gè)字符。字符有一個(gè)整型值,即該字符的ASCII碼值。表示方法:’a’、’!’

。撇號(hào)定界的一個(gè)字符。值為:97⑷字符串常量的表示

雙引號(hào)“定界的字符序列。系統(tǒng)會(huì)在最后一個(gè)字符后加NULL(ASCII碼值為0),標(biāo)志字符串的結(jié)束。如:”HEFEI”

”Hello!”

’a’和”a”的區(qū)別?內(nèi)部’a’:97”a”:97NULL72101108108111330Hello!\0”Hello!”在內(nèi)存中的存儲(chǔ)結(jié)構(gòu):⑸轉(zhuǎn)義字符

轉(zhuǎn)義字符是C語言表示字符的特殊方法,用來表示ASCII字符集中的控制字符,以及系統(tǒng)占用字符如:”。表示方法:①\字符;②

\八進(jìn)制(十六進(jìn)制整數(shù),小于256) \a表示BELL \b 表示BACKSPACE字母\n 表示換行

\r 表示回車

\t表示TAB

\\ 表示\

\? 表示?符號(hào) \’ 表示’

\” 表示”

\0 表示NULL八進(jìn)制十六進(jìn)制數(shù)\x41\101代表’A’printf(“\007”);printf(“語文\n數(shù)學(xué)\n”);表示八進(jìn)制或十六進(jìn)制數(shù)作為ASCII碼值所對(duì)應(yīng)的字符。2.3變量(Variable)⒈變量的概念

變量是在程序中可以改變的量,變量具有三個(gè)特征:

⑴變量有名,用標(biāo)識(shí)符命名;

⑵變量有類型;

⑶在程序中可以改變。

變量對(duì)應(yīng)于內(nèi)存中某一地址下的幾個(gè)單元,變量名作為程序引用變量的標(biāo)志。變量的類型確定了變量在內(nèi)存中所占單元的數(shù)量及其表示的方式。變量的地址可以通過&運(yùn)算獲得。內(nèi)存inta;a變量的引用標(biāo)志&a對(duì)應(yīng)a的地址。

整型變量占兩個(gè)內(nèi)存單元。變量必須先說明后使用!說明的目的是確定變量的名字和類型。⒉變量的說明形式:

type變量名表;/*以,分隔的標(biāo)識(shí)符表*/inta,b,c;type是類型說明詞,對(duì)于整型和字符型可加修飾說明?;绢愋驼f明符:int、char、float、double修飾說明和基本說明的對(duì)應(yīng)關(guān)系修飾說明詞可用于修飾的基本類型singed/unsignedint、charshort/longintlonginta,b,c;⑴整型變量說明說明詞及性質(zhì)如下:說明詞含義范圍Byteint有符號(hào)一般整型-32768~327672short[int]有符號(hào)短整型-32768~327672long[int]有符號(hào)長整型-231~+231-14unsigned無符號(hào)一般整型0~655352unsignedshort無符號(hào)短整型0~655352unsignedlong無符號(hào)長整型0~232-14shorta,b,c;inte,f,g;long_qs,num;unsignedd,e,f;⑵字符型變量的說明說明符所占字節(jié)數(shù) 范圍char 1 -128~+127unsignedchar 1 0~255⑶浮點(diǎn)型變量的說明說明符所占字節(jié)數(shù) 范圍精度float 4 10-38~10+38 7位double 8 10-308~10+308 16位浮點(diǎn)型變量包含精度和范圍兩個(gè)概念。⑴超過精度位數(shù)后的位數(shù)值不確定。floata;a=1.1111111111;⑵超過范圍溢出(Overflow)。超出精度部分,不準(zhǔn)確。floata,b,c;a=1.234e+20;b=2.345e+21;c=a*b;超出1038,溢出。

當(dāng)運(yùn)算結(jié)果大于10+38稱為上溢,系統(tǒng)出錯(cuò)。當(dāng)運(yùn)算結(jié)果小于10-38稱為下溢,當(dāng)0處理。2.4基本運(yùn)算與表達(dá)式

程序的核心是對(duì)數(shù)據(jù)按照算法進(jìn)行處理(運(yùn)算)。C語言提供了強(qiáng)大的數(shù)據(jù)運(yùn)算功能。數(shù)據(jù)通過運(yùn)算符連接的式子稱為表達(dá)式,表達(dá)式根據(jù)運(yùn)算關(guān)系對(duì)數(shù)據(jù)運(yùn)算,并得到一個(gè)值。⒈變量賦值(Assignment)運(yùn)算格式:

V=expression;/*將expression的值賦給變量V*/inta=2;/*說明賦值,編譯時(shí)賦值。*/intb;b=3+2;/*說明后賦值,執(zhí)行時(shí)賦值。*/說明:⑴=是賦值號(hào)(動(dòng)詞);⑵賦值運(yùn)算的左值只能是變量。a=a+2;iCount=iCount+10;a+2=12;/*Error!*/⑶賦值號(hào)兩邊類型應(yīng)該一致,如不一致,以變量類型轉(zhuǎn)換。inta=2.5;/*2a*/⒉算術(shù)運(yùn)算(Arithmeticoperators)功能:完成各種類型數(shù)據(jù)的加、減、乘、除及求余數(shù)運(yùn)算。⑴雙目算術(shù)運(yùn)算(兩個(gè)運(yùn)算對(duì)象參加的運(yùn)算)運(yùn)算運(yùn)算規(guī)則示例+加2+3-減a-b*乘2*(-a)/除12/3.0%求余數(shù)15%4

只能對(duì)整型或字符型數(shù)據(jù)運(yùn)算。余數(shù)符號(hào)與被除數(shù)相同。注意:乘號(hào)不能省略!-12%5-2-12%(-5)1%2⑵自加、自減運(yùn)算(單目運(yùn)算)運(yùn)算符前置后置運(yùn)算關(guān)系++++aa++a=a+1

----aa--a=a-1說明:①運(yùn)算對(duì)象只能是一個(gè)變量。②前置是先運(yùn)算,后引用,而后置則是先引用,后運(yùn)算。2++;/*Error!*/inti,x;i=5;x=i++;/*x=i;i=i+1;*/i=5;x=++i;/*i=i+1;x=i;*/#include<stdio.h>voidmain(void){inta=2,b=3,c;c=a+++b;printf(“%d”,c);}CHAP2EX1C語言盡可能多的從左向右結(jié)合符號(hào)形成運(yùn)算符。⑶算術(shù)運(yùn)算賦值運(yùn)算符表達(dá)式示例運(yùn)算關(guān)系+=a+=3a=a+3-=b-=cb=b-c*=a*=2a=a*2/=s/=ts=s/t%=a%=5a=a%5說明:①運(yùn)算對(duì)象的左值只能是一個(gè)變量。(a+2)+=5;/*Error!*/②%=運(yùn)算的對(duì)象,必須是整型或字符型。⑷算術(shù)運(yùn)算的說明①運(yùn)算中的類型問題運(yùn)算對(duì)象的類型相同,運(yùn)算結(jié)果取運(yùn)算對(duì)象相同的類型。inta;floatb;b=2/3;/*0b0.0*/a=5.0/2.0;/*2.5a2*/

運(yùn)算對(duì)象的類型不同,先將低等類型轉(zhuǎn)換為高等類型后再進(jìn)行運(yùn)算,運(yùn)算結(jié)果取高等類型。等級(jí)原則如下:charintlongdoublefloat2*16.0+15.0doubledoubledouble運(yùn)算時(shí)可以實(shí)行類型的強(qiáng)制轉(zhuǎn)換,格式如下:(type)expression只對(duì)當(dāng)前表達(dá)式起作用。(float)a/(int)’c’+(float)(a+10)2+(int)fSum類型轉(zhuǎn)換舉例inta;floatb;intc;c=a*1.0+b*5+(float)’A’;idfic

d

d

ff

d

dcint注意:賦值運(yùn)算右值表達(dá)式的類型轉(zhuǎn)換以左值變量的類型為準(zhǔn)。②運(yùn)算的優(yōu)先級(jí)

表達(dá)式的運(yùn)算是分步驟進(jìn)行的。因此當(dāng)一個(gè)表達(dá)式中出現(xiàn)多種運(yùn)算時(shí),存在優(yōu)先級(jí)的問題。算術(shù)運(yùn)算的優(yōu)先級(jí)如下:++、--、(type)單目運(yùn)算*、/、%+、-=、op=相同優(yōu)先級(jí),結(jié)合順序從左到右!3*4+6/a-6%3;相同優(yōu)先級(jí),結(jié)合順序從右到左!inta,b=2,c=2;a=b*=c+=2;可以用()調(diào)整優(yōu)先級(jí)。c=c+2;b=b*c;a=b;⒊條件運(yùn)算運(yùn)算格式:

e1?e2:e3e1、e2、e3為表達(dá)式,當(dāng)e1非0時(shí),運(yùn)算結(jié)果取e2的值;當(dāng)e1為0時(shí),取e3的值。inta=2,b=3,c=-1,d;d=a?b:c;/*d為3*/a=0;d=a?b:c;/*d為-1*/⒋逗號(hào)表達(dá)式格式:

e1,e2,e3,…,en

用,分隔的表達(dá)式,計(jì)算順序從左到右,表達(dá)式取值為en;⒌sizeof運(yùn)算形式:sizeof數(shù)據(jù)對(duì)象;

sizeof(類型說明符);inta,b,c;b=sizeofa;/*b的值為2(TC)*/c=sizeof(float);/*c的值為4*/x=(a=5,a+6)*10;C語言常用數(shù)學(xué)函數(shù)

為方便用戶使用,C語言系統(tǒng)定義了大量函數(shù)。數(shù)學(xué)函數(shù)主要目的是求解常用數(shù)學(xué)函數(shù),如sinX等。數(shù)學(xué)函數(shù)的原型定義在系統(tǒng)的math.h頭文件中。在使用此類函數(shù)時(shí),應(yīng)在程序的開始處加如下語句:

#include<math.h>函數(shù)數(shù)學(xué)含義sin(x)sinXcos(x)cosXtan(x)tgXfabs(x)|x|pow(x,y)xysqrt(x)log(x)lnxlog10(x)log10x使用方法:作為一個(gè)運(yùn)算項(xiàng)參加表達(dá)式運(yùn)算。

函數(shù)的參數(shù)(自變量)、函數(shù)的值都是double類型。z=sqrt(sin(x)*sin(x)+cos(y)*cos(y))2.5數(shù)據(jù)的輸入輸出Input&Output

C語言沒有輸入輸出語句,輸入輸出是通過系統(tǒng)定義的標(biāo)準(zhǔn)函數(shù)來實(shí)現(xiàn)的。I/O函數(shù)的原型定義在stdio.h頭文件中,在引用I/O函數(shù)時(shí),應(yīng)應(yīng)在程序開始處加預(yù)處理語句包含頭文件。#include<stdio.h>⒈輸入輸出的概念輸入輸出指的是內(nèi)存變量或程序和外部設(shè)備間的數(shù)據(jù)交換。內(nèi)存外設(shè)輸入輸出輸入輸出函數(shù)要描述:⑴輸入輸出的量;⑵輸入輸出的格式;⑶輸入輸出的設(shè)備。⒉格式輸入輸出函數(shù)⑴輸出函數(shù)printf()格式:

printf(“輸出格式字符串”,輸出項(xiàng)列表);格式描述。用,分隔的常量、變量、表達(dá)式表。輸出格式字符串可包含以下內(nèi)容:①普通字符,如:a=②轉(zhuǎn)義字符,如:\n

對(duì)于普通字符和轉(zhuǎn)義字符在相應(yīng)位置原樣輸出,其中%用%%。

printf(“\nabcd%%”);

輸出結(jié)果:

abcd%③格式說明符組,說明輸出項(xiàng)列表中的各項(xiàng)的輸出格式。格式說名符組用%為開始標(biāo)志。內(nèi)容包含對(duì)一項(xiàng)輸出對(duì)象的格式說明。%-7.5f格式說明類型表格式說明符說明量的類型d、i、o、x、u整型c字符型s字符串f、e、g浮點(diǎn)型

格式說明符應(yīng)和輸出的列表項(xiàng)對(duì)應(yīng),產(chǎn)生相應(yīng)的輸出。其中輸出的表項(xiàng)應(yīng)與格式說明符類型一致。printf(“a=%5d\nb=%f”,

2+3,

5.34);格式說明串的一般形式和意義%-

m.n

l

格式類型字符(一個(gè)字母)格式說明標(biāo)志對(duì)齊方式:缺省為右對(duì)齊,-為左對(duì)齊。

寬度.精度(位數(shù)),寬度:輸出總列數(shù),精度:小數(shù)位數(shù)(或字符位數(shù))。類型長度,缺省短整型,l表示long或double。#include<stdio.h>voidmain(void){floata;a=1.232326;printf(“a=%10.4f”,a);}CHAP2EX2各種類型數(shù)據(jù)輸出舉例⑴字符型輸出charch=’b’;printf(“%5c,

%-5c,

%c”,ch,ch-32,’s’+1);輸出結(jié)果:

b,B

,t⑵字符串輸出#include<stdio.h>voidmain(void){charchString[]="China";printf("%s,%6s,%-6s\n",chString,chString,chString);printf(“%4s%6.2s%-6.2s","Hefei","Hefei","Hefei");}China,

China,

China

Hefei

HeHe

寬度不夠,原樣輸出。m.n,m為總輸出列數(shù),n截取輸出字符數(shù)。⑶整型輸出(TC環(huán)境描述)#include<stdio.h>voidmain(void){unsignedinta=65535;intb=-2;printf("a=%d,%o,%x,%u",a,a,a,a);printf("\nb=%6d%8o%5X%6u",b,b,b,b);}a=-1,177777,ffff,65535b=

-2

177776FFFE

65534⑷浮點(diǎn)數(shù)輸出include<stdio.h>voidmain(void){floatf=123.456;printf("%f,%10f,%10.2f,%-10.2f\n",f,-f,f,-f);}123.456001,-123.45600,

123.46,-123.46

小數(shù)保留兩位,四舍五入截?cái)?。符?hào)占一位!⑵輸入函數(shù)scanf()格式:

scanf(“格式說明字符串”,輸入變量地址列表);說明:①m域?qū)捒勺詣?dòng)截取,空格作為各數(shù)據(jù)項(xiàng)的分隔符。voidmain(void){inti,j;scanf("%3d%3d",&i,&j);printf("%d\n%d",i,j);}123456②實(shí)型變量輸入時(shí)不能規(guī)定精度;scanf(“%7.2f”,&a);ERROR!

③數(shù)據(jù)輸入用SPACE分隔,當(dāng)格式字符用其他字符隔離,輸入時(shí)也應(yīng)在對(duì)應(yīng)位置上輸入相同的字符;voidmain(void){inti,j;scanf("i=%d,j=%d",&i,&j);printf("\n%d\n%d",i,j);}④輸入項(xiàng)只能是變量,且必須用地址形式。⒉字符輸入輸出函數(shù)輸入:getchar();輸出:putchar();#include<stdio.h>voidmain(void){charch1,ch2='\n';

ch1=getchar();putchar(ch1);putchar(ch2);

putchar('a');}rra輸入程序設(shè)計(jì)舉例⒈已知:有一圓柱體,底半徑為r,圓柱高為h。

求:底面積、表面積,底周長、體積。⑴定義變量fAread、fAreas,fLen,fV──輸出;

r、h──輸入。rh建立模型fLen=2

rfAread=r2,fAreas=2r2+2rh=2fAread+fLenhfV=fAreadh程序如下:#include<stdio.h>voidmain(void){floatfAread,fAreas,fLen,fV,r,h;/*說明變量*/scanf(“%f,%f”,&r,&h);/*輸入原始數(shù)據(jù)*/fLen=2.*3.1415926*r;fAread=3.1415926*r*r;fAreas=2.0*fAread+fLen*h;fV=fAread*h;/*運(yùn)算,并賦給變量*/printf(“%f\n%f\n%f\n%f\n”,fLen,fAread,fAreas,fV);

/*輸出結(jié)果*/}CHAP2EX3⒉求一元二次方程ax2+bx+c=0的根#include<math.h>#include<stdio.h>voidmain(void){floata,b,c,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);x1=(-b+sqrt(b*b-4.*a*c))/(2.0*a);x2=(-b-sqrt(b*b-4.*a*c))/(2.0*a);printf(“x1=%7.2f\nx2=%7.2f”,x1,x2);}CHAP2EX4b*b-4.*a*c<0思考題總結(jié)各類型常量、變量的特征和操作方法。自己找一些代數(shù)式寫出對(duì)應(yīng)的C語言表達(dá)式。編程求圓錐體的體積。(個(gè)人作業(yè))編程求扇形面積。(個(gè)人作業(yè))結(jié)合數(shù)學(xué)問題用C編程求解。(個(gè)人作業(yè),不少于2題)第三章C語言的基本控制結(jié)構(gòu)Chapter3ControlFlow問題#include<stdio.h>#include<math.h>voidmain(void){floata,b,c,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);x1=(-b+sqrt(b*b-4.*a*c))/(2.0*a);x2=(-b-sqrt(b*b-4.*a*c))/(2.0*a);printf(“x1=%7.2f\nx2=%7.2f”,x1,x2);}b*b-4ac<0?一元二次方程根求解算法描述b2-4ac=0?yes求等根nob2-4ac>0?yes求實(shí)根no求復(fù)根問題:如何構(gòu)造條件?如何根據(jù)條件實(shí)現(xiàn)不同算法?3.1程序的三種控制結(jié)構(gòu)

結(jié)構(gòu)化程序設(shè)計(jì)是軟件設(shè)計(jì)的第三次革命。結(jié)構(gòu)化程序設(shè)計(jì)的基礎(chǔ)是采用三種程序的控制結(jié)構(gòu)。1966年B?HM&Jacopini

證明:只要三種控制結(jié)構(gòu)就能表達(dá)用一個(gè)入口和一個(gè)出口框圖所能表達(dá)的任何程序邏輯。三種控制結(jié)構(gòu)如下:⒈順序結(jié)構(gòu)Sequence算法描述:

f;g;框圖:f;g;⒉選擇結(jié)構(gòu)Selection(分支結(jié)構(gòu))算法描述:

if(e)f;elseg;框圖:e?yesf;nog;⒊循環(huán)結(jié)構(gòu)Repetition⑴當(dāng)型循環(huán)whilecistruedofc?fYESNO⑵直到循環(huán)dofuntilcisfalsefc?YESNO三種控制結(jié)構(gòu)有如下共同的特點(diǎn):一個(gè)入口和一個(gè)出口;無死語句;無死循環(huán)。如何構(gòu)造條件?⒋復(fù)合語句Compound Statement

概念:C語言可以用{}包括一系列的語句。一對(duì){}所包含的內(nèi)容稱為一個(gè)復(fù)合語句。其中可以含有0到多條C語言語句。#include<stdio.h>voidmain(void)

{inta,b;scanf(“%d,%d”,&a,&b);

{inttemp;temp=a;a=b;b=temp;

}printf(“%d,%d”,a,b);}復(fù)合語句復(fù)合語句復(fù)合語句可以嵌套凡是可以出現(xiàn)單一語句的地方都可以使用復(fù)合語句。復(fù)合語句的作用:⒈作為分支和循環(huán)的塊。⒉作為標(biāo)識(shí)符的作用域。交換算法演示3.2關(guān)系運(yùn)算和邏輯運(yùn)算⒈關(guān)系運(yùn)算(RelationalOperator)

關(guān)系運(yùn)算是比較兩個(gè)表達(dá)式的數(shù)值相互關(guān)系的運(yùn)算。運(yùn)算符比較的關(guān)系實(shí)例>大于a>b>=大于等于a>=b<小于2<1<=小于等于c<=d==等于1==c!=不等于1!=3

關(guān)系運(yùn)算規(guī)則:參加運(yùn)算的表達(dá)式的從左到右按關(guān)系運(yùn)算符提供的關(guān)系進(jìn)行比較,滿足關(guān)系得到整型值1

,不滿足關(guān)系得到整型值0。inta=1,b=3,c,d;c=a>b;d=a+2<=b+3;⒉邏輯運(yùn)算(LogicalOperator)

邏輯運(yùn)算運(yùn)算時(shí)判斷對(duì)象真、假的運(yùn)算。C語言沒有提供邏輯類型。任何類型的值都可以表示邏輯狀態(tài),如下表:表達(dá)式的值所對(duì)應(yīng)的邏輯值表達(dá)式的值表示的邏輯關(guān)系非0真true0假false

運(yùn)算對(duì)象非0代表邏輯真,是0代表邏輯假。也就是說任何類型的量都有邏輯值。邏輯運(yùn)算的結(jié)果用整型值表示。運(yùn)算結(jié)果為真時(shí),得到整型值1;運(yùn)算結(jié)果為假時(shí),得到整型值0。inta=2,b=0;aba+bC語言的邏輯運(yùn)算運(yùn)算符邏輯關(guān)系舉例&&邏輯與a>2&&a<3||邏輯或s<2||s>6!邏輯非!a其中,!運(yùn)算是單目運(yùn)算。邏輯運(yùn)算演示⒊復(fù)雜邏輯關(guān)系的表示

在實(shí)際應(yīng)用中,經(jīng)常會(huì)遇到描述復(fù)雜的關(guān)系。如:判斷x是否大于等于5或小于3。此類關(guān)系的描述在程序設(shè)計(jì)中會(huì)大量使用。035x<3||x>=50-23-2<x<3?x=4-2<x&&x<3表示數(shù)值關(guān)系的原則:開放區(qū)間用或;閉合區(qū)間用與。思考題⒈判斷是否在一、三象限的表達(dá)式。⒉判斷是否在如圖圓環(huán)內(nèi)的表達(dá)式。sqrt(x),代表對(duì)x開平方。⒊ch為字符變量,判斷ch是否為字母的表達(dá)式。(ch>=’a’&&ch<=‘z’)||(ch>=’A’&&ch<=‘Z’)不是字母的表達(dá)式?⒋運(yùn)算的優(yōu)先級(jí)C語言允許所有基本類型的量參加同一表達(dá)式的運(yùn)算,也允許所有類型的運(yùn)算符出現(xiàn)在一個(gè)表達(dá)式中。因此,表達(dá)式值的類型如何確定,運(yùn)算的先后順序如何確定,必須通過一套規(guī)則解決。

為了便于調(diào)整優(yōu)先級(jí),設(shè)置()為最高優(yōu)先級(jí)。相同優(yōu)先級(jí)存在一個(gè)順序稱為結(jié)合順序,結(jié)合順序有從右向左或從左向右。⑴運(yùn)算優(yōu)先級(jí)第一原則:單目運(yùn)算的優(yōu)先級(jí)高于雙目運(yùn)算。第二原則:算術(shù)運(yùn)算關(guān)系運(yùn)算邏輯運(yùn)算賦值運(yùn)算表達(dá)式優(yōu)先級(jí)舉例說明:++a-b>c+d&&a>=b*34①②③④⑤⑥⑦注意:在無法確定優(yōu)先級(jí)時(shí),加()區(qū)分。簡化表達(dá)式。c=b*=a+2c=(b*=(a+2))級(jí)別運(yùn)算符結(jié)合順序1()[]->.從左向右2!-++--(type)sizeof*&~從右向左3*/%從左向右4+-從左向右5<<>>(移位運(yùn)算)從左向右6<<=>>=從左向右7==!=從左向右8&(位與運(yùn)算)從左向右9^(位異或運(yùn)算)從左向右10|(位或運(yùn)算)從左向右11&&從左向右12||從左向右13?:從右向左14=op=從右向左15,從左向右優(yōu)先級(jí)總表優(yōu)先級(jí)特例

⒈自加、自減運(yùn)算優(yōu)先級(jí)遵循原則:前置:先運(yùn)算后引用;

后置:先引用后運(yùn)算。#include<stdio.h>voidmain(void){inta=3,b;b=a+++a++;printf(“b=%d”,b);b=++a+(++a);printf(“b=%d”,b);}CHAP3EX0⒉在邏輯運(yùn)算中,如果邏輯值能夠確定,則不再進(jìn)行運(yùn)算。inta=0,b=0++a||++b;printf(“a=%d\nb=%d”,a,b);a=0;a&&++b;/*b的值?*/++CHAP3EX13.3分支結(jié)構(gòu)(選擇結(jié)構(gòu)Selection)

⒈if及if-else的三種結(jié)構(gòu)。

由標(biāo)準(zhǔn)的分支結(jié)構(gòu)可以演化成單分支、多分支結(jié)構(gòu)。C語言的分支語句有if

、if–else、switch三種。

⑴if語句格式:

if(expression)statement;語句表達(dá)式,非0為yes,0為no。語句,可以是復(fù)合語句。流程圖:e?statement;yesno舉例:#include<stdio.h>voidmain(void){charch;ch=getchar();if(ch>=‘a(chǎn)’&&ch<=‘z’)ch-=32;putchar(ch);}CHAP3EX2⑵if–else結(jié)構(gòu)格式:

if(expression)

stat1;

else stat2;語句或復(fù)合語句。流程圖:e?falsestat2;stat1;true入口出口舉例:輸出|x|。#include<stdio.h>voidmain(void){intx;scanf(“%d”,&x);

if(x>=0)printf(“%d”,x);

else

printf(“%d”,-x);}⑶if–elseif結(jié)構(gòu)(Muliline

)格式:

if(e1)

stat1;

elseif(e2)

stat2;

elseif(e3)

stat3;…

elseif(en-1)

statn-1;

elsestatn;

框圖:e1?tstat1;fe2?tstat2;出口fen-1?tstatn-1;fstatn;n-1個(gè)條件,滿足某個(gè)條件,執(zhí)行對(duì)應(yīng)的語句,然后到出口。ifelseif結(jié)構(gòu)舉例:征稅問題:1000以下稅率為3%1000~2000稅率為4%2000~3000稅率為5% 3000以上稅率6%輸入收入,求應(yīng)繳稅款。#include<stdio.h>voidmain(void){floatx,rate;scanf(“%f”,&x);

if(x<1000)rate=.03;elseif(x<2000)rate=.04;elseif(x<3000)rate=.05;elserate=.06;printf(“%f”,x*rate);}3/100?⑷if語句的嵌套對(duì)于如下的結(jié)構(gòu):

if(e1)stat1;

elsestat2;在stat1或stat2中又含有if結(jié)構(gòu):if(e2)stat3;elsestat4;稱為if結(jié)構(gòu)的嵌套。各種if結(jié)構(gòu)都可以嵌套。

如求符號(hào)函數(shù):

-1(x<0)y=0(x=0)1(x>0)#include<stdio.h>voidmain(void){intx,y;scanf(“%d”,&x);if(x<0)y=-1;else

if(x==0)y=0;

else

y=1;printf(“x=%d,y=%d\n”,x,y);}外層內(nèi)層

在外層else語句中,含有一個(gè)if結(jié)構(gòu)。說明:①書寫采取縮進(jìn)形式,便于區(qū)分。內(nèi)層縮進(jìn)。②else與最近的if相匹配,從內(nèi)到外。y=-1;if(x!=0)if(x>0)y=1;elsey=0;x==0結(jié)果?舉例:求一元二次方程ax2+bx+c=0的根。#include<stdio.h>#include<math.h>voidmain(void){floata,b,c,d,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);d=b*b-4.0*a*c;if(fabs(d)<1.0e-6){printf(“\nx1=x2=,%f”,-b/(2.0*a));}else{

if(d>0)

{

printf(“\nx1=%f”,(-b+(float)sqrt(d))/(2.0*a));printf(“\nx2=%f”,(-b-(float)sqrt(d))/(2.0*a));

}

else

{

printf(“\nx1=%f+i%f”,-b/(2.0*a),(float)sqrt(-d)/(2.0*a));printf(“\nx2=%f-i%f”,-b/(2.0*a),(float)sqrt(-d)/(2.0*a));

}}}外層內(nèi)層求相等實(shí)根。求不等實(shí)根。求共扼復(fù)根。CHAP3EX4

判斷實(shí)型量相等或不等用誤差的方法。flaota=1.0/*a=1.000001或0.999999*/a==1.0?⒉switch語句(多分支結(jié)構(gòu))格式:switch

(expression)

{case常量表達(dá)式1:statement1;case常量表達(dá)式2:statement2;…case常量表達(dá)式n-1:statementn-1;default:statementn;

}只能是整型或字符型表達(dá)式。

整型字符型常量表達(dá)式。表達(dá)式的值要互不能相等!

流程:①先求expression的值。②依次比較expression和各常量表達(dá)式的值。

③如果與第i個(gè)常量表達(dá)式相等,則執(zhí)行第i條以后的語句。④如果都不相等,則執(zhí)行default以后的語句。語句標(biāo)號(hào)的概念:#include<stdio.h>voidmain(void){chargrade;grade=getchar();

switch(grade)

{

case‘A’:printf(“90—100\n”);

case‘B’:printf(“80—89\n’);

case‘C’:printf(“70—79\n”);

case‘D’:printf(“60—69\n”);

case‘E’:printf(“<60\n”);

default:printf(“error\n”);}}CHAP3EX5語句標(biāo)號(hào)。break語句:格式:break;作用:中斷switch流程。break;break;break;break;break;CHAP3EX6例:輸出五分制對(duì)應(yīng)的百分制范圍。#include<stdio.h>voidmain(void){charchGrad;chGrad=getchar();

switch(chGrad){

case‘a(chǎn)’:case‘A’:

printf(“90—100\n”);break;case‘b’:case‘B’:printf(“80—89\n”);break;case‘c’:case‘C’:printf(“70—79\n”);break;case‘d’:case‘D’:printf(“60—69\n”);break;case‘e’:case‘E’:printf(“<60\n”);break;

default:printf(“DataError!\n”);

}}多個(gè)標(biāo)號(hào)可以共用相同的語句。default語句可以省略。3.4

循環(huán)結(jié)構(gòu)(Repetition)程序經(jīng)常會(huì)重復(fù)執(zhí)行某些相同的操作,如:求:s=1+2+3+4+…+100算法描述:①s=0;i=1;②s+=i;i++;③判斷i是否小于等于100

如果i小于等于100,重復(fù)②;

否則,結(jié)束。此類根據(jù)“條件”重復(fù)執(zhí)行相同算法的結(jié)構(gòu),稱為循環(huán)。初始化部分。循環(huán)體。含有使條件趨假的語句。

循環(huán)的條件。注意:循環(huán)應(yīng)在有限次完成。

C語言提供了三類實(shí)現(xiàn)循環(huán)的語句:

while,dowhile,for

⒈while循環(huán)(當(dāng)型循環(huán))格式:

while(expression)

statement;表達(dá)式:值非0,表示滿足條件;值為0代表不滿足條件。語句(復(fù)合語句),重復(fù)執(zhí)行部分(循環(huán)體)。流程:e?truestatement;false含有使條件趨假的語句。舉例:求s=1+2+3+4+…+100#include<stdio.h>voidmain(void){ints=0,i=1;

while(i<=100)

{s=s+i;/*s+=i;*/i++;}

printf(“s=%d\n”,s);}初始化部分循環(huán)體條件測(cè)試使條件趨假語句CHAP3EX7⒉do–while循環(huán)(直到型循環(huán))格式:

do{

statement;}

while

(expression);流程:statement;e?truefalse含有使條件趨假的語句。while循環(huán)與do-while循環(huán)的區(qū)別:while循環(huán)先判條件,后執(zhí)行循環(huán)體;do–while循環(huán)先執(zhí)行循環(huán)體,后判條件。舉例:求:30!#include<stdio.h>voidmain(void){floats=1.0;inti=1;

do{s*=i;i++;}while(i<=30);

printf(“30!=%f”,s);}初始化。循環(huán)體。測(cè)試條件。使條件趨假。CHAP3EX8思考題:用do-while實(shí)現(xiàn)s=1+2+…+100。用while實(shí)現(xiàn)30!。⒊for循環(huán)格式:

for

(e1;

e2;e3)

statement;流程:e1e2?truestatement;e3false舉例:求:s=1+2+3+…+100#include<stdio.h>voidmain(void){ints=0,i;

for(i=1;i<=100;i++

)

{s=s+i;

}

printf(“s=%d”,s);}使e2趨假。在for循環(huán)中,e1、e2、e3都可以省略!e1省略

i=1;e3省略

i++;初值表達(dá)式。測(cè)試表達(dá)式。增值表達(dá)式。for循環(huán)實(shí)例

求100以內(nèi)的偶數(shù)和。ints=0,i;for(i=2;i<100;i+=2){s+=i;}求500以內(nèi)最大的5個(gè)能被50整除數(shù)的和。inti,j,s=0;for(j=500,i=0;i<5;i++,j-=50){s+=j;}從大到小輸出100以內(nèi)能被5整除的數(shù)。inti;for(i=100;i>=0;i-=5)printf(“%d\n”,i);inti,j,s=0;for(i=0,j=0;i+j<100;i++,++j){s+=i+j;}⒋循環(huán)應(yīng)用的幾個(gè)問題⑴循環(huán)的嵌套

概念:在一個(gè)循環(huán)的循環(huán)體內(nèi)又包含一個(gè)完整的循環(huán)稱為循環(huán)的嵌套。i123456789 11

11

2……1

9

j 22

12

2……2

9 99

19

2……9

9如打印一9

9的乘法表:i=1時(shí),j從1變化到9,完i*j。多重循環(huán)打印9

9乘法表。#include<stdio.h>voidmain(void){inti,j;for(i=1;i<=9;i++){

printf(“\n“);}}外層循環(huán)內(nèi)層循環(huán)說明:⒈內(nèi)外層循環(huán)采用縮進(jìn)形式。⒉while和do-while和for可以相互嵌套。

⒊執(zhí)行次數(shù)為內(nèi)層循環(huán)次數(shù)和外層循環(huán)次數(shù)的乘積。CHAP3EX9如何打印乘法表的一半?for(j=1;j<=9;j++){printf(“%4d“,i*j);}⑵循環(huán)的中斷(break)和繼續(xù)(continue)①循環(huán)的中斷:break語句

概念:循環(huán)體中可以加分支,判斷是否繼續(xù)執(zhí)行循環(huán),break語句可以提前結(jié)束循環(huán)。舉例:求:r=1—10的圓的面積,如圓面積大于100則中斷。for(r=1;r<=10;r++){area=3.14159*r*r;

if(area>100)

break;

printf(“\n%f“,area);}滿足條件,則退出循環(huán)。②繼續(xù)循環(huán):continue語句continue語句的作用是跳過本次循環(huán)剩余的循環(huán)體內(nèi)容,執(zhí)行下次循環(huán)。舉例:求1—100內(nèi)的偶數(shù)和。

s=0;for(n=1;n<=100;n++){

if(n%2!=0)

continue;

s+=n;}

滿足條件,跳過本次循環(huán)體剩余內(nèi)容,繼續(xù)下次循環(huán)。ints=0,i;for(i=2;i<100;i=i+2)s+=i;⑶無限循環(huán)和空循環(huán)①條件為恒真的循環(huán)——無限循環(huán)while(1){…}do{…}while(1);for(;;){…}通過條件控制的break語句退出循環(huán)。例:程序等待直到輸入字母A。for(;;){ch=getchar();if(ch==’A’)break;}②循環(huán)體為空語句的循環(huán)——空循環(huán)for(i=1;i<=MAX;i++)

;作用:程序延時(shí)??照Z句{;}⑷goto語句格式:

gotoLabel/*Label:同一函數(shù)內(nèi)語句前的標(biāo)號(hào)。*/作用:轉(zhuǎn)移到標(biāo)號(hào)對(duì)應(yīng)的語句上繼續(xù)執(zhí)行。loop:

if(i<=100){

sum=sum+i;i++;

gotoloop;

}循環(huán)和分支相互嵌套輸入10個(gè)自然數(shù)統(tǒng)計(jì)其中偶數(shù)的個(gè)數(shù)及偶數(shù)值和。算法框圖:start定義變量初始化循環(huán)?true輸入偶數(shù)?true統(tǒng)計(jì)累加falsefalse輸出結(jié)果end#include<stdio.h>voidmain(void){inti,ix,iCount=0,iSum=0;

for(i=1;i<=10;i++){

scanf(“%d\n”,&ix);

if(ix%2==0){iSum+=ix;iCount++;}

}printf(“Num=%d\nSum=%d”,iCount,iSum);}循環(huán)結(jié)構(gòu)分支結(jié)構(gòu)輸入負(fù)數(shù)?do{

if(ix<=0)printf(“dateerror”);}while(ix<=0);

算法的健壯性注意:結(jié)構(gòu)應(yīng)完整的包含和被包含。程序設(shè)計(jì)的基本方法

根據(jù)計(jì)算機(jī)的特點(diǎn),結(jié)合循環(huán)與分支結(jié)構(gòu)在程序設(shè)計(jì)時(shí)常使兩種常用的基本方法。枚舉法(窮舉法)迭代法

本專題將結(jié)合分支和循環(huán)介紹兩種方法的基本思想和具體實(shí)現(xiàn)!枚舉法Enumeration存在有限狀態(tài);其中某些狀態(tài)滿足特定條件。通過循環(huán)產(chǎn)生所有狀態(tài)(枚舉)。對(duì)每一狀態(tài),按條件進(jìn)行狀態(tài)測(cè)試,滿足條件的狀態(tài),為所求的解。求100到200內(nèi)的所有素?cái)?shù)。通過循環(huán)使i從101變化到199(枚舉所有狀態(tài))對(duì)每次循環(huán)的i進(jìn)行是否是素?cái)?shù)的測(cè)試,如果是素?cái)?shù),輸出i。枚舉法舉例:⒈求100到200之間的所有素?cái)?shù)(只能被1和自身整除的數(shù))。對(duì)于自然數(shù)n,判斷其是否為素?cái)?shù)有以下三種方法:①判斷n是否能被從2到n-1范圍內(nèi)的數(shù)整除;②判斷n是否能被從2到(int)(n/2)范圍的數(shù)整除;③判斷n是否能被從2到(int)sqrt(n)范圍的數(shù)整除;程序如下:#include<stdio.h>#include<math.h>voidmain(void){intn,j,s;

for(n=101;n<200;n+=2)

{

s=(int)sqrt((double)n);

for(j=2;j<=s;j++){if(n%j==0)break;}

if(j>s)

printf(“\n%d”,n);

}}枚舉所有數(shù)構(gòu)造,測(cè)試條件

如果n能被2到s的任意數(shù)整除,退出循環(huán)。如果n是素?cái)?shù),輸出n。CHAP3EXA

⒉求水仙花數(shù)(條件:三位數(shù)的個(gè)、十、百位的方和等于該數(shù)。153==13+53+33

)。n為枚舉變量,枚舉初值100,枚舉終值999。構(gòu)造條件:取出n的個(gè)、十、百位數(shù)。測(cè)試是否滿足條件,滿足條件輸出n。#include<stdio.h>voidmain(void){intn,a,b,c;

for(n=100;n<=999;n++){

a=n/100;b=n%100/10;c=n%10;

if(a*a*a+b*b*b+c*c*c==n) printf(“\n%d”,n);

}}枚舉所有三位數(shù)構(gòu)造條件測(cè)試條件取n的百位a、十位b、個(gè)位c。CHAP3EXB⒊愛因斯坦階梯問題(不定范圍的枚舉)。

設(shè)有一階梯,每步跨2階,最后剩1階;每步跨3階,最后剩2階;每步跨5階,最后剩4階;每步跨6階,最后剩5階;每步跨7階,正好到階梯頂。問共有多少階梯。根據(jù)條件可以得出:臺(tái)階數(shù)一定是奇數(shù)且為7的倍數(shù)。枚舉初值:k=7;

枚舉公式:k=k+14

結(jié)束條件:滿足(k%3==2)&&(k%5==4)&&(k%6==5)結(jié)束。#include<stdio.h>void

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論