第3章數(shù)組與字符串_第1頁
第3章數(shù)組與字符串_第2頁
第3章數(shù)組與字符串_第3頁
第3章數(shù)組與字符串_第4頁
第3章數(shù)組與字符串_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第三講:數(shù)組與字符串主講:高放哈爾濱理工大學(xué)集訓(xùn)隊本講要點v數(shù)組 v字符數(shù)組v小結(jié)與習(xí)題數(shù)組v下面從一個問題出發(fā),說明一下為何使用數(shù)組。v問題:讀入一些整數(shù),逆序輸出到一行中,整數(shù)之間用空格格開。已知整數(shù)不超過100個。v【分析】v首先通過循環(huán)來讀取100個整數(shù)的輸入,然后把每個數(shù)都存下來,存放在數(shù)組中,最后輸出。#define是 “宏定義”,它是在編譯的時候編譯器執(zhí)行的命令。作用是替換指定的字符串。puts(字符串“);相當(dāng)與printf(字符串n);【不支持占位符】數(shù)組int aMAXN表示聲明了一個包含 MAXN 個 int 形 變量的數(shù)組。【注意,MAXN必須是常數(shù)】a0表示數(shù)組中下標(biāo)

2、為0的變量,a1表示下標(biāo)為1.注意:a100的數(shù)組,下標(biāo)范圍是099數(shù)組v注意學(xué)習(xí)上面這個程序中的輸出技巧。v因為輸出的數(shù)用空格隔開,而末尾不應(yīng)該有空格,所以需要用一條判斷來輸出。v當(dāng)然,這不是唯一的實現(xiàn)方式。還有很多的方式可以實現(xiàn)相同的功能。v另外,大數(shù)組,要開成全局變量(就是不在任何函數(shù)里面),不然容易一運行就崩潰。【具體原因在講到遞歸的時候就明白了】數(shù)組v聲明方式: 類型 數(shù)組名數(shù)組大小;v引用方式: 數(shù)組名下標(biāo)。v注意點:n數(shù)組大小必須為常量。n引用數(shù)組元素時,其下標(biāo)可以是變量。n下標(biāo)的范圍為 0 數(shù)組大小-1。n數(shù)組不能像變量一樣直接賦值。只能對數(shù)組中的變量賦值。v 實際工程中,為了

3、節(jié)省內(nèi)存,數(shù)組的空間往往是按需要申請。這時候可以用 new 實現(xiàn)。但競賽中用不到。數(shù)組v 例3-1 開燈問題。v 有n盞燈,編號為1n,第1個人把所有燈打開,第2個人按下所有編號為2的倍數(shù)的開關(guān)(這些燈將被關(guān)掉),第3個人按下所有編號為3的倍數(shù)的開關(guān)(其中關(guān)掉的燈被打開,開著燈將被關(guān)閉),依此類推。一共有k個人,問最后有哪些燈開著?v 輸入:n和k,輸出開著的燈編號。kn1000。v 樣例輸入:7 3v 樣例輸出:1 5 6 7v 【分析】v 用a1,a2,an表示編號為1,2,3,n的燈是否開著,模擬這些操作即可。memset, string.h!aj%數(shù)組v補充:memset函數(shù)原型如下:

4、vvoid *memset(void *buffer, char c, int count);v功能:把buffer所指內(nèi)存區(qū)域的前count個字節(jié)設(shè)置成字符c,第三個參數(shù)指的是字節(jié)的個數(shù),返回指向buffer的指針,在程序中需包含頭文件:#include 。由memset函數(shù)的頭文件可以知道,其主要是對字符數(shù)組進(jìn)行設(shè)置,當(dāng)然也可以對數(shù)組進(jìn)行初始賦值(一般是0,-1)。數(shù)組v有一個技巧是在輸出:為了避免輸出多余空格,設(shè)置了一個標(biāo)志變量first,可以表示當(dāng)前要輸出的變量是否為第一個。第一個變量前不應(yīng)有空格,但其他都有。數(shù)組v例3-2 蛇形填數(shù)。v在n*n方陣?yán)锾钊?,2,n*n,要求填成蛇形。

5、例如n=4時方陣為v10 11 12 1v9 16 13 2v8 15 14 3v7 6 5 4v每個數(shù)字占3個位置,不足4位的在右邊用空格補齊。n8。數(shù)組v【分析】v與數(shù)學(xué)的矩陣相比,可以用一個所謂的二維數(shù)組來存儲題目中的方陣。只需聲明一個int aMAXNMAXN,就可以獲得一個大小為MAXNMAXN的方陣。在聲明時,兩維的大小不必相同。數(shù)組v提示3-4:用int aMAXNMAXM生成一個整型的二維數(shù)組,其中MAXN和MAXM不必相等。這個數(shù)組共有MAXNMAXM個元素,分別為va00,a01,a0MAXM-1,va10,a11,a1MAXM-1,v,vaMAXN-10,aMAXN-11

