C++語(yǔ)言程序設(shè)計(jì)電子教案6_第1頁(yè)
C++語(yǔ)言程序設(shè)計(jì)電子教案6_第2頁(yè)
C++語(yǔ)言程序設(shè)計(jì)電子教案6_第3頁(yè)
C++語(yǔ)言程序設(shè)計(jì)電子教案6_第4頁(yè)
C++語(yǔ)言程序設(shè)計(jì)電子教案6_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

6.1一維數(shù)組

6.2二維數(shù)組

6.3字符數(shù)組

6.4程序舉例

許多同類(lèi)數(shù)據(jù)的集合稱(chēng)為數(shù)組

第6章數(shù)組教材上的第二章2.6

6.1一維數(shù)組

6.1.1一維數(shù)組的定義和引用

引例6.1輸入5個(gè)學(xué)生某門(mén)課的成績(jī),要求按與輸入次序相反的順序輸出。#include<stdio.h>voidmain(){floats1,s2,s3,s4,s5;printf("Enterfivescores:");scanf("%f,%f,%f,%f,%f",&s1,&s2,&s3,&s4,&s5);printf("\nThescoreinreverseorderare:");printf("%f\n",s5);printf("%f\n",s4);printf("%f\n",s3);printf("%f\n",s2);printf("%f\n",s1);}顯然,當(dāng)學(xué)生人數(shù)很多時(shí),程序質(zhì)量就很差,用數(shù)組的方法質(zhì)量就很好(見(jiàn)例6.2)。6.1.2數(shù)組的通用定義:說(shuō)明(1)常量i的個(gè)數(shù)([]的配對(duì)數(shù))定義了維數(shù);(2)常量i的值定義了該維數(shù)的元素個(gè)數(shù),表示數(shù)組長(zhǎng)度i不能是變量也不能是包含變量的表達(dá)式(即不允許定義動(dòng)態(tài)數(shù)組),可以是常量或常量表達(dá)式。常量表達(dá)式應(yīng)是整型數(shù),不能是小數(shù)。其上界為其值減1,下界均為0;(3)此語(yǔ)句在內(nèi)存中為指定的數(shù)組(按先行后列)分配內(nèi)存空間;(4)數(shù)組的引用遵循“先定義,后使用”的原那么;(5)數(shù)組定義處代表數(shù)組整體,而使用處只能用數(shù)組元素/數(shù)組的下標(biāo)變量。類(lèi)型數(shù)組名[常量1][常量2],…;(6)使用的下標(biāo)不能大于[數(shù)組長(zhǎng)度-1],即不能越界。例如:inta[4],x[3][4]定義了兩個(gè)數(shù)組:有a[0]至a[3](下標(biāo)變量或數(shù)組元素)4個(gè)元素的一維整型數(shù)組a[4];有x[0][0]、x[0][1]、…x[2][3]共計(jì)3*4=12個(gè)元素的二維整型數(shù)組x[3][4];又如定義處inta[20]代表數(shù)組整體,使用處a[19]代表數(shù)組個(gè)體即第20個(gè)元素,但無(wú)元素a[20]且超界。

例如:data[4]、data[i+j]、data[i++]都是合法的引用方式。

intn=10;inta[n];

是錯(cuò)誤的。但#defineN10或constintN=10;inta[N],n[n+10];是正確的。例6.2用數(shù)組實(shí)現(xiàn)例6.1。#include<stdio.h>voidmain(){inti;floatscore[5];printf("Enterfivescores:");for(i=0;i<5;i++)//循環(huán)輸入5個(gè)成績(jī)scanf(“%f”,&score[i]);//使用處

printf("\nThescoresinreverseorderare:");for(i=4;i>=0;i--)//循環(huán)反序輸出5個(gè)成績(jī)

printf(“%4.2f”,score[i]);//使用處}定義單精度數(shù)組(有score[0]至score[4]5個(gè)元素)注意(1)定義處score[5](代表數(shù)組整體)和使用處的score[i](代表數(shù)組個(gè)體)是有別的;(2)假設(shè)將數(shù)組的內(nèi)容逆置重放見(jiàn)后例6.8;(3)逆序輸出方二:for(i=0;i<5;i++)printf("%4.2f",score[4-i]);不管學(xué)生人數(shù)有多少,程序結(jié)構(gòu)均一樣。當(dāng)i=5時(shí)超界比較

