1 / 17

11/25 計程實習課

11/25 計程實習課. Speaker: Wen-Ching Lo. 在討論陣列是什麼之前,我們先來看一個問題,假設我們要連續輸入 5 個人的成績,然後再印出,這個程式可以寫成:. #include &lt;stdio.h&gt; void main() {   int a1, a2, a3, a4, a5;   scanf(&quot;%d&quot;,&amp;a1);   scanf(&quot;%d&quot;,&amp;a2);  scanf(&quot;%d&quot;,&amp;a3);   scanf(&quot;%d&quot;,&amp;a4); scanf(&quot;%d&quot;,&amp;a5); printf(&quot;%d<br>&quot;,a5);

myrna
Download Presentation

11/25 計程實習課

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 11/25計程實習課 Speaker: Wen-Ching Lo

  2. 在討論陣列是什麼之前,我們先來看一個問題,假設我們要連續輸入 5 個人的成績,然後再印出,這個程式可以寫成: #include <stdio.h> void main() {   int a1, a2, a3, a4, a5;   scanf("%d",&a1);   scanf("%d",&a2);  scanf("%d",&a3);   scanf("%d",&a4); scanf("%d",&a5); printf("%d\n",a5);   printf("%d\n",a4);   printf("%d\n",a3);   printf("%d\n",a2);   printf("%d\n",a1); }

  3. Array 陣列 • 陣列(Array)是一組相同型態的連續變數,它們使用同一個變數名稱,而另外用一個索引值來指定使用第幾個變數,在 C 語言中要宣告一個陣列,可以使用下面的語法: 變數型態 陣列名稱[元素個數]; • 例如:int s[100]; 宣告 s 是一個 int 的陣列,它有 100 個元素,分別是 s[0]、s[1]、s[2]、...、s[99],特別注意的是它的索引值是從 0 開始到 99,而非 1 到 100。

  4. a 10 a[0] 0x300 20 a[1] 0x302 30 a[2] 0x304 40 a[3] 0x306 50 a[4] 0x308 Array 陣列 陣列的記憶體觀念 int a[5]={10,20,30,40,50};

  5. a 110 a[0] 0x300 120 a[1] 0x302 130 a[2] 0x304 140 a[3] 0x306 150 a[4] 0x308 Array 陣列 陣列的記憶體觀念 LOAD (300+i*2) ADD #100 STORE (300+i*2) For(i=0 ; i<5 ; i++) a[i] += 100;

  6. 二維陣列 • 二 維 陣 列 的 宣 告 方 式 如 下 所 述: 陣列的名稱[ 列陣列的大小 ][ 行陣列大小 ] ;  For example: int array1 [ 10 ][ 20 ] ; float array2 [ 5 ][ 25 ] ; char array3 [ 100 ][ 50 ] ;

  7. 二維陣列 • 宣 告 陣 列 的 位 置 為 程 式 之 最 上 端 • 二 維 陣 列 的 排 列 結 構 如 下 圖 所 述. 我 們 舉 例 一 陣 列 名 叫A 的 陣 列, 其 列 陣 列 大 小 有m 個, 行 陣 列 大 小 有n 個, 即 為A[m][n] .

  8. 字元陣列 • 字 元 陣 列 的 宣 告 方 式 如 下 所 述: char 陣列的名稱[ 陣列的大小] ; char 陣列的名稱[ 列陣列的大小][ 行陣列大小] ; For example: char array1 [ 10 ] ; char array2 [ 5 ][ 25 ] ;

  9. 字元陣列 如 果 字 元 陣 列 以 字 元 的 方 式 來 存 取 陣 列, 則 須 加 結 束 字 元\0 於 陣 列 的 最 末 端, 表 示 此 字 元 陣 列 的 結 束 例一: char string[6]={'A','B','C','D','E','\0'};  char string1[2][6]={ {'A','B','C','D','E','\0'},{'F','G','H','I','J','\0'} };  例二: char string[5]="ABCDE";  char string1[2][5]={ "ABCDE","FGHIJ" }; 如 果 字 元 陣 列 以 字 串 的 方 式 來 存 取 陣 列, 則C 編 譯 器 會 自 動 在 字 串 最 末 端 加 上 結 束 字 元\0 表 示 此 字 元 陣 列 的 結 束, 所 以 我 們 不 需 自 行 加 入.

  10. 字元陣列

  11. 在 C 語言中也有一些特殊字元,通常以反斜線 \ 開頭: '\0'    空字元,用於字串的結束 '\n'    New Line,換行符號 '\r'    Carriage Return,回歸鍵(即 Enter 鍵) '\t'    Tab,跳格 '\b'    Backspace,倒退鍵 '\a'    Bell,嗶一聲 '\\'    反斜線 \ '\''    單引號 ' '\"'    雙引號  "

  12. ASCII與字元關係 • 事實上,字元在電腦中是以一個八位元的整數來儲存(即 1 Byte),而這個符號與數字的對應關係我們稱為 ASCII 碼 • 也就是說,其實字元也是一個數字,因此也可以拿來做加減乘除等四則運算

  13. Example • char c='a'; c=c+3; printf("%c", c); 上面的例子會印出字元 d • char c;  for(c='A'; c<='Z'; c++) printf("%c %d\n", c, c); 上面的程式可以印出 A 到 Z 及它們的 ASCII 碼值

  14. 字串 • 字串就是一段文字,我們可以用一對雙引號 " 把該段文字夾起來。 • 在 scanf 及 printf 讀入及印出一個字串則是使用 %s。 • 由於 C 語言中並沒有字串的變數型態,而是用字元的陣列來儲存一個字串,例如: char s[20], t[20]=“NCCU"; scanf("%s", s); printf("%s", s); • 在宣告字串的時候要注意它的長度,以免位數不夠造成程式錯誤。 • 事實上,每個字串後面都有一個 '\0' 的字元,也就是說“NCCU" 字串,事實上總共用了 5 Bytes,這一點要特別注意。 • 另外,由於 s 本身就是這個字元陣列的位址,所以在 scanf 裡我們不需要加上 & 符號。

  15. 字串 • 不過,用 scanf 讀取字串時,遇到空白字元便會結束,例如輸入 "Hello! NCCU!",則讀進來的字串只有 "Hello!" 而已。 • 為了避免這個情況,我們再介紹兩個函數 gets 、puts (也是定義在 stdio.h),gets 的功能是讀入字串,而 puts 則是印出字串: gets(s); puts(s);

  16. 字串 • 另外如果我們要做字串的比對、字串串接、字串長度等功能,沒有運算子可以使用,故必須使用函數來處理。和字串相關的函數都是定義在 string.h 中,常用的字串函數如下: strcpy(s1, s2)    將 s2 的內容複製到 s1 strcmp(s1, s2)    比較 s1、s2 的內容,如果相等傳回 0 strcat(s1, s2)    將 s2 串接到 s1 後面 strstr(s1, s2)    傳回 s2 字串在 s1字串中第一次出現的位置 strlen(s1)    傳回 s1 的長度(不含 '\0' 字元) strrev(s1)    將 s1 字串倒置

  17. 練習題(編碼問題) 美軍編碼規則如下:將訊息每個字母往後推兩位再傳出去,例如 A→C、B→D,而後面的 Y→A、Z→B,所有的訊息都是大寫字母。而收到訊息的則是將每個字母往前推兩位,例如 C→A、D→B,而前面的 A→Y、B→Z。 假設你是情報軍,要快速編碼及解碼美軍的訊息,希望完成一個程式,第一個字元為 + 代表要編碼,第一個字元為 - 代表要解碼,程式執行如下(紅色為輸入、淺藍色為輸出): +FIRE HKTG -UVQR STOP

More Related