




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
概述例題:輸入50個(gè)學(xué)生的某門課程的成績(jī),打印出低于平均分的學(xué)生序號(hào)與成績(jī)。#include
<iostream>using
namespace
std;int
main
(){int
a1,a2,a3,……,a49,a50;floattot,ave;cin
>>
a1
>>
a2
>>
a3
>>
……
>>
a49>>
a50;tot=a1
+
a2
+a3+
……+
a49
+
a50;ave=tot
/
50;if
(a1<ave)
cout<<
1<<
'
'<<a1;if
(a2<ave)cout<<
2<<
'
'
<<a2;…………if
(a50<ave)cout
<<
50<<
'
'
<<
a50;return
0;}把所有省略號(hào)都用完整的語句寫出來??梢韵胂螅@樣的程序有多么繁瑣。概述在許多問題中,
需要處理大量的數(shù)據(jù)。如果單獨(dú)為每一個(gè)數(shù)據(jù)命名一個(gè)變量,程序?qū)O為冗長(zhǎng),造成編程的
。像上個(gè)例子中,如果能像數(shù)學(xué)中使用下標(biāo)變量ai形式表示50個(gè)學(xué)生的成績(jī),則問題就容易實(shí)現(xiàn)。在C++語言中,對(duì)于性質(zhì)相同,所需進(jìn)行的操作大體一致的多個(gè)數(shù)據(jù),可以使用一個(gè)變量來表示,數(shù)據(jù)之間通過下標(biāo)來進(jìn)行區(qū)分。這種具有下標(biāo)性質(zhì)的數(shù)據(jù)類型是數(shù)組。如果使用數(shù)組,上面的問題就變得十分簡(jiǎn)單、清晰。例如,讀入50個(gè)學(xué)生的成績(jī),只需寫如下語句即可:for(inti=1;
i<=50;++i)cin>>a[i];在這里
了帶下標(biāo)的變量(分量變量稱為數(shù)組元素),a[i]來代替a1,
a2,……
,a50,方括號(hào)中的i稱為下標(biāo)。一維數(shù)組一維數(shù)組——定義當(dāng)數(shù)組中每個(gè)元素只帶有一個(gè)下標(biāo)時(shí),稱為一維數(shù)組。一維數(shù)組的定義格式如下:數(shù)組名
名規(guī)則與變量名
名規(guī)則一致。常量表達(dá)式表示數(shù)組元素的個(gè)數(shù)。可以是常量和符號(hào)常量,但不能是變量。例如:類型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式]int
a[10];
//數(shù)組a定義是合法的int
b[n];
//數(shù)組b定義是
的一維數(shù)組——用數(shù)組名稱和元素一維數(shù)組元素的(下標(biāo)),可以格式:數(shù)組中對(duì)應(yīng)的一個(gè)元素。例如:其中,a是數(shù)組名,該數(shù)組有10個(gè)元素,依次表示為:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]需要注意的是:C++中數(shù)組元素的
是從0開始的,所以該數(shù)組不包含a[10]元素。數(shù)組名[下標(biāo)]int
a[10];a[0]=a[1]=a[2]=a[3]=a[4]=a[5]=a[6]=a[7]=a[8]=a[9]=1;一維數(shù)組——注意事項(xiàng)在說明部分定義了一個(gè)數(shù)組變量之后,編譯程序?yàn)樵摂?shù)組在內(nèi)存空間開辟一串連續(xù)的單元。例如:
inta[10];a[0]=a[1]=a[2]=a[3]=a[4]=a[5]=a[6]=a[7]=a[8]=a[9]=1;a數(shù)組在內(nèi)存的 如表所示:a[0]
a[1]
a[2]數(shù)組下標(biāo)可以是整型常量或整型表達(dá)式。C++語言中,每個(gè)數(shù)組第一個(gè)元素的下標(biāo)都是0。C++語言只能逐個(gè)
數(shù)組元素,而不能一次整個(gè)數(shù)組。例如:
int
a[100],b[100];a=b;
//這樣的寫法是
的。數(shù)組元素可以像同類型的普通變量那樣使用,對(duì)其進(jìn)行賦值和運(yùn)算的操作,和普通變量完全相同。例如:c[10]=34; //實(shí)現(xiàn)了給c[10]賦值為34。1111111111a[3]a[4]a[5]a[6]a[7]a[8]a[9]一維數(shù)組——初始化數(shù)組的初始化可以在定義時(shí)一并完成。格式:例如:(1)在初值列表中可以寫出全部數(shù)組元素的值,也可以寫出部分。例如:int
x[10]={0,1,2,
3,4};僅對(duì)數(shù)組的前5個(gè)元素依次進(jìn)行初始化。(2)對(duì)數(shù)組元素全部初始化為0,可以簡(jiǎn)寫為:{0}。例如:int
a[5]={0};將數(shù)組a的5個(gè)元素都初始化為0。類型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式]={值1,值2,……}int
a[5]={1,
2,
3,
4,
5}一維數(shù)組——例5.1輸入n個(gè)數(shù),要求程序按輸入時(shí)的逆序把這n個(gè)數(shù)打印出來,已知整數(shù)不超過100個(gè)。也就是說,按輸入相反順序打印這n個(gè)數(shù)。#include<cstdio>inta[100];intmain(){intx,n=0;while(scanf("%d",&x)==1)a[n++]=x;//相當(dāng){a[n]=x;n++;}for
(inti=n-1;i>=1;--i)//注意%d后面有一個(gè)空格//注意%d后面沒有空格printf("%d",a[i]);printf("%d\n",a[0]);return0;}數(shù)組a在main函數(shù)的外面
。只有放在外面時(shí),數(shù)組a才可以開得很大;放在main函數(shù)內(nèi)時(shí),數(shù)組稍大就會(huì)異常退出。一維數(shù)組——例5.2將a數(shù)組中第一個(gè)元素移到數(shù)組末尾,其余數(shù)據(jù)依次往前平移一個(gè)位置?!痉治觥繛橥瓿深}目所要求的操作,其算法應(yīng)該包括以下幾個(gè)主要步驟:①把第一個(gè)元素a[0]的值取出放在一個(gè)臨時(shí)變量temp中;②其余元素前移:a[1]
→
a[0];a[2]
→
a[1];a[3]
→
a[2];……a[n-1]
→
a[n-2];③將temp值送入a[n-1]一維數(shù)組——例5.2#include<iostream>using
namespace
std;運(yùn)行結(jié)果
:read
10
datas:1
2
3
4
5
6
7
8
9Result:2
3
4
5
6
7
8
9
10const
int
n=10;int
a[n],temp;int
main()10{cout
<<
"read "
<< n
<< "datas" <<
endl;for (int
i=0;
i<n;
++i)
cin
>>
a[i];1}temp=a[0];for (int
i=0;
i<n-1;
++i)
a[i]=a[i+1];a[n-1]=temp;cout
<<
"Result:" <<
endl;for (int
i=0;
i<n;
++i)
cout
<< "
" <<
a[i];return
0;一維數(shù)組——例5.3賓館里有一百個(gè)房間,從1-100編了號(hào)。第一個(gè)服務(wù)員把所有的房間門都打開了,第二個(gè)服務(wù)員把所有是2的倍數(shù)的房間“相反處理”,第三個(gè)服務(wù)員把所有是3的倍數(shù)的房間作“相反處理”…,以后每個(gè)服務(wù)員都是如此。當(dāng)?shù)?00個(gè)服務(wù)員來過后,哪幾扇門是打開的。(所謂“相反處理”是:把開著的門關(guān)上,把關(guān)上的門打開。)【分析】用a[1],
a[2],……,a[n]表示相應(yīng)。模擬100個(gè)服務(wù)員的操作即可。的門的狀態(tài),0為關(guān)、1為開一維數(shù)組——例5.3#include<cstdio>#include<cstring> //調(diào)用memset#defineMAXN100+10inta[MAXN];intmain(){intn,k,
=1;memset(a,0,sizeof(a));for(inti=1;i<=100;
++i)for(intj=1;j<=100;++j)if(j%i==0)a[j]=!a[j];for(inti=1;i<=100;++i)if(a[i]){if(
)
=0;elseprintf("");printf("%d",i);}printf("\n");return0;}memset(a,0,sizeof(a))的作用是把數(shù)組a清零。設(shè)置了一個(gè)標(biāo)志變量
,可以表示當(dāng)前要輸出是否為第一個(gè)。第一個(gè)變量前不應(yīng)該有空格,但其他都有。一維數(shù)組——例5.4?問題:N個(gè)人圍成一圈,從第一個(gè)人開始報(bào)數(shù),數(shù)到M的人出圈;再由下一個(gè)人開始報(bào)數(shù),數(shù)到M的人出圈;…輸出依次出圈的人的。
N,M由鍵盤輸入。【分析】(1)由于對(duì)于每個(gè)人只有出圈和沒有圈兩種狀態(tài),因此可以用型標(biāo)志數(shù)組
過程中每個(gè)人的狀態(tài)。不妨用true表示出圈,false表示沒有出圈。(2)開始的時(shí)候,給標(biāo)志數(shù)組賦初值為false,即全部在圈內(nèi)。(3)模擬報(bào)數(shù)
的過程,直到所有的人出圈為止。一維數(shù)組——例5.4//根據(jù)題意開出數(shù)組大小#include<iostream>usingnamespacestd;int
n,m,s,f,t;boola[101];intmain()//共n人,報(bào)到m出圈//等同于memset(a,0,sizeof(a))//剛開始所有變量默認(rèn)值也是0,或者用f=t=s=0;{ cin>>n>>m;for(t=1;t<=n;++t)a[t]=false;f=0;t=0;s=0;do{
++t;if(t==n+1)t=1;if(a[t]==false)++s;if(s==m){
s=0;cout
<<t
<<
"";a[t]=true;f++;//用t表示要報(bào)數(shù)的人,++t表示下一個(gè)位置的人//因?yàn)槭黔h(huán)形,所以最后一個(gè)人的下一個(gè)人是第一個(gè)人//第t個(gè)位置上的人還沒出圈則報(bào)數(shù),s記錄現(xiàn)在報(bào)的數(shù)字//當(dāng)前報(bào)的數(shù)達(dá)到了出圈條件:s==m//計(jì)數(shù)器清零//輸出出圈人的//標(biāo)準(zhǔn)t位置的人已經(jīng)出圈,在后面的循環(huán)中沒有報(bào)數(shù)權(quán)利//出圈的人數(shù)增加一個(gè)//如果還有人沒出圈,就繼續(xù)報(bào)數(shù)下去}}while(f!=n);return0;}一維數(shù)組——例5.5輸入十個(gè)正整數(shù),把這十個(gè)數(shù)按由大到小的順序排列。(選擇排序)【問題分析】1、將第一個(gè)數(shù)與其后的各個(gè)數(shù)依次比較,若發(fā)現(xiàn),比它大的,則與之交換,比較結(jié)束后,則第一個(gè)數(shù)已是最大的數(shù)。;2、同理,將第二個(gè)數(shù)與其后各個(gè)數(shù)再依次比較,又可得出次大的數(shù)。3、依此方法分別得出第三大的數(shù)、第四大的數(shù)、……4、最后將第九個(gè)數(shù)與第十個(gè)數(shù)比較,以決定倒數(shù)第二大的數(shù)。至此,十個(gè)數(shù)的順序排列結(jié)束。一維數(shù)組——例5.5初始數(shù)據(jù)829105一維數(shù)組——例5.5//讀入10個(gè)初始數(shù)據(jù)//進(jìn)行9次排序//將第i個(gè)數(shù)與其后所有數(shù)比較//若有比a[i]大,則與之交換#include<iostream>using
namespace
std;intt,a[11];intmain(){for
(int
i=1;
i<=10;
++i)cin
>>
a[i];for
(int
i=1;
i<=9;
++i)for
(int
j=i+1;
j<=10;
++j)if
(a[i]<a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}cout
<<"
"
<<
a[i];for
(int
i=1;i<=10;++i)return
0;}一維數(shù)組——例5.6輸入十個(gè)正整數(shù),把這十個(gè)數(shù)按由大到小的順序排列。(冒泡排序)【問題分析】1、從A[1]到A[10],相鄰的數(shù)兩兩比較;2、在每次的比較中,若后面的數(shù)較大,就把前后兩個(gè)對(duì)換,把較大的數(shù)調(diào)到前面,否則不調(diào)換。3、經(jīng)過一輪比較后,最小的數(shù)沉到最末尾的位置,其它的數(shù)皆上升(冒泡)4、第二輪比較A[1]到A[9],第三輪比較A[1]到A[8],直到第九輪比較A[1]和A[2]一維數(shù)組——例5.6初始數(shù)據(jù)56437一維數(shù)組——例5.6#include<iostream>using
namespace
std;const
int
n=10;intt,a[n+1];intmain(){for
(int
i=1;
i<=n;
++i)cin
>>
a[i];for(int
j=1;
j<=n-1;++j)for
(int
i=1;
i<=n-j;++i)if
(a[i]<a[i+1])//讀入n個(gè)初始數(shù)據(jù)//進(jìn)行n-1趟冒泡法排序//每趟從第1個(gè)元素到n-j個(gè)元素進(jìn)行排序//每個(gè)元素與后面的元素比較與交換{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}for
(int
i=1;
i<=n;
++i)
cout
<<
"
"
<<
a[i];return
0;}一維數(shù)組——例5.7用篩法求出100以內(nèi)的全部素?cái)?shù),并按每行五個(gè)數(shù)顯示。【問題分析】⑴把2~100的自然數(shù)放入a[2]到a[100]中(所放入的數(shù)與下標(biāo)號(hào)相同);⑵在數(shù)組元素中,以下標(biāo)為序,按順序找到未曾找過的最小素?cái)?shù)minp,和它的位置p(即下標(biāo)號(hào));⑶從p+1開始,把能被minp整除的各元素值從a數(shù)組中劃去(篩掉),也就是將該元素值置0;⑷讓p=p+1,重復(fù)執(zhí)行第②、③步驟,直到minp>floor(sqrt(N));⑸打印輸出a數(shù)組中留下來、未被篩掉的各元素值。一維數(shù)組——例5.7123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100一維數(shù)組——例5.7#include<iostream>#include<cmath>#include<iomanip>usingnamespacestd;constintn=100;
intt;bool
a[n+1];intmain(){ for
(int
i=0;
i<=n;
++i)a[i]=true;a[1]=false;for
(int
i=2;i<=sqrt(n);++i)if(a[i])for
(intj=2;j<=n/i;++j)a[i*j]=false;t=0;for
(int
i=2;i<=n;++i)if(a[i]){ cout
<<setw(5)<<i;t++;if(t%5==0)
cout
<<
endl;}return0;}上機(jī)練習(xí)1、與指定數(shù)字相同的數(shù)的個(gè)數(shù):輸出一個(gè)整數(shù)序列中與指定數(shù)字相同的數(shù)的個(gè)數(shù)。2、
摘蘋果:
家的院子里有一棵蘋果樹,每到秋天樹上就會(huì)結(jié)出10個(gè)蘋果。蘋果成熟的時(shí)候,
就會(huì)跑去摘蘋果。
有個(gè)30厘米高的板凳,當(dāng)她不能直接用手摘到蘋果的時(shí)候,就會(huì)踩到板凳上再試試?,F(xiàn)在已知10個(gè)蘋果到地面的高度,以及
把手伸直的時(shí)候能夠達(dá)到的最大高度,請(qǐng)幫算一下她能夠摘到的蘋果的數(shù)目。假設(shè)她碰到蘋果,蘋果就會(huì)掉下來。的單價(jià)表:數(shù)據(jù)結(jié)構(gòu)與算法32.7元/本3、計(jì)算書費(fèi):下面是一個(gè)計(jì)算概論28.9元/本數(shù)字邏輯45.6元/本人工智能35元/本編譯原理27.8元/本計(jì)算機(jī)網(wǎng)絡(luò)56元/本C++程序設(shè)計(jì)
78元/本計(jì)算機(jī)體系結(jié)構(gòu)86.2元/本操作系統(tǒng)
43元/本JAVA程序設(shè)計(jì)65元/本給定每種
的數(shù)量,編程計(jì)算應(yīng)付的總費(fèi)用。4、數(shù)組逆序重:將一個(gè)數(shù)組中的值按逆序重新存放。例如,原來的順序?yàn)?,
6,
5,
4,
1。要求改為1,
4, 5,6,
8。上機(jī)練習(xí)與疾?。耗翅t(yī)院想統(tǒng)計(jì)一下某項(xiàng)疾病的獲得與否與是否有關(guān),需要對(duì)以5、前的計(jì)的患記錄進(jìn)行整理,按照0-18、19-35、36-60、61以上(含61)四個(gè)
段統(tǒng)數(shù)占總患
數(shù)的比例。6、校門外的樹:某校大門外長(zhǎng)度為L(zhǎng)的馬
有一排樹,每?jī)煽孟噜彽臉渲g的間隔都是1米。
可以把馬路看成一個(gè)數(shù)軸,馬路的一端在數(shù)軸0的位置,另一端在L的位置;數(shù)軸上的每個(gè)整數(shù)點(diǎn),即0,1,2,...,L,都種有一棵樹。由于馬有一些區(qū)域要用來建地鐵。這些區(qū)域用它們?cè)跀?shù)軸上的起始點(diǎn)和終止點(diǎn)表示。已知任一區(qū)域的起始點(diǎn)和終止點(diǎn)的坐標(biāo)都是整數(shù),區(qū)域之間可能有重合的部分?,F(xiàn)在要把這些區(qū)域中的樹(包括區(qū)域端點(diǎn)處的兩棵樹)移走。你的任務(wù)是計(jì)算將這些樹都移走后,馬7、向量點(diǎn)積計(jì)算:還有多少棵樹。性代數(shù)、計(jì)算幾何中,向量點(diǎn)積是一種十分重要的運(yùn)算。給定兩個(gè)n維向量a=(a1,
a2,
...,
an)和b=(b1,
b2,
...,
bn),求點(diǎn)積a·b=a1b1
+a2b2
+
...
+
anbn。上機(jī)練習(xí)8、開關(guān)燈:假設(shè)有N盞燈(N為不大于5000的正整數(shù)),從1到N按順序依次
,初始時(shí)全部處于開啟狀態(tài);有M個(gè)人(M為不大于N的正整數(shù))也從1到M依次
。第一個(gè)人(1號(hào))將燈全部關(guān)閉,第二個(gè)人(2號(hào))將
為2的倍數(shù)的燈打開,第三個(gè)人(3號(hào))將為3的倍數(shù)的燈做相反處理(即將打開的燈關(guān)閉,將關(guān)閉的燈打開)。依照
遞增順序,以后的人都和3號(hào)一樣,將凡是自己
倍數(shù)的燈做相反處理。請(qǐng)問:當(dāng)?shù)贛個(gè)人操作之后,哪幾盞燈是關(guān)閉的,按從小到大輸出其
,其間用逗號(hào)間隔。9、查找特定的值:在一個(gè)序列(下標(biāo)從1開始)中查找一個(gè)給定的值,輸出第一次出現(xiàn)的位置。10、不高興的津津:津津上初中了。認(rèn)為津津應(yīng)該更加用習(xí),所以津津除了上學(xué)之外,還要參加為她報(bào)名的各科復(fù)習(xí)班。另外每周還會(huì)送她去學(xué)習(xí)朗誦、舞蹈和鋼琴。但是津津如果一天上課超過八個(gè)小時(shí)就會(huì)不高興,而且上得越久就會(huì)越不高興。假設(shè)津津不會(huì)因?yàn)槠渌虏桓吲d,并且不高興不會(huì)持續(xù)到第二天。請(qǐng)你幫忙檢查一下津津下周的日程安排,看看下周她會(huì)不會(huì)不高興;如果會(huì)的話,哪天最不高興。上機(jī)練習(xí)11、最大值和最小值的差:輸出一個(gè)整數(shù)序列中最大的數(shù)和最小的數(shù)的差。12、不與最大數(shù)相同的數(shù)字之和:輸出一個(gè)整數(shù)數(shù)列中不與最大數(shù)相同的數(shù)字之和。13、白細(xì)胞計(jì)數(shù):醫(yī)院采樣了某臨床病例治療期間的白細(xì)胞數(shù)量樣本n份,用于分析某種新抗生素對(duì)該病例的治療效果。為了降低分析誤差,要先從這n份樣本中去除一個(gè)數(shù)值最大的樣本和一個(gè)數(shù)值最小的樣本,然后將剩余n-2個(gè)有效樣本的平均值作為分析指標(biāo)。同時(shí),為了觀察該抗生素的療效是否穩(wěn)定,還要給出該平均值的誤差,即所有有效樣本(即不包括已扣除的兩個(gè)樣本)與該平均值之差的絕對(duì)值的最大值。
現(xiàn)在請(qǐng)你編寫程序,根據(jù)提供的n個(gè)樣本值,計(jì)算出該病例的平均白細(xì)胞數(shù)量和對(duì)應(yīng)的誤差。14、直方圖:給定一個(gè)非負(fù)整數(shù)數(shù)組,統(tǒng)計(jì)里面每一個(gè)數(shù)的出現(xiàn)次數(shù)。
只統(tǒng)計(jì)到數(shù)組里最大的數(shù)。假設(shè)
Fmax(Fmax<10000)是數(shù)組里最大的數(shù),那么
只統(tǒng)計(jì){0,
1,
2,
...,Fmax}里每個(gè)數(shù)出現(xiàn)的次數(shù)。上機(jī)練習(xí)15、最長(zhǎng)
知一個(gè)已經(jīng)從小到大排序的數(shù)組,這個(gè)數(shù)組的一個(gè)平臺(tái)(Plateau)就是連續(xù)的一串值相同的元素,并且這一串元素不能再延伸。例如,在1,2,2,3,3,3,4,5,5,6中1,2-2,3-3-3,4,5-5,6都是平臺(tái)。試編寫一個(gè)程序,接收一個(gè)數(shù)組,把這個(gè)數(shù)組最長(zhǎng)的平臺(tái)找出來。在上面的例子中3-3-3就是最長(zhǎng)的平臺(tái)。16、整數(shù)去重:給定含有n個(gè)整數(shù)的序列,要求對(duì)這個(gè)序列進(jìn)行去重操作。所謂去重,是指對(duì)這個(gè)序列中每個(gè)重復(fù)出現(xiàn)的數(shù),只保留該數(shù)第一次出現(xiàn)的位置,刪除其余位置。17、鋪地毯:為了準(zhǔn)備一個(gè)獨(dú)特的
,組織者在會(huì)場(chǎng)的一片矩形區(qū)域(可看做是平面直角坐標(biāo)系的第一象限)鋪上一些矩形地毯。一共有n張地毯,
從1到n?,F(xiàn)在將這些地毯按照
從小到大的順序平行于坐標(biāo)軸先后鋪設(shè),后鋪的地毯覆蓋在前面已經(jīng)鋪好的地毯之上。地毯鋪設(shè)完成后,組織者想知道覆蓋地面某個(gè)點(diǎn)的最上面的那張地毯的
。注意:在矩形地毯邊界和四個(gè)頂點(diǎn)上的點(diǎn)也算被地毯覆蓋。二維數(shù)組二維數(shù)組——定義當(dāng)一維數(shù)組元素的類型也是一維數(shù)組時(shí),便構(gòu)成了“數(shù)組的數(shù)組”,即二維數(shù)組。二維數(shù)組定義的一般格式:數(shù)據(jù)類型數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]例如:int
a[4][10];a數(shù)組實(shí)質(zhì)上是一個(gè)有4行、10列的表格,表格中可
40個(gè)元素。第1行第1列對(duì)應(yīng)a數(shù)組的a[0][0],第4行第10列對(duì)應(yīng)數(shù)組元素a[3][9]。a01234567890123二維數(shù)組——二維數(shù)組的數(shù)組元素的格式為:與一維數(shù)組元素類似,區(qū)別在于二維數(shù)組元素的必須給出兩個(gè)下標(biāo)。例如:表示a是二維數(shù)組(相當(dāng)于一個(gè)3*5的表格),共有3*5=15個(gè)元素,它們是:因此a可以看成一個(gè)矩陣(表格),a[2][3]即表示第3行第4列的元素。<數(shù)組名>[下標(biāo)1][下標(biāo)2]int
a[3][5];a012340a[0][0]a[0][1]a[0][2]a[0][3]a[0][4]1a[1][0]a[1][1]a[1][2]a[1][3]a[1][4]2a[2][0]a[2][1]a[2][2]a[2][3]a[2][4]二維數(shù)組——初始化二維數(shù)組的初始化和一維數(shù)組類似??梢詫⒚恳恍蟹珠_來寫在各自的括號(hào)里,也可以把所有數(shù)據(jù)寫在一個(gè)括號(hào)里。例如:兩種寫法是等價(jià)的,但盡量不要使用第二種int
direct[4][2]={{1,
0},
{0,
1},
{-1,
0},
{0,
-1}}int
direct[4][2]={1,
0,
0,
1,
-1,
0,
0,
-1}a010101012-1030-1二維數(shù)組——例5.8設(shè)有一程序#include<cstdio>#include<iostream>constintn=3;usingnamespacestd;inta[n+1][n+1];intmain(){for
(int
i=1;i<=n;++i){for
(intj=1;j<=n;++j)cin>>a[i][j];}for
(int
i=1;i<=n;++i){for
(intj=1;j<=n;++j)cout
<<
''<<a[j][i];cout
<<endl;}return0;}輸入:123456789輸出:147258369二維數(shù)組——例5.9已知一個(gè)6*6的矩陣(方陣),把矩陣二條對(duì)角線上的元素值加上10,然后輸出這個(gè)新矩陣?!痉治觥烤仃嚰幢砀瘢且粋€(gè)二維數(shù)組,有6行6列共36個(gè)元素,每個(gè)矩陣都有二條對(duì)角線,本題難點(diǎn)在于對(duì)角線的元素怎么確定。二維數(shù)組——例5.9//輸入矩陣元素//更改對(duì)角線上元素的值#include<iostream>#include<iomanip>using
namespace
std;inta[7][7];intmain(){for
(int
i=1;i<=6;++i)for
(intj=1;j<=6;++j)cin>>a[i][j];for
(int
i=1;i<=6;++i)for
(intj=1;j<=6;++j)if((i==j)||(i+j==7))//尋找對(duì)角線的特征
a[i][j]+=10;//輸出6行6列的矩陣元素for
(int
i=1;i<=6;++i){for
(intj=1;j<=6;++j)cout
<<setw(5)<<a[i][j];cout
<<endl;}return0;}二維數(shù)組——例5.10部分元素是0的矩陣稱為稀疏矩陣,假設(shè)有k個(gè)非0元素,則可把稀疏矩陣用
K*3的矩陣簡(jiǎn)記之,其中第一列是行號(hào),第二列是列號(hào),第三列是該行、該列下的非元素的值。如:0005145//第1行第4列有個(gè)數(shù)是50200簡(jiǎn)記成:222//第2行第2列有個(gè)數(shù)是20100321//第3行第2列有個(gè)數(shù)是1試編程讀入一稀疏矩陣,轉(zhuǎn)換成簡(jiǎn)記形式,并輸出。【分析】本題中需要解決的主要問題是查找非零元素并位置。將原始矩陣存于數(shù)組a。轉(zhuǎn)換后的矩陣存于數(shù)組b,當(dāng)然b數(shù)組的行數(shù)可以控制在一個(gè)小范圍內(nèi)。二維數(shù)組——例5.10#include<iostream>#include<iomanip>const
intn=3,m=5;using
namespace
std;intmain(){ inta[n+1][m+1],b[101][4],k=0;for
(int
i=1;
i<=n;
++i)for
(int
j=1;
j<=m;
++j)cin
>>
a[i][j];for
(int
i=1;
i<=n;
++i)for
(int
j=1;
j<=m;
++j)if
(a[i][j]!=0){
++k;b[k][1]=i;b[k][2]=j;b[k][3]=a[i][j];}for
(int
i=1;
i<=k;
++i){for
(int
j=1;
j<=3;
++j)cout
<<
setw(3)
<<b[i][j];cout
<<
endl;}return
0;}運(yùn)行結(jié)果:輸入:
0
0
0
0
50
0
4
0
01
0
0
0
1輸出:1二維數(shù)組——例5.11打印三角形的前10行。三角形如下圖:1111111211214114641[圖1] [圖2]【問題分析】觀察圖1,大家不容易找到規(guī)律,但是如果將它轉(zhuǎn)化為圖2,不難發(fā)現(xiàn)
三角形其實(shí)就是一個(gè)二維表的
角形部分,假設(shè)通過二維數(shù)組yh
,每行首尾元素為1,且其中任意一個(gè)非首位元素yh[i][j]的值其實(shí)就是yh[i-1][j-1]與yh[i-1][j]的和,另外每一行的元素個(gè)數(shù)剛好等于行數(shù)。有了數(shù)組元素的值,要打印
三角形,只需要控制好輸出起始位置就行了。二維數(shù)組——例5.11//設(shè)定第一行的值//從第二行開始推導(dǎo)//設(shè)定每一行的首尾值為1//當(dāng)前行非首尾的數(shù)//每個(gè)數(shù)等于上一行的二個(gè)數(shù)之和#include<iostream>#include<iomanip>using
namespace
std;intmain(){inta[11][11];a[1][1]=1;for
(int
i=2;i<=10;
++i){a[i][1]=1;a[i][i]=1;for
(int
j=2;
j<=i-1;
++j)a[i][j]=a[i-1][j-1]
+
a[i-1][j];}for
(int
i=1;i<=10;
i++){if
(i!=10)
cout<<setw(30-3*i)<<"";
//控制每行的起始位置,即空格數(shù)量
for(intj=1;j<=i;j++)
cout<<setw(6)<<a[i][j];cout
<<endl;}return0;}二維數(shù)組——例5.12輸入一串字符,字符個(gè)數(shù)不超過100,且以“.”結(jié)束。判斷它們是否構(gòu)成回文?!痉治觥克^回文指從左到右和從右到左讀一串字符的值是一樣的,如12321,ABCBA,AA等。先讀入要判斷的一串字符(放入數(shù)組letter中),并記住這串字符的長(zhǎng)度,然后首尾字符比較,并不斷向中間靠攏,就可以判斷出是否為回文。二維數(shù)組——例5.12#include<iostream>using
namespace
std;intmain(){ char
ch,letter[101];inti=0,j=1;cin
>>
ch;while(ch!='.')//當(dāng)讀入的字符不是'.'時(shí)繼續(xù)循環(huán){
++i;letter[i]=ch;cin
>>
ch;}while((j<i)
&&(letter[j]==letter[i]))//判斷它是否是回文{ --i;
++j;
}if
(j>=i)
cout
<<
"Yes"
<<endl;else
cout
<<
"No"
<<endl;return
0;}二維數(shù)組——例5.13蛇形填數(shù):在n*n方陣?yán)锾钊?,2,3,…,n*n,要求填成蛇形。例如n=4時(shí)方陣為:10 11
12
197
6
5
4上面的方陣中,多余的空格只是為了便于觀察規(guī)律,不必嚴(yán)格輸出,n<=8?!痉治觥浚?/p>
可以用一個(gè)二維數(shù)組來
題目中的方陣。只需
一個(gè)inta[MAXN][MAXN],就可以獲得一個(gè)大小為MAXN×MAXN的方陣。讓
從1開始依次填寫。設(shè)“筆”的坐標(biāo)為(x,y),則一開始x=0,y=n-1,即第0行,第n-1列?!肮P”的移動(dòng)軌跡是:下,下,下,左,左,左,上,上,上,右,右,下,下,左,上。總之,先是下,到不能填了為止,然后是左,接著是上,最后是右?!安荒芴睢笔侵冈僮呔统鼋纾ɡ?→5),或者再走就要走到以前填過的格子(例如12→13)。如果把所有格子初始為0,就能很方便地加以判斷。二維數(shù)組——例5.13#include<cstdio>#include<cstring>#define
MAXN
10inta[MAXN][MAXN];intmain(){ intn,x,y,tot=0;scanf("%d",
&n);memset(a,0,sizeof(a));tot=a[x=0][y=n-1]=1;while(tot<n*n){ while(x+1<n&&!a[x+1][y])
a[++x][y]=++tot;while
(y-1>=0
&&
!a[x][y-1])
a[x][--y]=++tot;while
(x-1>=0
&&
!a[x-1][y])
a[--x][y]=++tot;while(y+1<n&&!a[x][y+1])
a[x][++y]=++tot;}for(x=0;x<n;
++x){ for(y=0;y<n;
++y)printf("%3d",a[x][y]);printf("\n");}return0;}賦值x=0和y=n-1后馬上要把它們作為a數(shù)組的下標(biāo),因此可以合并完成;tot和a[0][n-1]都要賦值1,也可以合并完成。while語句采取先判斷,再移動(dòng),避免退回來。如果x越界,x+1會(huì)等于n,a[x+1][y]將內(nèi)存!幸運(yùn)的是,&&是短路運(yùn)算符。如果x+1<n為假,將不會(huì)計(jì)算!a[x+1][y],也就不會(huì)越界了。上機(jī)練習(xí)1、矩陣交換行:給定一個(gè)5*5的矩陣(數(shù)學(xué)上,一個(gè)r×c的矩陣是一個(gè)由r行c列元素排列成的矩形陣列),將第n行和第m行交換,輸出交換后的結(jié)果。2、
列對(duì)角線的格:輸入三個(gè)自然數(shù)N,i,j(1<=i<=n,1<=j<=n),輸出在一個(gè)N*N格的棋盤中(行列均從1開始
),與格子(i,j)
、同列、同一對(duì)角線的所有格子的位置。3、計(jì)算矩陣邊緣元
和:輸入一個(gè)整數(shù)矩陣,計(jì)算位于矩陣邊緣的元
和。所謂矩陣邊緣的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。4、計(jì)算鞍點(diǎn):給定一個(gè)5*5的矩陣,每行只有一個(gè)最大值,每列只有一個(gè)最小值,尋找這個(gè)矩陣的鞍點(diǎn)。鞍點(diǎn)指的是矩陣中的一個(gè)元素,它是所在行的最大值,并且是所在列的最小值。5、圖像相似度:給出兩幅相同大小的黑白圖像(用0-1矩陣)表示,求它們的相似度。說明:若兩幅圖像在相同位置上的像素點(diǎn)顏色相同,則稱它們?cè)谠撐恢镁哂邢嗤南袼攸c(diǎn)。兩幅圖像的相似度定義為相同像素點(diǎn)數(shù)占總像素點(diǎn)數(shù)的百分比。上機(jī)練習(xí)6、矩陣加法:輸入兩個(gè)n行m列的矩陣A和B,輸出它們的和A+B。7、矩陣乘法:計(jì)算兩個(gè)矩陣的乘法。n*m階的矩陣A乘以m*k階的矩陣B得到的矩陣C
是n*k階的,且C[i][j]=A[i][0]*B[0][j]+A[i][1]*B[1][j]+……+A[i][m-1]*B[m-1][j](C[i][j]表示C矩陣中第i行第j列元素)。8、矩陣轉(zhuǎn)置:輸入一個(gè)n行m列的矩陣A,輸出它的轉(zhuǎn)置AT。9、圖像旋轉(zhuǎn):輸入一個(gè)n行m列的黑白圖像,將它順時(shí)針旋轉(zhuǎn)90度后輸出。10、圖像模糊處理:給定m行n列的圖像各像素點(diǎn)的灰度值,要求用如下方法對(duì)其進(jìn)行模糊化處理:①四周最外側(cè)的像素點(diǎn)灰度值不變;②中間各像素點(diǎn)新灰度值為該像素點(diǎn)及其上下左右相鄰四個(gè)像素點(diǎn)原灰度值的平均(舍入到最接近的整數(shù))。字符數(shù)組和字符串類型字符數(shù)組和字符串類型——概述無論數(shù)組的下標(biāo)有幾個(gè),類型如何,但數(shù)組中全體元素的類型必須相同。稱它為字?jǐn)?shù)組元素的類型可以是任何類型,當(dāng)它是字符型時(shí),符數(shù)組。由于字符數(shù)組與字符類型的應(yīng)用是計(jì)算機(jī)非數(shù)值處理的重要方面之一,所以
把它們兩個(gè)放在一起進(jìn)行
。字符類型字符類型為由一個(gè)字符組成的字符常量或字符變量。字符常量定義:字符變量定義:字符類型是一個(gè)有序類型,字符的大小順序按其ASCII代碼的大小而定。const
字符常量='字符'char
字符變量;字符類型——例5.14按字母表順序和逆序每隔一個(gè)字母打印。即打印出:acegikmoqsuwyzxrvtpnljhfdb#include<iostream>#include<iomanip>using
namespace
std;int
main(){for
(char
letter='a';
letter<='z';letter+=2)cout
<<
setw(3)
<<
letter;cout
<<
endl;for (char
letter='z'; letter>='a';
letter-=2)cout
<<
setw(3)
<<
letter;return
0;}利用字符類型是順序類型這一特性,靈活利用字符變量當(dāng)作循環(huán)變量,使程序處理起來比較直觀。字符數(shù)組——定義字符數(shù)組是指元素為字符的數(shù)組。字符數(shù)組是用來存放字符序列或字符串的。字符數(shù)組也有一維、二維和三維之分。字符數(shù)組定義格式與一般數(shù)組相同,第一個(gè)元素的下標(biāo)同樣是0,而不是1。具體格定義式如下:例如:數(shù)組ch1是一個(gè)具有5個(gè)字符元素的一維字符數(shù)組數(shù)組ch2是一個(gè)具有15個(gè)字符元素的二維字符數(shù)組[
類型]char
數(shù)組名[常量表達(dá)式1]…charch1[5];charch2[3][5];字符數(shù)組——初始化(1)用字符初始化數(shù)組初始值表中的每個(gè)數(shù)據(jù)項(xiàng)是一個(gè)字符,當(dāng)初始值個(gè)數(shù)少于數(shù)組元素個(gè)數(shù)時(shí),從首元素開始賦值,剩余元素默認(rèn)為空字符。字符數(shù)組中可以存放若干個(gè)字符,也可以來存放字符串。數(shù)組chr2中存放著一個(gè)字符串"abcd"。字符數(shù)組和字符串區(qū)別在于字符串末尾有結(jié)束符'\0'。字符串是一維數(shù)組,但是一維字符數(shù)組不一定是字符串。char
chr1[5]={'a',
'b',
'c',
'd',
'e'};char
chr2[5]={'a',
'b',
'c',
'd',
'\0'};字符數(shù)組——初始化(2)用字符串初始化數(shù)組用一個(gè)字符串初始化一個(gè)一維字符數(shù)組,可以寫成下列形式:字符串的長(zhǎng)度最大為字符數(shù)組的大小減1。同理,對(duì)二維字符數(shù)組來講,可存放若干個(gè)字符串。可使用由若干個(gè)字符串組成的初始值表給二維字符數(shù)組初始化。例如:在數(shù)組ch3中存放3個(gè)字符串,每個(gè)字符串的長(zhǎng)度不得大于3。char
chr2[5]="abcd";char
chr3[3][4]={"abc",
"mno",
"xyz"};字符數(shù)組——初始化(3)數(shù)組元素賦值字符數(shù)組的賦值是給該字符數(shù)組的各個(gè)元素賦一個(gè)字符值。例如:對(duì)二維、三維字符數(shù)組也是如此。當(dāng)需要將一個(gè)數(shù)組的全部元素值賦予另一數(shù)組時(shí),不可以用數(shù)組名直接賦值的方式,要使用字符串拷貝函數(shù)來完成。char
chr[3];chr[0]='a';
chr[1]='b';
chr[2]='c';字符常量和字符串常量的區(qū)別①兩者的定界符不同,字符常量由單引號(hào)括起來,字符串常量由雙引號(hào)括起來。②字符常量只能是單個(gè)字符,字符串常量則可以是多個(gè)字符。③可以把一個(gè)字符常量賦給一個(gè)字符變量,但不能把一個(gè)字符串常量賦給一個(gè)字符變量。④字符常量占一個(gè)字節(jié),而字符串常量占用字節(jié)數(shù)等于字符串的字節(jié)數(shù)加1。增加的一個(gè)字節(jié)中存放字符串結(jié)束標(biāo)志'\0'。例如:字符常量'a'占一個(gè)字節(jié),字符串常量"a"占二個(gè)字節(jié)。字符串的輸入與輸出字符串可以作為一維字符數(shù)組來處理,那么字符串的輸入和輸出也可以按照數(shù)組元素來處理,下面不再做介紹。下面僅介紹將字符串作為一個(gè)整體進(jìn)行輸入和輸出的語句。字符串的輸入從鍵盤輸入一個(gè)字符數(shù)組可以使用scanf語句或gets語句。(1)scanf語句①這里的字符串名稱之前不加&這個(gè)取地址符。例如:scanf("%s",&s1)是錯(cuò)誤的。②系統(tǒng)會(huì)自動(dòng)在輸入的字符串常量后添加'\0',因此輸入時(shí),僅輸入字符串的內(nèi)容即可。③輸入多個(gè)字符串時(shí),以空格分隔。例如:scanf("%s%s%s",
s1,
s2,
s3);從鍵盤輸入"Let
us
go",則三個(gè)字符串分別獲取了三個(gè)單詞。如果僅有一個(gè)輸入字符串名稱的情況下,字符串變量?jī)H獲取空格前的內(nèi)容。例如:scanf("%s",s1);從鍵盤輸入"Let
us
go",則s1變量?jī)H獲取第一個(gè)單詞"Let"。scanf("%s",
字符串名稱);字符串的輸入(2)gets語句①使用gets只能輸入一個(gè)字符串。例如:gets(s1,s2);是錯(cuò)誤的。②使用gets,是從光標(biāo)開始的地方讀到換行符,也就是說讀入的是一整行,而使用scanf是從光標(biāo)開始的地方到空格,如果這一行沒有空格,才讀到行尾。例如:scanf("%s",s1);
gets(s2);對(duì)于相同的輸入"s2獲取的結(jié)果則是"o
World!"。s1獲取的結(jié)果僅僅是"
o",而o
World!"gets(字符串名稱);字符串的輸出向屏幕輸出一個(gè)字符串可使用printf語句或puts語句。(1)printf語句①用%s格式輸出時(shí),printf的輸出項(xiàng)只能是字符串(字符數(shù)組)名稱,而不能是數(shù)組元素。例如:printf("%s",
a[5]);是錯(cuò)誤的。②輸出字符串不包括字符串結(jié)束標(biāo)志符'\0'。(2)
puts語句puts語句輸出一個(gè)字符串和一個(gè)換行符。對(duì)于字符串a(chǎn),printf("%s\n",a)和puts(a)是等價(jià)的。printf("%s",
字符串名稱);puts(字符串名稱);字符數(shù)組和字符串類型——例5.15C++中,一個(gè)字符串中的字符可以通過其對(duì)應(yīng)的下標(biāo)靈活使用。//
gets()調(diào)用cstdio庫//strlen()調(diào)用cstring庫#include<cstdio>#include<iostream>#include<cstring>using
namespace
std;int
main(){char
st[100];gets(st);//
一行字符串for (int
i=0;
i<strlen(st);
++i)cout
<<
st[i];
//輸出st串中的第i個(gè)字符return
0;}字符數(shù)組和字符串類型——例5.16對(duì)給定的10個(gè)國(guó)家名,按其字母的順序輸出。#include<cstdio>#include<iostream>#include<cstring>usingnamespacestd;intmain(){ chart[21],cname[11][21];for
(int
i=1;i<=10;++i)gets(cname[i]);//對(duì)10個(gè)國(guó)家名進(jìn)行選擇排序//用k來標(biāo)記第i輪排序中最小的國(guó)家名下標(biāo)for
(int
i=1;i<=9;++i){intk=i;for
(intj=i+1;j<=10;++j)if(strcmp(cname[k],cname[j])>0)k=j;strcpy(t,
cname[i]);strcpy(cname[i],
cname[k]);strcpy(cname[k],t);}for
(int
i=1;
i<=10;++i)cout
<<cname[i]
<<endl;return0;}字符串處理函數(shù)(調(diào)用<cstring>庫)函數(shù)格式函數(shù)功能strcat(字符串名1,字符串名2)將字符串2連接到字符串1后邊,返回字符串1的值。strncat(字符串名1,字符串名2,長(zhǎng)度n)將字符串2前n個(gè)字符連接到字符串1后邊,返回字符串1的值。strcpy(字符串名1,字符串名2)將字符串2
到字符串1,返回字符串1的值。strncpy(字符串名1,字符串名2,長(zhǎng)度n)將字符串2前n個(gè)字符
到字符串1,返回字符串1的值。strcmp(字符串名1,字符串名2)比較字符串1和字符串2的大小,比較的結(jié)果由函數(shù)帶回;如果字符串1>字符串2,返回一個(gè)正整數(shù);如果字符串1=字符串2,返回0;如果字符串1<字符串2,返回一個(gè)負(fù)整數(shù);strncmp(字符串名1,字符串名2,長(zhǎng)度n)比較字符串1和字符串2的前n個(gè)字符進(jìn)行比較,函數(shù)返回值的情況同strcmp函數(shù);strlen(字符串名)計(jì)算字符串的長(zhǎng)度,終止符’\0’不算在長(zhǎng)度之內(nèi)strlwr(字符串名)將字符串中大寫字母換成小寫字母strupr(字符串名)將字符串中小寫字母換成大寫字母字符數(shù)組和字符串類型——例5.17【問題描述】請(qǐng)統(tǒng)計(jì)某個(gè)給定范圍[L,R]的所有整數(shù)中,數(shù)字2出現(xiàn)的次數(shù)。比如給定范圍[2,22],數(shù)字2在數(shù)2中出現(xiàn)了1次,在數(shù)12中出現(xiàn)1次,在數(shù)20中出現(xiàn)1次,在數(shù)21中出現(xiàn)1次,在數(shù)22中出現(xiàn)2次,所以數(shù)字2在該范圍內(nèi)一共出現(xiàn)了6次。【輸入】輸入共1行,為兩個(gè)正整數(shù)L和R,之間用一個(gè)空格隔開?!据敵觥枯敵龉?行,表示數(shù)字2出現(xiàn)的次數(shù)。【輸入樣例1】2
22【輸出樣例1】6【數(shù)據(jù)范圍】1≤L≤R≤10000【輸入樣例2】2
100【輸出樣例2】20字符數(shù)組和字符串類型——例5.17分析1枚舉[L,R]區(qū)間的所有整數(shù),對(duì)于每個(gè)整數(shù)x:若x的最后一位為2,答案加一將x的最后一位刪除循環(huán)上面操作,直到x值為0。#include<iostream>#include<cstdio>using
namespace
std;intmain(){intl,r,ans=0;cin>>l>>r;for
(int
i=l;i<=r;++i){intx=i;while(x>0){if(x%10==2)
++ans;x/=10;}}cout
<<ans;return0;}字符數(shù)組和字符串類型——例5.17分析2枚舉[L,R]區(qū)間的所有整數(shù),對(duì)于每個(gè)整數(shù)x:將整數(shù)x轉(zhuǎn)化成字符串s,可以用sprintf(s,
"%d",
x)來實(shí)現(xiàn);對(duì)s的每個(gè)字符逐一判斷是否為2。#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;chars[10];intmain(){intl,r,ans=0;cin>>l>>r;for
(int
i=l;i<=r;++i){sprintf(s,"%d",
i);l=strlen(s);for
(int
j=0;
j<=l-1;
++j)if
(s[j]=='2')++ans;}cout
<<ans;return0;}字符數(shù)組和字符串類型——例5.17【問題描述】給定一個(gè)整數(shù),請(qǐng)將該數(shù)各個(gè)位上數(shù)字反轉(zhuǎn)得到一個(gè)新數(shù)。新數(shù)也應(yīng)滿足整數(shù)的常見形數(shù)字不應(yīng)為零(參見樣例2)。式,即除非給定的原數(shù)為零,否則反轉(zhuǎn)后得到的新數(shù)的最【輸入】輸入共1行,一個(gè)整數(shù)n。【輸出】輸出共1行,一個(gè)整數(shù),表示反轉(zhuǎn)后的新數(shù)?!据斎霕永?】123【輸出樣例1】321【數(shù)據(jù)范圍】【輸入樣例2】-380【輸出樣例2】-83-1,000,000,000≤N≤1,000,000,000。字符數(shù)組和字符串類型——例5.18分析1將整數(shù)n轉(zhuǎn)化成字符串s,可以用sprintf(s,
"%d",
n)來實(shí)現(xiàn);對(duì)字符串s進(jìn)行反轉(zhuǎn)操作放在字符串c中;將字符串c轉(zhuǎn)換成數(shù)字n,可以用sscanf(c,"%d",
&n)來實(shí)現(xiàn)。#include
<iostream>#include
<cstdio>using
namespace
std;char
s[100],c[100];intmain(){int
n,l;cin
>>
n;sprintf(s,
"%d",
n);若輸入:-120則:n:-12s:"-c:"0n:21l=strlen(s);for
(int
i=0;i
<=
l-1;
++i)c[l-i-1]=s[i];if
(n<0)
cout<<"-";sscanf(c,
"%d",
&n);0120"cout
<<
n;21-"return
0;}字符數(shù)組和字符串類型——例5.18分析1判斷數(shù)字是否為負(fù)數(shù),是則先輸出符號(hào),并將數(shù)字取絕對(duì)值;將數(shù)字從后往前轉(zhuǎn)換成字符串;去掉前導(dǎo)0,然后輸出數(shù)字。#include
<iostream>#include<string>
//包含string類,不是<cstring>#include
<cstdio>using
namespace
std;string
s;
//string類,有強(qiáng)大的字符串處理功能//自定義函數(shù),將數(shù)字x從后往前轉(zhuǎn)換成字符串svoid
Solve(intx){while
(x>0){s+=x%10+48;
x/=10;}
//48是'0'的ASCII}int
main(){ int
n;scanf("%d",
&n);if
(n<0)
{
cout
<<"-";
n=-n;}Solve(n);int
j=0,
len=s.size();
//s.size(),s的長(zhǎng)度while
((j+1!=len)
&&
(s[j]=='0'))
//去掉前導(dǎo)0++j;for
(;
j<len;
++j)
cout
<<
s[j];return
0;}字符數(shù)組和字符串類型——例5.19【問題描述】一般的文本編輯器都有查找單詞的功能,該功能可以快速定位特定單詞在文章中的位置,有的還能統(tǒng)計(jì)出特定單詞在文章中出現(xiàn)的次數(shù)。請(qǐng)你編程實(shí)現(xiàn)這
能,具體要求是:給定一個(gè)單詞,請(qǐng)你輸出它在給定的文章中出現(xiàn)的次數(shù)和第一次出現(xiàn)的位置。注意:匹配單詞時(shí),不區(qū)分大小寫,但要求完全匹配,即給定單詞必須與文章中的某一獨(dú)立單詞在不區(qū)分大小寫的情況下完全相同,如果給定單詞僅是文章中某一單詞的一部分則不算匹配?!据斎搿康?行為一個(gè)字符串,其中只含字母,表示給定單詞;第2行為一個(gè)字符串,其中只可能包含字母和空格,表示給定的文章。【輸出】只有一行,如果在文章中找到給定單詞則輸出兩個(gè)整數(shù),兩個(gè)整數(shù)之間用一個(gè)空格隔開,分別是單詞在文章中出現(xiàn)的次數(shù)和第一次出現(xiàn)的位置(即在文章中第一次出現(xiàn)時(shí),單詞首字母在文章中的位置,位置從0開始);如果單詞在文章中沒有出現(xiàn),則直接輸出一個(gè)整數(shù)-1。【輸入樣例】Toto
be
or
notto
beis
a
question【數(shù)據(jù)范圍】1≤單詞長(zhǎng)度≤10。1≤文章長(zhǎng)度≤1,000,000。【輸出樣例】20字符數(shù)組和字符串類型——例5.19分析枚舉文章中的每個(gè)字符;從枚舉的字符開始與給定單詞逐一比對(duì)字符;如果比對(duì)的結(jié)果都相同,并且剛好從枚舉的字符開始到比對(duì)結(jié)束,剛好是一個(gè)單詞,則答案加一。#include<cstdio>#include<iostream>using
namespace
std;int
main(){//一次讀入包括空白字符在內(nèi)的多個(gè)字符,直到讀滿11個(gè),或者遇到行結(jié)束//枚舉文章中的每個(gè)字符//與給定單詞逐一比對(duì)int
i,j,t=0,tt=0;char
s[1000001],ss[11];cin.getline(ss,11);cin.getline(s,1000001);for(i=0;
i<=strlen(s)-strlen(ss);
++i){for
(j=0;j<=strlen(ss)-1;
++j){if
(toupper(s[j+i])!=toupper(ss[j]))
break;
//若遇到不同字符則退出比對(duì)if
(i>0
&&
s[i-1]!='
')
break;
//若不是單詞的開頭則退出}if
(j==strlen(ss)&&
(s[j+i]==''||
j+i==strlen(s)))
//若比對(duì)結(jié)果相同,且剛好是一個(gè)單詞{
t++;
if
(t==1)
tt=i;}}if
(t==0)
printf("-1");else
printf("%d
%d\n",
t,
tt);return
0;}上機(jī)練習(xí)1、統(tǒng)計(jì)數(shù)字字符個(gè)數(shù):輸入一行字符,統(tǒng)計(jì)出其中數(shù)字字符的個(gè)數(shù)。2、找第一個(gè)只出現(xiàn)一次的字符:給定一個(gè)只包含小寫字母的字符串,請(qǐng)你找到第一個(gè)僅出現(xiàn)一次的字符。如果沒有,輸出no。3、
相關(guān)性:為了獲知
序列在功能和結(jié)構(gòu)上的相似性,經(jīng)常需要將幾條不同序列的DNA進(jìn)行比對(duì),以判斷該比對(duì)的DNA是否具有相關(guān)性?,F(xiàn)比對(duì)兩條長(zhǎng)度相同的DNA序列。定義兩條DNA序列相同位置的堿基為一個(gè)堿基對(duì),如果一個(gè)堿基對(duì)中的兩個(gè)堿基相同的話,則稱為相同堿基對(duì)。接著計(jì)算相同堿基對(duì)占總堿基對(duì)數(shù)量的比例,如果該比例大于等于給定閾值時(shí)則判定該兩條DNA序列是相關(guān)的,否則不相關(guān)。4、石頭剪子布:石頭剪子布,是一種猜拳
。
于中國(guó),然后傳到
、
等地,隨著亞歐貿(mào)易的不斷發(fā)展它傳到了歐洲,到了近現(xiàn)代逐漸風(fēng)靡世界。簡(jiǎn)單明了的規(guī)則,使得石頭剪子布沒有任何規(guī)則
可鉆,單次
比拼運(yùn)氣,多回合玩法比拼心理博弈,使得石頭剪子布這個(gè)古老的
同時(shí)用于“意外”與“技術(shù)”兩種特性,深受世界人民喜愛。規(guī)則:石頭打剪刀,布包石頭,剪刀剪布?,F(xiàn)在,需要你寫一個(gè)程序來判斷石頭剪子布
的結(jié)果。5、輸出親朋字符串:編寫程序,求給定字符串s的親朋字符串s1。親朋字符串s1定義如下:給定字符串s的第一個(gè)字符的ASCII值加第二個(gè)字符的ASCII值,得到第一個(gè)親朋字符;給定字符串s的第二個(gè)字符的ASCII值加第三個(gè)字符的ASCII值,得到第二個(gè)親朋字符;依此類推,直到給定字符串s的倒數(shù)第二個(gè)字符。親朋字符串的最后一個(gè)字符由給定字符串s的最后一個(gè)字符ASCII值加s的第一個(gè)字符的ASCII值。上機(jī)練習(xí)6、合法C標(biāo)識(shí)符:給定一個(gè)不包含空白符的字符串,請(qǐng)判斷是否是C語言合法的標(biāo)識(shí)符號(hào)(注:題目保證這些字符串一定不是C語言的保留字)。C語言標(biāo)識(shí)符要求:①非保留字;②只包含字母、數(shù)字及下劃線(“_”);③不以數(shù)字開頭。7、配對(duì)堿基鏈:脫氧核糖核酸(DNA)由兩條互補(bǔ)的堿基鏈以雙螺旋的方式結(jié)合而成。而構(gòu)成
DNA的堿基共有4種,分別為腺瞟呤(A)、鳥嘌呤(G)、胸腺嘧啶(T)和胞嘧啶(C)。
知道,在兩條互補(bǔ)堿基鏈的對(duì)應(yīng)位置上,腺瞟呤總是和胸腺嘧啶配對(duì),鳥嘌呤總是和胞嘧啶配對(duì)。你的任務(wù)就是根據(jù)一條單鏈上的堿基序列,給出對(duì)應(yīng)的互補(bǔ)鏈上的堿基序列。8、
翻譯:在
傳遞過程中,為了防止
被截獲,往往需要對(duì),簡(jiǎn)單的加密算法雖然不足以完全避免
被破譯,但仍然能防止用一定的方式加密被輕易的識(shí)別。給出一種最簡(jiǎn)的的加密方法,對(duì)給定的一個(gè)字符串,把其中從a-y,A-Y的字母用其后繼字母替代,把z和Z用a和A替代,其他非字母字符不變,則可得到一個(gè)簡(jiǎn)單的加密字符。9、將字符串中的小寫字母轉(zhuǎn)換成大寫字母:給定一個(gè)字符串,將其中所有的小寫字母轉(zhuǎn)換成大寫
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024廣東廣州花都城投建設(shè)管理有限公司擬錄用人員(第二批)筆試參考題庫附帶答案詳解
- 2024年日照城投集團(tuán)有限公司公開招聘人員及崗位招聘筆試參考題庫附帶答案詳解
- 安徽省六安市2024-2025學(xué)年九年級(jí)下學(xué)期開學(xué)考試語文試題(解析版)
- 2024年廣東廣州市欖核對(duì)外經(jīng)濟(jì)發(fā)展有限公司招聘25人筆試參考題庫附帶答案詳解
- 2024年四川德運(yùn)水務(wù)建設(shè)投資有限公司招聘5人筆試參考題庫附帶答案詳解
- 2024年中煤江南(廣東局)公開招聘18人筆試參考題庫附帶答案詳解
- 2024年12月安徽蕪湖市弋江區(qū)編外聘用人員及區(qū)屬國(guó)企人員招聘15人筆試參考題庫附帶答案詳解
- 第18課 社會(huì)主義的發(fā)展與挫折 教學(xué)設(shè)計(jì)-2023-2024學(xué)年浙江省部編版歷史與社會(huì)九年級(jí)下冊(cè)
- 2025年貴州財(cái)經(jīng)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫匯編
- 2025年生物質(zhì)干餾熱解系統(tǒng)合作協(xié)議書
- ICU護(hù)理查房記錄【范本模板】
- 威風(fēng)堂堂進(jìn)行曲
- 銅及銅合金物理冶金基礎(chǔ)-黃銅
- 煤礦信息化管理制度
- 金融科技學(xué)-完整全套課件
- 物理學(xué)史中國(guó)古代物理學(xué)
- 導(dǎo)管滑脫應(yīng)急預(yù)案演練住院患者導(dǎo)尿管道滑脫
- (完整)小學(xué)語文考試專用作文方格紙
- 軟考中級(jí)網(wǎng)絡(luò)工程師學(xué)習(xí)筆記(考點(diǎn)歸納總結(jié)全)
- 小學(xué)語文六年級(jí)上冊(cè)期末質(zhì)量分析
- YS/T 914-2013動(dòng)力鋰電池用鋁殼
評(píng)論
0/150
提交評(píng)論