6.1.3一維數(shù)組的初始化循環(huán)輸入:數(shù)組在定義后,應(yīng)先賦值(初始化)才可使用/處理。一般用單重循環(huán)和賦值語(yǔ)句或輸入語(yǔ)句使數(shù)組中的元素得到值,稱(chēng)為對(duì)數(shù)組的初始化。可直接初始化:在定義數(shù)組時(shí)同時(shí)對(duì)數(shù)組元素賦以初值。如:ints[5]={78,87,77,91,60};[結(jié)果是]s[0]=78,s[1]=87,s[2]=77,s[3]=91,s[4]=60。也可只給一局部元素賦值。例如:ints[5]={78,87,77};[結(jié)果是]s[0]=78,s[1]=87,s[2]=77,其余元素的值為0。假設(shè)對(duì)全部數(shù)組元素賦初值時(shí),可以不指定數(shù)組長(zhǎng)度,但不可省方括號(hào)。例如:ints[5]={1,2,3,4,5};可以寫(xiě)成ints[]={1,2,3,4,5};一維數(shù)組元素是按下標(biāo)遞增的順序連續(xù)存放在連續(xù)的存貯空間中。如s數(shù)組在內(nèi)存中的存貯示意圖如下所示。S[0]S[1]S[2]S[3]S[4]例6.3從鍵盤(pán)輸入15個(gè)整數(shù),并檢查整數(shù)10是否包含在這些數(shù)據(jù)中,假設(shè)是的話(huà),它是第幾個(gè)被輸入的。

#include<stdio.h>voidmain(){inti,flag,data[15];flag=0;//定義判斷15個(gè)數(shù)據(jù)中有否10的標(biāo)志

printf("Inputnumbers:\n");for(i=0;i<15;i++)//循環(huán)輸入15個(gè)數(shù)據(jù)scanf("%d",&data[i]);for(i=0;i<15;i++)//循環(huán)判斷15個(gè)數(shù)據(jù)有否10if(data[i]==10){printf("10isinputedintheposition%d.\n",i+1);flag=1;/*標(biāo)記10在輸入數(shù)據(jù)中*/break;}if(flag==0)printf("10isnotinnumbers");}因i是從0算起的,故10的順序位置應(yīng)是找到的i再加1。提問(wèn):去掉“flag=1;”后對(duì)嗎?問(wèn):可否置入此處,但要加記位器。6.2二維數(shù)組6.2.1二維數(shù)組的定義和引用

二維數(shù)組的定義形式為

類(lèi)型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式][常量表達(dá)式];類(lèi)同一維數(shù)組。例如,inta[3][2];表示數(shù)組a是一個(gè)3×2(3行2列)的數(shù)組,共有3×2=6個(gè)元素(a[0][0]、a[0][1]、a[1][0]、…、a[2][1]),每個(gè)元素都是int型。

運(yùn)行結(jié)果:

Inputnumbers:1213238977905616115910176510isinputedintheposition13.對(duì)此類(lèi)題,假設(shè)求第一個(gè)10位置和10的個(gè)數(shù)、求奇偶數(shù)的和等均是對(duì)批量數(shù)據(jù)求某些特征問(wèn)題的求解。

二維數(shù)組的應(yīng)用之一是矩陣和行列式。其中,左起第一個(gè)下標(biāo)表示行數(shù),第二個(gè)下標(biāo)表示列數(shù)。圖6.2二維數(shù)組a[3][2](先行后列)內(nèi)存圖a[0][0]a[0][1]a[1][0]a[1][1]a[2][1]……圖6.3三例數(shù)組元素的排列方式

6.2.2二維數(shù)組的初始化

對(duì)二維數(shù)組初始化時(shí),同樣可在定義時(shí)一并初始化,可不分行/組或分行/組賦值,例如:

inta[3][2]={{1,2},{3,4},{5,6}};//按行分段

inta[3][2]={1,2,3,4,5,6};//按行連續(xù)

inta[][]={{1,2},{3,4},{5,6}};

inta[][]={1,2,3,4,5,6};

//C不用而C++少用(不明確)

其中內(nèi){}代表一行賦值的元素初值:

a[0][0]=1,a[0][1]=2,a[1][0]=3,a[1][1]=4,a[2][0]=5,a[2][1]=6

