版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
會(huì)計(jì)學(xué)1b基本控制結(jié)構(gòu)和導(dǎo)出數(shù)據(jù)類型24.5.1導(dǎo)出類型概念
--
在計(jì)算機(jī)所處理的數(shù)據(jù)中,最常見的,也是最需要由計(jì)算機(jī)高速處理的數(shù)據(jù)是成批出現(xiàn)的同一類型的數(shù)據(jù),C++語言中把這類數(shù)據(jù)稱為數(shù)組。導(dǎo)出數(shù)據(jù)類型,其特點(diǎn)是這種類型的定義是在其它已定義類型的基礎(chǔ)上定義的,而且其運(yùn)算也是確定的。第四種結(jié)構(gòu)類型
第2頁/共67頁第1頁/共67頁34.5.2一維數(shù)組與實(shí)例
數(shù)組是同類型元素(分量)的有序組合體。元素的類型可以是C++語言中允許使用的任何一種數(shù)據(jù)類型(包括任何用戶自定義類型)。數(shù)組中的每個(gè)元素都有與其對應(yīng)的下標(biāo)以標(biāo)明該元素在數(shù)組中的位置。對數(shù)組元素的訪問通常借助于下標(biāo)來進(jìn)行,元素也被稱為下標(biāo)變量。每個(gè)數(shù)組元素(即下標(biāo)變量)都可以當(dāng)作單個(gè)變量來使用。具有一個(gè)下標(biāo)的數(shù)組叫做一維數(shù)組,它是由n個(gè)同一類型數(shù)據(jù)組成的一維序列。按如下格式來說明一維數(shù)組。第3頁/共67頁第2頁/共67頁41說明一維數(shù)組
<類型名><數(shù)組名>[<元素?cái)?shù)>]={<初值表>}
其中的“<類型名>”用于指出數(shù)組元素的類型,也稱為數(shù)組類型?!?lt;數(shù)組名>”是一個(gè)標(biāo)識(shí)符,是為數(shù)組起的名字,該名字還代表數(shù)組首元素的地址(指針概念,在以后介紹)。方括號中的“<元素?cái)?shù)>”用于指定數(shù)組的大小,它必須是一個(gè)整數(shù)或一個(gè)整型的常量表達(dá)式?!?{<初值表>}”部分可有可無,若有的話,用于為數(shù)組元素置初值;其中的“<初值表>”由一批以逗號分割的常量值所構(gòu)成。第4頁/共67頁第3頁/共67頁5例如:inta[10];說明了一個(gè)一維數(shù)組,數(shù)組名為a,具有10個(gè)元素,元素類型為int。要訪問a數(shù)組的各元素(分量),可通過使用下標(biāo)變量a[0],a[1],a[2],...,a[9]來實(shí)現(xiàn)(注意,規(guī)定下標(biāo)總從0開始)。每一個(gè)下標(biāo)變量a[i]的作用與一個(gè)int型簡單變量所能起的作用相同。既是說,對int型簡單變量可施加的運(yùn)算與操作同樣可施加到int型數(shù)組元素(分量)上。除整數(shù)外,下標(biāo)處還可以使用一個(gè)整型表達(dá)式,表達(dá)式的值正是要指定的下標(biāo)。如,a[2*4+1],a[i+1],a[a[1]-3]都是合法的下標(biāo)變量。第5頁/共67頁第4頁/共67頁6
對a數(shù)組元素(下標(biāo)變量)進(jìn)行使用:inta[10],i=1;a[3]=123;cin>>a[9];a[i-1]=a[3]+2*a[2*4+1];cout<<"a[0]="<<a[0]<<endl;if(a[3]>a[9])cout<<"a[3]>a[9]"<<endl;第6頁/共67頁第5頁/共67頁7
說明了一個(gè)int型的一維數(shù)組a;向數(shù)組元素(下標(biāo)變量)a[3]賦值;通過cin輸入下標(biāo)變量a[9]的值;使用下標(biāo)變量a[3]、a[9]參加運(yùn)算,將運(yùn)算結(jié)果賦值給a[i-1]即a[0],其中的a[i-1]及a[2*4+1]的下標(biāo)都使用了整型表達(dá)式;向cout輸出下標(biāo)變量a[0]的值;使用“if(a[3]>a[9])”進(jìn)行下標(biāo)變量的比較運(yùn)算等。第7頁/共67頁第6頁/共67頁8又如:chararr1[20],arr2[80];floatfa1[15],fa2[6]={1.2,35.6,-22,0.1,66,30};
說明了兩個(gè)char型一維數(shù)組arr1與arr2,大小分別為20和80;又說明兩個(gè)float型一維數(shù)組fa1與fa2,大小分別為15和6,且為fa2數(shù)組賦了初值。
第8頁/共67頁第7頁/共67頁9
2一維數(shù)組應(yīng)用實(shí)例
1反序輸出問題 2使用Eratosthenes篩法求1000以內(nèi)的素?cái)?shù) 3統(tǒng)計(jì)學(xué)生成績第9頁/共67頁第8頁/共67頁101反序輸出問題1.從鍵盤輸入10個(gè)int型數(shù),而后按輸入的相反順序輸出它們。
實(shí)現(xiàn)方式:使用int型數(shù)組存放數(shù)據(jù),通過下標(biāo)變化來處理這些數(shù)據(jù)。
例如,程序執(zhí)行后的輸入輸出界面可設(shè)計(jì)為:Input10integers:12345678910----Theresult----10987654321第10頁/共67頁第9頁/共67頁11程序編制:#include<iostream.h>voidmain(){ inta[10],i; //說明int型一維數(shù)組a cout<<"Input10integers:"<<endl;//輸入10個(gè)整數(shù),依次放入各下標(biāo)變量中 for(i=0;i<10;i++) //下標(biāo)i從0起,遞增變化到9 cin>>a[i]; cout<<"----Theresult----"<<endl;//按反序輸出a數(shù)組中的各元素for(i=9;i>=0;i--)//下標(biāo)i從9起,遞減變化到0 cout<<a[i]<<""; cout<<endl;}第11頁/共67頁第10頁/共67頁12
2使用Eratosthenes篩法求1000
以內(nèi)的素?cái)?shù)(課本p116)先將1~1000放在一個(gè)數(shù)組sieve(看成是一個(gè)篩子)中;首先“留下”2(第一個(gè)素?cái)?shù)),而后把2的倍數(shù)統(tǒng)統(tǒng)從數(shù)組sieve(篩子)中刪去;再“留下”3(第二個(gè)素?cái)?shù)),而后把3的倍數(shù)統(tǒng)統(tǒng)從數(shù)組sieve中刪去;再往下是5,7,...。好象是一個(gè)篩子,把不需要的數(shù)逐步篩去,留下的正是所需要的各素?cái)?shù)。所謂將某數(shù)從數(shù)組sieve(篩子)中刪去,本程序?qū)崿F(xiàn)時(shí),是將數(shù)組中的該數(shù)“改寫”為0。注意:具體實(shí)現(xiàn)與4.7.4小節(jié)的方法有所不同。第12頁/共67頁第11頁/共67頁13
程序執(zhí)行后的輸出結(jié)果樣式如下
(每輸出15個(gè)素?cái)?shù)換一行):2357111317192329313741434753596167717379838997101103107109113127131137139149151157163167173179181191193197…877881883887907911919929937941947953967971977983991997第13頁/共67頁第12頁/共67頁14具體程序: #include<iomanip.h>voidmain(){ constintn=1000; intsieve[n+1]; //篩子sieve for(intj=1;j<n+1;j++) sieve[j]=j; //放入數(shù)據(jù) inti=1,count=0;第14頁/共67頁第13頁/共67頁15while(i<n){ i++; if(sieve[i]!=0){ //尚在篩中 cout<<setw(5)<<sieve[i]; count++; if(count%15==0)cout<<endl; //每行15數(shù)
for(intk=i;k<n+1;k+=i) //消去倍數(shù)
sieve[k]=0; } //if} //whilecout<<endl;} //main第15頁/共67頁第14頁/共67頁16
進(jìn)一步改進(jìn),使用bool數(shù)組#include<iomanip.h>voidmain(){ constintn=1000; boolsieve[n+1]; //篩子sievefor(intj=1;j<n+1;j++) sieve[j]=true; //放入數(shù)據(jù) //sieve[j]為true意味著j在篩中 inti=1,count=0;第16頁/共67頁第15頁/共67頁17
while(i<n){i++;if(sieve[i]){ //i尚在篩中
cout<<setw(5)<<i;count++;if(count%15==0)cout<<endl;//每行15數(shù)
for(intk=i;k<n+1;k+=i) //消去倍數(shù)
sieve[k]=false;} //if } //while cout<<endl;} //main第17頁/共67頁第16頁/共67頁18
3統(tǒng)計(jì)學(xué)生成績
-課本p108
輸入n個(gè)學(xué)生的注冊號和成績,計(jì)算出平均成績,并列出成績最好的前t名學(xué)生的注冊號和成績。
第18頁/共67頁第17頁/共67頁19
程序執(zhí)行后的輸出結(jié)果式樣如下
(n=6,t=3時(shí)):Input6student'sReg_Num&Score:100188.5100291100385.5100493.5100585100696Averagescore:89.9register-numberscore1100696.02100493.53100291.0第19頁/共67頁第18頁/共67頁20程序如下:#include<iostream.h>voidmain(){ constintn=6; //共有n個(gè)學(xué)生 constintt=3; //欲找出前t名最好成績者 intindex[n]; //數(shù)組index,存放n個(gè)學(xué)生的注冊號 floatscore[n]; //數(shù)組score,存放n個(gè)學(xué)生的成績 cout<<"Input"<<n<<"student'sReg_Num&Score:"<<endl; for(inti=0;i<n;i++)//輸入n個(gè)學(xué)生的注冊號及成績 cin>>index[i]>>score[i];第20頁/共67頁第19頁/共67頁21
floatsum=0; //放累加和的sum先置為0 for(i=0;i<n;i++) sum+=score[i]; //將n個(gè)學(xué)生的成績累加到sum上 cout.setf(ios::fixed); //設(shè)置以定點(diǎn)數(shù)格式輸出數(shù)據(jù) cout.precision(1); //點(diǎn)后保留1位 cout<<“Averagescore:”<<sum/n<<endl;//輸出平均成績 cout.width(25); cout<<"register-numberscore"; //輸出“題頭行”
第21頁/共67頁第20頁/共67頁22 /*通過“for(i=0;i<t;i++){…}”形式的循環(huán),找出前t名最好成績者,并輸出其注冊號及成績。
i=0的循環(huán)先使score[0]及index[0]處被交換成為第一名最好成績者的成績及注冊號,而后輸出;i=1的循環(huán)先使score[1]及index[1]處被交換成為第二名最好成績者的成績及注冊號,而后輸出;...,如此做法,直到找出前t名最好成績者,并輸出它們的相關(guān)信息。 第i次的循環(huán)首先找出從score[i]到數(shù)組末score[n-1]中的最大者s,并記錄其下標(biāo)值到j(luò)1,而后將最大者score[j1]掉換到score[i]的位置上,當(dāng)然還要將index[j1]掉換到index[i]的位置處,以使index[i]總與score[i]保持一一對應(yīng)關(guān)系。 */第22頁/共67頁第21頁/共67頁23
for(i=0;i<t;i++){ //找出前t名最好者 floats=score[i]; //從i分量始
score中的最大者s intj1=i; //j1中記錄上述最大者的下標(biāo)i for(intj=i+1;j<n;j++) //看還有否比s更大的 if(s<score[j]){ //有更大的時(shí)
s=score[j]; //更大者放s j1=j; //對應(yīng)下標(biāo)放j1 } //forj循環(huán)體結(jié)束第23頁/共67頁第22頁/共67頁24
if(j1>i){ //若score[i]到score[n-1]中的最大者 //并非score[i]時(shí),要進(jìn)行交換
score[j1]=score[i]; score[i]=s; //使score[i]交換為最大
inttmp=index[j1];//交換注冊號
index[j1]=index[i]; index[i]=tmp;}第24頁/共67頁第23頁/共67頁25 cout.width(4); cout<<endl<<i+1; //輸出名次號(前t名的第i+1名) cout.width(11); cout<<index[i]; //輸出第i+1名學(xué)生的注冊號 cout.width(12); cout.precision(1); //點(diǎn)后保留1位 cout<<score[i]; //輸出第i+1名學(xué)生的成績} //fori循環(huán)體結(jié)束cout<<endl;}
//main結(jié)束第25頁/共67頁第24頁/共67頁264.5.3多維數(shù)組與實(shí)例
--
具有兩個(gè)下標(biāo)的數(shù)組叫做二維數(shù)組。二維數(shù)組經(jīng)常用來表示按行和列格式來存放信息的數(shù)據(jù)表。要區(qū)分表中某個(gè)特定的元素,必須指定兩個(gè)下標(biāo)。第一個(gè)下標(biāo)表示該元素所在的行,而第二個(gè)下標(biāo)則表示該元素所在的列。
按如下格式來說明二維數(shù)組:
<類型名><數(shù)組名>[<行數(shù)>][<列數(shù)>]
其中的“<類型名>”及“<數(shù)組名>”的含義與一維數(shù)組相同。方括號中的“<行數(shù)>”與“<列數(shù)>”用于指定數(shù)組的大小,它們必須是整數(shù)或整型的常量表達(dá)式。類似可以說明三維、四維等二維以上的多維數(shù)組。第26頁/共67頁第25頁/共67頁27
例如:inta[3][4];說明了一個(gè)二維數(shù)組,數(shù)組名為a,具有12個(gè)元素(3行4列),元素類型為int。要訪問a數(shù)組的各元素(分量),可通過使用下述12個(gè)下標(biāo)變量:a[0][0],a[0][1],a[0][2],a[0][3],a[1][0],a[1][1],a[1][2],a[1][3],a[2][0],a[2][1],a[2][2],a[2][3]??梢钥闯?,與一維數(shù)組一樣,二維數(shù)組的兩個(gè)下標(biāo)(行下標(biāo)與列下標(biāo))也都是從0開始的。
每一個(gè)下標(biāo)變量a[i][j]的作用與一個(gè)int型簡單變量所能起的作用相同。既是說,對int型簡單變量可施加的運(yùn)算與操作同樣可施加到int型數(shù)組元素即下標(biāo)變量a[i][j]上。第27頁/共67頁第26頁/共67頁28 例如:inta[3][4];
另外,還可將上述3行4列的二維數(shù)組a看成是具有3個(gè)一維數(shù)組元素(每個(gè)元素為一行,具有4個(gè)int型數(shù)據(jù))的數(shù)組,可使用a[0]、a[1]、a[2]來表示這3個(gè)一維數(shù)組。注意,a[0]、a[1]、a[2]的“級別”與上述12個(gè)下標(biāo)變量a[i][j]的“級別”完全不同。a[0]、a[1]、a[2]的“級別”為具有4個(gè)int型元素的一維數(shù)組(與一維數(shù)組說明處的“<數(shù)組名>”一樣,它們代表3個(gè)不同的地址即指針,其中a[0]代表二維數(shù)組a的第一行元素的首地址,a[1]、a[2]代表第二與第三行元素的首地址),而下標(biāo)變量a[i][j]的“級別”為int,它代表一個(gè)整數(shù)。第28頁/共67頁第27頁/共67頁29
如下的程序片段中對所說明的a數(shù)組的
元素(下標(biāo)變量)進(jìn)行了使用:
inta[3][4],i=1,j=1; a[0][0]=123; cin>>a[0][1]; a[2][3]=a[i-1][j-1]+2*a[i-1][j]; cout<<"a[2][3]="<<a[2][3]<<endl; if(a[0][0]>a[0][1]) cout<<"a[0][0]>a[0][1]"<<endl;第29頁/共67頁第28頁/共67頁30
說明了一個(gè)int型的二維數(shù)組a;向數(shù)組元素(下標(biāo)變量)a[0][0]賦了值;通過cin輸入下標(biāo)變量a[0][1]的值;使用下標(biāo)變量a[i-1][j-1]及a[i-1][j]參加運(yùn)算,并將運(yùn)算結(jié)果賦值給a[2][3](下標(biāo)可以是整型表達(dá)式);輸出下標(biāo)變量a[2][3]的值;下標(biāo)變量還可進(jìn)行比較運(yùn)算。第30頁/共67頁第29頁/共67頁31 又如:
floatfa1[10][10],fa2[2][3]={{1.1,2.2,-3.3},{4.4,-5.5,6.6}};
說明了兩個(gè)float型二維數(shù)組fa1(10行10列)與fa2(2行3列),且為fa2數(shù)組賦了初值(使用給兩個(gè)一維數(shù)組賦初值的形式)。也可使用如下的另一種格式為fa2數(shù)組賦初值“floatfa2[2][3]={1.1,2.2,-3.3,4.4,-5.5,6.6};”。
第31頁/共67頁第30頁/共67頁32
chararr1[3][20]={"12345","C++OK!","Icandoit!"},arr2[10][80];
說明了兩個(gè)char型二維數(shù)組arr1(3行20列)與arr2(10行80列),并給arr1數(shù)組賦了初值,從而使得arr1[0]、arr1[1]、arr1[2]都成為具有了初值的字符串(注意字符串賦初值的方法)。
for(inti=0;i<3;i++) cout<<arr1[i]<<endl;//一次輸出“一串”第32頁/共67頁第31頁/共67頁33
上述for語句的執(zhí)行將輸出如下三行結(jié)果:
12345
C++OK! Icandoit!
同理,具有三個(gè)下標(biāo)的數(shù)組叫做三維數(shù)組,具有n個(gè)下標(biāo)的數(shù)組叫做n維數(shù)組。通常,將二維以上的數(shù)組統(tǒng)稱為多維數(shù)組。實(shí)際上,多維數(shù)組中最常用的只是二維數(shù)組。第33頁/共67頁第32頁/共67頁34多維數(shù)組應(yīng)用實(shí)例
1二維數(shù)組簡單應(yīng)用 2二維字符數(shù)組 3畫一個(gè)四葉玫瑰線圖形第34頁/共67頁第33頁/共67頁35
1二維數(shù)組簡單應(yīng)用
設(shè)有4行4列的數(shù)組a,其元素a[i][j]=i+j。編程序,實(shí)現(xiàn): 1.求第二行4元素之和; 2.求第三列4元素之平均值; 3.求最大數(shù),最小數(shù)及主對角線4元素的平方和。第35頁/共67頁第34頁/共67頁36
使程序執(zhí)行后的輸出結(jié)果為:
0123123423453456------Theresult------sum_lin2=10ave_col3=3.5max_elem=6min_elem=0sum_diag=56第36頁/共67頁第35頁/共67頁37#include<iostream.h>voidmain(){ inta[4][4],i,j; for(i=0;i<4;i++){//為a數(shù)組賦值,并顯示在屏幕上
for(j=0;j<4;j++){ a[i][j]=i+j; cout<<""<<a[i][j]; } cout<<endl; //每4數(shù)占一行 }
cout<<"------Theresult------"<<endl;第37頁/共67頁第36頁/共67頁38
//1.求第二行4元素之和//(第二行元素為a[1][j](j=0,1,2,3)) intsum_lin2=0; for(j=0;j<4;j++) sum_lin2+=a[1][j]; cout<<"sum_lin2="<<sum_lin2<<endl;
//2.求第三列4元素之平均值 //(第三列元素為a[i][2](i=0,1,2,3)) intsum_col3=0; for(i=0;i<4;i++) sum_col3+=a[i][2]; cout<<"ave_col3="<<sum_col3/4.0<<endl;第38頁/共67頁第37頁/共67頁39
//3.求最大數(shù),最小數(shù)及主對角線4元素的平方和
intmax_elem=a[0][0],min_elem=a[0][0],sum_diag=0;
//先認(rèn)為a[0][0]為最大數(shù)max_elem、又為最小數(shù)min_elem for(i=0;i<4;i++)for(j=0;j<4;j++){ if(a[i][j]>max_elem)max_elem=a[i][j]; if(a[i][j]<min_elem)min_elem=a[i][j]; if(i==j)sum_diag+=a[i][j]*a[i][j];
//行列下標(biāo)相等時(shí),a[i][j]為主對角線元素 }
cout<<"max_elem="<<max_elem<<endl; cout<<"min_elem="<<min_elem<<endl; cout<<"sum_diag="<<sum_diag<<endl;}第39頁/共67頁第38頁/共67頁40
2二維字符數(shù)組
尋找若干行(字符串)中的最長行并進(jìn)行某些統(tǒng)計(jì):從鍵盤輸入n個(gè)字符串(每串為一行,不超過80個(gè)字符,且輸入時(shí)以回車結(jié)束每一行)先存放在一個(gè)二維字符數(shù)組中。而后統(tǒng)計(jì)出每一行中大寫字母的出現(xiàn)次數(shù),并找出這些行中的最長行。第40頁/共67頁第39頁/共67頁41
程序執(zhí)行后,屏幕顯示結(jié)果可為:-----------Input4strings------------Hello!ABCabc.1234567890OK!OK!ookk!+*-/%abcdeWearestudents.NK2004.------Theresult------count[0]=4count[1]=4count[2]=0count[3]=3maxLenLine:1234567890OK!OK!ookk!第41頁/共67頁第40頁/共67頁42
數(shù)據(jù)部分概要:
constintn=4;
//定義常量n,共輸入并處理n行字符
charstr[n][81];
//str為char型二維數(shù)組,用于盛放輸入的n行字符 //(每行最多放80字符另加一結(jié)束符)
intcount[n];
//使用count數(shù)組元素記錄各行大寫字母的出現(xiàn)次數(shù) //對應(yīng)關(guān)系為:count[i]記錄第i行中的大寫字母個(gè)數(shù)charmaxLenLine[81]={'\0'};
//盛放最長行,初始化為“空”第42頁/共67頁第41頁/共67頁43處理部分概述:
①輸入n行字符(每行以回車為結(jié)束),依次放于一維字符數(shù)組str[i]中(注意,str[i]為二維字符數(shù)組str的一行),并將記錄每行大寫字母出現(xiàn)次數(shù)的count[i]均置為0(作累加單元用)。
②編制循環(huán),依次處理已放在str[0]、str[1]、...、str[n-1]中的那n行字符--某行長度超過當(dāng)前maxLenLine之長度時(shí)更換maxLenLine,并從頭到尾尋找各行的大寫字母且將累加次數(shù)放于count[i]之中。
③輸出統(tǒng)計(jì)出的各行大寫字母個(gè)數(shù),并輸出最長行。
第43頁/共67頁第42頁/共67頁44#include<iomanip.h> //use“setw”#include<stdio.h> //use“gets”#include<string.h> //use“strlen”voidmain(){ constintn=4; //共輸入并處理n行
charstr[n][81],ch; //str數(shù)組,盛放n行字符
charmaxLenLine[81]={'\0'}; //盛放最長行,初始化為“空”
intcount[n],i,j; //count[i]記錄第i行的大寫字母個(gè)數(shù)
for(i=0;i<n;i++) count[i]=0; //將count初始化(累加次數(shù)用)
cout<<"-----------Input"<<n<<"strings------------"<<endl; for(i=0;i<n;i++) //共輸入n行
gets(str[i]); //放于一維數(shù)組str[i]中第44頁/共67頁第43頁/共67頁45for(i=0;i<n;i++){ //共處理n行字符
if(strlen(str[i])>strlen(maxLenLine)) strcpy(maxLenLine,str[i]); //更新最長行
for(j=0;j<81&&str[i][j]!='\0';j++){ //從頭到尾處理一遍str[i]數(shù)組中的各字符
ch=str[i][j]; if(ch>='A'&&ch<='Z') //若ch為大寫字母
count[i]++; //次數(shù)加1 } //forj } //fori
cout<<"------Theresult------"<<endl; for(i=0;i<n;i++) //輸出每行大寫字母個(gè)數(shù)
cout<<setw(10)<<"count["<<i<<"]="<<setw(2)<<count[i]<<endl; cout<<"maxLenLine:"<<endl; cout<<maxLenLine<<endl; //輸出最長行}
第45頁/共67頁第44頁/共67頁463畫一個(gè)四葉玫瑰線圖形
--課本p114實(shí)現(xiàn)概述:
1.四葉玫瑰線圖形的極坐標(biāo)方程為:
p=a*sin(2*angle) 其中,angle為極角,變化范圍從0度到360度;
a為常數(shù),表示所畫四葉玫瑰線圖形中,矩極點(diǎn)的最長距離;
p為極徑,與變化范圍內(nèi)的極角angle有上述極坐標(biāo)方程的關(guān)系。第46頁/共67頁第45頁/共67頁472.在“文本模式”的“字符屏幕”上“畫圖”
的通常實(shí)現(xiàn)方法:
(1)將“字符屏幕”與程序中的一個(gè)二維字符數(shù)組建立對應(yīng)關(guān)系。如,本程序的rose數(shù)組就對應(yīng)于欲顯示的“字符屏幕”,其中的rose[0][0]表示“字符屏幕”的左上角點(diǎn),而rose[y][x]則表示“字符屏幕”的第y+1行第x+1列的那一個(gè)點(diǎn)(y值即行號由上往下擴(kuò)展,x值即列號由左往右擴(kuò)展)。
(2)將二維字符數(shù)組的各元素均置為“空”(對應(yīng)于一個(gè)“空白字符屏幕”)。
(3)按某種計(jì)算方法(或計(jì)算公式)算出應(yīng)該在“字符屏幕”的哪些位置處“畫點(diǎn)”(通過往對應(yīng)字符數(shù)組的某些元素處置“*”符號來完成)。
(4)將已準(zhǔn)備好的當(dāng)前字符數(shù)組顯示到“字符屏幕”上(在“字符屏幕”上“畫”出了所需圖形)。第47頁/共67頁第46頁/共67頁483本例的具體實(shí)現(xiàn)方法:把360度分為足夠多的若干份(本例分為128份),在每個(gè)分定的角度angle處,按照上述的極坐標(biāo)方程,計(jì)算出每一個(gè)對應(yīng)的函數(shù)值p(即極徑),從而得到平面上的一批點(diǎn);將這批平面點(diǎn)對應(yīng)到“字符屏幕”上(相應(yīng)的rose數(shù)組中),并將每一個(gè)點(diǎn)用一個(gè)字符“*”來表示并顯示到屏幕上(“字符屏幕”上的其他點(diǎn)均顯示為“空”)。第48頁/共67頁第47頁/共67頁49#include<iostream.h>#include<math.h>//use“sin”、“cos”main(){ constintmaxY=22; //“字符屏幕”的最大行數(shù)(書中為25)
constintmaxX=70; //“字符屏幕”的最大列數(shù)(書中為80)
constfloatpai=3.14159,a=12.0; //a表示所畫圖形中,矩極點(diǎn)的最長距離(書中為16.0)
constintaspect=2; //屏幕字符“高:寬”為2:1,生成曲線時(shí),每點(diǎn)的x要乘以2第49頁/共67頁第48頁/共67頁50floatangle,p; //angle表示極角,p表示極徑
intx,y; //x,y用于表示屏幕坐標(biāo)
charrose[maxY][maxX]; //rose[y][x]表示“字符屏幕”
y+1行x+1列的那一個(gè)點(diǎn)
for(y=0;y<maxY;y++) //設(shè)置“空白字符屏幕” for(x=0;x<maxX;x++) rose[y][x]=''; //各數(shù)組元素字符均置為空格
constintnn=128; //把360度分為nn份(所畫圖形由nn=128個(gè)點(diǎn)構(gòu)成)第50頁/共67頁第49頁/共67頁51
for(inti=0;i<nn;i++){ //計(jì)算nn=128個(gè)“屏幕點(diǎn)”
angle=i*2*pai/nn; //將角度化為弧度
p=a*sin(2*angle); //算出極徑p x=int(p*cos(angle))*aspect+24; //x坐標(biāo)值
y=int(p*sin(angle))+12; //y坐標(biāo)值 //算x時(shí)加24,算y時(shí)加12, //是設(shè)定(24,12)為極點(diǎn)位置
rose[y][x]='*'; //往(y,x)點(diǎn)處放置“*”符號 }第51頁/共67頁第50頁/共67頁52
//將當(dāng)前字符數(shù)組rose中的各字符顯示到屏幕上(“畫”圖形)
for(y=0;y<maxY;y++){ //行號變化范圍,共maxY行
for(x=0;x<maxX;x++)//列號變化范圍,共maxX列
cout<<rose[y][x];//顯示出rose中的各字符
cout<<endl; }} //main第52頁/共67頁第51頁/共67頁53程序執(zhí)行后的輸出結(jié)果式樣:
*********************************************************************************************
第53頁/共67頁第52頁/共67頁54附注:
(1)書中程序是按整個(gè)屏幕為25×80個(gè)“點(diǎn)”來進(jìn)行設(shè)計(jì)與處理的,并把所畫四葉玫瑰線圖形中矩極點(diǎn)的最長距離a(常數(shù))設(shè)為16。讀者可以改變這些數(shù)據(jù),如按照22×70個(gè)“點(diǎn)”、并將矩極點(diǎn)的最長距離a設(shè)為12等,而后進(jìn)行運(yùn)行測試,觀察所“畫”圖形的變化,以加深對程序功能的理解。第54頁/共67頁第53頁/共67頁55
(2)程序中在計(jì)算(x,y)時(shí),用到另外兩個(gè)常數(shù)40和13--算x時(shí)加40,算y時(shí)加13,是因?yàn)樵O(shè)定(40,13)為“畫圖”時(shí)的“中心點(diǎn)”(極點(diǎn)位置),讀者也可改變這兩個(gè)常數(shù),如設(shè)為24和12等來進(jìn)行測試。
for(inti=0;i<128;i++){ ... x=int(p*cos(angle))*aspect+40; y=int(p*sin(angle))+13; ... }第55頁/共67頁第54頁/共67頁56
(3)本程序畫出的是正弦特性的四葉玫瑰線圖形,用到了:p=a*sin(2*angle)。若要畫出具有余弦特性的四葉玫瑰線圖形,或準(zhǔn)備畫出具有正弦或余弦特性的三葉玫瑰線圖形的話,可使用如下的計(jì)算公式:
p=a*cos(2*angle); p=a*sin(3*angle); p=a*cos(3*angle)。第56頁/共67頁第55頁/共67頁57
4.5.4數(shù)組與字符串
字符數(shù)組的元素為字符。除具有一般數(shù)組的特性外,它與字符串的使用有關(guān)聯(lián)。
字符串在內(nèi)存中的存放形式是,按串中字符的排列順序存放,每個(gè)字符占一個(gè)字節(jié),并在末尾添加'\0'作為結(jié)束標(biāo)記。C++是靠一維字符數(shù)組來存放字符串的,一維字符數(shù)組在某些方面起到了字符串變量的作用。第57頁/共67頁第56頁/共67頁58
但注意,一維字符數(shù)組與字符串還是有區(qū)別的。首先,字符串可以存放在字符數(shù)組中,但該字符數(shù)組中必須存儲(chǔ)一個(gè)顯式的'\0'字符來作為字符串的結(jié)束標(biāo)記。但反過來說,任一個(gè)字符數(shù)組不見得都是字符串,因?yàn)椴⒉灰笞址麛?shù)組中必須存在'\0'字符!第58頁/共67頁第57頁/共67頁59例如:charcarr[6]={'1','2','3','4','5'}; //carr為一般性字符數(shù)組charstr1[6]={'I','','c',
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《GB-T 40644-2021杜仲葉提取物中京尼平苷酸的檢測 高效液相色譜法》專題研究報(bào)告
- 《寵物鑒賞》課件-犬的外貌特征
- 2026年徐州幼兒師范高等??茖W(xué)校單招綜合素質(zhì)考試題庫及參考答案詳解1套
- 《正常人體功能》課件-酶促反應(yīng)的特點(diǎn)及影響因素
- 《幼兒文學(xué)》課件-2.1兒歌概說
- 噪聲檢測服務(wù)合同
- 中醫(yī)艾灸技師(初級)考試試卷及答案
- 2025年涂覆材料項(xiàng)目建議書
- AIGC時(shí)代下智能家電革新構(gòu)建“智慧家庭”新篇章-海爾洗護(hù)AIGC落地的最佳實(shí)踐
- 2025年煉油、化工生產(chǎn)專用設(shè)備合作協(xié)議書
- 學(xué)堂在線 臨床中成藥應(yīng)用 章節(jié)測試答案
- 物流協(xié)會(huì)管理辦法
- 跑步健康課件圖片
- 醫(yī)用耗材管理辦法原文
- 高州市緬茄杯數(shù)學(xué)試卷
- 傳承紅色基因鑄就黨紀(jì)之魂建黨104周年七一黨課
- 詩詞大會(huì)搶答題庫及答案
- 立式油罐知識(shí)培訓(xùn)課件
- 口腔健康科普指南
- 2025年《智能客戶服務(wù)實(shí)務(wù)》課程標(biāo)準(zhǔn)
- 公司便民雨傘管理制度
評論
0/150
提交評論