



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第一章C語言程序設(shè)計(jì)初步ー、主要知識(shí)點(diǎn)(-)程序設(shè)計(jì)語言的發(fā)展1、機(jī)器語言2、匯編語言3,面向過程的語言4、而向?qū)ο蟮某绦蛟O(shè)計(jì)語言(二)C程序設(shè)計(jì)語言的執(zhí)行過程1、編輯2、編譯3、連接4、執(zhí)行(三)用庫函數(shù)組裝C程序例1:計(jì)算2.1715的正弦值。#include"math.h"main()(floata; /?定義a為實(shí)型變量?/a=sin(2.1715); /?調(diào)用sin函數(shù)?/printf('*%f\n",a);/?調(diào)用printf函數(shù),輸出a的值?/)詳解,1、在本例中用到的sin函數(shù)稱為數(shù)學(xué)函數(shù),它是為了用戶使用方便,由一批廠家開發(fā)編寫的函數(shù),并不是C語言的?部分。在使用數(shù)學(xué)函數(shù)時(shí),往往要用到函數(shù)執(zhí)行時(shí)所需的?些信息(例如宏定義),這些信息包含在“math.h”中。因此在程序開頭用打nclude“math.h”將有關(guān)的標(biāo)頭文件包括到程序中。2、一個(gè)C語言源程序文件由一個(gè)或多個(gè)函數(shù)組成,C語言的基本組成單位是函數(shù)。ー個(gè)完整的C語言程序有且只有一個(gè)稱為主函數(shù)的main函數(shù),程序總是從main函數(shù)開始執(zhí)行,調(diào)用其它函數(shù)后再回到main函數(shù),在main函數(shù)中結(jié)束整個(gè)程序的運(yùn)行。3,main是函數(shù)名稱,沒有參數(shù)可以不寫,但圓括號(hào)不能省略,main()后面有一對(duì)花括號(hào),花括號(hào)內(nèi)的部分稱為函數(shù)體,main函數(shù)可以在程序的任意位置。4、C規(guī)定毎個(gè)語句以分號(hào)(;)結(jié)束,分號(hào)是語句不可缺少的組成部分,每行中可以寫多條語句。5、/?與?/之間為注釋信息,對(duì)程序運(yùn)行結(jié)果不發(fā)生影響,也不被編譯,注釋說明可以放在語句的任意位置。6、floata;此語句是把a(bǔ)定義為ー個(gè)實(shí)型變量。7、C語言本身沒有輸入、輸出語句,本例使用prinft函數(shù)輸出數(shù)據(jù)。prinft函數(shù)的括號(hào)內(nèi)包括兩部分內(nèi)容:雙引號(hào)內(nèi)的部分、雙引號(hào)外的部分。雙引號(hào)內(nèi)的部分是“格式字符串”,用于指定輸出雙引號(hào)外的變量的打印格式.此例中雙引號(hào)中有一個(gè)“%f”,它是輸出ー個(gè)保留小數(shù)點(diǎn)后6位數(shù)字的格式字符,小數(shù)點(diǎn)前的位數(shù)不指定。二、練習(xí)(-)選擇題1、以下敘述正確的是ーc一ー。(A)在C程序中,main函數(shù)必須位于程序的最前面<B)C程序的每行中只能寫一條語句(C)C語言本身沒有輸入輸出語句(D)在對(duì)ー個(gè)C程序進(jìn)行編譯的過程中,可發(fā)現(xiàn)注釋中的拼寫錯(cuò)誤C語言規(guī)定:在ー個(gè)源程序中,main函數(shù)的位置ー一C_*(A)必須在最開始(B)必須在系統(tǒng)調(diào)用庫函數(shù)的后面(C)可以任意(D)必須在最后3、ー個(gè)C語言程序是由 B.(A)一個(gè)主程序和若干子程序組成(B)函數(shù)組成(C)若干過程組成(D)若干子程序組成4、一個(gè)C程序的執(zhí)行是從A 。(A)本程序的main函數(shù)開始,到main函數(shù)結(jié)束(B)本程序文件的第?個(gè)函數(shù)開始,到本程序文件的最后?個(gè)函數(shù)結(jié)束(C)本程序的main函數(shù)開始,到本程序文件的最后一個(gè)函數(shù)結(jié)束(D)本程序文件的第一個(gè)函數(shù)開始,到本程序main函數(shù)結(jié)束5、以下敘述不正確的是ーD_ー。(A)個(gè)C源程序可由?個(gè)或多個(gè)函數(shù)組成(B)ー個(gè)C源程序必須包含ー個(gè)main函數(shù)(C)C程序的基本組成單位是函數(shù)(D)在C程序中,注釋說明只能位于一條語句后面(-)填空題:>ー個(gè)C源程序中至少包括ー個(gè)一main函數(shù) 02、在ー個(gè)C源程序中,注釋部分兩側(cè)的分界符分別為 /* 和_?/ 。第二章數(shù)據(jù)描述與基本操作ー、主要知識(shí)點(diǎn)
(-)c的基本數(shù)據(jù)類型節(jié)r(-)c的基本數(shù)據(jù)類型節(jié)r基本類型數(shù)據(jù)類型A構(gòu)造類型指針類型(空類型(void)短整型(short)整型J整型(int)字符型(char)[長整型(long)實(shí)型(選]點(diǎn)型)單精度型(float)、枚舉類型 雙精度型(double),數(shù)組類型結(jié)構(gòu)類型(struct)共用類型(union)、文件類型(FILE)(二)常量和符號(hào)常量常量定義:常量定義:在程序運(yùn)行過程中,12、〇、一3為整型常量,す、’D,為字符常量。2、符號(hào)常量:用ー個(gè)標(biāo)識(shí)符代表一個(gè)常量的,稱為符號(hào)常量,即標(biāo)識(shí)符形式的常量。常量不同于變量,它的值在作用域內(nèi)不能改變,也不能再被賦值。例1:已知商品的單價(jià)及數(shù)量求商品的總價(jià)值。#definePRICE30main()!intnum=10,total;total=num*PRICE;printf(utotal=%dM,total);)輸出結(jié)果:total=300詳解,1、程序中用#define命令行定義PRICE代表常量30.此后凡在此文件中出現(xiàn)的PRICE都代表30,可以和常量一樣進(jìn)行運(yùn)算。2、符號(hào)常量不同于變量,它的值在其作用域內(nèi)不能改變,也不能再被賦值。如再用以下賦值語句給PRICE賦值:PRICE=40;是錯(cuò)誤的。(=)變量1、變量定義:其值可以改變的量稱為變量。2、標(biāo)識(shí)符的命名規(guī)范和其它高級(jí)語言ー樣,用來標(biāo)識(shí)變量名、符號(hào)常量名、函數(shù)名、數(shù)組名、類型名、文件名的有效字符序列稱為標(biāo)識(shí)符,C語言中的標(biāo)識(shí)符命名規(guī)范為:①變量名只能由字母、數(shù)字和下劃線三種字符組成,且第一個(gè)字符必須為字母或下劃線。②C語言中標(biāo)識(shí)符的長度(字符個(gè)數(shù))無統(tǒng)ー規(guī)定,隨系統(tǒng)而不同.許多系統(tǒng)(如IBMPC的MSC)取前7個(gè)字符,假如程序中出現(xiàn)的變量名長度大于7個(gè)字符,則只有前面7個(gè)字符有效,后面的不被識(shí)別。③C語言有32個(gè)關(guān)鍵字(例如if、else、while)它們已有專門含義,不應(yīng)用釆用與它們同名的變量名?④C語言將大寫字母和小寫字母認(rèn)為是兩個(gè)不同字。例2:在下列符號(hào)中,可以選用哪些作變量名?哪些不可以?a3B3aBIT+a-b*x$ _b5_ifnext_daye_2OK?integerMAXNUMBERi*j答案:_b5_a3Bnext_daye_2MAXNUMBER可作變量名,其它的作變量名不可以。詳解,①M(fèi)AXNUMBER可作變量名。習(xí)慣上符號(hào)常量名用大寫,變量名用小寫以示區(qū)別,但大寫字母作變量名并無錯(cuò)誤。②if、integer屬于保留字,保留字不可作變量名。③ロ+a-b*x$OK?i*j不可作變量名,因?yàn)樽兞棵荒苡勺帜浮?shù)字和下劃線三種字符組成。④3aB不可作變量名,因?yàn)樽兞棵牡谝粋€(gè)字母必須為字母或下劃線。(四)整型數(shù)據(jù)1、整型常量整型常量即整常數(shù)。C語言整常數(shù)可用以下三種表示形式。①十進(jìn)制表示。如231、?56.478②ハ進(jìn)制表示。以〇開頭的數(shù)是ハ進(jìn)制數(shù)。如0123即(123)8=1*82+2*8'+3*8°=64+16+3=830③十六進(jìn)制表示。以O(shè)x開頭的數(shù)是16進(jìn)制。如0x123即(123)16=1*162+2*16'+3*16°=256+32+3=29I.2、整型變量整型變量分為:基本型、短整型、長整型、和無符號(hào)型四種。①基本型,以int表示②短整型,以shortint表示或以$hort表示③長整型,以!ongint表示,或以long表示④無符號(hào)型,存儲(chǔ)單元中全部二進(jìn)制位(bit)用作存放數(shù)本身,而不包括符號(hào)。無符號(hào)型中又分為無符號(hào)整型、無符號(hào)短整型和無符號(hào)長整型,分別以u(píng)nsignedint、unsignedshort和unsignedlong表示。3、整型數(shù)據(jù)的取值范圍C標(biāo)準(zhǔn)沒有具體規(guī)定各類型所占內(nèi)存字節(jié)數(shù),各種機(jī)器處理上有所不同,以IBMPC為例,數(shù)的范圍如表2.1所示.表2.1所占位數(shù)數(shù)的范圍Int16-32768—32767 即-2い?(215-1)short[int]16-32768~32767 即-2”?(2|5-1)Long[int]32-2147483648?2147483647 即-2い?(231-1)Unsignedlint]160-65535 即〇?(2|6-1)Unsignedshort160~65535 即〇?(2|6-1)Unsignedlong32〇?4294967295 即〇?(232-1)4、整型常鼠的分類①一個(gè)整常量,如果其值在ー32768?32767范圍內(nèi),認(rèn)為它是int型,它可以賦值給int型和!ongint型變量。②ー個(gè)整常量,如果其值超過了上述范圍,而在ー2147483648?2147483647范圍內(nèi),則認(rèn)為它是longint型,可以將它賦值給ー個(gè)longint型變量。③如果某ー計(jì)算機(jī)系統(tǒng)的C版本確定的shortint與int型在內(nèi)存中占據(jù)的長度相同,則ー個(gè)int型的常量出同時(shí)ー個(gè)shortint型常量。④常量中無unsigned型。但ー個(gè)非負(fù)值的整常量可以賦值給unsigned型整變量,只要它的范圍不超過變量的取值范圍即可。例如:將50000賦給ー個(gè)unsignedint型變量是可以的,而將70000賦給它是不行的(溢出)。⑤在ー個(gè)整常量后面加一個(gè)字母1或L,則認(rèn)為是!ongint型常量。(五)實(shí)型數(shù)據(jù)1、實(shí)型常量實(shí)數(shù)在C語言中又稱為浮點(diǎn)數(shù)。實(shí)數(shù)有兩種表示形式:①十進(jìn)制形式。它由數(shù)字和小數(shù)點(diǎn)組成(注意必須有小數(shù)點(diǎn))。例如:0.123、.123、123.0、0.0都是十進(jìn)制數(shù)形式。②指數(shù)形式。如!23.56e4或123.56E4都代表123.56*10*|。但字母e(或E)之前必須有數(shù)字,e后面指數(shù)必須為整數(shù)?例如:e3、2.1e3.5、.e3、e等都不是合法的指數(shù)形式。例3,下面四個(gè)選項(xiàng)中,均是不合法的浮點(diǎn)數(shù)的選項(xiàng)是 。(A)160. 0.12e3(B)123 2e4.2 ,e5(C)-.18123e4 0.0 (D)-.e3 .234le3答案,B詳解,①16〇.0.12 -.18 123e4 0.0 .234le3是實(shí)數(shù)的十進(jìn)制形式或指數(shù)形式。②e32e4.2 .e5 -.e3不是正確的指數(shù)形式。因?yàn)檎_的字母e(或E)之前必須有數(shù)字,②e3后面指數(shù)必須為整數(shù)。對(duì)于數(shù)據(jù)表示形式.e5以及ー.e3,e前的.與一?不是有效的數(shù)字表示形式。③123是整數(shù)形式。2、實(shí)型變量C實(shí)型變量分為單精度(float型)和雙精度(double型)兩類。在一般系統(tǒng)中,ー個(gè)單精度型數(shù)據(jù)在內(nèi)存中占4個(gè)字節(jié)(32位),ー個(gè)double型數(shù)據(jù)占8個(gè)字節(jié)。ー個(gè)單精度型變量能接收7位有效數(shù)字,ー個(gè)double型變量能接收17位有效數(shù)字,數(shù)值的范圍隨機(jī)器系統(tǒng)而異。在IBMPC中,單精度實(shí)數(shù)的范圍約為土(3.4E10-38?3.4E1O38),雙精度實(shí)數(shù)的范圍約為±(1.7E10-308~1.710308)。例4,main(){floata;a=llllll.666666;printf("%f”,a);)輸出結(jié)果:111111.640621詳解,①ー個(gè)實(shí)型常量不分float型和double型。ー個(gè)實(shí)型常量可以賦給ー個(gè)float型或double型變量。根據(jù)變量的類型截取實(shí)型常量中相應(yīng)的有效位數(shù)字。②由于float型變量只能接收7位有效數(shù)字,因此在把111111.666666賦給a時(shí),a只接收了111111.6,由于輸出函數(shù)printf中的%f格式表示輸出小數(shù)點(diǎn)后的6位小數(shù),所以111111.6后的40621屬于無意義數(shù)字。③如果a改為double型,則能全部接收上述12位數(shù)字。(六)字符型數(shù)據(jù)1、字符常量:①普通形式的字符常量:用引號(hào)(即撇號(hào))括起來的一個(gè)字符,如‘a(chǎn),、’D,、づ、’?,等都是字符常量。②轉(zhuǎn)義符:以“ヽ''開頭的字符序列。常用的以“ヽ”開頭的特殊字符見表2.2表2.2字符形式功能\n換行\(zhòng)t橫向跳格\v豎向跳格\b退格回車走紙換頁\\反斜杠字符ヽ’單引號(hào)字符\ddd1到3位8進(jìn)進(jìn)制所代表的字符\xhh1至リ2位16進(jìn)制數(shù)所代表的字符例5:若有說明語句:charc='\729';則變量c ?(A)包含1個(gè)字符 (B)包含2個(gè)字符(C)包含3個(gè)字符 (D)說明不合法答案,D詳解,”'”后可以有1到3位8進(jìn)制所代表的字符,本題中“'"后的“72”屬于8進(jìn)制所代表的字符,而”9”則不屬于8進(jìn)制位所代表的字符,則’\72ダ中包含了兩個(gè)字符常量,'72,和,93而字符常量是用引號(hào)(即撇號(hào))括起來的一個(gè)字符,所以答案為D。2、字符變量字符變量是用來存放字符常量的存儲(chǔ)單元。3、字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式將一個(gè)字符常量存放到ー個(gè)字符變量中,實(shí)際ヒ并不是把該字符本身存放到內(nèi)存單元中去,而是將該字符的相應(yīng)的ASCI!碼值存放到存儲(chǔ)單元中去。例6:將小寫字母轉(zhuǎn)換成大寫字母main(){charc1='a';c1=c1-32;prinlf("%c”,c1);)輸出結(jié)果:A詳解:①,a,的ASCI!碼為97,所以cl=,a,;語句的功能是把97賦值給了cl。②cl=c1-32;語句的功能是把97-32的值65賦值給cl。③printf函數(shù)中的%c格式表示以字符方式輸出。ASCII碼值為65的字符為A,所以運(yùn)行結(jié)果為:A(七)字符串常量字符常量是用ー對(duì)雙引號(hào)括起來的零個(gè)或多個(gè)字符序列:C規(guī)定以字符,'0,作為字符串結(jié)束標(biāo)志。所以字符串,'a”實(shí)際上包含2個(gè)字符:,a,、,'O,,因此下面的語句:c=”a”;把ー個(gè)串賦值給ー個(gè)字符變量c是錯(cuò)誤的。(A)'abc'(B)"12'12" (C)"0" (D)"答案,A詳解:‘a(chǎn)bc,是用單引號(hào)引來的,所以‘a(chǎn)bc'不是正確的字符串常量。(A)算術(shù)運(yùn)算符和算術(shù)表達(dá)式1、基本算術(shù)運(yùn)算符①C語言中有5個(gè)基本算術(shù)運(yùn)算符:+(加法運(yùn)算符。如3+5、+3)-(減法運(yùn)算符。如5-2、-3)*(乘法運(yùn)算符,如3*5)/(除法運(yùn)算符,如5/3,5.0/3)%(求余運(yùn)算符,要求%兩側(cè)均為整型數(shù)據(jù))例8,在C語言中,要求運(yùn)算數(shù)必須是整型的運(yùn)算符是(A)(A)/ (B)++ (〇!=(D)%答案:D詳解:對(duì)于%運(yùn)算符來說,要求兩側(cè)均為整型數(shù)據(jù),所以表達(dá)式3.5%2與3%2.0是錯(cuò)誤的。例9:寫出ド列程序的輸出結(jié)果main()(printf(M%d,%d\n,\5/3,5%3);printf("%d,%d\n”,?5ノ?3,?5%?3);printf(t4%d,%d\nM,-5/3,-5%3);printf(“%d,%d\n”,5/-3,5%-3);)輸出結(jié)果,1,21,-2-1,-2-1,2詳解,兩個(gè)同號(hào)整數(shù)相除時(shí)結(jié)果為正整數(shù),如5/3、-5ル3的結(jié)果值為1〇兩個(gè)異號(hào)整數(shù)相除時(shí)結(jié)果為負(fù)整數(shù),多數(shù)機(jī)器采取“向零取整”法,即ー5/-3=-1,5/-3=-1,但如果參加運(yùn)算的兩個(gè)數(shù)中有一個(gè)數(shù)為實(shí)數(shù)時(shí)結(jié)果為實(shí)數(shù)。對(duì)于求余(%)運(yùn)算,運(yùn)算結(jié)果與第?個(gè)數(shù)的符號(hào)相同。②優(yōu)先級(jí)別:先?、ノ、%后+、ー③運(yùn)算量:雙元運(yùn)算量,%前后必須為整數(shù)。④左右結(jié)合性:自左至右參預(yù)運(yùn)算。2,自加自減運(yùn)算符①C語言中有4種形式的自加自減運(yùn)算符:++i(先使i加1后使用)i++(先使用后使i加1)——i(先使i減1后使用)(先使用后使i減1)②優(yōu)先級(jí)別:髙ア算術(shù)運(yùn)算。TOC\o"1-5"\h\z例10,若x和n均是int型變量,且x和n的初值均為5,則計(jì)算表達(dá)式后x的值為 ,n的值為 .x+=n++答案,10 6詳解,根據(jù)優(yōu)先級(jí)別選運(yùn)算表達(dá)式n++,因?yàn)閚++是后綴表示形式,所以n先參預(yù)運(yùn)算,再運(yùn)算表達(dá)式x+=n,則x為10,最后n自加為6。例11,main()intx,y,m,n;x=2;y=2m=x++*5;n=++y*5;printf("%d,%d,%d,%d”,x,y,m,n);)輸出結(jié)果,3,3,10,15詳解:對(duì)于后綴來說是先使用后運(yùn)算,所以m的值為x在自加以前的2*5得10賦值給m后,x自加變?yōu)?.對(duì)于前綴來說是先運(yùn)算后使用,所以m的值為x在自加以后的3*5得15賦值給n。③運(yùn)算量:單元運(yùn)算量,此運(yùn)算量必須為變量,所以表達(dá)式5++、(x+y)++是錯(cuò)誤的。④左右結(jié)合性:自右至左參預(yù)運(yùn)算。(九)關(guān)系運(yùn)算1、C語言提供的關(guān)系運(yùn)算符有:>(大于) >=(大于或等于) 〈(小于)<=(小于或等于) ==(等于)是 !=(不等于)2,優(yōu)先級(jí)別:關(guān)系運(yùn)算符的優(yōu)先級(jí)別低于純算術(shù)類,高于賦值類。后兩個(gè)的優(yōu)先級(jí)小于前四個(gè)。如表達(dá)式a+b<c+d完全等價(jià)于表達(dá)式(a+b)<(c+d)。3、運(yùn)算量:關(guān)系運(yùn)算符是雙元運(yùn)算符,整型、實(shí)型、字符都可以參預(yù)運(yùn)算。4、左右結(jié)合性:從左向右的結(jié)合方向5、關(guān)于關(guān)系運(yùn)算符的進(jìn)ー步說明:①關(guān)系表達(dá)式的值是整型數(shù)〇或1,故也可以將其看成一種整型表達(dá)式。例如:inti=l,j=7,a;a=i+(j%4!=〇);的執(zhí)行結(jié)果為:a的值為2。②要說明x在區(qū)間[a,b]中,普通數(shù)學(xué)中使用表達(dá)式aWxMb。但C語言中應(yīng)寫成a<=x&&x<=b。③表達(dá)式5>2>7>8在數(shù)學(xué)上是不允許的,而在C中是允許的。按自左至右求解。④字符數(shù)據(jù)的比較按其ASCII碼值進(jìn)行。⑤在判定兩個(gè)浮點(diǎn)數(shù)是否相等時(shí),由于存儲(chǔ)上的誤差,會(huì)得出錯(cuò)誤的結(jié)果。例如:1.0/3.0*3.0==1.0該表達(dá)式的值為〇。(十)邏輯運(yùn)算1、C語言提供的邏輯運(yùn)算符:&&(邏輯與) 11(邏輯或) ?。ㄟ壿嫹牵?,優(yōu)先級(jí)別:&&與II的優(yōu)先級(jí)別低于關(guān)系運(yùn)算符,高于條件運(yùn)算符,&&的優(yōu)先級(jí)別高于II,!的優(yōu)先級(jí)別與自加運(yùn)算符(++)、自減運(yùn)算符(--)同級(jí)。3、運(yùn)算量:&&和II是雙元運(yùn)算符,!是單元運(yùn)算符。例12:已知x=43,ch='A',y=0;則表達(dá)(x>=y&&chぐB'&&!y)的值是 ?(A)0 (B)語法錯(cuò) (C)l(D)“真”答案?C詳解:C語言不提供邏輯性數(shù)據(jù)“真”和“假”,在進(jìn)行邏輯運(yùn)算時(shí),結(jié)果不是1就是〇。4、左右結(jié)合性:&&和II運(yùn)算符的結(jié)合方向?yàn)樽宰笾劣?!的結(jié)合方向?yàn)樽杂抑磷蟆?、關(guān)于邏輯運(yùn)算符的進(jìn)ー步說明:①在ー個(gè)&&表達(dá)式中,若&&的一端為〇,則不必再計(jì)算另一端,該表達(dá)式的值肯定為〇。②在ー個(gè)II表達(dá)式中,若II的一端為〇,則不必再計(jì)算另一端,該表達(dá)式的值肯定為1。例13:寫出下面程序的輸出結(jié)果。main(){intx,y,z;x=y=z=O;++x&&++yll++z;printf("%d,%d,%d”,x,y,z);x=y=z=O;
++xll++y&&++z;printfC4%d,%d,%d*\x,y,z);)輸出結(jié)果:1,1,01,0,0詳解:①因?yàn)?&的優(yōu)先級(jí)別高于II,所以表達(dá)式++x&&++yll++z是ー個(gè)或表達(dá)式,根據(jù)II的一端為〇,則不必再計(jì)算另一端的原則,先計(jì)算表達(dá)式++x&&++y的值為1,因?yàn)?或任何值都為1?所以表達(dá)式++z沒有運(yùn)算,輸出結(jié)果為:1,1?〇〇②表達(dá)式++xll++y&&++z也是ー個(gè)或表達(dá)式,同樣根據(jù)II的一端為〇,則不必再計(jì)算另一端的原則,先計(jì)算表達(dá)式++z的值為1,因?yàn)?或任何值都為1,所以表達(dá)式++y&&++z沒有運(yùn)算,輸出結(jié)果為:1,0,〇。(十一)賦值運(yùn)算1、基本的賦值運(yùn)算符:=(將賦值運(yùn)算符右側(cè)的表達(dá)式賦給左側(cè)的變量)2、門反算術(shù)賦值運(yùn)算符C語言中有5個(gè)基本自反算術(shù)賦值運(yùn)算符:+=(a+=3等價(jià)于a=a+3)—=(+=(a+=3等價(jià)于a=a+3)—=(a-=3等價(jià)于a=a-3)*=(a*=3等價(jià)于a=a*3)(a*=3等價(jià)于a=a*3)%=(a%=3等價(jià)于a=a%3)3、優(yōu)先級(jí)別:賦值運(yùn)算符與自反算術(shù)賦值運(yùn)算符屬于同等級(jí)別,低于條件運(yùn)算符,高于逗號(hào)運(yùn)算符。如對(duì)于表達(dá)式x%=y+3完全等價(jià)于x%=(y+3)o例14:若有以下定義,則能使值為3的表達(dá)式是 。Intk=7,x=12;(A)x%=(k%5) (B)x%=(k-k%5)(C)x%=k-k%5 (D)(x%=k)-(k%=5)答案,D詳解,表達(dá)式(x%=k)-(k%=5)完全等價(jià)于(x=x%k)-(k=k%5)等價(jià)于5-2,此表達(dá)式的結(jié)果為3。4,運(yùn)算量:雙元運(yùn)算量,賦值運(yùn)算符與自反算術(shù)賦值運(yùn)算的第一個(gè)量必須為變量,且%=前后必須為整型數(shù)據(jù)。如對(duì)于表達(dá)式a*3+=2是錯(cuò)誤的。因?yàn)榇吮磉_(dá)式完全等價(jià)于(a*3)=(a*3)+2。例15,若a是int型變量,且a的初值為6,則計(jì)算表達(dá)式后a的值為 .a+=a-=a*a答案,-60詳解,表達(dá)式從左向右運(yùn)算,先計(jì)算表達(dá)式a=a-36后a為ー30,再計(jì)算表達(dá)式a=a+a后a的值變?yōu)?60.(+—)條件運(yùn)算:1,條件運(yùn)算符的基本形式及功能:條件運(yùn)算是?種在兩個(gè)表達(dá)式的值中選擇個(gè)的操作。它的?般形式為:e1?e2:e3它的操作過程為,若el為真,則表達(dá)式的值為e2,若為假表達(dá)式的值為e3。2、優(yōu)先級(jí)別:低于邏輯運(yùn)算,高于賦值運(yùn)算。3,運(yùn)算量:三元運(yùn)算量,el--般為算術(shù)表達(dá)式,e2、e3可以是任意類型的表達(dá)式,條件表達(dá)式的值的類型為e2與e3二者中類型較髙的。例16S若有條件表達(dá)式(exp)?a++:b--,則以下表達(dá)式中能完全等價(jià)于表達(dá)式(exp)的是 。答案,exp!=0詳解,對(duì)于表達(dá)式e1?e2:e3,el一般為算術(shù)表達(dá)式、邏輯表達(dá)式、關(guān)系表達(dá)式,結(jié)果為1(真)或0(假)。也可以為數(shù)值exp,結(jié)果為結(jié)果為非0(真)或0(假)在本例中與exp完全等價(jià)的表達(dá)式是exp!=0。4、左右結(jié)合性:自右至左運(yùn)算。例17,以下程序的運(yùn)行結(jié)果是 。main()(intk=4,a=3,b=2,c=1;printf(t4%d,,,k<a?k:c<b?c:a);1答案:1詳解:條件表達(dá)式是從右向左運(yùn)算,所以在本例中先計(jì)算表達(dá)式c<b?c:a的值,把各數(shù)值代入此表達(dá)式的值為1。再計(jì)算表達(dá)式k<a?k:l的值,因?yàn)閗<a為假,所以整個(gè)表達(dá)式的值為I.(十三)逗號(hào)運(yùn)算1,逗號(hào)運(yùn)算符的基本形式及功能:逗號(hào)表達(dá)式的?般形式為:表達(dá)式1,表達(dá)式2。逗號(hào)表達(dá)式的求解過程是:先求解表達(dá)式1,再求解表達(dá)式2。整個(gè)表達(dá)式的值是表達(dá)式2的值。2、優(yōu)先級(jí)別:逗號(hào)運(yùn)算符是所有運(yùn)算符中級(jí)別最低的O(A)d=9+e+f=d+9 (B)d=(9+eJ=d+9)(C)d=9+e,e++,d+9 (D)d=9+e++=d+7答案:B解析:表達(dá)式d=9+e+f=d+9中9+e+f=d+9是不正確的表示形式,因?yàn)橘x值號(hào)(=)左邊不能是表達(dá)式O表達(dá)式d=9+e,e++,d+9是逗號(hào)表達(dá)式,因?yàn)橘x值運(yùn)算符(=)的優(yōu)先級(jí)別高于逗號(hào)運(yùn)算符(,).表達(dá)式d=9+e++=d+7中9+e++=d+7是不正確的表達(dá)式,因?yàn)橘x值號(hào)(=)左邊不能是表達(dá)式。3,運(yùn)算量:二元運(yùn)算量。4、左右結(jié)合性:從左向右運(yùn)算。例19,假設(shè)所有變量均為整型,則表達(dá)式a=2,b=5.b++,a+b的值是 .答案:8解析:根據(jù)逗號(hào)運(yùn)算符從左向右運(yùn)算的原則,首先把2和5分別賦值給了a,b。再計(jì)算表達(dá)式b++,b變?yōu)?,再計(jì)算表達(dá)式a+b的值,最后整個(gè)表達(dá)式的值是8.(十四)強(qiáng)制類型轉(zhuǎn)換1,強(qiáng)制類型一般形式及功能:可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式轉(zhuǎn)換成所需類型。例如:(double)a(將a轉(zhuǎn)換成double類型)其一般形式為:(類型名)(表達(dá)式)2、優(yōu)先級(jí)別:強(qiáng)制類型轉(zhuǎn)換運(yùn)算符與邏輯非(?。?、自加(++)、自減(--)屬于同等級(jí)別,髙于算術(shù)運(yùn)算符。3、運(yùn)算量:單元運(yùn)算量4、關(guān)于強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的進(jìn)ー步說明:①強(qiáng)制轉(zhuǎn)換表達(dá)式時(shí),表達(dá)式應(yīng)該用括號(hào)括起來。如果寫成(int)x+y則只將x轉(zhuǎn)換成整型,然后與y相加。②如果x原指定為float型,進(jìn)行強(qiáng)制類型運(yùn)算后得到一個(gè)int型的中間變量,它的值等于x的整數(shù)部分(截去小數(shù)部分),而x的類型不變(仍為float型)。例20:main()(floatx=3.6;inti;i=(int)xprintf(4ix=%f,i=%d,\x,i);解析:變量X進(jìn)行強(qiáng)制類型運(yùn)算后,其類型仍為float型,值仍為3.6。(十五)printf函數(shù)printf函數(shù)可以輸出任意類型的多個(gè)數(shù)據(jù)。1、printf函數(shù)的?殷格式printf(格式控制,輸出表列)①“格式控制”是用雙引號(hào)括起來的字符串,也稱“轉(zhuǎn)換控制字符串”,它包括兩種信息:格式說明和普通字符。格式說明是由“%”和格式字符組成,如%d,%f等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式說明總是由字符開始的。普通字符即需要原樣輸出的字符。②輸出表列是指需要輸出的ー些數(shù)據(jù),可以是表達(dá)式,它們之間用“,”隔開。2、格式控制的完整格式:% - 0m.n1或h格式字符下面對(duì)組成格式說明的各項(xiàng)加以說明:①%:表示格式說明的起始符號(hào),不可缺少。②-:有一表示左對(duì)齊輸出,如省略表示右對(duì)齊輸出。③〇:有〇表示指定空位填〇,如省略表示指定空位不填。@m.n:m指域?qū)?即對(duì)應(yīng)的輸出項(xiàng)在輸出設(shè)備上所占的字符數(shù)。N指精度。用于說明輸出的實(shí)型數(shù)的小數(shù)位數(shù)。為指定n時(shí),隱含的精度為n=6位。⑤1或h:l對(duì)整型指long型,對(duì)實(shí)型指double型。h用于將整型的格式字符修正為short型。3、格式字符:格式字符用以指定輸出項(xiàng)的數(shù)據(jù)類型和輸出格式。①d格式:用來輸出十進(jìn)制整數(shù)。有以下幾種用法:%d:按整型數(shù)據(jù)的實(shí)際長度輸出。%md:m為指定的輸出字段的寬度。如果數(shù)據(jù)的位數(shù)小于m,則左端補(bǔ)以空格,若大于m,則按實(shí)際位數(shù)輸出。%ld:輸出長整型數(shù)據(jù)。②。格式:以無符號(hào)八進(jìn)制形式輸出整數(shù)。對(duì)長整型可以用“%1?!备袷捷敵觥M瑯右部梢灾付ㄗ侄螌挾扔谩埃。”格式輸出。例21:main(){inta=-1;printf("%d,%o”,a,a);)運(yùn)行結(jié)果:-1,177777程序解析:-1在內(nèi)存單元中(以補(bǔ)碼形式存放)為(1111111111111111)2,轉(zhuǎn)換為ハ進(jìn)制數(shù)為(177777)8.③x格式:以無符號(hào)十六進(jìn)制形式輸出整數(shù)。對(duì)長整型可以用“%lx”格式輸出。同樣也可以指定字段寬度用“%mx”格式輸出.④u格式:以無符號(hào)十進(jìn)制形式輸出整數(shù).對(duì)長整型可以用“%lu”格式輸出。同樣也可以指定字段寬度用“%mu”格式輸出.⑤c格式:輸出ー個(gè)字符.⑥s格式:用來輸出?個(gè)串.有兒中用法%s:例如:printf("%s",''CHINA")輸出“CHINA”字符串(不包括雙引號(hào)).%ms:輸出的字符串占m列,如字符串本身長度大于m,則突破獲m的限制,將字符串全部輸出.若串長小于m,則左補(bǔ)空格.%-ms:如果串長小于m,則在m列范圍內(nèi),字符串向左靠,右補(bǔ)空格。%m.ns:輸出占m列,但只取字符串中左端n個(gè)字符。這n個(gè)字符輸出在m列的か側(cè),左補(bǔ)空格。%-m.ns:其中m、n含義同上,n個(gè)字符輸出在m列范圍的左側(cè),右補(bǔ)空格。如果n>m,則自動(dòng)取n值,即保證n個(gè)字符正常輸出。⑦f格式:用來輸出實(shí)數(shù)(包括單、雙精度),以小數(shù)形式輸出。有以下幾種用法:%f:不指定寬度,整數(shù)部分全部輸出并輸出6位小數(shù)。%m.nf:輸出共占m列,其中有n位小數(shù),如數(shù)值寬度小于m左端補(bǔ)空格。%-m.nf:輸出共占n列,其中有n位小數(shù),如數(shù)值寬度小于m右端補(bǔ)空格。⑧e格式:以指數(shù)形式輸出實(shí)數(shù)??捎靡韵滦问剑?e:數(shù)字部分(又稱尾數(shù))輸出6位小數(shù),指數(shù)部分占5位或4位。%m.ne和%-m.ne:m、n和“-“字符含義與前相同。此處n指數(shù)據(jù)的數(shù)字部分的小數(shù)位數(shù),m表示整個(gè)輸出數(shù)據(jù)所占的寬度。⑨g格式:自動(dòng)選f格式或e格式中較短的一種輸出,且不輸出無意義的零。4,關(guān)于printf函數(shù)的進(jìn)ー步說明:如果想輸出字符“%”,則應(yīng)該在“格式控制”字符串中用連續(xù)兩個(gè)%表示,如:printf("%f%%”,1.0/3);輸出0.333333%.(+六)scanf函數(shù)scanf函數(shù)可以用來輸入任何類型的多個(gè)數(shù)據(jù).1、scanf函數(shù)的?殷格式scanf(格式控制,地址表列)①“格式控制”的含義同printf函數(shù)。普通字符即需要原樣輸入的字符.②地址表列是指由若干個(gè)地址組成的表列,它們之間用“,”隔開.2,格式控制的完整格式:% *m1或h格式字符①格式字符與printf函數(shù)中的使用方式相同,以%d、%〇、%x、%c、%s、%f、%e,無%u格式、%g格式O②可以指定輸入數(shù)據(jù)所占列寬,系統(tǒng)自動(dòng)按它截取所需數(shù)據(jù)。如:scanf(“%3d%3d”,&a,&b);輸入:123456系統(tǒng)自動(dòng)將123賦給a,456賦給b。③%后的“*”附加說明符,用來表示跳過它相應(yīng)的數(shù)據(jù)。例如:scanf("%2d%*3d%2d”,&a,&b);如果輸入如下信息:1234567?將12賦給a,67賦給b。第二個(gè)數(shù)據(jù)“345”被跳過不賦給任何變量。④輸入數(shù)據(jù)時(shí)不能規(guī)定精度,例如:scanf(4t%7.2r\&a);是不合法的,不能企圖輸入:12345.67而使a的值為12345。6フ。3、輸入數(shù)據(jù)流分隔①根據(jù)格式字符的含義從輸入流中取得數(shù)據(jù),當(dāng)輸入流中數(shù)據(jù)類型與格式字符要求不符時(shí),就認(rèn)為這ー項(xiàng)結(jié)束。如:scanf("%d%c%f”,&a,&b,&c);如果輸入如下信息:1234rl234.567則scanf函數(shù)在接收數(shù)據(jù)時(shí)發(fā)現(xiàn)”r”類型不匹配,于是把”1234”轉(zhuǎn)換成整型賦值給a,把”r”賦給變量b,最后把”1234.567”轉(zhuǎn)換成實(shí)型數(shù)據(jù)賦給c。②根據(jù)格式項(xiàng)中指定的域?qū)挿指舫鰯?shù)據(jù)項(xiàng)。如語句:scanf(“%2d%3f%4f”,&a,&b.&c);如果輸入如ド信息:123456789012345則scanf函數(shù)在接收數(shù)據(jù)時(shí)根據(jù)域?qū)挵?2賦值給a,345賦值給b,6789賦值給c。③隱示分隔符。空格、跳格符('\t')、換行符(’、相)都是C語言認(rèn)定的數(shù)據(jù)分隔符。④顯示分隔符.在scanf函數(shù)的兩個(gè)格式說明項(xiàng)間有一個(gè)或多個(gè)普通字符,那么在輸入數(shù)據(jù)時(shí),在兩個(gè)數(shù)據(jù)之間也必須以這ー個(gè)或多個(gè)字符分隔O如語句:scanf("a=%d,b=%f,c=%f”,&a,&b,&c);則輸入數(shù)據(jù)應(yīng)該為:a=1234,b=67.8,c=98.1234,關(guān)于scanf函數(shù)的進(jìn)ー步說明:①scanf函數(shù)中的“格式控制”后面應(yīng)當(dāng)是變量地址,而不應(yīng)是變量名.例如,如果a、b為整型變量,則scanf("%d,%d”,a,b);是不對(duì)的,應(yīng)將''a,b"改為"&a,&b"。②如果在“格式控制”字符串中除了格式說明以外還有其它字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符。例如:scanf("%d,%d”,&a,&b);輸入時(shí)應(yīng)輸入:3,4〇3與4之間的逗號(hào)應(yīng)與scanf函數(shù)中的“格式控制”中的逗號(hào)相對(duì)應(yīng),輸入其它符號(hào)是不對(duì)的。③在用“%c”格式輸入字符時(shí),空格字符和轉(zhuǎn)義字符都作為有效字符輸入。scanf(**%c%c%c,\&cl,&c2,&c3);如輸入:abc〇字符,a"賦給cl,字符(空格)…賦給c2,字符,b’賦給c3。5、scanf的停止與返回①格式參數(shù)中的格式項(xiàng)用法????正常結(jié)束。②發(fā)生格式項(xiàng)與輸入域不匹配時(shí)—不正常退出:(十七)getchar^putchar函數(shù)1、getchar函數(shù)getchar函數(shù)是從終端輸入一個(gè)字符。gelchai?函數(shù)沒有參數(shù),其一般形式為:getchar()。putchar函數(shù)putchar函數(shù)的作用是向終端輸出ー個(gè)字符。二、練習(xí)(一)選擇題1、下面四個(gè)選項(xiàng)中,均是不合法的用戶標(biāo)識(shí)符的選項(xiàng)是 。AP.Odo(B)floatlaO.ab-agotoint(D)_123tempINT2、若x,i,j和k都是int型變量,則計(jì)算下面表達(dá)式后,x的值為 〇x=(i=4,j=16,k=32)(A)4 (B)16 (C)32 (D)523、下列四個(gè)選項(xiàng)中,均是不合法的整型常量的選項(xiàng)是 0(A)--Ofl-Oxffff0011(B)-Oxcdf01712,3456(C)-0189995e2(D)-0x48eg-06803f4、下面四個(gè)選項(xiàng)中,均是合法浮點(diǎn)數(shù)的選項(xiàng)是 (A)lei5e-9.4 03e2(C)123e1.2e-.4(C)123e1.2e-.42e-lTOC\o"1-5"\h\z-e3 ,8e-4 5.e-05、下面四個(gè)選項(xiàng)中,均是合法字符的選項(xiàng)是 。'V' '\\' *\xf'(B)'ヽ’*\017' *\n''\018' *\f'*xab'(D)'、〇’ ,\1O1''xlf'6、以下不正確的敘述是 。(A)在C程序中,逗號(hào)運(yùn)算符的優(yōu)先級(jí)最低。(B)在C程序中,APH和aph是兩個(gè)不同的變量(C)若a和b類型相同,在計(jì)算機(jī)了賦值表達(dá)式a=b后,b的值不變。(D)當(dāng)從鍵盤輸入數(shù)據(jù)時(shí),對(duì)了整型變量只能輸入整型數(shù)值,對(duì)于實(shí)型變量只能輸入實(shí)型數(shù)據(jù)。第三章C程序的流程設(shè)計(jì)ー、算法1、算法的概念為解決某ー個(gè)問題而采取的方法和步驟,就稱為算法。2、算法的性質(zhì)①有窮性:ー個(gè)算法應(yīng)包含有限的操作步驟②個(gè)初始:此動(dòng)作序列只有?個(gè)初始動(dòng)作③確定性:算法中的每一個(gè)步驟都應(yīng)當(dāng)是確定性的,僅有一個(gè)后繼動(dòng)作.④有一個(gè)或多個(gè)輸出:序列終止表示問題得到解答或問題沒有解答,沒有輸出的算法是沒有意義的。二、選擇型程序設(shè)計(jì)1、if語句的形式①if(條件表達(dá)式)語句②if(條件表達(dá)式)語句1else語句2注意:①if語句中的條件表達(dá)式一般為邏輯表達(dá)式或關(guān)系表達(dá)式,但也可以是任意的數(shù)值類型(包括整型、實(shí)型、字符型、指針類型),例如下列語句也是合法的。if('a') printf(**%d",'a');②在if語句中,分號(hào)是語句的結(jié)束標(biāo)志。③在if和else后面可以只含一個(gè)內(nèi)嵌的操作語句,也可以有多個(gè)操作語句,此時(shí)用花括號(hào)將幾個(gè)語句括起來成為ー個(gè)復(fù)合語句。例1:以下不正確的if語句形式是(兒A)if(x>y&&x!=y);B)if(x==y) x+=y;C)if(x!=y)scanf("%d”,&x)elsescanf("%d”,&y);D)if(x<y){x++;y++;);答案,C詳解:scanf("%d”,&x)末尾應(yīng)加分號(hào),因?yàn)榉痔?hào)是語句不可缺少的部分。例2:已知intx=10,y=20,z=30;以下語句執(zhí)行后x,y,z的值是(if(x>y)z=x;x=y;y=z;答案:x,y,z的值分別是:20 30 30詳解:在此語句中,條件x>y為假,所以只執(zhí)行x=y;y=z;兩條語句。例3、以下不正確的語句是()A)if(x>y);B)if(x=y)&&(x!=0)x+=y;C)if(x!=y)scanf(tt%d,\&x);D)if(x<y){x++;y++);答案:D詳解:分號(hào)是語句結(jié)束的標(biāo)志,y++的末尾無分號(hào),所以y++不是合法的語句。2、if的嵌套if(條件1)if(條件2)語句1else語句2elseif(條件3)語句3else語句4例4:以下程序的輸出結(jié)果是()main()(inta=100,x=10,y=20,okl=5,ok2=0;if(xvy)if(y!=10)if(!okl)elseif(ok2)a=10;printf("%d\n”,a);)答案:100詳解,把10、20、5、〇分別給變量x、y、okl、ok2賦值,執(zhí)行條件語句后a值沒有改變,所以a值仍是原值100o3ヽswitch結(jié)構(gòu)switch語句是多分支選擇語句,其形式如下:switch(表達(dá)式){case常量表達(dá)式1:語句1case常量表達(dá)式2:語句2default:語句n+1)注意!1、switch后面括弧內(nèi)的“表達(dá)式”,可以是整型表達(dá)式或字符型表達(dá)式,也可以枚舉型數(shù)據(jù)。2、當(dāng)表達(dá)式的值與某ー個(gè)case后面的常量表達(dá)式的值相等時(shí),就執(zhí)行此case后面的語句,若所有的case中的常量表達(dá)式的值都沒有與表達(dá)式的值匹配的,就執(zhí)行default后面的語句。3、每一個(gè)case的常量表達(dá)式的值必須互不相同,否則就會(huì)出現(xiàn)互相矛盾的現(xiàn)象。4、執(zhí)行完一個(gè)case后面的語句后,流程控制轉(zhuǎn)移到下一個(gè)case繼續(xù)執(zhí)行,直到遇到break語句或執(zhí)行完為止。5、default可以放在case語句的后面,也可以放在case語句的前面。例5,運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi),距離越遠(yuǎn),每公里運(yùn)費(fèi)越低。設(shè)每公里每噸貨物的基本運(yùn)費(fèi)為P,貨物重為w,距離為s,折扣為d,則總運(yùn)費(fèi)f計(jì)算公式為f=p*w*s(l-d),編寫程序。公里數(shù)s與折扣率d的標(biāo)準(zhǔn)如下:(此程序可用if……else來完成,也可以用switch來完成)。s<250kmd=0250Ws<500d=0.05500Ws<1000d=0.0751000Wsく2000d=0.12000Wsく3000d=0.153000<sd二〇.2main()ints;floatp,w,d,f;printf(“請(qǐng)輸入每公里每噸貨物的基本運(yùn)費(fèi)つ;scanf("%f”,&p);printf(“請(qǐng)輸入貨物里”);scanf(4t%r,&w);printf(“請(qǐng)輸入公里數(shù)”);scanf(4t%r,&s);switch((int)(s/250))(case0: d=0; break;d=0.05; break;d=0.075; break;case6:case7: d=0.1;break;d=0.15;break;default:d=0.2;)f=p*w*s(l-d);printf(“基本運(yùn)費(fèi)是:%f",f);)詳解:1、多個(gè)case可共用ー組執(zhí)行語句,必須寫成如下的形式:case4:case5:case6:case7: d=0.1;break;case后面只能有一個(gè)常量,把上式改寫成case4,5,6,7: d=0.1;break;的形式是錯(cuò)誤的。2、switch后面括弧內(nèi)的“表達(dá)式”必須是整型表達(dá)式或字符型表達(dá)式,也可以是枚舉型數(shù)據(jù),対于swilh來說,關(guān)鍵是把原始數(shù)據(jù)轉(zhuǎn)換為易表達(dá)的形式。例6:請(qǐng)讀以程序?qū)懗龀绦虻妮敵鼋Y(jié)果。#inciude<stdioh>main(){intx=1,y=0,a=0.b=0;switch(x)(case1:switch(y)(case0: a++;break;b++;break;)a++;b++;break;printfC4a=%d,b=%dM,a,b);答案:a=2,b=1詳解:此程序是switch的嵌套結(jié)構(gòu),在此程序中break跳出內(nèi)層switch結(jié)構(gòu),接著執(zhí)行外層switch的case2后的語句。例7:寫出下面程序的運(yùn)行結(jié)果是()main()(inti;for(i=1;i<=5;i++)switch(i%5)(case0: printf("*”); break;printf("#''); break;default: printf(“\n");printf("&”);))答案:#&&&*詳解:default可放在case語句的前面,也可以放在case語句的后面,當(dāng)i%5不等于。,1,2時(shí),將執(zhí)行default后的語句printf("\n”);執(zhí)行完成后沒有break,將繼續(xù)執(zhí)行case2后的語句printf("&”);三、循環(huán)型程序設(shè)計(jì)1、while語句while語句用來實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu),其一般形式如下:while(條件表達(dá)式)循環(huán)體語句例11,設(shè)有程序段:intk=10;while(k=0)k=k-1;循環(huán)體執(zhí)行( )次。答案:0答案解析:在此程序的while結(jié)構(gòu)中,條件表達(dá)式k=0的結(jié)果永遠(yuǎn)為〇即為假,所以循環(huán)執(zhí)行的次數(shù)為〇〇例12:下面程序段的運(yùn)行結(jié)果是()x=y=O;while(x<15) y++,x+=++y;printf("%d,%d",y,x);答案:8,20例13、設(shè)有程序段t=0;while(printf(…)){ t++;if(t>3)break;)循環(huán)執(zhí)行( )次答案:4答案解析,while結(jié)構(gòu)屮的條件表達(dá)式prinlf,*")的值為輸出數(shù)據(jù)的個(gè)數(shù),在此例中,printf("”)的結(jié)果為1,即為真。2ヽdo-while語句do?whi】e語句的特點(diǎn)是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立,其一般形式為:do{循環(huán)體語句}while(條件表達(dá)式);例14、若有如下語句intx=3;do{printf("%d\n",x?=2);}while(--x);則上面程序段輸出結(jié)果是()o答案:1例15、以下程序段循環(huán)執(zhí)行幾次。x=-1;do{x=x*x;Iwhile(!x);答案,1例16、下面程序的運(yùn)行結(jié)果是()main(){inty=10;do{y--;}while(--y);printf("%d\n”,y--);)答案:〇3,for語句C語言中的for語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句,其一般形式為:for(表達(dá)式1:表達(dá)式2:表達(dá)式2)語句說明:①for語句一般形式中的“表達(dá)式1”可以省略,此時(shí)應(yīng)for語句之前給循環(huán)變量賦初值。注意省略表達(dá)式1時(shí),其后的分號(hào)不能省略。②如果表達(dá)式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進(jìn)行下去。③表達(dá)式3也可以省略,但此時(shí)程序設(shè)計(jì)者應(yīng)另外設(shè)法保證循環(huán)正常結(jié)束。④可以省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,即只給循環(huán)條件,在這種情況下,完全等同于while語句。⑤3個(gè)表達(dá)式都可省略,如:for(;;)語句,相當(dāng)于while(l)語句,即不設(shè)初值,不判斷條件(認(rèn)為表達(dá)式2為真值),循環(huán)變量不增值。無終止地執(zhí)行循環(huán)體。⑥表達(dá)式1可以是設(shè)置循環(huán)變量初值的賦值表達(dá)式,也可以是與循環(huán)變量無關(guān)的其他表達(dá)式。for(sum=0;i<=100;i++)sum=sum+i;⑦表達(dá)式一般是關(guān)系表達(dá)式(如i<=100)或邏輯表達(dá)式(如a<b&&x<y),但也可以是數(shù)值表達(dá)式或字符發(fā)達(dá)式,只要其值為非零,就執(zhí)行循環(huán)體。例17,若i為整型變量,則以下循環(huán)執(zhí)行次數(shù)是( )。for(i=2;i!=0;) printf(**%d",i--);答案,2例18:以下不是無限循環(huán)的語句是()A)for(y=0,x=1;x>++y;x=i++)i=x;B)for(;;x++=i)C)while(l)(x++;)D)for(i=10;;i--)sum+=i;答案,A例19、執(zhí)行語句for(i=l;i++<4;):后變量i的值是()答案:4例20、下面程序段的功能是計(jì)算100〇!的末尾含有多少個(gè)零。請(qǐng)?zhí)羁?。for(k=0,i=5;i<=1000;i+=5){m=i;while(){k++;m=m/5;}}答案:m%5!=04、break與continue在break語句可以使流程跳出switch結(jié)構(gòu),繼續(xù)執(zhí)行switch語句下面的?個(gè)語句。實(shí)際上,break語句還可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提高結(jié)束循環(huán),接著執(zhí)行循環(huán)ド面的語句。break語句的一般形式為:break;continue語句只結(jié)朿本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行。continue語句的一般形式為:continue;例21:下列程序的運(yùn)行結(jié)果是( )。main(){inti,j,x=O;for(i=0;i<2;i++){x++;for(j=0;j<=3;j++){if(j%2)continue;x++;}x++;}printf("x=%d\n”,x);)答案,例22、下面程序的運(yùn)行結(jié)果是()main( ){intk=0;charc='A';do{switch(c++)casekA':k++;break;case'B':k??;case*C,:k+=2;break;case4D,:k=k%2;continue;case4E':k=k*10;break;default:k=k/3;1k++;)while(c<'G');printf(t4k=%d\n'\k);答案,5、循環(huán)的嵌套一個(gè)循環(huán)體中乂包含另?個(gè)完整的循環(huán)結(jié)構(gòu)稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可嵌套循環(huán),這就是多層循環(huán)。6、舉例,①求和問題例23,s=l+2+ +100例24:s=l!+2!+ +100!例25,e=l+l/l!+1/2!+1/3!+ 精確到10-6例26,s=l-l/3!+l/5!-l/7!+ 精確到10'6#include“math.h"main()(longt;doubles;for(s=0,t=l,i=0;fabs(1/t)>=1e-6;i++)t=(-1)*t*i;s=s+1/t;printf("%lf”,s);}(例26程序設(shè)計(jì))13/6,21/13, 例27:有一分?jǐn)?shù)序列:13/6,21/13, 求出這個(gè)數(shù)列的前20項(xiàng)之和main(){ints=0,fl=l,f2=2;for(I=1;I<=20;I++)(s=s+f2/f1;f2=fl+f2;fl=f2-fl;}printf("%d”,s);)例28S打印九九表main(){intij;for(i=1;i<=9;i++)(for(j=1;j<=9;j++)printf(“%2d*%2d=%2d”,i,j,i*j);printf(4*\n**);})例29:打印出下列圖形*********main()(inti,j;for(i=1;i<=5;i++)(for(j=l;j<=5+fabs(i-3);j++)printf(u");for(j=l;j<=5-2*fabs(i-3);j++)printf(M*");printf(4t\nM);))例30、打印出下列圖形********文**.例31、兔子繁殖問題main()(inti,fl,f2,f3;for(i=3;i<=12;i++)(f3=fl+f2;fl=f2;f2=f3;}printf(4<%d'\f3);}例32、求最大公約數(shù)、最小公倍數(shù)。main(){intr,u,v,m,n;scanf("%d,%d”,&m,&n);m=u;n=v;if(u<v){r=u;u=v;v=r;)while(u!=0){r=u%v;u=v;v=r;}printf("最大公約數(shù)是:%d,最小公倍數(shù)是)例33、sn=a+aa+aaa+aa...a?從鍵盤輸入a及n后,求Sn方法一:main(){intn,a;longs;scnaf("%d%d”,&n,&a);for(i=1;i<=n;i++)s=s*10+i*a;printf("%ld”,s);)方法二:main(){intn,a;longs,t=O;scnaf("%d%d”,&n,&a);for(i=I;iv=n;i++){t=t*10+as=s+t;例34、給出ー個(gè)不多于5位的正整數(shù),要求①求出它是兒位數(shù)②分別打印出每一位數(shù)③逆序打印此數(shù)據(jù)。main(){longa;inti=0;s=0;printf(“它的每一位數(shù):**);While(a!=0)Ii=i+l;x=a%10;a=a/10;s=s*10+x;printf("%d”,x);)printf(“它是%d位數(shù)printf(“它的逆序是%d\n”,s);}例35、輸出1—100之間每位數(shù)的乘積大于每位數(shù)的和的數(shù)main(){intn,k=1,s=0,m;for(n=1;n<=100;n++){k=1;s=0;m=n;while(m!=0)(k=k+m%10;s=s+m%10;m=m/10;)if(k>s)printf(M%d,,,n);})例36、猴子吃桃問題,猴子第一天摘下若干桃子,當(dāng)即吃了一半,還不過癮又多吃了?個(gè),第二天又將剩下的桃子吃掉一半,又多吃了一個(gè),以后每天都吃前一天剩下的半多一個(gè),到第10天,再吃桃時(shí)只剩下ー個(gè)桃子,求第一天共摘下多少了桃。main(){inti,s=1;for(i=9;i<=1;i--)s=2*s+1;printf("第一天共摘下%d個(gè)桃子”,s);)例37:準(zhǔn)備客票:某鐵路線上共有10個(gè)車站,問需要準(zhǔn)備兒種車票。main(){intiJ,s=O;for(I=1;I<=9;I++)for(j=I+l;j<=10;j++)s=s+1;printf("需要準(zhǔn)備%d",2*s);)例38、有1020個(gè)西瓜,第一天賣一半多兩個(gè),以后毎天賣剩下的一半多兩個(gè),問幾天以后能賣兀〇main(){intday=0,s=1020;while(s<=0){s=s/2-2;day++;|printf(t4%d,\day);)例39、從三個(gè)紅球、五個(gè)白球、六個(gè)黑球中任意取出八個(gè)球,且其中必須有白球,輸出所有可能的方案。main(){intred,white,black;for(white=1;white<=5;white++)for(red=0;red<=3;red++)for(black=0;black<=6:black++)if(white+red+black==8)printf("%d個(gè)紅球,%d個(gè)白球,%d個(gè)黑球’red,white,black);}例40、二分迭代法二分迭代法的思想是:先取f(x)=0的兩個(gè)粗略解xl與x2。若f(xl)與f(x2)符號(hào)相反,則方程f(x)=0在區(qū)間(xl,x2)中至少有一個(gè)根。While(fabs(xl-x2)>=le-6){x3=(xl+x2)/2;if(f(x3)*f(x2)>0)x2=x3;elsex1=x3;)例41、牛頓切線法求a的平方根。x=Vax2=a構(gòu)造函數(shù)f(x)=x?-ax2=xl-f(xl)/r(xl)doublesq-root(doublea){doublex;x=a;while(fabs(x*x)-a>=le-6)x=(x+a/x)*05;return(x);例42、求積分用梯形法求sin(x)*cos(x)的定積分,設(shè)上限a、下限b分別為0,1.2。積分區(qū)間分割數(shù)n=100.S=h/2[f(a)+f(b)]+h(f(a+h)+f(a+2h)+ +f(b))main(){inti,n=100;doubleh,s,a=0,b=1.2;s=0.5*(sin(a)*cos(a)+sin(b)*cos(b));for(i=1;i<=n;i++)s=s+sin(a+i*h)*cos(a+i*h);)例44、驗(yàn)證ー個(gè)數(shù)是否為素?cái)?shù)main(){intnJJlag=l;scnaf("%d”,&n);for(i=2;i<=sqrt(n);i++)if(n%i==0){flag=O;break;}if(flag==l)printf("%d是素?cái)?shù)?!?n);elseprintf("%d不是素?cái)?shù)?!?n);)例45、輸入一-個(gè)數(shù),輸出這個(gè)數(shù)的質(zhì)因子乘積的形式。例如輸入フ2后,輸出:72=2*2*2*3*3。main(){intn,i=2,flag=0;scanf("%d”,&n);printf("%d=”,n);while(n!=1)(if(n%i==0){if(flag==O){printf("%d”,i);flag=l;}else{printf(“*%d”,i);}n=n/i;)elsei=i+l)1二、練習(xí)例5:請(qǐng)閱讀以下程序:若運(yùn)行時(shí)輸入2.0〈回車),則上面程序的輸出結(jié)果是( )#inciude<stdio.h>main()(floata,b;scanf("%f”,&a);if(a<0.0)b=0.0;elseif((a<0.5)&&(a!=2.0)b=1.0/(a+2.0);elseif(a<10.0) b=1.0/a;elseb=10.0;print貝"%f\n”,b);)答案‘0.500000例6S請(qǐng)閱讀下面的程序:main(){ints,t,a,b;scanf("%d,%d",&a,&b);s=1;t=l;if(a>0)s=s+1;if(a>b)t=s+t;elseif(a==b)t=5;elset=2*s;printf(0%d,%dM,s,t);)為了使輸出結(jié)果t為4,輸入量a和b應(yīng)滿足的條件是( ).答案:b>a>0例10:編寫程序給出ー百制成績,要求輸出成績等級(jí)‘A'‘B’、’C’、’D‘、‘E',90分以上為A,80-89分為?B',70-79為,C,60-69為?D,,60分以下為<E'.main(){intscore;scanf("%d”,&score);switch(score/10){case10:case9:printf("等級(jí)是A");break;case8:printf(“等級(jí)是B");break;case7:printf(“等級(jí)是C");break;case6:printf(“等級(jí)是D");break;default:printf(“等級(jí)是E");break;第四章模塊化程序設(shè)計(jì)ー、函數(shù)1、C程序結(jié)構(gòu)ー個(gè)簡單的函數(shù)調(diào)用例子。main(){printstar();print_message();printstar();}printstar()(prin[f("**************************\n*).}print_message(){printf(41Howdoyoudo!\nM);)說明:①用C語言編寫函數(shù)至少要編寫ー個(gè)main。函數(shù),執(zhí)行C程序就是執(zhí)行相應(yīng)的main()函數(shù),調(diào)用其他函數(shù)后流程回到main函數(shù),在main函數(shù)中結(jié)束整個(gè)程序的運(yùn)行。②?個(gè)C程序可由一個(gè)主函數(shù)和若干個(gè)函數(shù)組成。由主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用。同一個(gè)函數(shù)可以被ー個(gè)或多個(gè)函數(shù)調(diào)用任意多次。③所有函數(shù)都是平行的,即在定義函數(shù)時(shí)互相獨(dú)立的,一個(gè)函數(shù)并不從屬于另ー個(gè)函數(shù),即函數(shù)不能嵌套調(diào)用④從用戶使用的角度看,函數(shù)有兩種:標(biāo)準(zhǔn)函數(shù),用戶自定義函數(shù)。⑤從函數(shù)的形式看,函數(shù)分兩類:無參函數(shù)、有參函數(shù)。例1:以下正確的說法是()建立函數(shù)的目的之一是:A)提髙程序的執(zhí)行效率B)提高程序的可讀性C)減少程序的篇幅D)減少程序文件所占內(nèi)存答案:B例2,以下正確的說法是()A)用戶若需調(diào)用標(biāo)準(zhǔn)庫函數(shù),調(diào)用前必須重新定義B)用戶可以重新定義標(biāo)準(zhǔn)函數(shù),若如此,該函數(shù)將失去原有含義C)系統(tǒng)根本不允許用戶重新定義標(biāo)準(zhǔn)庫函數(shù)D)用戶若需調(diào)用標(biāo)準(zhǔn)庫函數(shù),調(diào)用前不必使用預(yù)編譯命令將該函數(shù)所在文件包括到用戶源文件中,系統(tǒng)自動(dòng)去調(diào)。答案,B2、函數(shù)的定義函數(shù)定義就是在程序中設(shè)定一個(gè)函數(shù)模塊。例3:main()(doublesum(inta,doubleb);/?函數(shù)聲明?/}doublesum(inta,doubleb)/?函數(shù)定義?/{/?函數(shù)體?/)注意:①函數(shù)名應(yīng)符合C語言對(duì)標(biāo)識(shí)符的規(guī)定。以字母或下劃線開頭,后跟字母、數(shù)字下劃線的組合。②形式參數(shù)寫在函數(shù)后面的一對(duì)圓括號(hào)內(nèi),表示將從主調(diào)函數(shù)中接收哪些類型的信息,程序進(jìn)行編譯時(shí),并不為形式參數(shù)分配存儲(chǔ)空間。只有在被調(diào)用時(shí),形式參數(shù)オ臨時(shí)地占有存儲(chǔ)空間。③函數(shù)返回值類型,如省略返回值類型系統(tǒng)默認(rèn)為皿型,對(duì)不需要使用函數(shù)返冋值的函數(shù),應(yīng)定義為void類型。④函數(shù)的外部性,函數(shù)不能嵌套,ー個(gè)函數(shù)不能定義在別的函數(shù)內(nèi)部。3、函數(shù)聲明在主調(diào)函數(shù)中,要對(duì)在本函數(shù)中將要調(diào)用的函數(shù)事先作一聲明。所謂“聲明”是指向編譯系統(tǒng)提供必要的信息:函數(shù)名,函數(shù)的類型,函數(shù)參數(shù)的個(gè)數(shù),類型及排列次序。①函數(shù)聲明末尾耍加;②函數(shù)聲明可以不寫形參名,但必須寫類型標(biāo)識(shí)符。如上例中可以把聲明改為:doublesum(inl.double);但不能只寫形式參名而不寫類型如:doublesum(a,b);例4:若調(diào)用ー個(gè)函數(shù),且此函數(shù)中沒有return語句,則正確的說法是()A)沒有返回值B)返回若干個(gè)系統(tǒng)默認(rèn)值C)能返回一個(gè)用戶所希望的函數(shù)值D)返回一個(gè)不確定的值答案:D例5、C語言規(guī)定,函數(shù)返回值的類型是由()A)relurn語句中的表達(dá)式類型決定B)調(diào)用該函數(shù)時(shí)的主調(diào)函數(shù)類型所決定C)調(diào)用該函數(shù)時(shí)系統(tǒng)臨時(shí)決定D)在定義該函數(shù)時(shí)所指定的函數(shù)類型所決定答案:D例6、下面函數(shù)調(diào)用語句含有實(shí)參個(gè)數(shù)為()func((exp1,exp2),(exp3,exp4,exp5));答案:2例7、若輸入的值是ー125,以下程序的運(yùn)行結(jié)果是().#include"math.h"main(){intn;scanf("%d”,&n);n=fabs(n);fun(n);}fun(intn){intk,r;for(k=2;k<=sqrt(n);k++)|r=n%k;while(r==O){printf("%d”,k);n=n/k;if(n>l)printf("*“);))if(n!=l)printf("%d\n”,n);)答案:-125=-5*5*5例9、以下正確的函數(shù)定義形式是()〇A)doublefun(intxJnty)B)doublefun(intx;inty)C)doublefun(intx,inty);D)doublefun(intx,y);答案:A例10、以下正確的函數(shù)形式是A)doublefun(intx,inty){z=x+y;returnz;}B)fun(intx,y){intz;returnz;)C)fun(intx,inty){intx,y;doublez;z=x+y;returnz;)D)doublefun(intx,inty)答案:D4、函數(shù)的傳值調(diào)用參數(shù)是函數(shù)調(diào)用時(shí)進(jìn)行信息交換的載體,關(guān)于形參與實(shí)參的說明:①在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時(shí),它們并不占用內(nèi)存中的存儲(chǔ)單元。只有在函數(shù)調(diào)用時(shí),函數(shù)中的形參オ被分配內(nèi)存單元,形參與實(shí)參各占ー個(gè)獨(dú)立的存儲(chǔ)空間,函數(shù)返回時(shí),臨時(shí)存儲(chǔ)區(qū)被撤銷。②在被定義的函數(shù)中,必須指定形參的類型,實(shí)參可以是常量、變量或表達(dá)式,但要求它們有確切的值。實(shí)參與形參的類型應(yīng)相同或賦值兼容。③C語言規(guī)定,實(shí)參變量對(duì)形參變量的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞,只由實(shí)參傳給形參,而不能由形參傳回來給實(shí)能。例11、main(){inta=3,b=5;voidswap(intxJnty);swap(a,b);printf("%d,%d”,a,b);)voidswap(intxjnty){inttemp;temp=x;x=y;y=temp;}輸出結(jié)果:3,5例12、以下正確的說法是(r在C語言中,A)實(shí)參與其對(duì)應(yīng)的形參各占用獨(dú)立的存儲(chǔ)單元。B)實(shí)參和與其對(duì)應(yīng)的形參共占用ー個(gè)存儲(chǔ)單元C)只有當(dāng)實(shí)參和與其對(duì)應(yīng)的形參同名時(shí)オ共占用存儲(chǔ)單元。D)形參是虛擬的,不占用存儲(chǔ)單元。答案:A例13、以下不正確的說法是()。C語言規(guī)定A)實(shí)參可以是常量、變量或表達(dá)式B)形參可以是常量、變量或表達(dá)式C)實(shí)參可以為任意類型D)實(shí)參類型應(yīng)與其對(duì)應(yīng)形參的一致答案:B5、函數(shù)的遞歸調(diào)用在調(diào)用ー個(gè)函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。例14、用遞歸方法計(jì)算n!的函數(shù)rfact()〇假設(shè)n為正數(shù)。求n!可以用遞推方法,即從1開始,乘2,再乘3……一直乘到no這種方法容易理解,也容易實(shí)現(xiàn)。遞推法的特點(diǎn)是從ー個(gè)已知的事實(shí)出發(fā),按一定規(guī)律推出下ー個(gè)事實(shí),再從這個(gè)新的已知的事實(shí)出發(fā),再向下推出ー個(gè)新的事實(shí)。floatrfac1(intn){inti;floatt;for(i=1;i<=n;i++)t=t*I;return(t);)求n!也可以用遞歸方法,即5!=5*4!,而4!=4*3!,3!=3*2!,2!=2*1!,1!=1,可用下面的遞歸公式表ノト0V1 n=1rfact(n) ン=rfact(n-1)*nn>1Jlongrfact(intn){if(n<=1)return(1);elsereturn(n*rfact(n-l));}分析:遞歸總是由兩部分組成的:①遞歸方式②遞歸終止條件例15、求l/n!①遞歸方式 n>lfl5(n)=f!5(n-l)*1/n②遞歸終止條件n=lfl5=ldoublef15(intn)(if(n==l)return(1);elseretum(f15(n-1)?1/n);)例16、s=l+l/2+l/3+ + l/n①遞歸方式 n>lfl6(n)=fl6(n-l)*l/n②遞歸終止條件n=lfl6(n)=ldoublefl6(intn)if(n==l)return(1);elsereturn(f16(n-1)+1/n);)例17、s=l-l/2+l/3-l/4+.….1/n精確到1。?、龠f歸方式 n>l fl7(n)=fl7(n-l)±1/n②遞歸終止條件 n=l fl7(n)=ldoublef17(intn,intflag)(if(n==l)return(I);elsereturn(f17(n-1,-flag)+1/n*flag);}main(){intn,flag;scanf("%d”,&n);if(n%2==0)flag==-1;elseflag==1;printf("%lf”,fl7(n,flag));)例18、以下程序的功能是用遞歸法計(jì)算學(xué)生的年齡,已知第一位學(xué)生年齡最小,為10歲,其余學(xué)生一個(gè)比ー個(gè)大2歲,求第5位學(xué)生的年齡。①遞歸方式 n>l fl8(n)=fl8(n-l)+2②遞歸終止條件 n=l fl8(n)=10intf!8(intn)|if(n==l)return(10);elsereturn(f18(n-1)+2);}例19、求u,v兩數(shù)的最大公約數(shù)①遞歸方式 v!=0 f19(u,v)=f19(v,u%v)②遞歸終止條件v==0fl9(u,v)=uintf19(intuJntv)(if(v==0)return(u);elsereturn(f19(v,u%v));例20、兔子繁殖問題、牛群繁殖問題
①遞歸方式n>1①遞歸方式n>1f20(n)=f20(n-l)+f20(n-2)②遞歸終止條件n=lf20(n)=ln=2 f20(n)=lintf20(intn){if(n==l)return(1);elseif(n==2)return(1);elsereturn(f20(n-l)+f20(n-2));)例21、寫出計(jì)算Ackermann函數(shù)ack(m,n)的遞歸函數(shù)。對(duì)于m>=0,n>=0,Ack(m,n)定義為:ack(O,n)=n+1ack(m,O)=ack(m-1,1)ack(m,n)=ack(m-1,ack(m,n-1))①遞歸方式 n>1 ack(m,n)=ack(m-1,ack(m,n-1))②遞歸終止條件n=0ack(m,n)=ack(m-1,1)m=0ack(m,n)=n+1doubleack(intm,intn)(if(m==O)return(n+1);elseif(n==0)return(ack(m-1,1));elsereturn(ack(m-l,ack(m,n-l)));)例22、分別寫出Hermite多項(xiàng)式Hn(x)的值的遞推和遞歸函數(shù)。ル汽)定義如下:H0(x)=lH|(x)=2xHn(x)=2xHn.|(x)-2(n-l)Hn.2(x)遞推法:doubleh1(intn,floatx)(floats1=1,s2=2*x,s3;inti;if(n==0)return(1);elseif(n==1)return(2*x);else{for(i=2;i<=n;i++){s3=2*x*s2+2*(n-l)*sl;s2=s3;遞歸法:①遞歸方式n>1h(n,x)=2*x*h(n-l,x)-2*(n-l)*h(n-2,x)②遞歸終止條件n=0h(n,x)=1n=1h(n,x)=2*xdoubleh1(intn,floatx)(if(n==0)return(1);elseif(n==1)return(2*x);elsereturn(2*x*h(n-1,x)-2*(n-1)*h(n-2,x));)例23、求a的平方根遞推法:doublesq_root(doublea){doublex;x=a;while(fabx(x*x)-a)>=le
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 洗染兩用機(jī)行業(yè)相關(guān)投資計(jì)劃提議范本
- 工程石材供貨合同
- 酒店前廳收銀組收銀員崗位職責(zé)
- 格林法典中的經(jīng)典故事解讀
- 個(gè)人車輛質(zhì)押合同
- 境外并購與重組服務(wù)協(xié)議
- 企業(yè)內(nèi)部員工績效考核管理辦法
- 掛靠經(jīng)營合同協(xié)議書
- 工業(yè)廢水處理服務(wù)協(xié)議
- 《經(jīng)濟(jì)學(xué)基礎(chǔ)概念與應(yīng)用:大一經(jīng)濟(jì)學(xué)課程教案》
- 2025年皖西衛(wèi)生職業(yè)學(xué)院單招職業(yè)技能測試題庫及答案1套
- 《馬云創(chuàng)業(yè)經(jīng)歷》課件
- 常用量具使用方法課件
- 2024年05月安徽農(nóng)商銀行系統(tǒng)社會(huì)招考計(jì)算機(jī)法律專業(yè)員工人員筆試歷年參考題庫附帶答案詳解
- 騰訊云人工智能工程師認(rèn)證考試題(附答案)
- 班級(jí)管理案例與應(yīng)用知到智慧樹章節(jié)測試課后答案2024年秋哈爾濱師范大學(xué)
- 建設(shè)單位保證工程安全措施的實(shí)施方案
- 第16課數(shù)據(jù)管理與編碼(教案)四年級(jí)全一冊(cè)信息技術(shù)人教版
- 2024中考物理真題匯編:電與磁(含解析)
- 2024年小客車指標(biāo)借用協(xié)議3篇
- ECMO技術(shù)操作規(guī)范試題
評(píng)論
0/150
提交評(píng)論