對(duì)應(yīng)行列式:對(duì)二維數(shù)組初始化,一般用雙重循環(huán)和賦值語(yǔ)句或輸入語(yǔ)句使數(shù)組中的元素得到值。23456等價(jià)也可只為局部元素賦值,例如:inta[3][2]={{1},{2,3},{4}};那么:a[0][0]=1,a[1][0]=2,a[1][1]=3,a[2][0]=4而其余元素的初值將自動(dòng)設(shè)為0??蓪⑺袛?shù)據(jù)寫(xiě)在一個(gè)花括號(hào)內(nèi),按數(shù)組的排列順序?qū)Ω髟匕葱蛸x初值。如:inta[3][2]={1,2,3,4};結(jié)果為:a[0][0]=1,a[0][1]=2,a[1][0]=3,a[1][1]=4,其余元素的值自動(dòng)設(shè)為0。假設(shè)對(duì)數(shù)組全部元素都賦初值,定義數(shù)組第一維的長(zhǎng)度可不指定,但對(duì)第二維長(zhǎng)度不能省;如:inta[][2]={1,2,3,4,5,6};此時(shí)第一維的長(zhǎng)度由實(shí)際數(shù)據(jù)確定:應(yīng)是3。如:inta[3][2]={4,5,6,7,8,9};inta[][2]={4,5,6,7,8,9};但是不能寫(xiě)為:inta[3][]={4,5,6,7,8,9};例6.4

從鍵盤(pán)為一個(gè)N×N的整型數(shù)組輸入數(shù)據(jù),并將每一行的最小值顯示出來(lái)(如每行為城市中的一條運(yùn)輸費(fèi)路經(jīng))。解:設(shè)N=6,先建立矩陣a[N][N](即輸入36個(gè)數(shù)據(jù)),再定義一個(gè)一維數(shù)組m[N],用來(lái)保存矩陣中每行的最小值,初值為每行的第一個(gè)元素;用雙重循環(huán)處理:示意圖如下(設(shè)定36個(gè)數(shù))

233512891289213135628191899325321982181973651128028109123135112189118219223325102819108119m[N]的m[i]初值為a[i][0]a[N][N]

比較數(shù):外循環(huán)i=0至N-1被較數(shù):內(nèi)循環(huán)j=1至N-19181928112102雙重循環(huán)處理:用外循環(huán)i控制比較數(shù)m[i]=a[i][0]與內(nèi)循環(huán)j的被比較數(shù)a[i][j]比較大小,將小的放入m[i],直至內(nèi)循環(huán)完,該行的最小值即已放如m[i],外循環(huán)再循環(huán)下一輪。#defineN6//宏定義,使N被置換為6#include<stdio.h>voidmain(){inta[N][N],m[N],i,j;printf("Inputnumbers:\n");for(i=0;i<N;i++)//雙重循環(huán)輸for(j=0;j<N;j++)//入矩陣36個(gè)scanf("%d",&a[i][j]);//數(shù)據(jù)for(i=0;i<N;i++)//雙重循環(huán)求{m[i]=a[i][0];//每行最小值for(j=1;j<N;j++)if(m[i]>a[i][j])m[i]=a[i][j];}printf("Minis:");for(i=0;i<N;i++)printf("%d",m[i]);}運(yùn)行結(jié)果:Inputnumbers:123467229823611920837857121519891682112281362453321719115Minis:383125

