C 語言—陣列及字串

Similar documents
C/C++基礎程式設計班

untitled

C/C++基礎程式設計班

C/C++ 语言 - 循环

CC213

Microsoft Word - ACL chapter02-5ed.docx

Microsoft Word - Chap02.doc

Microsoft PowerPoint - STU_C_Lang_CH13.ppt

Microsoft Word - part doc

Microsoft PowerPoint - chap3

C

nooog

新・明解C言語入門編『索引』

C/C++基礎程式設計班

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

!194 課程 大綱 陣列介紹 [P.195] 陣列的使 用 [1] - 多個同型變數 [P.196] 陣列的初始化 [P.198] 陣列的使 用 [2] - 循序存取 [P.199] 陣列的使 用 [3] - 隨機存取 [P.200] 陣列的複製 [P.203] 在函式間傳送陣列 [P.204]

Microsoft PowerPoint - Class5.pptx

C 1

3.1 num = 3 ch = 'C' 2

untitled

C/C++语言 - 分支结构

Microsoft PowerPoint - C-Ch10.ppt

Microsoft PowerPoint - 04-array_pointer.ppt

資料結構之C語言重點複習

CC213

Microsoft PowerPoint - CH07 Arrays and Vectors [相容模式]

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

C/C++语言 - C/C++数据

untitled

CC213

Microsoft Word - AEL0124-CH05


2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%

C/C++基礎程式設計班

Ps22Pdf

Excel VBA Excel Visual Basic for Application

Microsoft Word - administrative-law-08.doc

C++ 程式設計

Microsoft Word - 投影片ch03

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

epub 33-8

投影片 1

Microsoft PowerPoint - 20-string-s.pptx

Strings

Microsoft PowerPoint - Class2.pptx

Microsoft PowerPoint - Bronson-v3-ch07.ppt [相容模式]

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

Microsoft PowerPoint - Class4.pptx

Microsoft PowerPoint - STU_C_Lang_CH05

Ps22Pdf

Microsoft Word - C-pgm-ws2010.doc

Microsoft Word - Chap05.doc

,,,,,,,,,, ( http: \ \ www. ncre. cn,, ) 30,,,,,,,, C : C : : 19 : : : /16 : : 96 : : : ISBN 7

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

_汪_文前新ok[3.1].doc

, 即 使 是 在 昏 暗 的 灯 光 下, 她 仍 然 可 以 那 么 耀 眼 我 没 有 地 方 去, 你 会 带 着 我 么 杜 晗 像 是 在 嘲 笑 一 般, 嘴 角 的 一 抹 冷 笑 有 着 不 适 合 这 个 年 龄 的 冷 酷 和 无 情, 看 着 江 华 的 眼 神 毫 无 温

Microsoft Word - chap13.doc

PowerPoint Presentation


Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

C. p->data.a D. p.data.a 5 若需建立如圖所示的儲存結構, 以下正確的語法組是 : G q p c A. char **q, *p, c; p=&c; q=*p; C. char **q, *p, c; p=&c; q=&p; B. char *q, *p, c; p=&c;

Microsoft PowerPoint - C-Ch12.ppt

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

