




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第1章 程序設(shè)計(jì)基礎(chǔ) 1.1 計(jì)算機(jī)內(nèi)的數(shù)據(jù)表示 1.2算法及其表示 1.3程序設(shè)計(jì)語言 1.4 結(jié)構(gòu)化程序設(shè)計(jì)1.1 計(jì)算機(jī)內(nèi)的數(shù)據(jù)表示數(shù)制及其轉(zhuǎn)換常用計(jì)數(shù)方法十進(jìn)制計(jì)數(shù)法進(jìn)制計(jì)數(shù)法是“逢十進(jìn)一”的 例如:(1234.56)10110321023101410051016102各位的權(quán)值分別為:103、102、101、100、101、102。二進(jìn)制計(jì)數(shù)法二進(jìn)制計(jì)數(shù)法是“逢二進(jìn)一”的。 例如:(1001101.11)2=126025024123122021120121122 各位的權(quán)值分別為: 26、25、24、23、22、21、20、21、22、23。1.1 計(jì)算機(jī)內(nèi)的數(shù)據(jù)表示八進(jìn)制數(shù)與十六進(jìn)
2、制數(shù)八進(jìn)制計(jì)數(shù)法是“逢八進(jìn)一”的,數(shù)碼為: 0、1、2、3、4、5、6、7。例如:(621)8=682281680 各位的權(quán)值分別為:82、81、80。十六進(jìn)制計(jì)數(shù)法是“逢十六進(jìn)一”的,數(shù)碼為 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。 例如:(8A1F)16=816310162116115160各位的權(quán)值分別為:163、162、161、160。1.1 計(jì)算機(jī)內(nèi)的數(shù)據(jù)表示數(shù)制轉(zhuǎn)換任意進(jìn)制轉(zhuǎn)換為十進(jìn)制由r制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)可按照如下公式進(jìn)行多項(xiàng)式展開求和即可:KnKn1K1K0 . K1K2KmKnrnKn1rn1K1r1K0 r0K1r1K2r2Kmrm 十進(jìn)制轉(zhuǎn)換為任意
3、進(jìn)制可以采用除基取余法將十進(jìn)制整數(shù)轉(zhuǎn)換為r進(jìn)制整數(shù):將十進(jìn)制整數(shù)除以r,得到商和余數(shù),余數(shù)對(duì)應(yīng)為r進(jìn)制數(shù)低位的值;繼續(xù)讓商再除以r,得到商和余數(shù),重復(fù)此操作,直至商為0,如此得到的一系列的余數(shù)就是相應(yīng)r進(jìn)制數(shù)的各位數(shù)字,先得到的是低位,后得到的是高位。 1.1 計(jì)算機(jī)內(nèi)的數(shù)據(jù)表示例如,將(29)10轉(zhuǎn)換為二進(jìn)制整數(shù):因此,(29)10(11101)2 2 29 2 14 1 低位 2 7 0 2 3 1 2 1 1 0 1 高位 1.1 計(jì)算機(jī)內(nèi)的數(shù)據(jù)表示可采用乘基取整法將十進(jìn)制小數(shù)轉(zhuǎn)換為r進(jìn)制小數(shù):將十進(jìn)制小數(shù)乘以r,去掉乘積的整數(shù)部分,再將余下的純小數(shù)乘以r,重復(fù)此操作,直至乘積等于0或達(dá)
4、到所需的精度為止,如此得到的一系列整數(shù)就是r進(jìn)制小數(shù)的各位數(shù)字,先得到的是高位,后得到的是低位。 例如,將(0.625)10轉(zhuǎn)換為二進(jìn)制小數(shù): 0.6252=1.25 1 高位 0.252=0.5 0 0.52=1 1 低位 因此,(0.625)10(0.101)2由于整數(shù)和小數(shù)的轉(zhuǎn)換方法截然不同,將十進(jìn)制數(shù)轉(zhuǎn)換為r進(jìn)制數(shù)時(shí),整數(shù)部分和小數(shù)部分要分開來進(jìn)行轉(zhuǎn)換。r進(jìn)制小數(shù)能精確的轉(zhuǎn)換為十進(jìn)制小數(shù),但十進(jìn)制小數(shù)通常不能精確的轉(zhuǎn)換為r進(jìn)制小數(shù)。1.1 計(jì)算機(jī)內(nèi)的數(shù)據(jù)表示二進(jìn)制與八進(jìn)制、十六進(jìn)制之間的轉(zhuǎn)換對(duì)于一個(gè)二進(jìn)制數(shù),只要依次(整數(shù)部分由低位到高位,小數(shù)部分由高位到低位)將其每3位或4位分成一組
5、,就可以直接轉(zhuǎn)換為八進(jìn)制數(shù)或十六進(jìn)制數(shù)。例如, (1 000 101 111 010 011.011 01)2(105423.53)8 (1000 1011 1101 0011.01101)2(8B13.B8)16將八進(jìn)制數(shù)中的每一位用3位二進(jìn)制數(shù)表示,將十六進(jìn)制數(shù)中的每一位用4位二進(jìn)制數(shù)表示,就能轉(zhuǎn)換為對(duì)應(yīng)的二進(jìn)制數(shù)。1.1 計(jì)算機(jī)內(nèi)的數(shù)據(jù)表示 原碼,反碼及補(bǔ)碼 在計(jì)算機(jī)中,“位” 是數(shù)據(jù)的最小單位。計(jì)算機(jī)中的存儲(chǔ)量是以字節(jié)來計(jì)算的,一個(gè)字節(jié)是8位二進(jìn)制位。在計(jì)算機(jī)內(nèi),一般規(guī)定:用0表示正號(hào)“”,用1表示負(fù)號(hào)“”;符號(hào)位放在數(shù)值位之前。一個(gè)數(shù)連同其符號(hào)在機(jī)器中的二進(jìn)制表示形式稱為機(jī)器數(shù),它所
6、代表的數(shù)值稱為機(jī)器數(shù)的真值。 機(jī)器數(shù)的一般格式為: 符號(hào)位 數(shù)值位 1.1 計(jì)算機(jī)內(nèi)的數(shù)據(jù)表示原碼原碼表示法是符號(hào)位用0表示正數(shù),用1表示負(fù)數(shù),數(shù)值位表示數(shù)值本身。例如:27原= 0 0 0 1 1 0 1 1 27原= 1 0 0 1 1 0 1 1在原碼表示法中,0的表示方法不唯一:0原= 0 0 0 0 0 0 0 0 0原= 1 0 0 0 0 0 0 0 。反碼反碼表示法中正數(shù)與負(fù)數(shù)的表示方法不同,正數(shù)的反碼與原碼同形,如:27反= 0 0 0 1 1 0 1 1負(fù)數(shù)的反碼為:符號(hào)位仍為1,數(shù)值位是對(duì)原碼取反,如:27反= 1 1 1 0 0 1 0 0在反碼表示法中,0的表示也不唯
7、一:0反= 0 0 0 0 0 0 0 0 0反= 1 1 1 1 1 1 1 1。 1.1 計(jì)算機(jī)內(nèi)的數(shù)據(jù)表示補(bǔ)碼正數(shù)的補(bǔ)碼與原碼、反碼同形,如: 18原18反18補(bǔ) 0 0 0 1 0 0 1 0負(fù)數(shù)的補(bǔ)碼為:符號(hào)位為1,數(shù)值位等于原碼的數(shù)值位取反,再加1,或者說: x補(bǔ)x反1;如:18原 1 0 0 1 0 0 1 0 18反 1 1 1 0 1 1 0 1 18補(bǔ) 1 1 1 0 1 1 1 0補(bǔ)碼形式的數(shù)據(jù)進(jìn)行運(yùn)算時(shí),符號(hào)位和數(shù)值位一樣的參與運(yùn)算。例如,計(jì)算3658,36補(bǔ) 1 1 0 1 1 1 0 0 58補(bǔ) 0 0 1 1 1 0 1 0 1 1 0 1 1 1 0 0 0 0
8、 1 1 1 0 1 0溢出 1 0 0 0 1 0 1 1 0 在補(bǔ)碼表示法中,0的表示是唯一的,假設(shè)用一個(gè)字節(jié)存放數(shù)據(jù)0補(bǔ)0 0 0 0 0 0 0 01.2算法及其表示 算法為解決一個(gè)問題而采取得方法和步驟,稱為算法。 算法就是被精確定義的一組規(guī)則,規(guī)定先做什么,再做什么,以及判斷某種情況下做哪種操作。 例如,下面是用自然語言表示的對(duì)三個(gè)數(shù)進(jìn)行從小到大排序的算法。 輸入三個(gè)數(shù)x、y、z; 將x與y比較,若xy,交換x與y的值; 將x與z比較,若xz,交換x與z的值; 將y與z比較,若yz,交換y與z的值; 輸出此時(shí)的三個(gè)數(shù)x、y、z1.1 計(jì)算機(jī)內(nèi)的數(shù)據(jù)表示算法的特性和目標(biāo) 算法必須具有
9、以下五個(gè)特性:確定性 算法中的每一步都必須有確切的含義,不允許存在二義性;對(duì)于相同的輸入數(shù)據(jù),必須有相同的輸出結(jié)果??尚行?算法中的每一步操作都能通過可以實(shí)現(xiàn)的基本運(yùn)算,執(zhí)行有限次來完成,并最終得到確定的結(jié)果。有窮性 一個(gè)算法必須總是在執(zhí)行有限個(gè)操作步驟和可以接受的時(shí)間內(nèi)完成其執(zhí)行過程。也即是說,對(duì)于一個(gè)算法,要求其在時(shí)間和空間上均是有窮的。1.2算法及其表示輸入 一個(gè)算法有零個(gè)或多個(gè)輸入數(shù)據(jù)。有些算法需要提供輸入數(shù)據(jù),有些算法則不需要。輸出 一個(gè)算法應(yīng)該有1個(gè)或多個(gè)輸出數(shù)據(jù)。算法應(yīng)達(dá)到的目標(biāo)正確性可讀性健壯性高效率與低存儲(chǔ)空間需求 1.2算法及其表示算法的表示 自然語言 傳統(tǒng)流程圖 傳統(tǒng)流程
10、圖是用規(guī)定的一組圖形符號(hào)、流程線和文字說明來表示各種操作的算法表示方法。 1.2算法及其表示1.2算法及其表示流程圖只包括三種基本程序結(jié)構(gòu) 順序結(jié)構(gòu) 選擇結(jié)構(gòu) 真處理A處理B假條 件 選擇結(jié)構(gòu)處理A處理B 順序結(jié)構(gòu)1.2算法及其表示循環(huán)結(jié)構(gòu) 真 處理A假條 件 直到型循環(huán)結(jié)構(gòu)假真 處理 A條 件 當(dāng)型循環(huán)結(jié)構(gòu) 開始 輸入x,y,z 結(jié) 束 輸出x、y、z對(duì)三個(gè)數(shù)進(jìn)行排序 交換x、y假真 xy? 交換x、z假真 xz? 交換y、z假真 yz?1.2算法及其表示N-S流程圖 順序結(jié)構(gòu) 選擇結(jié)構(gòu) 順序結(jié)構(gòu) 處理A 處理B 分支結(jié)構(gòu) 條 件 處理A 處理B成立不成立1.2算法及其表示循環(huán)結(jié)構(gòu) 當(dāng)條件成
11、立時(shí)繼續(xù) 處理 A 當(dāng)型循環(huán)結(jié)構(gòu) 處理 A 直到條件成立時(shí)結(jié)束 直到型循環(huán)結(jié)構(gòu)1.2算法及其表示 輸入x,y,zxy? Y N 交換x、yxz? Y N 交換x、zyz? Y N 交換y、z 輸出x、y、z三個(gè)數(shù)進(jìn)行從小到大排序1.2算法及其表示偽碼偽碼是用一種介于自然語言和計(jì)算機(jī)語言之間的文字和符號(hào)來描述算法。例如,用偽碼描述上述算法:input x, y, zxmaxif y max then ymaxif z max then zmax output max1.3程序設(shè)計(jì)語言 程序與程序設(shè)計(jì)語言 程序 計(jì)算機(jī)程序是指為讓計(jì)算機(jī)完成特定的任務(wù)而設(shè)計(jì)的指令序列。 程序設(shè)計(jì)語言 機(jī)器語言匯編語
12、言高級(jí)語言面向?qū)ο蟮恼Z言 C語言簡介 C語言的歷史 1.3程序設(shè)計(jì)語言C程序的結(jié)構(gòu) C程序是一種函數(shù)結(jié)構(gòu),一般由一個(gè)或若干個(gè)函數(shù)組成;其中必有一個(gè)名為main( )的主函數(shù),程序的執(zhí)行就是從這里開始的。 【例1.1】編寫程序判斷一個(gè)整數(shù)是否是3的倍數(shù),如果是輸出“YES”,否則輸出NO”。main( ) /*main函數(shù)的首部*/ /*main函數(shù)體的開始*/ int m;/*定義整型變量m*/ printf(nPlease input a integer:);/*輸出提示信息*/ scanf(%d,&m);/*讀入變量的值*/ if( (m%3=0) printf(YES); else pr
13、intf(NO); /*如果flag值為0,輸出“YES”,否則輸出“N0”*/1.3程序設(shè)計(jì)語言運(yùn)行情況如下:Please input a integer: 20 NO【例1.2】編寫程序求任意三個(gè)整數(shù)中的最小值。main( ) /*main函數(shù)的首部*/ /*main函數(shù)體的開始*/ int n1,n2,n3;/*定義三個(gè)整型變量*/ int minnum; /*定義變量minnum,用于存放最小值*/ printf(nEnter three integers:);/*輸出提示信息*/ scanf(%d,%d,%d,&n1,&n2,&n3); /*讀入變量的值*/ minnum=min(n
14、1,n2,n3);/*調(diào)用自定義函數(shù)min,將所求的最小值賦給變量minnum*/ printf(nMaximum is:%d,minnum);/*輸出minnum值*/ 1.3程序設(shè)計(jì)語言int min(int x,int y,int z) /*num函數(shù)的首部*/ /*num函數(shù)體的開始*/ int m; m=x; /*默認(rèn)第一個(gè)數(shù)最小*/ if (ym) m=y; /*如果第二個(gè)數(shù)更小,則修改m*/ if (zm) m=z; /*如果第三個(gè)數(shù)更小,則修改m*/ return m; /*將m的值作為函數(shù)值返回*/ /*max函數(shù)體的結(jié)束*/運(yùn)行情況如下:Enter three intege
15、rs: 18, 25, 12Maximum is: 12 1.3程序設(shè)計(jì)語言C程序的結(jié)構(gòu)特點(diǎn) C程序是由函數(shù)構(gòu)成的。函數(shù)由函數(shù)首部和函數(shù)體兩部分組成。 一般函數(shù)的格式如下: 類型名 函數(shù)名(函數(shù)參數(shù)表) 聲明部分 執(zhí)行部分 函數(shù)體中也可以沒有任何內(nèi)容,即構(gòu)成一個(gè)空函數(shù)。一個(gè)源程序有一個(gè)且只能有一個(gè)main函數(shù)(又稱主函數(shù))。C程序的執(zhí)行總是從main函數(shù)開始的,在調(diào)用其它函數(shù)后,最后回到main函數(shù)中結(jié)束整個(gè)程序的執(zhí)行。1.3程序設(shè)計(jì)語言C程序書寫格式自由。既允許在一行內(nèi)寫多個(gè)語句,也允許將一個(gè)語句分寫在多行上,但每個(gè)語句必須以分號(hào)結(jié)束?!?*/”表示對(duì)函數(shù)或語句的功能作注釋。在“/”和“*”
16、之間不能有空格,且“/*”和“*/”必須配對(duì)使用。注釋是供人閱讀的,并不參與編譯和運(yùn)行。注釋可以出現(xiàn)在程序的任何地方,添加必要的注釋可以提高程序的可讀性。源程序中可以使用預(yù)處理命令(如include命令、define命令),預(yù)處理命令以“#”開頭,一般預(yù)處理命令應(yīng)放在源文件或源程序的最前面。1.3程序設(shè)計(jì)語言C程序的一般形式如下: 預(yù)編譯處理命令 全局變量定義 main( ) 聲明部分 執(zhí)行部分 sub 1( ) /*自定義函數(shù)*/ sub n( ) /*自定義函數(shù)*/ 1.3 程序設(shè)計(jì)語言C程序的特點(diǎn) 簡潔、緊湊模塊化、結(jié)構(gòu)化功能強(qiáng)大可移植性好C語言的不足運(yùn)算符多,難以掌握C程序中常常為了類
17、型轉(zhuǎn)換上的方便不要求類型檢查,這就導(dǎo)致有些情況下即使要求類型一致,但實(shí)際類型不一致也不出錯(cuò),而產(chǎn)生莫名其妙的運(yùn)算結(jié)果。C語言中對(duì)數(shù)組進(jìn)行處理時(shí)對(duì)數(shù)組元素的下標(biāo)不做越界檢查,若程序中引用數(shù)組元素時(shí)越界,容易造成數(shù)據(jù)的混亂,甚至更嚴(yán)重的錯(cuò)誤。 1.4 結(jié)構(gòu)化程序設(shè)計(jì) 結(jié)構(gòu)化程序設(shè)計(jì)方法結(jié)構(gòu)化程序設(shè)計(jì)方法是一種用來編寫清晰、可讀性好、易修改性強(qiáng)的程序的嚴(yán)格的設(shè)計(jì)方法。結(jié)構(gòu)化程序設(shè)計(jì)方法要求程序僅由三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)經(jīng)組合、嵌套而成。而且,要求每個(gè)程序模塊是單入口單出口的;程序中沒有永遠(yuǎn)執(zhí)行不到的語句,沒有死循環(huán)(無終止的循環(huán))。 結(jié)構(gòu)化程序設(shè)計(jì)方法要求采用“模塊化”的設(shè)計(jì)方法
18、。程序的設(shè)計(jì)過程采用“自頂向下,逐步求精”的策略。1.4 結(jié)構(gòu)化程序設(shè)計(jì)程序設(shè)計(jì)的步驟分析問題,確定數(shù)據(jù)結(jié)構(gòu)。 確定算法。 編寫程序。 調(diào)試運(yùn)行程序。建立文檔資料。程序設(shè)計(jì)的風(fēng)格 第2章 簡單的數(shù)據(jù)類型、運(yùn)算符及表達(dá)式 2.1 常量和變量 2.2基本數(shù)據(jù)類型 2.3 運(yùn)算符及表達(dá)式 2.4 類型轉(zhuǎn)換2.1 常量和變量 標(biāo)識(shí)符 字符集 C語言的字符集是指C程序中允許出現(xiàn)的字符,分為: 英文字母(大、小寫):A,B,C, ,Z ;a,b,c, ,z 數(shù)字:0,1,2,9 特殊字符:, ,*,/,_,(,),!,$,&,.,“,?,| 以及空格等 轉(zhuǎn)義字符:n,t,v,b,r,f,a,“,ddd,x
19、hh等 2.1 常量和變量標(biāo)識(shí)符 C語言中各種對(duì)象的名字用標(biāo)識(shí)符表示。所謂標(biāo)識(shí)符就是由字母(a-z,A-Z)、數(shù)字(0-9)和下劃線(_)組成,并且第一個(gè)字符必須為字母或下劃線開頭的一系列字符。 標(biāo)識(shí)符是表示符號(hào)常量名、變量名、函數(shù)名、類型名、文件名等的字符序列。 例如,合法的標(biāo)識(shí)符和變量名: data1,Day,x,program_1,aver,sum 非法的標(biāo)識(shí)符和變量名: J.Agate,$50,ayz; b= x y=z; c= x = =y; printf(nx=%d y=%d z=%d,x,y,z); printf(na=%d b=%d c=%d,a,b,c);程序的輸出結(jié)果是x=
20、8 y=8 z=7a=0 b=0 c=14.1 關(guān)系運(yùn)算、邏輯運(yùn)算與條件運(yùn)算邏輯運(yùn)算符與邏輯表達(dá)式邏輯運(yùn)算符與表達(dá)式邏輯表達(dá)式是指由邏輯運(yùn)算符連接若干個(gè)表達(dá)式所構(gòu)成的表達(dá)式。C語言中提供三種邏輯運(yùn)算符:&(邏輯與), |(邏輯或), !(邏輯非)。邏輯運(yùn)算符的運(yùn)算規(guī)則是:&:當(dāng)且僅當(dāng)兩個(gè)運(yùn)算量的值均為非0時(shí),其運(yùn)算結(jié)果值為1,其余情況均為0; | :當(dāng)且僅當(dāng)兩個(gè)運(yùn)算量的值均為0時(shí),其運(yùn)算結(jié)果值為0,其余情況均為1; ! :當(dāng)運(yùn)算量的值為0時(shí),運(yùn)算結(jié)果為1,當(dāng)運(yùn)算量的值為1時(shí),運(yùn)算結(jié)果為0。4.1 關(guān)系運(yùn)算、邏輯運(yùn)算與條件運(yùn)算 例如: 表示“三門課成績均為及格”的邏輯表達(dá)式為: (math60)
21、&(phys60)&(engl60) 表示“三門課成績中至少有一門不及格”的邏輯表達(dá)式為: (math60) | (phys60) | (engl=A&c0? x+1:x*x/2 條件運(yùn)算符具有右結(jié)合性例如: x0? 1:x=60.0) printf(n Passed ); /*如果成績及格,則輸出“Passed”*/運(yùn)行情況如下:Enter a score :85 PassedEnter a score :50 4.2 if語句雙分支選擇結(jié)構(gòu)if-else語句的形式為:if (表達(dá)式) 語句1 else 語句2 if-else語句的執(zhí)行過程:先判斷或計(jì)算表達(dá)式的值,若結(jié)果為“真”(非0),則
22、執(zhí)行if子句;否則執(zhí)行else子句。4.2 if語句【例4.6】將例4.4改為:如果成績及格,則輸出“Passed”;否則輸出“Failed”。main( ) float score; printf(nEnter a score :); scanf(%f,&score); if (score=60.0)printf(nPassed ); else printf(nFailed ); 運(yùn)行情況如下:Enter a score: 85 Passed再運(yùn)行:Enter a score: 50 Failed4.2 if語句嵌套的if語句if語句嵌在if子句中 if(表達(dá)式1) if(表達(dá)式2) 語句1
23、 else 語句2 else 語句3if語句嵌在else子句中 if(表達(dá)式1) if(表達(dá)式2) 語句1 else if(表達(dá)式3) 語句2 else 語句34.2 if語句較為規(guī)范、容易掌握的嵌套的if語句的結(jié)構(gòu)形式if(表達(dá)式1)語句1else if(表達(dá)式2)語句2else if(表達(dá)式3)語句3 else if(表達(dá)式n)語句nelse 語句n+1【例4.8】輸入一個(gè)學(xué)生成績,當(dāng)成績90時(shí),輸出“Very good”;當(dāng)80成績90時(shí),輸出“Good”;當(dāng)60成績80時(shí),輸出“Passed”;當(dāng)成績60時(shí),輸出“Failed”。4.2 if語句main( ) float score;
24、 printf(nEnter a score : ); scanf(%f ,&score); if(score=90) printf(nVery good ); else if(score=80) printf(nGood ); else if(score=60) printf(nPassed ); else printf(nFailed );4.2 if語句運(yùn)行情況:Enter a score :95 Very good再運(yùn)行:Enter a score :55 Failed4.2 if語句if后面的表達(dá)式可以是C語言中任意合法的表達(dá)式,常常是關(guān)系表達(dá)式或邏輯表達(dá)式。但無論是哪種類型的表達(dá)式
25、,在處理時(shí),系統(tǒng)都會(huì)將其理解為邏輯值,即表達(dá)式的值只區(qū)分為0和非0。if子句和else子句必須以分號(hào)結(jié)束,且else子句不能作為單獨(dú)的語句使用,它必須是if語句的一部分,與if配對(duì)使用。為了使程序結(jié)構(gòu)清晰、便于閱讀,對(duì)于復(fù)雜的if語句應(yīng)使用適當(dāng)?shù)目s進(jìn)格式。在if和else后面可以只含一個(gè)語句,若需要有多個(gè)操作語句,則必須用花括號(hào)將這些語句括起來作為復(fù)合語句來使用。在if語句的嵌套中,要注意if和else的配對(duì)關(guān)系。從最內(nèi)層開始,else 總是與它上面最近的尚未曾配對(duì)if配對(duì)。4.3 switch語句 C語言中提供了switch語句用于直接實(shí)現(xiàn)多分支選擇結(jié)構(gòu)。switch語句的一般形式為: sw
26、itch(表達(dá)式) case 常量表達(dá)式1:語句1; case 常量表達(dá)式2:語句2; case 常量表達(dá)式n:語句n; default: 語句組n+1; switch語句的執(zhí)行過程為:先計(jì)算switch 后面的表達(dá)式的值;然后使其順次花括號(hào)內(nèi)同各個(gè)case后的常量表達(dá)式的值相比較,若找到相等的常量表達(dá)式i,則執(zhí)行該常量表達(dá)式冒號(hào)后的語句i;若找不到匹配的常量表達(dá)式,此時(shí)要考慮是否有default選項(xiàng),若有,則執(zhí)行default后面的語句直到結(jié)束;否則什么也不執(zhí)行。 4.3 switch語句在執(zhí)行過程中,若遇到break語句,則跳出switch 結(jié)構(gòu),將程序流程轉(zhuǎn)向switch 結(jié)構(gòu)外的下一條
27、語句執(zhí)行;若沒有break語句,則從該語句組為入口,依次執(zhí)行其后的所有冒號(hào)后面的語句。【例4.9】用switch語句實(shí)現(xiàn)例4.8。main( ) int score,mark; printf(nEnter score:); scanf(%d,&score); mark= -1; if(score=0&score=100)mark=score/10;4.3 switch語句switch(mark) case 10: case 9: printf(nVery good );break; /*成績90*/ case 8: printf(nGood );break; /*80成績90*/ case 7
28、: case 6: printf(nPassed );break; /*60成績80*/ case 5: case 4: case 3: case 2: case 1: case 0: printf(nFailed );break; /*成績60*/ default:printf(nEnter error! ); /*處理錯(cuò)誤的輸入*/ 4.3 switch語句 switch結(jié)構(gòu)使用要注意以下幾點(diǎn): switch后面表達(dá)式的類型,一般為整型、字符型或枚舉類型(枚舉類型將在以后的章節(jié)中介紹)。每個(gè)case后面常量表達(dá)式的值必須互不相同,即不允許對(duì)表達(dá)式的同一個(gè)值有兩種或兩種以上的處理方案。盡管各
29、個(gè)case和default出現(xiàn)的次序不影響程序的執(zhí)行結(jié)果,但是把default放在最后是一種良好的程序設(shè)計(jì)習(xí)慣。多個(gè)case可共有一組執(zhí)行語句。case后面的常量表達(dá)僅起語句標(biāo)號(hào)的作用,并不進(jìn)行條件判斷。系統(tǒng)一旦找到入口標(biāo)號(hào),就從此標(biāo)號(hào)開始執(zhí)行下去,不再進(jìn)行判斷。4.3 switch語句switch語句又稱為開關(guān)語句。當(dāng)僅需執(zhí)行一個(gè)開關(guān)時(shí),則在該case后面的語句中必須包含一個(gè)break語句,讓其執(zhí)行后跳出switch語句,否則會(huì)一直執(zhí)行到最后,或遇到下一個(gè)case中的break語句為止。當(dāng)case后面包含一條以上的執(zhí)行語句時(shí),可以不用花括號(hào)括起來,系統(tǒng)會(huì)自動(dòng)識(shí)別并順序執(zhí)行所有語句。 defa
30、ult是可選項(xiàng)。但良好的程序設(shè)計(jì)習(xí)慣是,在每個(gè)switch語句中,寫上一條default語句來集中處理例外條件,從而防止一些條件沒有被測試到。4.4 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例【例4.10】求一元二次方程的根。#include math.hmain( ) float a,b,c,disc,x1,x2,rpart,ipart; printf(nnplease input a,b,c: ); scanf(%f,%f,%f,&a,&b,&c); /* 輸入方程的系數(shù) */ printf(The equation ); if(fabs(a)=1E-6) /* 若a等于0 ,則不是一元二次方程*/ print
31、f(is not quadratic); exit(0); else disc=b*b-4*a*c; if(fabs(disc)1E-6) /*0 ,有兩個(gè)不等實(shí)根*/4.4 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例 x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(has two distinct real roots:%8.4f , %8.4f,x1,x2); else /* 0 ,有兩個(gè)共厄復(fù)根*/ rpart=-b/(2*a); ipart=sqrt(-disc)/(2*a); printf(has two complex roots:);
32、printf(n%8.4f+%8.4fi,rpart,ipart); printf(n%8.4f-%8.4fi,rpart,ipart); 4.4 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例程序的運(yùn)行情況如下:please input a,b,c: 1,2,1 The equation has two equal roots: -1.0000 please input a,b,c: 2,8,6 The equation has distinct real roots: -1.0000 , -3.000 please input a,b,c: 1,2,3 The equation has two complex ro
33、ots:-1.0000 + 1.4141i-1.0000 - 1.4141i4.4 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例【例4.12】某商店售貨,按購買貨物的款數(shù)多少分別給予不同的優(yōu)惠折扣:購貨不足250元的,沒有折扣;購貨滿250元,不足500元,折扣5%;購貨滿500元,不足1000元,折扣7.5%;購貨滿1000元,不足2000元,折扣10%;購貨滿2000元,折扣15%。 用嵌套的if結(jié)構(gòu)實(shí)現(xiàn)。4.4 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例4.4 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例main( ) float m,d,amount;printf(nEnter your money for buying :);scanf(%f,&m);
34、if (m250) d=0;else if (m500) d=5; else if (m1000) d=7.5; else if (m2000) d=10; else d=15;amount=m*(1-d/100);printf(namount=%6.2f ,amount);4.4 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例運(yùn)行情況:Enter your money for buying :680amount=629.00再運(yùn)行:Enter your money for buying :1350amount=1215.00 用switch結(jié)構(gòu)實(shí)現(xiàn)。設(shè)置mark標(biāo)記變量:mark=m/250,根據(jù)mark的值而確定相
35、應(yīng)的折扣。程序如下:main( ) float m,d,amount; int mark; printf(nEnter your money for buying : ); scanf(%f,&m);4.4 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例mark=m/250;switch (mark)case 0:d=0;break; case 1:d=5;break; case 2: case 3:d=7.5;break; case 4: case 5: case 6:d=10;break; default:d=15; if (d0) printf(nEnter error! ); else amount=m*(1-
36、d/100); printf(namount=%6.2f ,amount); 4.4 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例【例4.13】編一程序?qū)⒁杂⒋鐬閱挝槐硎镜拈L度轉(zhuǎn)換為以厘米為單位表示的長度;或者反之,從厘米轉(zhuǎn)換為英寸。已知:1英寸=2.54厘米因?yàn)橐髢煞N單位可以互相轉(zhuǎn)換,所以,設(shè)置一個(gè)變量select,用于選擇,select=1表示將英寸轉(zhuǎn)換為厘米,select=2表示將厘米轉(zhuǎn)換成英寸。 用if語句實(shí)現(xiàn):main( ) int select; float leng,r=2.54; printf(nPlease choose (1:inch to cm,2:cm to inch) : ); scanf
37、(%d,&select); printf(Enter the leng : ); scanf(%f,&leng); if (select=1) printf(n%6.2f inch=%6.2f cm ,leng,leng*r); else if (select=2) printf(n%6.2f cm=%6.2f inch ,leng,leng/r);4.4 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例運(yùn)行情況:Please choose (1:inch to cm,2:cm to inch) :1Enter the leng :12 12.00 inch= 30.48 cm再運(yùn)行:Please choose (1:i
38、nch to cm,2:cm to inch) :2Enter the leng :12 12.00 cm= 4.72 inch4.4 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例 用switch結(jié)構(gòu)實(shí)現(xiàn):main( ) int select; float leng,r=2.54; printf(nPlease choose (1:inch to cm,2:cm to inch) : ); scanf(%d,&select); printf(Enter the leng : ); scanf(%f,&leng); switch (select) case 1:printf(n%6.2f inch=%6.2f cm ,
39、leng,leng*r);break; case 2:printf(n%6.2f cm=%6.2f inch ,leng,leng/r);break; default:printf(Enter error!)n); 第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.1 while循環(huán)5.2 do-while循環(huán)5.3 for循環(huán)5.4循環(huán)結(jié)構(gòu)的嵌套5.5 轉(zhuǎn)向語句5.6 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例 5.1 while循環(huán)while語句用于構(gòu)成“當(dāng)型”循環(huán)結(jié)構(gòu)。while語句的一般形式為: while (表達(dá)式) 循環(huán)體語句while循環(huán)結(jié)構(gòu)的執(zhí)行過程是:首先計(jì)算表達(dá)式(循環(huán)條件)的值,若結(jié)果為“真”(非零),則執(zhí)行循環(huán)體
40、語句;然后再次計(jì)算表達(dá)式的值,重復(fù)上述過程,直到表達(dá)式的值為“假”(零)時(shí)結(jié)束循環(huán),流程控制轉(zhuǎn)到循環(huán)結(jié)構(gòu)的下一語句。5.1 while循環(huán)【例5.1】從鍵盤上輸入一個(gè)整數(shù)n,求n!,利用while語句編程實(shí)現(xiàn)。main( ) int n,i,s; printf(nEnter n:); scanf(%d,&n); i=1;s=1; /*給變量i、s賦初值*/ while (i=n) /*循環(huán)繼續(xù)的條件*/ s=s*i; /*進(jìn)行累乘求積*/ i+; /*乘數(shù)增值*/ printf(nn!=%d,s); /*輸出計(jì)算的結(jié)果*/ 運(yùn)行情況如下:Enter n:5n!=1205.1 while循環(huán)使用
41、while循環(huán)結(jié)構(gòu)應(yīng)注意以下幾點(diǎn):while循環(huán)結(jié)構(gòu)的特點(diǎn)是“先判斷,后執(zhí)行”。如果表達(dá)式的值一開始就為“假”,則循環(huán)體一次也不執(zhí)行。 循環(huán)體中,如果包含一個(gè)以上的語句,則應(yīng)用花括號(hào)括起來,以復(fù)合語句的形式出現(xiàn)。 循環(huán)體內(nèi)一定要有改變循環(huán)繼續(xù)條件的語句,使得循環(huán)趨向于結(jié)束,否則循環(huán)將無休止的進(jìn)行下去,即形成“死循環(huán)”。為使循環(huán)能夠正確開始運(yùn)行,還要做好循環(huán)前的準(zhǔn)備工作,【例5.2】從鍵盤上輸入30個(gè)學(xué)生的成績,對(duì)其進(jìn)行處理:如果成績及格,則輸出“Passed”;否則輸出“Failed”。5.1 while循環(huán)5.1 while循環(huán)main( )int n=1; /*循環(huán)控制變量賦初值*/ fl
42、oat score; while (n=60.0) printf(Passed n); else printf(Failed n); n+; /*循環(huán)控制變量增值*/ 5.2 do-while循環(huán)do-while語句構(gòu)成的循環(huán)結(jié)構(gòu)類似于“直到型”循環(huán),do-while語句的形式為: do 循環(huán)體語句while (表達(dá)式);do-while循環(huán)結(jié)構(gòu)的執(zhí)行過程:首先執(zhí)行一次循環(huán)體語句,然后計(jì)算表達(dá)式(循環(huán)條件)的值。若結(jié)果為“真”(非零),則再次執(zhí)行循環(huán)體,再計(jì)算表達(dá)式的值,如此重復(fù)下去,直到表達(dá)式的值為“假”(零)時(shí),循環(huán)結(jié)束,流程控制轉(zhuǎn)到循環(huán)結(jié)構(gòu)的下一語句。5.2 do-while循環(huán)【例5.
43、3】用do-while循環(huán)結(jié)構(gòu)實(shí)現(xiàn)例5.1。main( )int n,i,s; printf(nEnter n:); scanf(%d,&n); i=1;s=1; do s=s*i; i+; while (i=n); printf(nn!=%d,s); 5.2 do-while循環(huán)使用do-while循環(huán)結(jié)構(gòu)應(yīng)注意以下幾點(diǎn): 當(dāng)do-while循環(huán)體包含一個(gè)以上的語句時(shí)應(yīng)該用花括號(hào)括起來,以復(fù)合語句形式出現(xiàn);循環(huán)體內(nèi)也一定要有改變循環(huán)條件的語句,使循環(huán)趨向于結(jié)束。下面的兩個(gè)程序可以明顯的看出while循環(huán)和do-while循環(huán)的區(qū)別。5.2 do-while循環(huán)當(dāng)輸入1時(shí),兩個(gè)程序的運(yùn)行結(jié)果是
44、一樣的:The sum is 18,i=4當(dāng)輸入5時(shí),第一個(gè)程序的運(yùn)行結(jié)果是:The sum is 6,i=6第二個(gè)程序的運(yùn)行結(jié)果是:The sum is 0,i=5for語句是功能強(qiáng)大的構(gòu)成“當(dāng)型”循環(huán)結(jié)構(gòu)的循環(huán)語句。它不但可以用于循環(huán)次數(shù)已知的情況,而且還可以用于循環(huán)次數(shù)不定的情況。程序形式:for (表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體語句5.3 for循環(huán)for循環(huán)結(jié)構(gòu)的執(zhí)行過程:首先進(jìn)行表達(dá)式1的運(yùn)算,然后計(jì)算表達(dá)式2的值,若結(jié)果為真(非零),則執(zhí)行循環(huán)體語句,最后進(jìn)行表達(dá)式3的運(yùn)算。再次計(jì)算表達(dá)式2的值,若結(jié)果為“真”(非零),再執(zhí)行循環(huán)體語句,最后再進(jìn)行表達(dá)式3的運(yùn)算。如此循環(huán)重
45、復(fù)下去,直到計(jì)算表達(dá)式2的結(jié)果為“假”(零)時(shí),循環(huán)結(jié)束,流程控制轉(zhuǎn)到循環(huán)結(jié)構(gòu)的下一語句?!纠?.4】用for循環(huán)結(jié)構(gòu)實(shí)現(xiàn)例5.1。 main() int n,i,s; printf(nEnter n:); scanf(%d,&n); for (i=1,s=1;i=n;i+) s=s*i; printf(nn!=%d,s); 5.3 for循環(huán)使用for循環(huán)結(jié)構(gòu)應(yīng)注意以下幾點(diǎn): 用for循環(huán)結(jié)構(gòu)也具有“先判斷,后執(zhí)行”的特點(diǎn)。for循環(huán)結(jié)構(gòu)相當(dāng)如下形式的while結(jié)構(gòu):表達(dá)式1;while (表達(dá)式2)循環(huán)體表達(dá)式3;從語法上看,for的三個(gè)成分都是表達(dá)式,它們之間都以分號(hào)“;”隔開。表達(dá)式1
46、和表達(dá)式3常常是賦值表達(dá)式或函數(shù)調(diào)用,有時(shí)也可以是逗號(hào)表達(dá)式,一般用來實(shí)現(xiàn)對(duì)循環(huán)控制變量初始化和循環(huán)控制變量增(減)值。表達(dá)式2常常是關(guān)系表達(dá)式或邏輯表達(dá)式,但也可以是其它類型的表達(dá)式,它是用來表示循環(huán)繼續(xù)的條件,只要其值為非零,就可執(zhí)行循環(huán)體,否則推出循環(huán)。例如:for (i=1,sum=0;i=100;i+,i+)sum+=i;5.3 for循環(huán)關(guān)鍵字for的三個(gè)表達(dá)式允許部分或全部省略,但其中的兩個(gè)分號(hào)不能省略,否則,系統(tǒng)將報(bào)錯(cuò)。需要注意:當(dāng)省略表達(dá)式1時(shí),在進(jìn)入for循環(huán)之前應(yīng)該有給循環(huán)控制變量賦初始值的語句;當(dāng)省略表達(dá)式3時(shí),應(yīng)該在循環(huán)體內(nèi)有修改循環(huán)控制變量的值的語句,以保證循環(huán)能夠
47、正常結(jié)束。例如: for(i=1,s=1;i=n;) s=s*i; i+; 當(dāng)表達(dá)式2或三個(gè)表達(dá)式全部省略時(shí),應(yīng)該在循環(huán)體內(nèi)設(shè)置相應(yīng)的語句來結(jié)束循環(huán),否則程序始終認(rèn)為判斷條件成立,循環(huán)將無終止地執(zhí)行下去,即形成了所謂的死循環(huán)。如果循環(huán)體語句為一語句組,則必須用一對(duì)花括號(hào)“”括起來。5.3 for循環(huán)由于for循環(huán)結(jié)構(gòu)書寫形式靈活多樣,如果在三個(gè)表達(dá)式中過多的加入與循環(huán)控制無關(guān)的內(nèi)容,容易降低可讀性。因此,通常使用一種簡單明了的for循環(huán)結(jié)構(gòu)形式:for(循環(huán)控制變量賦初值;循環(huán)條件;循環(huán)控制變量增(減)值)循環(huán)體語句5.3 for循環(huán)【例5.5】輸入一批非零整數(shù),以為結(jié)束符,輸出其中的最大值。
48、#includemain( ) int x,max; printf(input numbers,last one is 0:n); /*輸出提示信息*/ scanf(%d,&x); max=x; /*先將第一個(gè)數(shù)賦值給變量max*/ for(;x!=0;) scanf(%d,&x); if(max x) max=x; /*輸入值比變量max大,用當(dāng)前值替換變量max的值*/ printf(max=%dn,max); /*輸出最大值*/5.3 for循環(huán)程序的運(yùn)行情況如下:input numbers,last one is 0:3652970max=95.4循環(huán)結(jié)構(gòu)的嵌套下面是幾種合法的循環(huán)嵌套
49、形式:(1) while( ) (2) for( ; ; ) while( ) do while( ); (3) while( ) (4) do for( ; ; ) for( ; ; ) while( ); 5.4循環(huán)結(jié)構(gòu)的嵌套【例5.6】編程輸出以下形式的乘法九九表。1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=92*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=189*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=7
50、2 9*9=81main( )int i,j; for (i=1;i=9;i+) /* i作為外循環(huán)控制變量控制被乘數(shù)變化*/ printf(n ); for (j=1;j=9;j+) /*j作為內(nèi)循環(huán)控制變量控制乘數(shù)變化*/ printf(%1d*%1d=%2d ,i,j,i*j); 5.4循環(huán)結(jié)構(gòu)的嵌套【例5.7】全班有30個(gè)學(xué)生,每個(gè)學(xué)生考8門課。要求分別統(tǒng)計(jì)出每個(gè)學(xué)生各門課的平均成績。5.4循環(huán)結(jié)構(gòu)的嵌套main( ) int i,j,score,sum; float aver; j=1; while (j=30) sum=0; for (i=1;i=8;i+) printf(Ente
51、r NO.%d the score %d: ,j,i); scanf(%d ,&score); /*輸入第j個(gè)學(xué)生第i門課程的成績*/ sum=sum+score; /*累計(jì)第j個(gè)學(xué)生的總成績*/ aver=sum/8.0; /*計(jì)算第j個(gè)學(xué)生的平均成績*/ printf(NO.%d aver=%5.2fn ,j,aver); /*輸出第j個(gè)學(xué)生的平均成績*/ j+; 5.4循環(huán)結(jié)構(gòu)的嵌套使用循環(huán)的嵌套結(jié)構(gòu)要注意以幾點(diǎn):外層循環(huán)應(yīng)“完全包含”內(nèi)層循環(huán),不能發(fā)生交叉。例如下面這種形式是不允許的:do for () while( );嵌套的循環(huán)控制變量一般不應(yīng)同名,以免造成混亂。5.4循環(huán)結(jié)構(gòu)的嵌
52、套嵌套的循環(huán)要注意正確使用縮進(jìn)式書寫格式來明確嵌套循環(huán)的層次關(guān)系,以增加程序的可讀性。break語句break語句的功能是使執(zhí)行從包含它的最內(nèi)層循環(huán)或開關(guān)語句中跳出,轉(zhuǎn)到switch結(jié)構(gòu)或該循環(huán)結(jié)構(gòu)外的下一語句執(zhí)行。這將導(dǎo)致包含它的最內(nèi)層循環(huán)(while、for、do-while)或switch語句的終止。break語句的一般形式:break;5.5 轉(zhuǎn)向語句 【例5.8】找出100300之間第一個(gè)能17整除的數(shù)。 main( ) int i; for(i=100;i=300;i+) if(i%17=0) /*判斷是否能被17整除*/ printf(%dn,i); break; /*找到第一個(gè)
53、能被17整除的數(shù),結(jié)束整個(gè)循環(huán)*/ 5.5 轉(zhuǎn)向語句 使用break語句應(yīng)注意以下幾點(diǎn):break語句只能用于switch結(jié)構(gòu)或循環(huán)結(jié)構(gòu)中。在循環(huán)結(jié)構(gòu)中應(yīng)用時(shí),通常與if語句配合使用。在嵌套的循環(huán)結(jié)構(gòu)中使用時(shí),break語句只能跳出(或終止)包含它的最內(nèi)層循環(huán)。而不能同時(shí)跳出(或終止)多層循環(huán)。5.5 轉(zhuǎn)向語句 continue語句continue語句的作用是結(jié)束本次循環(huán),使得包含它的循環(huán)(while、do-while、for)開始下一次重復(fù)continue語句的一般形為:continue;【例5.9】把100200之間不能被7整除的數(shù)輸出。main()int n; for(n=100;n10
54、) goto end; /* loop為標(biāo)號(hào)*/ printf(Enter a data : ); scanf(%d,&x); sum=sum+x; i+; goto loop; end: printf(sum=%dn,sum); /* end為標(biāo)號(hào)*/5.6 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例計(jì)數(shù)型循環(huán) 5.6 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例【例5.11】輸入10個(gè)整數(shù),求出其中的最大值與最小值。main( )int i; int x,max,min; printf(nplease input the first number: ); scanf(%d,&x); max=x; min=x; for (i=2;ima
55、x) max=x; else if (xmin) min=x; printf(nmax=%d, min=%d ,max,min); 5.6 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例【例5.12】輸入10個(gè)整數(shù),輸出其中正數(shù)的個(gè)數(shù)及平均值。#includemain( ) int sum,i,k,x; printf(ninput 10 numbers:); sum=0; k=0; for(i=0;i10;+i) scanf(%d,&x); if(x=0) continue; /*結(jié)束本次循環(huán),進(jìn)行下一次循環(huán)判斷*/ sum+=x; k+; 5.6 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例 if(k) /*正數(shù)的個(gè)數(shù)不為0*/ print
56、f(nnumbers=%d,average=%.4f,k,1.0*sum/k); else printf(nnumbers is 0); 運(yùn)行情況如下:input 10 numbers:183-593-77296numbers=7,average=5.42865.6 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例【例5.13】計(jì)算s=1!+2!+3!+n!,n由終端輸入。#includemain( ) int i,j,n; long sum,term; /*定義變量sum、term為長整型變量*/ printf(ninput n: ); scanf(%d,&n); for(sum=0,i=1;i=n;i+) term=
57、1; j=1; do term*=j; /*求i的結(jié)乘*/ while(+j=1e-6); pi=pi*4; printf(npi=%10.6f ,pi); 運(yùn)行情況:pi=3.1415945.6 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例【例5.15】輸入一個(gè)整數(shù)n(n3),判斷是否為素?cái)?shù)。# include math.hmain( )int n,i,flag; printf(nEnter a integer: ); scanf(%d ,&n); i=2; flag=1; while (i=(int)sqrt(n)&flag) if (n%i= =0) flag=0; else i+; if (flag) pri
58、ntf(n%d is prime number. ,n); else printf(n%d is not prime number. ,n); 5.6 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例運(yùn)行情況:Enter a integer:7878 is not prime number.再運(yùn)行:Enter a integer:137137 is prime number.5.6 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例【例5.16】任何一個(gè)自然數(shù)n的立方都等于n個(gè)連續(xù)的奇數(shù)之和。main( ) int n,k,kl,m,i; printf(nnplease input n: ); scanf(%d,&n); while(n!=0) kl
59、=1; do k=kl; m=0; for(i=1;i=n;i+) m+=k; k+=2; if(m=n*n*n) break; else kl+=2; while(1); 5.6 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例printf(n%d*%d*%d=,n,n,n); for(i=1;i=n;i+) printf(%d,kl); if(i!=n) printf(+); kl+=2; printf(nnplease input n: ); scanf(%d,&n); 程序的運(yùn)行情況如下:please input n: 33*3*3=7+9+11please input n: 66*6*6=31+33+35+37
60、+39+41please input n: 0(程序結(jié)束) 第6章 編譯預(yù)處理 6.1 宏定義6.2 文件包含6.3 條件編譯C語言提供的預(yù)處理功能主要有三種:宏定義文件包含條件編譯為了區(qū)別預(yù)處理命令和C語句、定義和說明語句,規(guī)定:預(yù)處理命令行必須在一行的開頭;必須以#開始;每行末尾不能加分號(hào)。6.1 宏定義不帶參數(shù)的宏定義不帶參數(shù)的宏定義命令形式為:#define 宏名 字符串或 #define 宏名#define的作用是用指定的標(biāo)識(shí)符(宏名)來代表字符串。其中#define是宏定義命令,宏名是一個(gè)標(biāo)識(shí)符。6.1 宏定義【例6.1】 輸入一個(gè)圓的半徑,計(jì)算并輸出圓的面積和周長#define
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 巴西駕照測試題及答案
- 畢業(yè)旅行測試題及答案
- 道德素養(yǎng)試題及答案
- 導(dǎo)游考試題目答案
- 初中環(huán)保試題及答案
- 初級(jí)注安師試題及答案
- 大學(xué)中期測試題及答案
- 數(shù)字化背景下的保安工作計(jì)劃
- 秘書在危機(jī)管理中的作用計(jì)劃
- 煥發(fā)工作熱情的年度計(jì)劃
- 2023年USAPA美國匹克球協(xié)會(huì)官方規(guī)則翻譯版
- 新一代國際結(jié)算系統(tǒng)需求規(guī)格說明書(匯款)V1.0
- 掃描電子顯微鏡SEM
- 煤礦測量規(guī)程
- 七年級(jí)下冊(cè)英語第三次月考試題
- 涉密人員錄用審查表
- GB/T 39559.2-2020城市軌道交通設(shè)施運(yùn)營監(jiān)測技術(shù)規(guī)范第2部分:橋梁
- GB/T 19106-2013次氯酸鈉
- 2023年江西省三支一扶真題及答案解析
- 中國鋁業(yè)遵義氧化鋁有限公司氧化鋁工程分解分級(jí)槽基礎(chǔ)工程 施工組織設(shè)計(jì)
- 初中信息技術(shù)-算法基礎(chǔ)知識(shí)教學(xué)教學(xué)課件
評(píng)論
0/150
提交評(píng)論