程序如下:提問(wèn):1、假設(shè)置每行最小值”m[i]=a[i][0];”語(yǔ)句在別的地方如循環(huán)之外/前,如何?2、內(nèi)外循環(huán)的循環(huán)變量的初值(如改j=1為j=0)和終值可改變嗎?3、假設(shè)求某行最小某列最大值(馬鞍點(diǎn))如何?后講。4、假設(shè)求每行的升序或降序(排序)如何?后講。5、實(shí)例見(jiàn)“VC++實(shí)例/一般程序/數(shù)組(C和C++及應(yīng)用)\求二維數(shù)組各行最小數(shù)組(C++程序)和“\求二維數(shù)組各行最小數(shù)組(C程序)”及“\數(shù)組應(yīng)用”。6.3字符數(shù)組6.3.1字符數(shù)組的定義和初始化定義類(lèi)似前面介紹,格式:char數(shù)組名[常量表達(dá)式];如:charc[6];那么定義c為字符數(shù)組,包含6個(gè)元素,每個(gè)元素為一個(gè)字符(實(shí)際上是其對(duì)應(yīng)的ASCII碼)。賦值方法與一般的一維數(shù)組是一樣的,例如:c[0]=‘s’;c[1]=‘t’;c[2]=‘r’;c[3]=‘i’;c[4]=‘n’;c[5]=‘g’;6.3.2用字符數(shù)組表示字符串字符串常量是用雙引號(hào)括起來(lái)的字符序列。在C語(yǔ)言中,字符串是用一維字符數(shù)組來(lái)表示的(但在C++語(yǔ)言中,是用數(shù)據(jù)類(lèi)型CString來(lái)定義字符串變量的)。在表示一維字符數(shù)組時(shí),是以一個(gè)字符串結(jié)束標(biāo)志‘\0’標(biāo)識(shí)的自動(dòng)加上的。故一維字符數(shù)組長(zhǎng)度共計(jì)有效字符個(gè)數(shù)+1個(gè)字符。例“string”共有6個(gè)字符,但在內(nèi)存中占7個(gè)字節(jié),最后一個(gè)字節(jié)存放‘\0’。習(xí)慣上常如下表示:charc[]=“string″;或charc[]={“string”};charc[]={‘s’,’t’,’r’,’i’,’n’,’g’,’\0’};初始化后,c數(shù)組中每個(gè)元素的初值如下:c[0]=′s′,c[1]=′t′,c[2]=′r′,c[3]=′i′,c[4]=′n′,c[5]=′g′,c[6]=′\0′等價(jià)(三種方式)

例6.5檢測(cè)某一給定字符串中的字符數(shù),不包括結(jié)束符‘\0’。