The return of scanf The number of fields successfully converted and assigned int a =1, b =2, c =3; int n = scanf("%d %d %d", &a, &b, &c); printf("%d\n

<4D F736F F D D6D0B9FAB5D8D6CAB4F3D1A7BFC6D1D0BEADB7D1D3D0B9D8D6C6B6C82D48442E646F63>

PowerPoint Presentation

1

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

<4D F736F F D20AC4FBDBDA4FBB67DA96CAABA2DA743A67EAFC5AAA95FA7B9BD5A5F2E646F63>

ex

PowerPoint 簡報

Microsoft Word - ¤W½Ò¤º®e RTF

(A) 二 小 時 (B) 三 小 時 (C) 四 小 時 (D) 五 小 時 第 一 組 出 題 6. 若 對 於 收 到 的 交 通 違 規 罰 單 不 服, 在 收 到 罰 單 幾 日 內 須 向 警 察 機 關 或 監 理 機 關 申 訴? (A) 十 天 (B) 十 五 天 (C) 二 十

untitled

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Java 程式設計初階 第 5 章:基本輸出入 & 流程控制

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

踏出C++的第一步

[改訂新版]C言語による標準アルゴリズム事典

jQuery實戰手冊

本章內容 2-1 陣列及陣列位址的計算一維陣列位址計算多維陣列位址計算 2-2 一維陣列的基本運算讀取 寫入 複製 輸出 插入資料 刪除 2-3 二維陣列及矩陣的儲存與運算矩陣輸出 矩陣轉置 矩陣相加 矩陣相乘 2-4 字串 ( 字元陣列 ) 計算字串長度 字串複製 字串比較 子字串擷取 2

第3章.doc

《C语言程序设计》教材习题参考答案

第一章

记 忆 155 期 北 京 大 学 文 革 专 辑 (9) 目 录 专 稿 章 铎 从 高 云 鹏 的 遭 遇, 看 迟 群 之 流 的 专 制 附 : 高 云 鹏 给 胡 宗 式 章 铎 的 信 (2015 年 11 月 19 日 ) 评 论 马 云 龙 王 复 兴 抢 救 记 忆 : 一 个 北


标题

Transcription:

10/16 系程主講人 : 荊輔翔

概論 陣列 陣列是一個具有索引 (index) 性質的連續資料儲存空間集合 陣列中每一個資料儲存空間稱之為陣列元素 (array element); 它們都具有相同的資料名稱 資料型態 及空間大小 ; 但存取它們時則須藉由索引 ( 或稱註標 ) 來區別辨識 索引代表資料在陣列中的相對位址 ( 其計數由 0 開始, 其餘累加類推 ), 且須由中括號 [ ] 涵蓋之

陣列 index 0 1 2 3 4 5 6 7 8 9 array 陣列名稱 陣列元素 : array [6]

一維陣列宣告格式 : 陣列 宣告 / 使用 < 資料型態 > < 陣列名稱 > [ 陣列大小 ] = { 初始值設定 }; int array[100]; float a[50];

陣列 宣告 / 使用 為什要用陣列? EX1. 請設計一個程式, 讓使用者輸入 10 筆資料並印出 EX2. 請設計一個程式, 讓使用者輸入 20 筆資料並印出 EX3. 請設計一個程式, 讓使用者輸入 100 筆資料並印出

陣列 宣告 / 使用 EX 1. main() { int x0, x1, x2, x3, x4, x5, x6, x7, x8, x9; } scanf( %d %d %d %d %d,&x0,&x1,&x2,&x3,&x4); scanf("%d %d %d %d %d", &x5,&x6,&x7,&x8,&x9); printf("%d %d %d %d %d ", x9, x8, x7, x6, x5); printf("%d %d %d %d %d ", x4, x3, x2, x1, x0);

陣列 宣告 / 使用 EX 3. main() { int x[100]; int i; for ( i = 0; i < 100 ; i++ ){ scanf( %d, &x[i]); } for ( i = 100; i >= 0 ; i-- ){ printf("%d ", x[i]); } }

隨機 如果我有一個數叫做 number, 現在我要給他一個亂數 number=rand(); 這樣就能將一個亂數放入 int number; number=rand(); printf("%d\n",number);

隨機 你會發現結果都是 41!!! 而且不管幾次都一樣!!!

隨機 需要以下兩樣東西 #include<time.h> 引入標頭檔 srand(time(null)); 取隨機種子

隨機 範圍限制 我們用 取餘數 的方法做範圍限制 ~ 假設我們現在需要一個 0~20 的亂數 ( 共有 20-0+1=21 個數字 ) 就要寫成 number=rand()%21; 因為任何數除以 21 的餘數皆落於 0~20 之間

陣列 宣告 / 使用 練習一. 輸入 10 筆資料 ( 使用陣列 ), 然後依序印出 練習二. 自動產生 10 筆隨機資料, 然後依序印出

陣列 二維陣列 需要兩層迴圈 可視為以平面方式組織的資料集合, 故具二個索引註標 (x 與 y 軸方向 ) < 資料型態 > < 陣列名稱 > [ 列數 ][ 行數 ]; int array[50][20]; float array[10][10];

陣列 int data[3][2]; 邏輯觀念 data[0][0] data[0][1] data[1][0] data[1][1] data[2][0] data[2][1] 記憶體實際儲存樣式 data[0][0] data[0][1] data[1][0] data[1][1] data[2][0] data[2][1]

練習 九九乘法表 j=1 j=5 i=1 i=4

練習 #include<stdio.h> #include<stdlib.h> int main(){ int i, j; for( i=1; i<=9; I++ ){ for( j=1 ; j<=9 ; j++){ printf( %d x %d=%2d,j, i, i *j); } printf("\n"); } system("pause"); return 0; }

陣列的初值設定 int array[4] = { 100, 200, 300, 400 }; int array[] = { 100, 200, 300, 400 }; int array[4][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; int array[][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };

陣列的初值設定 int array[5] = {0}; ( 將所有元素均設定為 0 值 ) int arr[5]={3, 5}; ( 除前兩個元素值分別為 3 及 5 之外, 其他均清除為 0)

陣列資料之複製 int arr1[5], arr2[]={1, 2, 3, 4, 5}; arr1[4] = arr2[4] // 只有一個元素會被拷貝 arr1=arr2; // 錯誤寫法 arr1[]=arr2[]; // 錯誤寫法 ********************************** for (int i=0; i < 5; i++) arr1[i] = arr2[i]; // 正確寫法 ( 利用迴圈 )

字元與字串 字元 (Character): 一個文 數字或符號, 以單引號涵括之 字串 (Character string): 一串文 數字或符號組成, 以雙引號涵蓋, 或可視為字元陣列 (Character array)

字元的宣告與輸出入 字元的宣告 char ch; 字元的輸入 ( 一 ): 讀入輸入緩衝區內第一個字元 ( 含任何字元及空白 ) scanf ( %c, &ch); 字元的輸入 ( 二 ): 讀入輸入緩衝區內第一個非空白或非控制性的字元 scanf ( %c, &ch);

字元的宣告與輸出入 ( 續 ) 字元的輸出 : 將變數 ch 內的字元輸出至螢幕上 printf ( %c, ch);

字元輸入的相關函式 函式名稱函式意義引入標頭檔 getchar() 從鍵盤輸入一個字元 ; 須按 enter 鍵完成 getche() 從鍵盤輸入一個字元, 並顯示至畫面上 ; 不必按 enter 鍵 getch() 類似 getche() 函式, 但輸入字元不會顯示在螢幕畫面上 <stdio.h> <conio.h> <conio.h>

字元輸出的相關函式 函式名稱 函式意義 引入標頭檔 putchar() 輸出字元至螢幕上 <stdio.h> putch() 輸出字元至螢幕上 <conio.h> 格式 : putchar ( 字元資料 ); 範例 : putchar(ch); putchar( \n );

字元輸入範例程式 #... int main(void) { int num; char ch; printf(" 請輸入一個整數 : "); scanf("%d", &num);

字元輸入範例程式 ( 續 ) printf(" 請輸入一個字元 : "); scanf ("%c", &ch); /* 印出 num 與 ch 的 ASCII 碼 */ printf("num=%d, ASCII of ch=%d\n", num, ch);. } 此程式將會印出何種結果? 為什麼?

字元輸入範例程式 ( 續 ) 上述程式將輸出如下結果 : 請輸入一個整數 :22 請輸入一個字元 : num=22, ASCII of ch=10 請注意 : 第二個輸入敘述將無任何字元被讀入, 即印出結果了

字元輸入範例程式的解決技巧 #... int main(void) { int num; char ch; printf(" 請輸入一個整數 : "); scanf("%d", &num);

字元輸入範例程式的解決技巧 ( 續 ) printf (" 請輸入一個字元 : "); scanf ( %c, &ch); // 在 %c 之前加空白 printf("num=%d, ASCII of ch=%d\n", num, ch); }

字串 (Character String) C 語言中無字串基本資料型態, 它可以字元陣列的方式來表示 字串 ( 字元陣列 ) 宣告格式 : char str [10]; 由於字串是一種資料結構, 長度不定, 故必須有方式來告知字串之結束時機 其採用之符號為空字元 (null character, \0 )

字串 ( 續 ) 一個字元與一個字的字串其在記憶體內的儲存表現方式是不同的 H 字元 H H \0 字串 H \0 空字串 H U A N G \0 表字串 HUANG

字串之輸入方法 利用 scanf ( %s, 陣列名稱 ) ; 之敘述 注意 : 陣列名稱前不需加地址運算子 & scanf() 由輸入緩衝區內第一個非空白的字元開始讀取, 直到碰觸到另一個空白為止 範例 : char str [20]; scanf( %s, str);

字串輸入的相關函式 函式名稱函式意義引入標頭檔 gets() 範例 : char str[20]; gets (str); 由緩衝區讀入所有字元直到碰到 enter 為止 <stdio.h>

字串輸出的相關函式 函式名稱函式意義引入標頭檔 puts() 範例 : char str[20];.. puts (str); 將字串輸出至螢幕上 <stdio.h>

字串輸入範例程式 #... int main() { char ch[10]; printf(" 請輸入一個字串 : "); scanf("%s", ch); printf( 輸入字串為 :%s\n", ch);.. }

字串輸入範例程式 ( 續 ) 執行結果 : 請輸入一個字串 : abc def <enter> 輸入字串為 :abc

字串輸入範例程式 ( 一 ) #... int main() { char month[10]; scanf("%3s", month); // 指定最大輸入長度 printf( 字串為 :%s\n, month);. }

字串輸入範例程式 ( 一 ) ( 續 ) 執行結果 : 若輸入 : January 則印出 : 字串為 : Jan ( %3s 只取前 3 個字 )

字串輸入範例程式 ( 二 ) #... int main() { char month[10], val[10]; scanf ("%4s", month); printf( 月份 =%s\n, month); scanf ("%7s", val); printf( 值 =%s\n, val); }

字串輸入範例程式 ( 二 ) ( 續 ) 執行結果 : 若輸入 : January 印出 : 月份 =Janu (%4s) 值 =ary ( 前述輸入殘留下來的字串被後續輸入指令立刻讀取 ) 請問 : 如何解決?

字串輸入範例程式 ( 三 ) #... #define flush while (getchar()!= '\n') int main() { char month[10], val[10]; scanf("%4s", month); flush; // 亦可用 fflush(stdin) + <stdlib.h> printf(" 月份 =%s\n", month);..

字串輸入範例程式 ( 三 ) ( 續 ) 執行結果 : January ( 輸入資料 ) 月份 =Janu February ( 輸入資料 ) 值 =Februar

字串範例程式 ( 四 ) #... int main() { printf("%c\n", "HELLO"[1] );. } 印出結果 : E

一維的字元陣列 範例 : char string[] = { H, E, L, L, O,! }; string 陣列的內容 : H E L L O!

一維的字元陣列範例程式 ( 一 ) #... int main() { char ch[10]={'h', 'E', 'L', 'L', 'O'}; printf("string=%s\n", ch); } 印出結果 : string=hello

一維的字元陣列 ( 二 ) 範例 : char string[] = HELLO! ; string 陣列的內容 : H E L L O! \0 系統自動加上去的字元

一維的字元陣列範例程式 ( 二 ) #... int main() { char ch[]= "HELLO!"; printf( string=%s \n, ch); printf( string=%c \n, ch[1]); } 印出結果 : string=hello! string=e

一維的字元陣列範例程式 ( 三 ) #... int main() { char ch[15] = { H, E, L, L, O,!, \0, w', 'O', 'R', 'L', 'D'}; printf("string=%s\n", ch);.. } 印出結果 : string=hello! 為什麼?

二維的字元陣列 範例 : char Stringarray[][5] = { abcd, efgh, ijkl, mnop }; Stringarray[0] a b c d \0 Stringarray[1] Stringarray[2] Stringarray[3] [0] [1] [2] [3] [4] e f g h \0 i j k l \0 m n o p \0

二維的字元陣列範例程式 ( 一 ) #... int main() { char ch[][10]= {"abcd", "efgh", "ijk", "mnop"}; printf( string=%s \n", ch[2] );.. } 印出結果 : string=ijk