




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
算法口訣分支累算整除性,最大最小雙重循,一查兩排兩遍歷,函數(shù)調(diào)用文件行。一、C語(yǔ)言基礎(chǔ)(基本數(shù)據(jù)類型和表達(dá)式)C的數(shù)據(jù)類型有:簡(jiǎn)單類型(整型、字符型、實(shí)型),復(fù)雜類型(數(shù)組、結(jié)構(gòu)體),指針類型和空類型。1、常量和變量(1)常量常量是在程序運(yùn)行過(guò)程中其值不能被改變的量,是直接處理的,處理的是它的字面值。常量有不同的類型,例如:12、0、-3是整型常量;4.6,-1.23是實(shí)型常量;’a’,’d’,’A’是字符常量。常量也可以用標(biāo)識(shí)符代表,稱為符號(hào)常量。符號(hào)常量的定義格式為:#defile符號(hào)常量名字符序列(2)變量變量是其值可以改變的量,一個(gè)變量擁有一個(gè)名字,變量名用標(biāo)識(shí)符表示,在內(nèi)存占據(jù)一定的存儲(chǔ)單元,該存儲(chǔ)單元中存放變量的值,存儲(chǔ)單元的編號(hào)稱變量的地址。變量是間接處理的,看到的是變量的名,處理的是變量的值。在C語(yǔ)言中,小寫和大寫字母被認(rèn)為是兩個(gè)不同的字符,例如:sum和SUM代表兩個(gè)不同的變量名。變量的特點(diǎn)是:取之不盡,以新沖舊。變量先定義后使用,先賦值后處理。3、C語(yǔ)言的數(shù)據(jù)類型(1)有以下三種表示形式:十進(jìn)制整數(shù):例如:123、0、-456八進(jìn)制整數(shù):以0開頭的數(shù)即認(rèn)為是八進(jìn)制數(shù),例如:0123即八進(jìn)制的123,而028是錯(cuò)誤的八進(jìn)制整數(shù)。十六進(jìn)制整數(shù):以0x或0X開頭的數(shù)即認(rèn)為是十六進(jìn)制數(shù),例如:0x123是十六進(jìn)制整數(shù)123,而0xhh是錯(cuò)誤的十六進(jìn)制整數(shù)。基本型:以int表示,在內(nèi)存中占2個(gè)字節(jié)。長(zhǎng)整型:以long表示:在內(nèi)存中占4個(gè)字節(jié)。無(wú)符號(hào)整型:以u(píng)nsignedint或unsignedlong表示。(2)實(shí)型數(shù)據(jù)實(shí)型常量又稱浮點(diǎn)數(shù),有兩種表示形式:十進(jìn)制數(shù)形式:由數(shù)字和小數(shù)點(diǎn)組成(必須有小數(shù)點(diǎn)),例如:0.123、.123、123.。指數(shù)形式:由數(shù)字、E(或e)和整數(shù)組成,例如:123e3、123.4E2。注意:E后面必須有整數(shù),E前面必須要有數(shù)字,0.2E、0.2E2.3、e-5不合法。實(shí)型變量有2種形式:?jiǎn)尉龋╢loat)型,內(nèi)存占4個(gè)字節(jié)(32位)。雙精度(double)型,內(nèi)存占8個(gè)字節(jié)(64位)。實(shí)型變量的定義:floatx,y;定義x和y為單精度型變量 doublez;定義z為雙精度型變量字符型數(shù)據(jù)字符常量C語(yǔ)言的字符常量是指用單引號(hào)括起來(lái)的一個(gè)字符,例如:'a'、'A'、'$'除上述字符常量之外,C中還允許一種特殊字符常量,即以“\”開頭的字符序列,稱為“轉(zhuǎn)義字符”,意思是將“\”后面的字符轉(zhuǎn)變成另外的意義。轉(zhuǎn)義字符占一個(gè)字節(jié),算一個(gè)字符,它們一般起控制作用。例如:\n換行\(zhòng)ddd1~3位八進(jìn)制數(shù)所代表的字符,例如:\101表示字母A\xhh1~2位十六進(jìn)制數(shù)所代表的字符,例如:\x41也表示字母A字符數(shù)據(jù)在內(nèi)存中存儲(chǔ)一個(gè)字節(jié),存放該字符相應(yīng)的ASCII碼。字符變量的定義:charc1,c2;字符變量的賦值:c1='a';c2='b';內(nèi)存中存放的不是'a'和'b',而是'a'和'b'的ASCII碼97和98,輸出字符還是整數(shù)取決于“格式控制符”,例如:printf("%d%c",c1,c2);運(yùn)行結(jié)果:97b字符串常量字符串常量是一對(duì)雙引號(hào)””括起來(lái)的字符序列,例如:"Howdoyoudo.",用一維數(shù)組存放。注意:不要混淆字符常量與字符串常量:“a”與‘a(chǎn)’的區(qū)別:“a”分配2個(gè)字節(jié),存放'a'和字符串結(jié)束符‘\0’,而‘a(chǎn)’只分配1個(gè)字節(jié)。字符串常量不能賦給一個(gè)字符變量,例如:charc1;c="a";是錯(cuò)誤的。2.運(yùn)算符與表達(dá)式(1)算術(shù)運(yùn)算符和算術(shù)算術(shù)運(yùn)算符有:+、-、*、/、%、++、--、-,其中:-、++、--是單目運(yùn)算符,其余是雙目運(yùn)算符。使用時(shí)要注意3點(diǎn):兩個(gè)整數(shù)相除,結(jié)果為整型,如果其中一個(gè)為實(shí)型,則結(jié)果為double型,例如:5/3=1,3/5=0,3.0/5=0.6%運(yùn)算符只適用于整數(shù)(表示兩個(gè)整數(shù)求余數(shù)),例如:5%3=2,3%5=3,8%4=0,-7%4=-3,7%(-4)=3;而5.2%3不合法自增自減運(yùn)算符++、--的作用是使變量的值增1、減1。在程序中經(jīng)常用作變量計(jì)數(shù)。++和—出現(xiàn)在變量前或后區(qū)別在于:++n和--n在使用n之前,使n的值先加(或減)1。即先變化n后得到新的n值,再作其它運(yùn)算;n++和n--在使用n之后,再使n的值加(或減)1。即先使用原來(lái)的n進(jìn)行運(yùn)算,再進(jìn)行加(或減)1。自增、自減運(yùn)算符只能用于變量,不能用于常量或表達(dá)式,例如:5++和(x+y)++是錯(cuò)誤的。自增++、自減--運(yùn)算符是自右至左結(jié)合的。例如:-n++表示-(n++),而不是(-n)++。所謂表達(dá)式是用運(yùn)算符和括號(hào)將運(yùn)算對(duì)象連接起來(lái)的、符合C語(yǔ)法規(guī)則的式子,稱為C語(yǔ)言表達(dá)式。這里運(yùn)算對(duì)象包括:常量、變量、函數(shù)等,廣義地說(shuō),一個(gè)常量、變量和函數(shù)也可以作為表達(dá)式。當(dāng)我們將算術(shù)表達(dá)式轉(zhuǎn)換成C語(yǔ)言數(shù)值表達(dá)式時(shí),要注意下列規(guī)則:每個(gè)符號(hào)占一格,每個(gè)符號(hào)都必須一個(gè)一個(gè)地并排寫在同一橫線上,不能有上標(biāo)和下標(biāo)。如:x3要寫成x*x*x,x1+x2必須寫成x1+x2,分?jǐn)?shù)可用小數(shù)表示。所有運(yùn)算符都不能省略。如:2xy必須寫成2*x*y。所有的括號(hào)都是小括號(hào)。如:5[x+2(y+z)]必須寫成5*(x+2*(y+z))。三角函數(shù)的自變量必須用弧度表示。如:sin30必須寫成sin(30*3.14/180)。在轉(zhuǎn)換時(shí),要保持原有算術(shù)表達(dá)式的優(yōu)先級(jí),必要時(shí)要添加括號(hào)。如分式:必須寫成(a+b)/(c-d)。在C表達(dá)式中不能出現(xiàn)非C字符,如:2r應(yīng)寫成2*pi*r。為了使算術(shù)表達(dá)式能按正確的法則運(yùn)算,C規(guī)定了運(yùn)算符的優(yōu)先級(jí)和結(jié)合性,在表達(dá)式求值時(shí),對(duì)一個(gè)運(yùn)算對(duì)象而言先按運(yùn)算符的優(yōu)先級(jí)別高低次序執(zhí)行,如果優(yōu)先級(jí)相同,再按結(jié)合方向處理。C語(yǔ)言的優(yōu)先級(jí)有15級(jí),要掌握主要的優(yōu)先級(jí)單目運(yùn)算符>算術(shù)運(yùn)算符>關(guān)系運(yùn)算符>邏輯運(yùn)算符>賦值運(yùn)算符C語(yǔ)言運(yùn)算符的結(jié)合性有左結(jié)合性和右結(jié)合性,其中單目運(yùn)算符、條件運(yùn)算符和賦值運(yùn)算符是右結(jié)合性,其它運(yùn)算符為左結(jié)合性。算術(shù)運(yùn)算時(shí),C語(yǔ)言會(huì)進(jìn)行類型轉(zhuǎn)換,類型轉(zhuǎn)換的方法有3種:自動(dòng)類型轉(zhuǎn)換:將字節(jié)短的自動(dòng)轉(zhuǎn)換為字節(jié)長(zhǎng)的,在運(yùn)算時(shí)先將各種類型化成同一類型,然后進(jìn)行運(yùn)算。賦值類型轉(zhuǎn)換:如果一個(gè)賦值運(yùn)算符兩邊的數(shù)據(jù)類型不同時(shí),把右邊的數(shù)據(jù)類型轉(zhuǎn)換為左邊的變量類型后,再賦值。賦值的結(jié)果按左邊變量的類型取值。強(qiáng)制類型轉(zhuǎn)換可以用一個(gè)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式的值轉(zhuǎn)換成所需要的類型,一般形式:(類型名)(表達(dá)式)例如: (double)a將a的值轉(zhuǎn)換成double型 (int)(x+y)將(x+y)的結(jié)果轉(zhuǎn)換成int型 (float)(5%3)將(5%3)的結(jié)果轉(zhuǎn)換成float型強(qiáng)制類型轉(zhuǎn)換只是將表達(dá)式的值轉(zhuǎn)換成所需的類型,而每一個(gè)變量的類型沒(méi)有變化。關(guān)系運(yùn)算符與關(guān)系表達(dá)式關(guān)系運(yùn)算就是比較運(yùn)算,將兩個(gè)值進(jìn)行比較,判斷比較的結(jié)果是否符合給定的條件。用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)的式子稱為關(guān)系表達(dá)式。C語(yǔ)言有6種關(guān)系運(yùn)算符:<、<=、>、>=、==、!=,其中,<、<=、>、>=的優(yōu)先級(jí)高于==、!=,左結(jié)合性。關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真”或“假”,C語(yǔ)言中以1代表“真”,以0代表“假”。x和y不同時(shí)為零寫作x!=0||y!=0或x||y,year是閏年,即year能被4整除但不能被100整除,或year能被400整除。寫作(year%4==0&&year%100!=0)||(year%400==0)或者(!(year%4)&&year%100)||!(year%400)(3)邏輯運(yùn)算符和邏輯表達(dá)式C語(yǔ)言的邏輯運(yùn)算符有:!、&&、||,其優(yōu)先級(jí)從左到右。其中:!是右結(jié)合性,&&和||是左結(jié)合性。用邏輯運(yùn)算符連接起來(lái)的式子就是邏輯表達(dá)式。邏輯表達(dá)式的值只有兩個(gè)值,即用1表示“真”,用0表示“假”。在參與運(yùn)算時(shí),在判斷一個(gè)邏輯量是“真”或“假”時(shí),以0代表“假”,以非0代表“真”。在運(yùn)算結(jié)果中以0代表“假”,以1代表“真”。在邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符。例如:a&&b&&c只有當(dāng)a為"真"時(shí)才判斷b的值,只有當(dāng)a和b都為“真”時(shí)才判斷c的值。如果a為“假”,則不必判斷b和c,后面兩個(gè)&&運(yùn)算沒(méi)有執(zhí)行。a||b||c只有當(dāng)a為“假”時(shí)才判斷b的值,只有當(dāng)a和b都為“假”時(shí)才判斷c的值。如果a為“真”,則不必判斷b和c,后面兩個(gè)||運(yùn)算沒(méi)有執(zhí)行。表達(dá)式,例如:ch是小寫英文字母:ch>='a'&&ch<='z'ch是大寫英文字母:ch>='A'&&ch<='Z'ch是英文字母:ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'ch是數(shù)字字母:ch>='0'&&ch<='9'大小寫字母的轉(zhuǎn)換:大寫字母+32它的小寫字母例如‘A’+32’a小寫字母-32它的大寫字母例如‘a(chǎn)’-32’A數(shù)字和數(shù)字字符的轉(zhuǎn)換:數(shù)字+’0’(48)例如:5+’0’’數(shù)字字符-’0’(48)例如:’5’-’0’(4)條件運(yùn)算符和條件表達(dá)式?:是條件運(yùn)算符,由條件運(yùn)算符構(gòu)成條件表達(dá)式。它的一般形式:表達(dá)式1?表達(dá)式2:表達(dá)式3條件表達(dá)式的求解過(guò)程:1)求解“表達(dá)式1”2)如果“表達(dá)式1”的值為“真”(非0),求解“表達(dá)式2”如果“表達(dá)式1”的值為“假”(為0),求解“表達(dá)式3”條件運(yùn)算符為右結(jié)合性,例如:a>b?a:c>d?c:d;相當(dāng)于:a>b?a:(c>d?c:d);條件表達(dá)式有時(shí)可以取代if語(yǔ)句,例如:當(dāng)if語(yǔ)句中內(nèi)嵌的語(yǔ)句為賦值語(yǔ)句,并且兩個(gè)分支都賦給同一個(gè)變量時(shí),可以用條件運(yùn)算符代替。if(a>b)max=a;elsemax=b;可以寫成條件表達(dá)式max=a>b?a:b;條件表達(dá)式中,表達(dá)式1的類型可以與表達(dá)式2、表達(dá)式3的類型不同。例如:ch=x?’a’:’b’或f=x>y?1:1.5要注意條件表達(dá)式中的表達(dá)式2和表達(dá)式3只執(zhí)行一個(gè),當(dāng)與x++,x—配合時(shí),只有執(zhí)行到的x++中x才會(huì)變化。(5)賦值運(yùn)算符和賦值表達(dá)式賦值號(hào)“=”就是賦值運(yùn)算符。它的作用是將一個(gè)數(shù)據(jù)或表達(dá)式的值賦給一個(gè)變量,賦值運(yùn)算符是右結(jié)合性,優(yōu)先級(jí)較低,為倒數(shù)第2個(gè)。在賦值運(yùn)算符之前加上其它運(yùn)算符可以構(gòu)成復(fù)合賦值運(yùn)算符。例如:+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=等。a+=3相當(dāng)于a=a+3,a*=b+3相當(dāng)于a=a*(b+3)用賦值運(yùn)算符或復(fù)合賦值運(yùn)算符將變量和表達(dá)式連接起來(lái)的式子稱為賦值表達(dá)式。賦值表達(dá)式是“無(wú)孔不入“的,它可以出現(xiàn)在許多地方。例如:x=y=z=3、x+=y+=z、y=(x+3)*(x-3)、if(x=2)、while(x=4)等。賦值運(yùn)算符,完成賦值運(yùn)算;運(yùn)算符,完成關(guān)系運(yùn)算。if(x=2)與if(x==2)代表不同的含義?;镜妮斎胝Z(yǔ)句有:1)格式化輸入語(yǔ)句:scanf(格式控制字符串,地址表列)所以要有&格式控制字符串:格式控制說(shuō)明:按指定的格式輸入數(shù)據(jù),%…與數(shù)據(jù)類型有關(guān)int型:%dfloat型:%fdouble型:%lf字符串%s普通字符:原樣輸入2)單個(gè)字符輸入語(yǔ)句:getchar()3)字符串輸入語(yǔ)句:gets()基本的輸出語(yǔ)句有:1)格式化輸出語(yǔ)句:printf(格式控制字符串,輸出表列)格式控制字符串:格式控制說(shuō)明:按指定的格式輸入數(shù)據(jù),%…與數(shù)據(jù)類型有關(guān)int型:%dfloat型:%fdouble型:%f字符串%s普通字符:原樣輸入2)單個(gè)字符輸出語(yǔ)句:putchar()3)字符串輸入語(yǔ)句:puts()二、選擇結(jié)構(gòu).1、控制結(jié)構(gòu):(1)簡(jiǎn)單判斷:if(表達(dá)式)語(yǔ)句(2)選擇分支:if(表達(dá)式)語(yǔ)句1else語(yǔ)句2(3)多條件選擇:if(表達(dá)式1)語(yǔ)句1elseif(表達(dá)式2)語(yǔ)句2elseif(表達(dá)式3)語(yǔ)句3……else語(yǔ)句n(4)情況語(yǔ)句:switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句段1case常量表達(dá)式2:語(yǔ)句段2……case常量表達(dá)式n:語(yǔ)句段ndefault:語(yǔ)句段n+1}(5)嵌套的if-else語(yǔ)句if(表達(dá)式1)if(表達(dá)式2)語(yǔ)句1else語(yǔ)句2elseif(表達(dá)式3)語(yǔ)句3else語(yǔ)句42、說(shuō)明:(1)在這5種控制結(jié)構(gòu)中,第1種簡(jiǎn)單判斷使用起來(lái)最簡(jiǎn)單,但也最實(shí)用,可以作為首選,雖然在編制程序時(shí)語(yǔ)句多用幾句,但用起來(lái)卻很方便。(2)第2種選擇分支往往用在兩種情況的判斷,使用時(shí)要注意語(yǔ)句1和語(yǔ)句2后面都有分號(hào)。(3)第3種多條件選擇是if-else語(yǔ)句的一種嵌套形式,由于它可以直接用于多條件的選擇判斷,所以單獨(dú)作為一種形式列出。在使用時(shí),有時(shí)比switch語(yǔ)句更簡(jiǎn)單,要注意最后一個(gè)else的后面沒(méi)有if。(4)第4種情況語(yǔ)句要注意switch后面的表達(dá)式是與case后面的常量表達(dá)式匹配,而不能與一般的含變量的表達(dá)式匹配。語(yǔ)句段后面沒(méi)有break語(yǔ)句時(shí)是入口開關(guān),有break語(yǔ)句時(shí)才是真正的多路開關(guān)。(5)第5種嵌套的if--else語(yǔ)句使用起來(lái)最靈活,其實(shí),以上各種形式的分支結(jié)構(gòu)間相互都可以嵌套,當(dāng)有多種形式的分支結(jié)構(gòu)嵌套時(shí),特別要注意else總是與它最近的沒(méi)有匹配的if相匹配。例1:編程,輸入x后,根據(jù)下式計(jì)算并輸出y值。 #include<stdio.h>#include<math.h>voidmain(){ doublex,y; scanf("%lf",&x); if(x<-2)y=x*x-sin(x); elseif(x>2) y=sqrt(x*x+x+1); else y=pow(2,x)+x; printf("y=%f\n",y);}文件包含:#include<stdio.h>輸入輸出、文件#include<math.h>數(shù)學(xué)#include<string.h>字符串#include<ctype.h>字符常用數(shù)學(xué)函數(shù):exexp(x)xypow(x,y)|x|fabs(x)abs(x)lnxlog(x)lgxlog10(x)x1/2sqrt(x)例2:寫出執(zhí)行下列語(yǔ)句后的輸出結(jié)果。intx=5;if(x=3)printf("%d\n",x);elseprintf("%d\n",x+2);答案:3分析:在C語(yǔ)言的運(yùn)算符中,要注意“=”與“==”的區(qū)別?!?”是賦值運(yùn)算符,構(gòu)成的是賦值表達(dá)式;“==”是關(guān)系運(yùn)算符,表示等于,構(gòu)成的是關(guān)系表達(dá)式,結(jié)果是邏輯值。本題if語(yǔ)句的條件“x=3”是賦值表達(dá)式,結(jié)果是3,為邏輯真,執(zhí)行printf("%d\n",x);,輸出結(jié)果3。例3:下列程序段的輸出結(jié)果是:inti=5,j=0;switch(i%2){case1:j+=1;case0;j-=1;}printf(“%d”,j);答案:0分析:本例是不帶break的switch語(yǔ)句,是“入口”開關(guān),由于i%2的值為1,先執(zhí)行j+=1;,因?yàn)楹竺鏇](méi)有break;語(yǔ)句,繼續(xù)執(zhí)行j-=1;,j的結(jié)果仍然為0。例4:下列程序段的輸出結(jié)果是inti=0,j=1;switch(j){case1:i+=1;break;case2;i+=2;break;case3;i+=3;break;}printf(“%d”,i);答案:1分析:本例是帶break的switch語(yǔ)句,是“多路”開關(guān),在執(zhí)行完i+=1;后,因?yàn)楹竺嬗衎reak;語(yǔ)句,跳出switch語(yǔ)句,結(jié)果為1。例5:下列程序段的輸出結(jié)果是:intk=1,s=0;switch(k){case1:s+=10;case2:s+=20;break;default:s+=3;}printf(“k=%ds=%d”,k,s);答案:k=1,s=30分析:本例k=1,先執(zhí)行s+=10;,因?yàn)橐驗(yàn)楹竺鏇](méi)有break;語(yǔ)句,繼續(xù)執(zhí)行s+=20;由于后面有break;語(yǔ)句,跳出switch語(yǔ)句,結(jié)果s的值為30。例6:假定所有變量均已正確定義,下列程序段運(yùn)行后b的值是:inta=0,b=10;if(a=0)b--;elseif(a<0)b++;elseb=b+b;A.20 B.11 C.9 D.0答案:A分析:本例是嵌套的if語(yǔ)句,首先執(zhí)行if(a=0),由于a=0,執(zhí)行else后面的if(a<0)b++;elseb=b+b;語(yǔ)句,由于a<0不成立,執(zhí)行b=b+b;,所以b的值是20。例7:假定所有變量均已正確定義,下列程序段運(yùn)行后x的值是:a=b=c=0;x=35;if(!a)x--;elseif(b);if(c)x=3;elsex=4;A.34 B.4 C.35 D.答案:B分析:本例也是嵌套的if語(yǔ)句,由于a=b=c=0;,!a的值為1,執(zhí)行x--;,x的值是34,繼續(xù)執(zhí)行下一個(gè)if語(yǔ)句if(c)x=3;elsex=4;,由于c=0,所以x的值是4。不少學(xué)生認(rèn)為第1次的結(jié)果34就是答案,這是錯(cuò)誤的,因?yàn)橄旅孢€有語(yǔ)句,要繼續(xù)執(zhí)行,得到x的值是4,變量的值“以新沖舊”。例8.下面的程序片段所表示的數(shù)學(xué)函數(shù)關(guān)系是。y=-1;if(x!=0)if(x>0)y=1;elsey=0;A.B. C. D.答案:C分析:有的學(xué)生想當(dāng)然的就認(rèn)為答案是A,這是錯(cuò)誤的。本題先將y賦為-1,執(zhí)行if(x!=0)if(x>0)y=1;elsey=0;,將x!=0的情況分為大于0和小于0兩種情況,當(dāng)x大于0時(shí),y=1,x小于0時(shí),y=0,所以本題的答案是C。例9:下列各語(yǔ)句中,能夠輸出整型變量a、b中最大值的是。A、printf(”%d\n”,(a>b)?a,b);B、(a>b)?printf(”%d”,a):printf(”%d”,b);C、printf(”%d”,if(a>b)aelseb);D、printf(”%d\n”,(a>b)?a:b);答案:D分析:本題是條件表達(dá)式的應(yīng)用問(wèn)題,D是正確的。A的條件表達(dá)式格式錯(cuò)誤,B與C的錯(cuò)誤在于條件表達(dá)式內(nèi)部不能再套語(yǔ)句。例10:編寫程序,輸入一個(gè)小寫字母,將字母循環(huán)后移5個(gè)位置后輸出,例如’a’變成’f’,‘w’變成’b’。解:#include<stdio.h>voidmain(){charc;c=getchar();if(c<'v'&&c>='a')c=c+5;elseif(c>='v'&&c<='z') c=c-21; putchar(c);}分析:這是一個(gè)循環(huán)后移問(wèn)題。將字母a到u之間的字母后移5個(gè)位置,執(zhí)行c=c+5;,而將v到z之間的字母循環(huán)移到字母a的前面,即c=c+5-26,也就是c=c-21。例11:閱讀下列程序說(shuō)明和程序,在每小題提供的若干可選答案中挑選一個(gè)正確答案。#include<stdio.h>Voidmain(){inti,j,k;scanf("%d",&i);j=k=0;if((i/10)>0)/*第7行*/j=i;if((i!=0)&&(j!=0))k=i;elsek=-1;/*第12行*/printf("j=%d,k=%d\n",j,k);}(13)程序運(yùn)行時(shí),輸入5,輸出 (13) 。A、j=0,k=5 B、j=5,k=5C、j=0,k=-1D、j=5,k=-1(14)程序運(yùn)行時(shí),輸入99,輸出 (14) 。A、j=99,k=-1 B、j=0,k=-1C、j=0,k=99D、j=99,k=99(15)將12行改為”k=-1,j=i/10;”程序運(yùn)行時(shí),輸入99,輸出 (15) 。A、j=99,k=-1 B、j=9,k=99C、j=99,k=99D、j=9,k=-1(16)將7行改為”if((i/10)>0){”,將12行改為”k=-1;}”程序運(yùn)行時(shí),輸入5,輸出 (16) 。A、j=0,k=-1 B、j=0,k=0C、j=5,k=5D、j=5,k=-1三、循環(huán)結(jié)構(gòu)1.控制結(jié)構(gòu)(1)當(dāng)型循環(huán):while(表達(dá)式)語(yǔ)句(2)直到型循環(huán):do語(yǔ)句while(表達(dá)式);(3)步長(zhǎng)型循環(huán):for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句2.說(shuō)明:(1)第1種當(dāng)型循環(huán)當(dāng)“表達(dá)式”為非0值時(shí),執(zhí)行語(yǔ)句,“語(yǔ)句”部分就是循環(huán)體,while循環(huán)是先判斷后執(zhí)行。如果語(yǔ)句部分包含一個(gè)以上的語(yǔ)句,那么應(yīng)該用復(fù)合語(yǔ)句“{}”的形式。在循環(huán)體中應(yīng)有使循環(huán)趨于結(jié)束的語(yǔ)句。否則會(huì)造成死循環(huán)。當(dāng)表達(dá)式一開始就不成立時(shí),會(huì)造成一次也不做的循環(huán)。(2·第2種直到型循環(huán)先執(zhí)行“語(yǔ)句”,后判斷“表達(dá)式”,即至少執(zhí)行一次循環(huán)體。當(dāng)“表達(dá)式”的值為非0時(shí),返回重新執(zhí)行“語(yǔ)句”。對(duì)于同一個(gè)問(wèn)題,既可以用while語(yǔ)句,也可以用do-while語(yǔ)句處理。while語(yǔ)句可能一次也不執(zhí)行循環(huán)體,但do-while語(yǔ)句至少執(zhí)行一次循環(huán)體。特別要注意while語(yǔ)句后加分號(hào);。3.第3種步長(zhǎng)型循環(huán)是應(yīng)用最廣泛,也是最重要的一種控制格式。For語(yǔ)句的流程框圖如下:判表達(dá)式2判表達(dá)式2執(zhí)行語(yǔ)句0(非0)for執(zhí)行表達(dá)式1執(zhí)行表達(dá)式3執(zhí)行for后面的語(yǔ)句其執(zhí)行過(guò)程是:1)求解表達(dá)式1;2)求解表達(dá)式2:如果值為真(非0),則執(zhí)行“語(yǔ)句”部分;如果值為假(0),則結(jié)束循環(huán);3)當(dāng)表達(dá)式2為真時(shí),在執(zhí)行了“語(yǔ)句”部分后,求解表達(dá)式3;4)轉(zhuǎn)到第2步繼續(xù)執(zhí)行.在步長(zhǎng)型循環(huán)的一般格式中,表達(dá)式1、表達(dá)式2、表達(dá)式3可以是任意表達(dá)式,理解和在程序設(shè)計(jì)實(shí)踐中掌握f(shuō)or語(yǔ)句的格式和功能,是學(xué)習(xí)程序設(shè)計(jì)的重要一環(huán)。必須認(rèn)真掌握。for語(yǔ)句最常用的形式:for(循環(huán)變量賦初值;循環(huán)結(jié)束條件;循環(huán)變量加步長(zhǎng))語(yǔ)句所以把它稱為步長(zhǎng)型循環(huán)。4.break語(yǔ)句:break語(yǔ)句除了可以用來(lái)跳出switch結(jié)構(gòu)之外,還可以用來(lái)從循環(huán)體內(nèi)跳出循環(huán)。語(yǔ)句的一般形式:break;continue語(yǔ)句:其作用是結(jié)束本次循環(huán)。即跳過(guò)循環(huán)體中的continue后面的其它語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判斷。語(yǔ)句的一般形式:continue;break語(yǔ)句和continue語(yǔ)句的區(qū)別是:(1).break語(yǔ)句結(jié)束整個(gè)最內(nèi)層循環(huán),不再進(jìn)行條件判斷。(2)continue語(yǔ)句只結(jié)束本次循環(huán),直接進(jìn)行是否執(zhí)行下一次循環(huán)的判斷。6.循環(huán)結(jié)構(gòu)的執(zhí)行有3種情況:有限次循環(huán)、永真循環(huán)和一次也不做的循環(huán)。四、循環(huán)結(jié)構(gòu)的最基本應(yīng)用,可以實(shí)現(xiàn)程序中的計(jì)數(shù)和累加、累乘。(1)累加累乘基本知識(shí):不變式功能公式初值X=X+1計(jì)數(shù)0S=S+X累加∑0S=S*I累乘N!1S=S*X累乘Xn1實(shí)現(xiàn)上述功能的程序如下:1)求1+2+3+……+n#include<stdio.h>voidmain(){inti,,n,sum;scanf("%d",&n);sum=0;for(i=1;i<=n;i++)sum=sum+i; printf(“%d\n”,sum); }longcal(intm,intn)//計(jì)算m到n的和{ inti;longsum=0; for(i=m;i<=n;i++) sum=sum+i; returnsum;}2)求n!#include<stdio.h>voidmain(){inti,n;doublefact;printf("inputn:\n");scanf("%d",&n);fact=1; /*置階乘fact的初值為1*/for(i=1;i<=n;i++) /*循環(huán)重復(fù)n次,計(jì)算n!*/fact=fact*i;printf("fact=%.0f\n",fact);}
intfact(intn) //定義計(jì)算n!的函數(shù){ inti,f=1;
for(i=1;i<=n;i++)//循環(huán) f=f*i;//累乘returnf;//返回n!的值}3)求xn#include<stdio.h>voidmain(){inti,n;doublex,power;printf("inputx,n:\n");scanf("%lf%d",&x,&n);power=1; for(i=1;i<=n;i++)power=power*x;printf("%0.f\n",power);}doublemypow(doublex,intn){inti;doublepower=1;for(i=1;i<=n;i++)power=power*x;returnpower;}例1.輸入x、n后輸出下列算式的值。(次數(shù)控制)解1:(單循環(huán)) #include<stdio.h> voidmain() { floats,t1,t2,t3,x;inti,n; scanf("%f%d",&x,&n);s=0;t1=t2=t3=1;for(i=1;i<=n;i++){t1=t1*x;t2=t2*i;s=s+t3*t1/t2;t3=-t3;}printf("%f\n",s); }解2:(雙循環(huán)) #include<stdio.h> voidmain() { floats,t1,t2,t3,x;inti,j,k,n; scanf("%f%d",&x,&n);s=0;t3=1;for(i=1;i<=n;i++){t1=1;for(j=1;j<=n;i++)t1=t1*j;t2=1;for(k=1;k<=n;k++)t2=t2*x;s=s+t3*t1/t2;t3=-t3;}printf("%.2f\n",s); }解3(函數(shù)調(diào)用) #include<stdio.h>intfactorial(intn); doubleexpon(doublex,intn);voidmain() { floats,x;inti,n,t;scanf("%f%d",&x,&n);s=0;t=1;for(i=1;i<=n;i++){s=s+t*mypow(x,i)/fact(i);t=-t;}printf("%.2f\n"}
intfact(intn){ inti,f=1;for(i=1;i<=n;i++) f=f*i;returnfact;} doublemypow(doublex,intn){inti;doublepower=1;for(i=1;i<=n;i++)power=power*x;returnpower;}例2.求菲波那契(Fibonacci)序列:1,1,2,3,5,8,……。請(qǐng)輸出前10項(xiàng)。#include<stdio.h>void main(){inti,x1,x2,x; x1=1; /*頭兩項(xiàng)都是1*/x2=1;printf("%6d%6d",x1,x2);/*先輸出頭兩項(xiàng)*/for(i=1;i<=8;i++){/*循環(huán)輸出后8項(xiàng)*/x=x1+x2;/*計(jì)算新項(xiàng)*/printf("%6d",x);x1=x2;/*更新x1和x2*/x2=x;}}例3.求1-1/3+1/5-…的前n項(xiàng)和#include<stdio.h>voidmain(){inti,n; doubleitem,sum;printf("inputn:"); scanf("%d",&n); flag=1;t=1; sum=0;for(i=1;i<=n;i++){ item=flag*1.0/t;/*計(jì)算第i項(xiàng)的值*/ sum=sum+item;/*累加第i項(xiàng)的值*/flag=-flag;/*準(zhǔn)備下一次循環(huán)*/t=t+2; } printf("sum=%f\n",sum);}例4.下列格里高利公式求π的近似值,要求精確到最后一項(xiàng)的絕對(duì)值小于10–5。(精度控制)#include<stdio.h>#include<math.h>/*使用絕對(duì)值函數(shù)fabs*/voidmain(){intflag,t;doubleitem,pi; /*pi用于存放累加和*/flag=1;t=1; /*變量t表示第i項(xiàng)的分母*/item=1.0; /*item中存放第i項(xiàng)的值*/pi=0;while(fabs(item)>=0.00001){ item=flag*1.0/t; /*計(jì)算第i項(xiàng)的值*/pi=pi+item; /*累加第i項(xiàng)的值*/flag=-flag;/*改變符號(hào),為下一次循環(huán)做準(zhǔn)備*/t=t+2;/*分母遞增2,為下一次循環(huán)做準(zhǔn)備*/}pi=pi*4; /*循環(huán)計(jì)算結(jié)果是pi/4*/printf(“pi=%f\n”,pi);}例5:試題7(28分)編程題嵌套調(diào)用定義函數(shù)fact(n)計(jì)算n的階乘:n!=1*2*……*n,函數(shù)參數(shù)n的類型是int,函數(shù)的類型是double。//階乘定義函數(shù)cal(x,e)計(jì)算下列算式的值,直到最后的一項(xiàng)的值小于e,函數(shù)形參x的和e的類型都是double,函數(shù)的類型是double。要求調(diào)用定義函數(shù)fact(n)計(jì)算n的階乘,調(diào)用庫(kù)函數(shù)pow(x,n)計(jì)算x的n次冪。//累加累乘,精度控制定義函數(shù)main(),輸入兩個(gè)浮點(diǎn)數(shù)x和e,計(jì)算并輸出下列算式的值,直到最后一項(xiàng)的值小于精度e,要求調(diào)用定義函數(shù)cal(x,e)計(jì)算下列算式的值。嵌套調(diào)用#include<stdio.h>doublefact(intn){ doublef=1;inti; for(i=2;i<=n;i++) f=f*i; returnf;}doublecal(doublex,doublee){ doubleitem=x,s=0,p=x; inti=1; while(item>=e){ s=s+item;i++; item=pow(x,i)/fact(i); } returns;}voidmain(){ doublex,e; scanf("%lf%lf",&x,&e); printf("s=%lf\n",cal(x,e));}例6:雙重循環(huán)閱讀下列程序并回答問(wèn)題,在每小題提供的若干可選答案中,挑選一個(gè)正確答案?!境绦颉?雙重循環(huán),初值位置,for語(yǔ)句格式與功能)程序1#include<stdio.h>main(){intj,k,s1,s2;s1=s2=0;for(j=1;j<=5;j++){s1++;for(k=1;k<=j;k++)s2++;}printf("%d%d",s1,s2);}程序2#include<stdio.h>main(){intj,k,s1,s2;s1=0;for(j=1;j<=5;j++){ s1++; for(k=1,s2=0;k<=j;k++)s2++;}printf("%d%d",s1,s2);}程序3#include<stdio.h>main(){intj,k,s1,s2;s1=0;for(j=1;j<=5;j++){s1++; for(k=1;k<=j;k++,s2=0)s2++;}printf("%d%d",s1,s2);}程序4#include<stdio.h>main(){intj,k,s1,s2;s1=s2=0;for(j=1;j<=5;j++,s1=0){s1++;for(k=1;k<=j;k++) s2++;}printf("%d%d",s1,s2);}(13)程序1運(yùn)行時(shí),輸出 (13) 。A、015 B、50 C、55 D、515 (14)程序2運(yùn)行時(shí),輸出 (14) 。A、015 B、50 C、55 D、515 (15)程序3運(yùn)行時(shí),輸出 (15) 。A、015 B、50 C、55 D、515 (16)程序4運(yùn)行時(shí),輸出 (16) 。A、015 B、50 C、55 D、515 五、整除性(循環(huán)與分支的嵌套)基本知識(shí):x%y==01.簡(jiǎn)單應(yīng)用例1.從鍵盤輸入100個(gè)整數(shù),求其中正數(shù)的平均數(shù)。main(){inti,count=0,x;floatsum=0;for(i=0;i<100;i++){scanf(“%d”,&x);if(x>0){sum=sum+x;count++;}}sum=1.0*sum/count;printf("%f",sum);}例2.輸入一行字符,統(tǒng)計(jì)其中英文字母、空格或回車、數(shù)字和其他字符的個(gè)數(shù)。#include<stdio.h>voidmain(){intblank,digit,i,letter,other;charch;blank=digit=letter=other=0; while((c=getchar())!='\n'){if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))letter++;elseif(ch>='0'&&ch<='9')/*如果ch是數(shù)字字符*/digit++;elseif(ch==''||ch=='\n')blank++;elseother++;}printf("letter=%d,blank=%d,digit=%d,other=%d\n",letter,blank,digit,other);}2.素?cái)?shù)輸入一個(gè)正整數(shù)m,判斷它是否為素?cái)?shù)。#include<stdio.h>voidmain(){ inti,m; printf("Inputanumber:"); /*輸入提示*/ scanf("%d",&m); for(i=2;i<m/2;i++) if(m%i==0)break; if(i>=m/2)printf("%disaprimenumber!\n",m); elseprintf("No!\n"); }求500以內(nèi)的全部素?cái)?shù),每行輸出10個(gè)。解1#include<stdio.h>#include<math.h>/*使用求平方根函數(shù),需要包含數(shù)學(xué)庫(kù)*/voidmain(){intcount,i,m,n;count=0;*count用于控制輸出格式,每行輸出10個(gè)數(shù)*/for(m=2;m<=500;m++){n=sqrt(m);for(i=2;i<n;i++)/*判斷m是否為素?cái)?shù)*/if(m%i==0)break;if(i>=n){ /*如果m是素?cái)?shù)*/printf("%6d",m);/*輸出m*/count++;/*累加已經(jīng)輸出的素?cái)?shù)個(gè)數(shù)*/if(count%10==0)printf(“\n”);/*輸出數(shù)10的倍數(shù),換行*/}}printf("\n");}解2/*使用函數(shù)求500以內(nèi)的全部素?cái)?shù)*/#include<stdio.h>#include<math.h>intprime(intx);/*函數(shù)聲明*/voidmain(){intcount,m;count=0;/*count用于控制輸出格式,每行輸出10個(gè)數(shù)*/for(m=2;m<=500;m++){if(prime(m)){/*調(diào)用prime(m)判斷m是否為素?cái)?shù)*/printf("%6d",m);/*輸出m*/count++;/*累加已經(jīng)輸出的素?cái)?shù)個(gè)數(shù)*/if(count%10==0)printf(“\n”);/*輸出換行*/}}printf("\n");}/*定義判斷素?cái)?shù)的函數(shù),如果x是素?cái)?shù)則返回1(“真”);否則返回0(“假”)*/intprime(intx){inti,n,res; /*變量res作為判斷結(jié)果*/res=1;/*設(shè)res的初值為1*/n=sqrt(x);for(i=2;i<n;i++)if(x%i==0){ /*如果x不是素?cái)?shù)*/res=0; /*判斷結(jié)果為0*/break; /*中止循環(huán)*/}returnres;/*把判斷結(jié)果回送主函數(shù)*/}(3)閱讀下列程序說(shuō)明和程序,在每小題提供的若干可選答案中挑選一個(gè)正確答案?!境绦蛘f(shuō)明】驗(yàn)證哥德巴赫猜想:任何一個(gè)大于6的偶數(shù)均可表示為兩個(gè)素?cái)?shù)之和。例如6=3+3,8=3+5,…,18=7+11。將6~100之間的每個(gè)偶數(shù)都表示成兩個(gè)素?cái)?shù)之和,打印時(shí)一行打印5組。要求定義和調(diào)用函數(shù)prime(m)判斷m是否為素?cái)?shù)。當(dāng)m為素?cái)?shù)時(shí)返回1,否則返回0,素?cái)?shù)就是只能被1和自身整除的正整數(shù),1不是素?cái)?shù),2是素?cái)?shù)。(整除性,函數(shù)調(diào)用)運(yùn)行示例:6=3+3 8=3+5 10=3+7 12=5+7 14=3+1116=3+13 18=5+13 20=3+17【程序】#include<stdio.h>#include<math.h>intprime(intm){inti,n;if(m==1)return0;n=sqrt(m);for(i=2;i<=n;i++)if(m%i==0)return0;(5);}main(){intcount,i,number;count=0;for(number=6;number<=20;number=number+2){for(i=3;i<=number/2;i=i+2) if((6)){printf("%d=%d+%d",number,i,number-i);count++; if((7))printf(“\n”); (8);}}}(5)A、; B、return1;C、return0; D、elsereturn1;(6)A、prime(i)!=0||prime(number-i!=0) B、prime(i)!=0&&prime(number-i!=0)C、prime(i)==0||prime(number-i==0) D、prime(i)==0&&prime(number-i==0)(7)A、count%5==0 B、count%5!=0 C、(count+1)%5==0 D、(count+1)%5!=0(8)A、break; B、elsebreak;C、continue; D、;3.數(shù)位截取基本知識(shí):while(x){d=x%10;處理x=x/10;}(1)輸入一個(gè)正整數(shù),將其逆序輸出。例如,輸入12345,輸出54321scanf(“%d”,&x);while(x>0){printf(“%d”,x%10);x=x/10;}(2)從鍵盤讀入一個(gè)整數(shù),統(tǒng)計(jì)該數(shù)的位數(shù)。例如,輸入1234,輸出4;輸入0,輸出1。#include<stdio.h>voidmain(){intcount,number;/*count記錄number的位數(shù)*/count=0;printf("Inputanumber:"); /*輸入提示*/scanf("%d",&number);if(number<0)number=-number;do{ /*判斷循環(huán)條件*/number=number/10; /*整除后減少一位個(gè)位數(shù),組成一個(gè)新數(shù)*/ count++; /*位數(shù)加1*/}while(number!=0); /*判斷循環(huán)條件*/printf("Itcontains%ddigits.\n",count);}(3)輸入一個(gè)長(zhǎng)整型數(shù),求各位數(shù)字的平方和#include<stdio.h>voidmain(){intdigit;longin,s;scanf(“%ld”,in);_________________&&if(in<0)in=-in;__________________&&s=0;while(in>0){___________&&digit=in%10;s=s+digit*digit;_____________&&in=in/10;}printf(“sum=%ld\n”,s);}(4)若一個(gè)3位整數(shù)的各位數(shù)字的立方之和等于這個(gè)整數(shù),稱之為“水仙花數(shù)”。例如:153是水仙花數(shù),因?yàn)?53=13+53+33求所有的水仙花數(shù)。解1:#include<stdio.h>voidmain(){intdigit,x,s;printf(″水仙花數(shù)是:\n″);for(i=100;i<=999;i++){x=i;s=0;while(x){digit=x%10;s+=digit*digit*digit;x=x/10;}if(s==i)printf(“%d\n”,i);}}解2:#include<stdio.h>voidmain(){inti,j,k;printf(″水仙花數(shù)是:\n″);for(i=1;i<=9;i++) /*百位數(shù)*/for(j=0;j<=9;j++) /*十位數(shù)*/ for(k=0;k<=9;k++) /*個(gè)位數(shù)*/if(i*i*i+j*j*j+k*k*k==100*i+10*j+k)printf(“%d\n”,i*100+j*10+k);}解3:#include<stdio.h>voidmain(){inta,b,c,i;printf(″水仙花數(shù)是:\n″);for(i=100;i<=999;i++){a=i%10;b=i/10%10;c=i/100;if(i==a*a*a+b*b*b+c*c*c)printf(“%d\n”,i);}}4.分解因子(1)(完數(shù))程序設(shè)計(jì)題:考生目錄下有Design.c程序,請(qǐng)完成以下功能:在6至1000內(nèi)找出所有的“完數(shù)”,說(shuō)明:某數(shù)等于其諸因子之和則該數(shù)為完數(shù),如6=1+2+3,28=1+2+4+7+14則6、28就是完數(shù)。#include<stdio.h>#include<stdlib.h>voidmain(){ intn,i,s;for(n=6;n<=1000;n++) {s=0; for(i=1;i<n;i++) if(n%i==0)s+=i; if(n==s)printf("%6d",n);}}(3)輸入一個(gè)正整數(shù),輸出它的所有質(zhì)數(shù)因子。例如:n=13860,則輸出2、2、3、3、5、7、11解:#include"stdio.h"voidmain(){intm,i=2;printf("請(qǐng)輸入一個(gè)整數(shù):");scanf("%d",&m);while(m!=1)if(m%i==0){printf("%d",i);m/=i;}elsei++;printf("\n");}分析:利用整除性分解質(zhì)數(shù)因子時(shí),允許有相同的因子,例如:8=2*2*2,因此在while(m!=1)循環(huán)體內(nèi),找到因子,并用m/=i;除掉因子后,i并不加1,允許重負(fù)判斷,只有不是因子時(shí),才i++。5.最大公約數(shù),最小公倍數(shù)該程序功能:輸入m、n(要求輸入數(shù)均大于0),輸出它們的最小公倍數(shù)
#include<stdio.h>
voidmain()
{intm,n,k;while(scanf("%d%d",&m,&n),m<0||n<0);for(k=m;k%n!=0;)k=k+m;printf("%d\n",k);}最大最小(循環(huán)與分支的嵌套)(1)簡(jiǎn)單變量#include<stdio.h>voidmain(){ inti,n;floatmax,min,x;scanf(“%d”,&n);scanf(“%f”,&x); max=min=x; for(i=1;i<n;i++){scanf(“%f”,&x);if(max<x)max=x; if(x<min)min=x; }printf("%f%f",max,min);}(2)一維數(shù)組#include<stdio.h>voidmain(){ inti;floatmax,min,a[10];for(i=0;i<10;i++)scanf(“%f”,&a[i]); max=min=0; for(i=1;i<10;i++){if(a[i]>a[max])max=i; if(a[i]<a[min])min=i; }printf("%f%f",a[max],a[min]);}二維數(shù)組單元法#include<stdio.h>voidmain(){ inti,j;floatmax,min,a[3][4];for(i=0;i<3;i++)for(j=0;j<4;j++)scanf(“%f”,&a[i][j]); max=min=a[0][0];for(i=0;i<3;i++)for(j=0;j<4;j++){if(a[i][j]>max)max=a[i][j]; if(a[i][j]<min)min=a[i][j]; }printf("%f%f",max,min);}下標(biāo)法輸入一個(gè)2*3的二維數(shù)組,找出最大值以及它的行下標(biāo)和列下標(biāo),并輸出該矩陣。#include<stdio.h>main(){intcol,i,j,row;inta[2][3];printf("Enterarray(2*3):");for(i=0;i<2;i++)for(j=0;j<3;j++)scanf("%d",(9));(10)for(i=0;i<2;i++)for(j=0;j<3;j++)if(a[i][j]>a[row][col]){(11)}printf("max=a[%d][%d]=%d\n",row,col,a[row][col]);for(i=0;i<2;i++){for(j=0;j<3;j++)printf("%4d",a[i][j]);(12)}【供選擇的答案】(9) A、&a[i][j] B、&a[j][i]C、a[i][j] D、a[j][i](10) A、row=col=2; B、row=col=0; C、a[row][col]=0; D、a[row][col]=-1;(11)A、row=j;col=i; B、a[row][col]=a[i][j]; C、row=i;col=j; D、a[row][col]=a[j][i];(12)A、printf("\n")}; B、}printf("\n"); C、; D、printf("\n");}要求掌握下列算法:累加累乘,級(jí)數(shù)求和,字符統(tǒng)計(jì),素?cái)?shù),數(shù)位截取,完數(shù),分解質(zhì)數(shù)因子,最大公約數(shù),最大最小。四、數(shù)組是同一種數(shù)據(jù)類型元素的有序集合。引入數(shù)組的目的可以擴(kuò)充數(shù)據(jù)的表示范圍,便于程序的操作。其主要知識(shí)點(diǎn)包括:(一)數(shù)組的定義和初始化089一、7;078一、7;078三、8;067三、9;09一、4數(shù)組必須先定義后使用。1.一維數(shù)組的定義格式:類型說(shuō)明符數(shù)組名[常量表達(dá)式];例如:inta[10];該定義有4層含義:1)定義a數(shù)組有10個(gè)元素,即a[0]、a[1]、a[2]、a[3]、a[4]、…、a[9];2)下標(biāo)從0開始,到9為止,不包括10,否則下標(biāo)超界;數(shù)組在下標(biāo)超界時(shí),C語(yǔ)言不檢查,但超過(guò)下標(biāo)的數(shù)組元素的值是隨機(jī)的。3)數(shù)組的10個(gè)元素在內(nèi)存中連續(xù)存放,數(shù)組名a是數(shù)組的首地址。4)數(shù)組定義的范圍必須是常量表達(dá)式,不能是變量。2.下標(biāo)變量:一維數(shù)組的元素由單下標(biāo)變量組成,其下標(biāo)可以是:常數(shù);a[3];a[i];表達(dá)式:a[2*i-1];下標(biāo)變量:a[b[7]];3.二維數(shù)組的定義格式:類型說(shuō)明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];例如:inta[3][4];定義a為3行4列的數(shù)組二維數(shù)組可以看作一種特殊的一維數(shù)組,它的元素又是一個(gè)一維數(shù)組。二維數(shù)組a[3][4]可以看作一維數(shù)組a[3],它由3個(gè)元素a[0]、a[1]、a[2]組成,以a[0]、a[1]、a[2]為數(shù)組名,又可以組成3個(gè)一維數(shù)組:其中:a[0]-->a[0][0],a[0][1],a[0][2],a[0][3]a[1]-->a[1][0],a[1][1],a[1][2],a[1][3]a[2]-->a[2][0],a[2][1],a[2][2],a[2][3]即:a[0]是第一行的首地址,以a[0]為數(shù)組名,構(gòu)成第1行的一維數(shù)組。a[1]是第二行的首地址,以a[1]為數(shù)組名,構(gòu)成第2行的一維數(shù)組。a[2]是第三行的首地址;以a[2]為數(shù)組名,構(gòu)成第3行的一維數(shù)組。4.一維數(shù)組的初始化有下列方法:在定義數(shù)組的同時(shí)可以對(duì)數(shù)組元素賦初值,例如:inta[10]={0,1,2,3,4,5,6,7,8,9};相當(dāng)于:a[0]=0,a[1]=1,…,a[9]=92)可以只給一部分元素賦值,例如:inta[10]={0,1,2,3,4};表示只對(duì)前面5個(gè)元素賦初值,后5個(gè)元素初值為0。如果一個(gè)數(shù)組中全部元素賦同一個(gè)初值,也必須逐個(gè)寫出,例如:inta[10]={0,0,0,0,0,0,0,0,0,0};4)對(duì)全部數(shù)組元素賦初值時(shí)可以不指定數(shù)組長(zhǎng)度。例如:inta[]={1,2,3,4,5};系統(tǒng)自動(dòng)將a的長(zhǎng)度定義為5。但是,當(dāng)數(shù)組長(zhǎng)度與初值個(gè)數(shù)不相同時(shí),必須寫出數(shù)組長(zhǎng)度。二維數(shù)組的初始化有下列方法:分行給二維數(shù)組賦初值(即按行賦初值)。例如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};2)可以將所有數(shù)據(jù)寫在一個(gè)“{}”內(nèi),系統(tǒng)自動(dòng)按數(shù)組元素的排列順序賦初值。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};3)可以對(duì)部分元素賦初值,其余元素值自動(dòng)為0。例如:inta[3][4]={{1},{5},{9}};即:1000500090004)如果對(duì)全部元素賦值,則定義數(shù)組時(shí)對(duì)第一維的長(zhǎng)度可以不指定,但第二維的長(zhǎng)度不能省略,系統(tǒng)按數(shù)據(jù)總個(gè)數(shù)和每行的列數(shù)確定出行數(shù)。例如:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};數(shù)組元素的處理(二)數(shù)組的遍歷C語(yǔ)言中規(guī)定只能逐個(gè)引用數(shù)組元素而不能一次引用整個(gè)數(shù)組。數(shù)組的遍歷遍歷:下標(biāo)i++指針p++結(jié)束條件:i<=n字符串a(chǎn)[i]!=’\0’或i<strlen(a)1.?dāng)?shù)組元素的輸入和輸出除了初始化以外,數(shù)組一般不允許整體賦值,數(shù)組的輸入和輸出一般通過(guò)循環(huán)來(lái)實(shí)現(xiàn)。例如:對(duì)一維數(shù)組有inta[10];定義后,輸入格式為:for(i=0;i<10;i++)scanf("%d",&a[i]);輸出格式為:for(i=0;i<10;i++)printf("%d",a[i]);對(duì)二維數(shù)組有inta[3][2];定義后,輸入格式為:for(i=0;i<3;i++)for(j=0;j<2;j++) scanf(“%d”,&a[i][j]);輸出格式為:for(i=0;i<3;i++){//矩陣形式輸出for(j=0;j<2;j++)printf("%d",a[i][j]);printf("\n");}2.?dāng)?shù)組元素的累加;一維數(shù)組:for(i=0;i<10;i++)s=s+a[i];二維數(shù)組:for(i=0;i<3;i++)for(j=0;j<2;j++)s=s+a[i][j];閱讀下列程序說(shuō)明和程序,在每小題提供的若干可選答案中挑選一個(gè)正確答案?!境绦颉?循環(huán)控制,break,continue,輸出語(yǔ)句的位置,一維數(shù)組)程序1#include<stdio.h>Voidmain(){ intflag=0,i; inta[7]={8,9,7,9,8,9,7}; for(i=0;i<7;i++) if(a[i]==7){ flag=i; break; } printf("%d\n",flag); flag=-1; for(i=6;i>=0;i--) if(a[i]==8){ break; flag=i; } printf("%d\n",flag); flag=0; for(i=0;i<7;i++) if(a[i]==9){ printf("%d",i); } printf("\n"); flag=0; for(i=0;i<7;i++) if(a[i]==7)flag=i; printf("%d\n",flag);}(13)程序運(yùn)行時(shí),第一行輸出(13)。A、2 B、0 C、3 D、6(14)程序運(yùn)行時(shí),第二行輸出(14)。A、4 B、-1 C、0 D、(15)程序運(yùn)行時(shí),第三行輸出(15)。A、246 B、4 C、135 D、6(16)程序運(yùn)行時(shí),第四行輸出(16)。A、246 B、2 C、135 D、6(三)常用算法1、最大最小:078二、31、逆置:089二、5;078四、2(1)for(i=0;i<=n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}(2)for(i=0,j=n-1;i<j;i++,j--){t=a[i];a[i]=a[j];a[j]=t;}下面程序的功能是將一個(gè)字符串str的內(nèi)容顛倒過(guò)來(lái)。解1:#include<string.h>#include<stdio.h>voidmain(){inti,j,k;/*int型k可當(dāng)char型用*/charstr[]=“1234567”;for(i=0,j=strlen(str)-1;i<j;i++,j--)/*頭尾交換,直到中間。*/{k=str[i];str[i]=str[j];str[j]=k;}for(i=0;i<strlen(str);i++)printf(“%c”,str[i]);}解2:#include<string.h>“#include<stdio.h>voidmain(){inti,n;charstr[]=“1234567”;n=strlen(str);for(i=0;i<n/2;i++)/*頭尾交換,直到中間。*/{k=str[i];str[i]=str[n-1-i];str[n-1-i]=k;}for(i=0;i<n;i++)printf(“%c”,str[i]);}2、順序查找:089四、2;067二、470017程序填空,不要改變與輸入輸出有關(guān)的語(yǔ)句。輸入一個(gè)正整數(shù)repeat(0<repeat<10),做repeat次下列運(yùn)算:輸入一個(gè)正整數(shù)n(1<n<=10),再輸入n個(gè)整數(shù),將它們存入數(shù)組a中,再輸入一個(gè)整數(shù)x,然后在數(shù)組a中查找與x相同的元素,如果找到,輸出x在數(shù)組a中對(duì)應(yīng)元素的最小下標(biāo),如果沒(méi)有找到,輸出相應(yīng)信息。輸入輸出示例:括號(hào)內(nèi)為說(shuō)明#include<stdio.h>intmain(void){intflag,index,i,n,x;intrepeat,ri;inta[10];scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){ scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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è)學(xué)院《組織行為學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 昆明藝術(shù)職業(yè)學(xué)院《中外美術(shù)史》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川文化藝術(shù)學(xué)院《軌道交通自動(dòng)化專題》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025屆湖南省高考?xì)v史仿真模擬試卷02
- 2025年上海市安全員《C證》考試題庫(kù)
- 晉中學(xué)院《特種鑄造》2023-2024學(xué)年第二學(xué)期期末試卷
- 林州建筑職業(yè)技術(shù)學(xué)院《商業(yè)插圖》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑龍江中醫(yī)藥大學(xué)《商務(wù)溝通與談判》2023-2024學(xué)年第二學(xué)期期末試卷
- 拉薩師范高等??茖W(xué)?!洞髷?shù)據(jù)安全技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 長(zhǎng)沙學(xué)院《生物藥物檢測(cè)技術(shù)與設(shè)備》2023-2024學(xué)年第二學(xué)期期末試卷
- 地理-浙江省強(qiáng)基聯(lián)盟2025年2月高三年級(jí)聯(lián)考試題和答案
- 濟(jì)南2024年山東濟(jì)南廣播電視臺(tái)招聘14人筆試歷年參考題庫(kù)附帶答案詳解
- 海洋氣候預(yù)測(cè)模型創(chuàng)新研究-深度研究
- 《客戶服務(wù)基礎(chǔ)》教案及課件項(xiàng)
- 2025《醫(yī)藥企業(yè)防范商業(yè)賄賂風(fēng)險(xiǎn)合規(guī)指引》解讀課件
- 2025年湖南工業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年丹參原藥材項(xiàng)目可行性研究報(bào)告
- 物理(A版)-安徽省合肥一中(省十聯(lián)考)2024-2025學(xué)年度高二年級(jí)上學(xué)期期末測(cè)試試題和答案
- 人教版初中歷史與社會(huì)七年級(jí)下冊(cè) 6.3.3向西開放的重要門戶-烏魯木齊 說(shuō)課稿
- 綜合材料繪畫課程設(shè)計(jì)
- 數(shù)學(xué)史簡(jiǎn)介課件
評(píng)論
0/150
提交評(píng)論