#include“stdio.h”voidmain(){staticcharstr[]={"string"};inti=0;while(str[i]!=′\0′)i++;printf("Thelengthofstringis:%d\n",i);}運(yùn)行結(jié)果:Thelengthofstringis:6循環(huán)體6.3.3字符數(shù)組的輸入和輸出(1)采用“%c”格式符逐個(gè)輸出。例6.5中的str[]數(shù)組,假設(shè)執(zhí)行:str[]=“string”;printf("%c",str[5]);(2)采用“%s”格式符,可用字符數(shù)組名對(duì)整個(gè)字符串一次輸入輸出。例6.5中的str[]數(shù)組改為printf("%s",str);(3)采用“%s”格式符,scanf函數(shù)用字符數(shù)組名對(duì)整個(gè)字符串一次輸入。例:輸出結(jié)果為:g輸出結(jié)果為:string運(yùn)行:Welcomeyou↙Welcomeyou注意:對(duì)字符數(shù)組無(wú)&#include"stdio.h"voidmain(){charstr[10];scanf("%s",str);printf("%s",str);}6.3.4常用字符串處理函數(shù)需先用#include<stdio.h>和#include<string.h>包含其函數(shù)功能。1〕gets字符串輸入函數(shù)(s—string)調(diào)用形式:gets(字符數(shù)組)功能:從終端輸入一個(gè)字符串直至按回車(chē)鍵并賦給字符數(shù)組名,且得到一個(gè)函數(shù)值,該函數(shù)的返回值是字符數(shù)組的起始地址。注意(1)輸入gets(字符數(shù)組)與輸入一個(gè)字符的同類(lèi)函數(shù)getch()、getche()、getchar()的異同;(2)輸入gets(字符數(shù)組)與輸出puts(字符串)及輸入一個(gè)字符的同類(lèi)函數(shù)getch()、getche()、getchar()與輸出一個(gè)字符的函數(shù)putch()、putchar()是配對(duì)的互逆函數(shù)(詳見(jiàn)第三章輸入輸出內(nèi)容);(3)但凡作為數(shù)組的輸入,均可用指針,如gets(字符數(shù)組的指針)。2〕puts字符串輸出函數(shù)調(diào)用形式:puts(字符串)功能:將一字符串(以‘\0’為結(jié)束符)輸出到終端。輸出時(shí)將字符串結(jié)束標(biāo)志轉(zhuǎn)換成‘\n’,即輸出完畢后換行。3〕strcmp字符串比較函數(shù)(cmp--compare)調(diào)用形式:strcmp(字符串1,字符串2)功能:將兩個(gè)字符串從左至右逐個(gè)進(jìn)行比較(按ASCII碼值大小比較),直到出現(xiàn)不同的字符或遇到‘\0’為止。比較的結(jié)果賦給函數(shù)(值):函數(shù)值=0表示字符串1=字符串2;函數(shù)值>0表示字符串1>字符串2;函數(shù)值<0表示字符串1<字符串2。4〕strcpy字符串拷貝函數(shù)(cpy--copy)調(diào)用形式:strcpy(字符數(shù)組1,字符串2)或strcpy(字符數(shù)組1,字符串2,n)功能:將字符串2拷貝到字符數(shù)組1中去。說(shuō)明:字符數(shù)組1必須定義得足夠大,以便容納被拷貝的字符串;也可以用strcpy函數(shù)將字符串2前假設(shè)干個(gè)字符拷貝到字符數(shù)組1中去(即調(diào)用形式二),其中n為取前n個(gè)字符,另外參數(shù)可是指針(后同)。例如,strcpy(str1,str2,2);即是將str2中前2個(gè)字符拷貝到str1中,然后再加一個(gè)‘\0’。5〕strcat字符串連接函數(shù)(cat--connact)調(diào)用形式:strcat(字符數(shù)組1,字符數(shù)組2)功能:將字符數(shù)組2中字符串接到字符數(shù)組1中字符串的后面,結(jié)果放在字符數(shù)組1中,函數(shù)的返回值是字符數(shù)組1的地址。說(shuō)明:字符數(shù)組1必須足夠大,以便容納連接后的新字符串。6〕strlen字符串長(zhǎng)度測(cè)試函數(shù)(len--length)調(diào)用形式:strlen(字符串)功能:測(cè)試字符串的長(zhǎng)度,函數(shù)的返回值為字符串的實(shí)際長(zhǎng)度(不包括‘\0’)。7〕strlwr字符串轉(zhuǎn)換函數(shù)(lwr--lower)調(diào)用形式:strlwr(字符串)功能:將字符串中大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)字母。8〕strupr字符串轉(zhuǎn)換函數(shù)調(diào)用形式:strupr(字符串)(upr--uper)功能:將字符串中的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母。例6.6有三個(gè)字符串,要求找出其中最大者。#include<stdio.h>#include<string.h>voidmain(){charstring[2];charstr[3][2];inti;for(i=0;i<3;i++)gets(str[i]);if(strcmp(str[0],str[1])>0)strcpy(string,str[0]);elsestrcpy(string,str[1]);if(strcmp(str[2],string)>0)strcpy(string,str[2]);printf("\nthelargeststringis:%s\n",string);}運(yùn)行結(jié)果:CHINAHOMEACHINESEthelargeststringis:HOME實(shí)例見(jiàn)“\VC++教程\VC++實(shí)例\一般程序/C++字符串組”*例6.7用選擇排序法對(duì)數(shù)組中的N個(gè)整數(shù)排序,設(shè)升序(由小到大)輸出。解:設(shè)N=6,先建立一個(gè)一維數(shù)組a[N](即輸入6個(gè)數(shù)據(jù)),用逐步選第一小(其下標(biāo)k=0)、第二小(其下標(biāo)k=1)、第三小(其下標(biāo)k=2)…(最后一個(gè)是最大的)的排隊(duì)/序法;每步用雙重循環(huán)比較交換法處理。定義一個(gè)用來(lái)保存數(shù)據(jù)中第幾(k+1)小的記位(置)器(變量)k,總是用外循環(huán)控制的比較數(shù)a[k](初值a[k]=a[i])與內(nèi)循環(huán)的被比較數(shù)a[j]比較大小,假設(shè)被比較數(shù)a[j]小于比較數(shù)a[k],那么記住位置/下標(biāo)k=j,直至內(nèi)循環(huán)完,再將a[k]與a[i]利用中間變量t進(jìn)行交換,那末第k+1小的數(shù)即在正確的位置a[i];外循環(huán)再循環(huán)下一輪。即采用雙重循環(huán)選擇排序法(示意圖如下):6.4程序舉例

935128912823

9

12

358912823

9

12

2389128359

1223

35128899

122335

89

128比較數(shù):外循環(huán)i=0至N-2,也是k的初值被較數(shù):內(nèi)循環(huán)j=i+1至N-1a[6]:

