精華區beta NTUE-CS102 關於我們 聯絡資訊
這次教過的重點有 陣列串列指標物件封裝建構亂數 有人問我要不要看書 寫程式當然 看書 重要 光看書不寫一定會GG 但是書還是要至少翻過一遍 像例如他問了 "請使用建構函式設定初始值" 翻過一遍 就有印象書裡面有 建構函數 大概在第幾章 翻一下 就寫的出來了 考試一定要帶課本 至於題目 作業6 跟 作業7 一定要會 看到題目就知道了XD 下面我簡單解釋一下上面那幾個名詞的意思 陣列 一串連序的記憶體空間 放同一種資料 用在存超過一個的資料時 例如 五張手牌、10個成績、20個名字 串列 同一串資料 分散在記憶體裡 所以要用 head 指標指到第一個 每個資料用指標指向下一個 最後一個指向 NULL 跟陣列功能一樣 好處是 修改順序 刪除節點比陣列方便 壞處是 指標不熟的話 很容易弄壞 基本上能用串列作的功能 陣列也可以做 所以如果沒有指定方法 就選你熟的用就好 指標 程式裡面的資料存在記憶體內 記憶體上每個格子都有編號 例如 int a; 他可能被分配存到 格子1093898 指標就是用來存記憶體位置的地方 例如 int *b=&a; 代表 b是指標 裡面存 1093898 一般我們又會把 上面這行 叫做 b 指到 a 因為 b 存著 a 的位置 只要對 b 所指向的地方修改 a 就會跟著變動 通常指標用在 不同程式區段時 讀取或改變資料用 例如 void A{int x, int y} void B{int i, int j} 如果 B 要修改 A 的 x 因為 A, B 是不同程式區段的資料 所以不能直接修改 但是如果 B 知道 A 的 x 的記憶體位置 那就可以修改了 像是這樣 void A(){int x; int y; B(&x); void B(int *n){int i; int j; *n=1;} 這樣 B 就可以把 A 的 x 修改成 1 了 物件 把多種資料 綁成一捆 例如 每個學生有 國文英文數學成績 姓名 座號 原本可能要用5個陣列 用物件的話 就可以把五種資料 變成一個物件 每個學生物件就包含五種資料 好處是在做排序的時候 只要交換一個物件 每種資料就一起交換了 物件也可以設計函數在裡面 一般初學者至少要會物件封裝時 怎麼設定輸入輸出的函數(就是作業用的get/set) 物件封裝 物件的資料 就是你口袋裡的東西 例如上面的 學生有姓名 如果另外一個城市想知道你的姓名 他應該要問你(用getname函數 函數裡面return名字給他) 而不是直接拿你的身份證出來看 他的意義是 你看電視的時候 你只要拿遙控器按一下開關(假設有個turnon的函數) 你不用知道電視怎麼開(turnon裡面怎麼寫) 他怎麼抓訊號的 你只要負責看就好 現在因為 main(使用者) 跟 物件 都是你自己寫的 如果以後用別人寫好的程式碼 他可能就是寫好的物件 你只要知道物件有哪些函數可以用 在main裡面呼叫 不用管函數怎麼做的 建構函數 物件形成的時候 執行的一段程式碼 例如 st a; 或者 p = new st; 如果是學生資料 你可以把每個成績設成0 如果是電視 你可以設定接收訊號之類的 通常建構函數拿來設定初始狀態 亂數 一般程式每次執行的結果都一樣 當你需要一些 隨機 的資料的時候 就可以使用亂數 亂數是很多張很大的表格 上面有很多數字 每個數字出現的機率一樣 在C裡面 亂數是整數 ( 其他的語言不一定 像 java 是小數 ) 由於亂數的值域包含整個整數 所以我們只要做一些轉換 就可以拿到公平的隨機資料 ( 也可以設定不公平 ) 首先要先選一張亂數表 一般來說我們會用一直變動的程式執行時間來選 下面是隨機產生五個的1~10亂數程式 #include<stdlib.h> // 用亂數就要加 #include<time.h> // 避免不同系統不能跑 #include<iostream> using namespace std; int main() { srand((unsigned)time(NULL)); // 用時間選張亂數表 for(int i=0;i<5;i++) cout<< (rand()%10+1) << endl; } rand()會傳回0~n的整數 由於每個數字機率一樣 所以%10後 產生0~9的九個數字機率也會一樣 +1就是1~10 你可以試著跑下面的程式 看看機率是不是一樣XD #include<stdlib.h> #include<time.h> #include<iostream> using namespace std; int main() { srand((unsigned)time(NULL)); float a, b, c, d; a=b=c=0; for(int i=0;i<999999;i++) { d=rand()%3; if(d==0) a++; if(d==1) b++; if(d==2) c++; } cout<< a/(a+b+c) << ' ' << b/(a+b+c) << ' ' << c/(a+b+c); system("pause"); } 大概就是這樣 最後再補一句 作業6 跟 作業7 一定要會啊 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.127.36.183
blue401:感謝學長!!!!! 04/16 20:27
gcobc12632:現在才在後悔當初沒買書= = 誰來PO一下作業6 7 04/16 20:31
ip3311:棍 首推被搶走 04/16 20:32
※ 編輯: yantchen 來自: 120.127.36.183 (04/16 20:36)
j2612280:推~~ 04/16 21:09
CaptainWill:密死首推了 囧 04/16 21:11
game0416:為什麼我覺得猜得到題目內容了hmmmmm 04/16 21:14
CaptainWill:樓上來PO個考前猜題如何XD 04/16 21:16
CaptainWill:game0416 E:發表文章 鳳狼要解救世人了 04/16 21:35
game0417:那三小Q 04/16 21:35
CaptainWill:竟然有隱身的分身!!! 密死了 04/16 21:36
godhand0629:8點就看到鳳郎大大在編寫文章了一直到現在...真神人也 04/16 23:36
game0417:我也在想為什麼會玩這麼久hmmm 04/16 23:41
Arashinoon:科科 04/17 00:22
joe989879:哀= =..依然在迷惘之中...找不到路 04/17 20:34
j2612280:路是人走出來的~既然找不到..那就自己造一條出來吧!! 04/17 22:19