6、, aMAXN-1MAXM-1。數(shù)組v假設(shè)從1開始依次填這寫。設(shè)“筆”的坐標(biāo)為(x,y),則一開始x=0,y=n-1,即第0行第n-1列(注意行列的范圍是0n-1,沒有第n列)?!肮P”的移動軌跡是:下、下、下、左、左、左、上、上、上、右、右、下、下、左、上。總之,先是下,到不能填了為止,然后是左,接著是上,最后是右?!安荒芴睢笔侵冈僮呔统鼋纾ɡ?5)或者再走就要走到以前填過的格子(例如1213)。如果把所有格式初始化為0,就能很方便地加以判斷。數(shù)組1)x=0表達(dá)式的值2)+x,x+3)%-3d數(shù)組v說明:本程序利用了C語言的簡潔的優(yōu)勢。首先,賦值x=0和y=n-1后馬上作為a數(shù)組的下標(biāo),可以

7、合并完成;tot和a0n-1都要賦值1,也可以合并完成。用一條語句可以完成多件事情,并且不有犧牲程序的可讀性。v提示3-5:可以利用C語言簡潔的語法,但前提是保持代碼的可讀性。數(shù)組v提示3-6:在很多情況下,最好是在做一件事之前檢查是不是可以做,而不要做完再后悔。因為“悔棋”往往也比較麻煩。v說明:本程序?qū)τ谂cx+1n類似的情況,像x+1是否越界?如果x+1n為假,&是短路運算符,將不會計算!ax+1y,也就不會越界了。v探究:數(shù)組下標(biāo)越界會怎樣?v大范圍越界會崩潰,小范圍可能不會崩潰,但是也會使程序產(chǎn)生莫名其妙的錯誤。字符數(shù)組v例3-3 豎式問題。v找出所有形如abc*de(三位數(shù)乘

8、以兩位數(shù),abcde可以相同可以不同)的算式,使得在完整的豎式中,所有數(shù)字都屬于一個特定的數(shù)字集合。輸入數(shù)字集合(相鄰數(shù)字之間沒有空格),輸出所有豎式。每個豎式前應(yīng)有一行編號。最后輸出解的總數(shù)。具體格式見樣例輸出(為了便于觀察,豎式中的空格改用小數(shù)點顯示,但你的程序應(yīng)該輸出空格,而非小數(shù)點)。字符數(shù)組v 樣例輸入:2357v 樣例輸出:v v .775v x.33v -v .2325v 2325.v -v 25575v The number of solutions=1字符數(shù)組v【分析】v本題的解題策略是嘗試所有的abc和de,判斷是否滿足條件。寫出如下的偽代碼:注意:輸入字符數(shù)組用%s,且數(shù)

9、組名前不加&符號字符數(shù)組v說明:v(1)char s20是一個定義字符數(shù)組的語句,scanf(%s,s)表示從鍵盤輸入一個字符串給字符數(shù)組s。v注意,不用&(取地址符)字符數(shù)組v說明:v(2)char是“字符型”的意思,而字符是一種特殊的整數(shù)(表示范圍-128127)。每一個字符都有一個整數(shù)編碼,稱為ASCII碼。C語言中允許用直接的方法表示字符,還有以反斜線開頭的字符(轉(zhuǎn)義序列,Escape Sequence)。字符數(shù)組v提示3-7:C語言中的字符型用char表示,它實際存儲的是字符的ASCII碼。v字符常量可以用單引號表示(比如 a, n )。v雙引號表示字符串常量。(比如

10、 “Hello World”)字符數(shù)組v提示3-7:vC語言中的字符型用char表示,它實際存儲的是字符的ASCII碼。v字符常量可以用單引號表示(比如 a, n )。v雙引號表示字符串常量。(比如 “Hello World”)v語句scanf(%s, s);表示讀入一個不含空格、TAB和回車符的字符串,存入字符數(shù)組s中,s前面沒有&符號。字符數(shù)組v提示3-8:v如果是字符數(shù)組char sMAXN MAXL,可以用scanf(%s,si)讀取第i個字符串。字符數(shù)組v接下來有兩個問題:判斷和輸出。v先考慮輸出。v首先計算第一行乘積 x=abc*e,v然后是第二行 y=abc*d,v最后是

11、總乘積 z=abc*de,v然后打印出來。字符數(shù)組v接下來有兩個問題:判斷和輸出。v先考慮輸出。v首先計算第一行乘積 x=abc*e,v然后是第二行 y=abc*d,v最后是總乘積 z=abc*de,v然后打印出來。printf寫成一行sprintfstrchr0字符數(shù)組v說明:v(1)vsprintf 與 printf 用法幾乎相同。差別在于,printf把結(jié)果輸出到屏幕,sprintf把結(jié)果輸出到字符數(shù)組中。vsprintf的第一個參數(shù)填那個字符數(shù)組。后面和printf的用法一樣。v PS:另外還有一個fprintf可以把結(jié)果輸出到文件v PPS: scanf也有 sscanf, fscanf。用法類似。字符數(shù)組v說明:v(2)vstrchr函數(shù) vstrchr(str,ch)v功能是在字符串str中找ch字符。如果找到了,就返回找到的位置(是一個指針 char *)。如果沒找到,則返回NULL。字符數(shù)組v說明:v(3)v用 scanf 讀 字符串的時候,會在字

溫馨提示

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

最新文檔

評論

0/150

提交評論