23351289128923[0]35[1]12[2]89[3]128[4]9[5]例:當(dāng)?shù)谝淮瓮庋h(huán)i=0時(shí),初值k=i=0,此時(shí)內(nèi)循環(huán)j=1至5即要找出第i=0小的:用雙重循環(huán)處理:假設(shè)被比較數(shù)a[j]小于比較數(shù)a[k](初值a[k]=a[i]),那么記住位置/下標(biāo)k=j,直至內(nèi)循環(huán)完,再將a[k]與a[i]利用中間變量t進(jìn)行交換比較(1)j=1時(shí),a[0]<a[1],k=0不變;(2)j=2,a[0]>a[2],k=2;(3)j=3,a[2]<a[3],k=2不變;(4)j=4,a[2]<a[4],k=2不變;(5)j=5,a[2]>a[5],k=5;假設(shè)i=k,那么a[i]與a[k]交換(即23和9交換)a[0]a[1]a[2]a[3]a[4]a[5]#include<stdio.h>#defineN10voidmain(){inta[N],i,j,k,t;printf("Input%dnumber:\n",N);for(i=0;i<N;i++)//循環(huán)輸入元素的值scanf("%d",&a[i]);printf(‘\n’);//換行for(i=0;i<N-1;i++)/*外循環(huán),控制N-1輪比較,即找N-1遍*/{k=i;/*用k記住每次找第i+1小的數(shù)的下標(biāo)*/for(j=i+1;j<N;j++)//內(nèi)循環(huán)控制被比較數(shù)的比較次數(shù)第一次找最小的;第二次找次小的;…第N-1次找第N-1小的(剩下一個(gè)是最大的);程序如下:問(wèn)題

(1)改i<N-1為i<N可否?對(duì)C×

(2)改j<i+1為j<i可否?√循環(huán)變量:i,j;記位器:k;中間變量。if(a[j]<a[k])k=j;//假設(shè)被比較數(shù)(后面數(shù))小于第i+1=k+1小的if(i!=k)//如所找第(k+1)小的數(shù)不是本身{t=a[k];//那么將a[i]和a[k]a[k]=a[i];//通過(guò)t進(jìn)行a[i]=t;//三角交換}}printf("Thesortednumbers:\n");for(i=0;i<N;i++)printf("%d",a[i]);}運(yùn)行結(jié)果:Input10numbers:4671013219203Thesortednumbers:1234679101320

數(shù)(即a[k]),那么記住其位置(內(nèi)循環(huán)i+1至N-1次)說(shuō)明:①此例為選擇排序法;另法比較交換法:不用變量k,將a[i]和a[j]通過(guò)t進(jìn)行三角交換放在內(nèi)循環(huán)中即可(即去掉if語(yǔ)句,比較區(qū)別:頻繁交換);②實(shí)例見(jiàn)“VC++實(shí)例\一般程序/數(shù)組(C和C++及應(yīng)用)\數(shù)組排序”(此例為降序排序)。1、去掉if(i!=k)可否?√2、求最大/小數(shù)及其個(gè)數(shù)等?按以下箭頭所指的形式,將兩個(gè)元素中的內(nèi)容對(duì)調(diào)即可。假設(shè)用i,j分別代表進(jìn)行對(duì)調(diào)的兩個(gè)元素的循環(huán)下標(biāo),那么需要確定i和j的關(guān)系(即j=N-i-1)和確定i變化的范圍即可。j=N-i-1例6.8

將數(shù)組a的內(nèi)容逆置重放:要求不另外開(kāi)辟數(shù)組,只能借助于一個(gè)臨時(shí)存貯單元。分析:假定a數(shù)組有8個(gè)元素存放如下:

#include<stdio.h>#defineN8voidmain(){inta[N],i,j,p,t;//定義循環(huán)變量、中間點(diǎn)、交換變量printf("Input%dnumbertothearray:",N);for(i=0;i<N;i++)scanf("%d",&a[i]);p=N/2-1;//求中間點(diǎn)的前一個(gè)點(diǎn)下標(biāo)(對(duì)奇偶)作為循環(huán)的終值for(i=0;i<=p;i++){j=N-i-1;//求對(duì)應(yīng)點(diǎn)

t=a[i];a[i]=a[j];a[j]=t;}printf("\nThearrayhasbeeninverted:");for(i=0;i<N;i++)printf("%d",a[i]);

運(yùn)行結(jié)果:Input8numbertothearray:4728125103Thearrayhasbeeninverted:3105128274注意:①如果循環(huán)改為for(i=0;i<=N;i++),那么逆置重放了兩次(復(fù)原了)。對(duì)矩陣逆置重放也用同樣方法。②對(duì)奇偶的中間點(diǎn)略有區(qū)別。}程序如下:本卷須知:?jiǎn)螕衾?.9將字符串s轉(zhuǎn)換成相應(yīng)的雙精度浮點(diǎn)數(shù)。#include<stdio.h>voidmain(){chars[8];doubleval,power,number;inti,sign;printf("Inputstringofanumber:");gets(s);i=0;sign=1;if(s[i]==‘+’||s[i]==‘-’)/*sign處理符號(hào)*/sign=(s[i++]==′+′)?1:-1;for(val=0;s[i]>=‘0’&&s[i]<=‘9’;i++)/*處理整數(shù)數(shù)字局部*/val=10*val+s[i]-′0′;if(s[i]==′.′)i++;for(power=1;s[i]>=‘0’&&s[i]<=‘9’;i++)//處理小數(shù)數(shù)字{val=10*val+s[i]-‘0’;power*=10;}number=sign*val/power;printf("\nnumber=%f\n",number);}*例6.10對(duì)3行4列的矩陣,找出在行上最小/大,在列上最大/小的元素(馬鞍點(diǎn))。假設(shè)沒(méi)有這樣的元素,那么打印出相應(yīng)的信息。[方一]根據(jù)行上最小列上最大馬鞍點(diǎn)的定義,每行都可能有一個(gè)馬鞍點(diǎn),故要逐行查找;查找第i行[for(i=0;i<M;i++)]馬鞍點(diǎn)的過(guò)程序可分為兩個(gè)步驟:①找出第i行最小值的列位置k;②判斷第i行第k列元素在第k列是否最大。如果最大那么是鞍點(diǎn);如果不是,那么第i行中無(wú)鞍點(diǎn)。這里判斷是否為第k列最大值的方式:看是否在第k列有比a[i][k]大的值。運(yùn)行結(jié)果:Inputstringofanumber:-234.55number=-234.550000#defineM3#defineN4#include<stdio.h>voidmain(){inta[M][N];//定義3行4列矩陣inti,j,k,m,flag=0;printf(“\npleaseenterarray(12個(gè)):\n");for(i=0;i<M;i++)/*雙重循環(huán)輸入3*4=12個(gè)數(shù)組元素*/

for(j=0;j<N;j++)scanf("%d",&a[i][j]);for(i=0;i<M;i++)//對(duì)每行{k=0;//初始設(shè)第i行第k列為該行最小for(j=1;j<N;j++)/*找第i行的最小元素,k為其列標(biāo)*/if(a[i][j]<a[i][k])k=j;//循環(huán)完后a[i][k]即為該行最小

定義循變i,j和列循變m、記列位置器k、馬鞍點(diǎn)標(biāo)記flag(初設(shè)0表示無(wú))。

[方二]行上最大列上最小馬鞍點(diǎn)#include<stdio.h>voidmain(){inta[3][4],i,j,c,k,rmax,find;printf("Thematrixis:\n");for(i=0;i<3;i++)//雙重循環(huán)輸入數(shù)據(jù)for(j=0;j<4;j++)scanf("%d",&a[i][j]);for(m=0;m<M;m++)//判斷第k列是否有元素比a[i][k]大if(a[m][k]>a[i][k])break;//假設(shè)有元素比a[i][k]大那么下一行if(m>=M)//假設(shè)第k列無(wú)元素比a[i][k]大,該元素是鞍點(diǎn),{flag=1;printf("馬鞍點(diǎn):a[%d][%d]=%d\n",i,k,a[i][k]);}}//且置flag為1表示找到鞍點(diǎn)并輸出if(flag==0)printf(“\n無(wú)馬鞍點(diǎn).”);/*整個(gè)矩陣不存在鞍點(diǎn),}輸出“無(wú)馬鞍點(diǎn).”*/因m>=M說(shuō)明m=0;m<M循環(huán)完后break未被執(zhí)行過(guò),即第k列無(wú)元素比a[i][k]大。注意:對(duì)馬鞍點(diǎn)是行最小列最大和行最大列最小可能求出的元素不同(可和方二比較)

find=0;i=0;/*find為1,標(biāo)志找到了鞍點(diǎn)*/while(i<3&&(find==0))/*外循環(huán)查三行*/{rmax=a[i][0];c=0;//設(shè)馬鞍點(diǎn)初始值for(j=1;j<4;j++)if(rmax<a[i][j])/*某行最大值→ramx,所在列號(hào)→c*/{rmax=a[i][j];c=j;}find=1;

溫馨提示

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

評(píng)論

0/150

提交評(píng)論