Introduction to the C Programming Language

Slides:



Advertisements
Similar presentations
資料坐火車 …… 談陣列 (Array) 綠園 2008/12/15. Array 的宣告 整數陣列的宣告  int student[5]; 意義:宣告了 5 個 int 大小的連續空間,名稱 為 student ,沒有預設值,則為系統殘值。 student student[0] student[1]
Advertisements

綠園 2012/11/06. Array 的宣告 整數陣列的宣告 int student[5]; 意義:宣告了 5 個 int 大小的連續空間,名稱 為 student ,沒有預設值,則為系統殘值。 student student[0] student[1] student[4] student[2]
綠園 2012/11/06. Array 的宣告 整數陣列的宣告 int student[5]; 意義:宣告了 5 個 int 大小的連續空間,名稱 為 student ,沒有預設值,則為系統殘值。 student student[0] student[1] student[4] student[2]
第一單元 建立java 程式.
陣列 Array chapter 3 德明科技大學資訊科技系.
陣列與字串 Java陣列特性 一維陣列 多維陣列 字串 字串的相關函數 字串緩衝器類別.
C 程式設計— 陣列 台大資訊工程學系 資訊系統訓練班.
C/C++基礎程式設計班 陣列 (Array)
File Access 井民全製作.
資料結構 第2章 陣列.
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
Visual C++ introduction
Chen Yi Fen The C Language Chen Yi Fen
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
列舉(enum).
【變數與記憶體位址】 變數(Variable)提供一個有名稱的記憶體儲存空間。一個變數包含資料型態、變數本身的值及它的位址值。
String C語言-字串.
保留字與識別字.
Introduction to the C Programming Language
Introduction to the C Programming Language
Java程式概觀.
STRUCTURE 授課:ANT 日期:2010/5/12.
C語言簡介 日期 : 2018/12/2.
Introduction to the C Programming Language
SQL Stored Procedure SQL 預存程序.
Introduction to the C Programming Language
11/25計程實習課 Speaker: Wen-Ching Lo.
Introduction to the C Programming Language
第3章 指標與字串 (Pointers and Strings)
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
Introduction to the C Programming Language
第一單元 建立java 程式.
Chapter 5 複合資料型態.
陣列(Array).
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
第三章 資料型態與輸出控制 本章學習目標 認識Matlab的基本資料型態 練習資料型態的轉換 學習如何控制Matlab的輸出格式
開始使用Visual C++.
陣列
JAVA 程式設計 資訊管理系 - 網路組.
程式結構&語法.
輸入&輸出 函數 P20~P21.
第九章 字串.
1.2 C语言程序的结构与书写规则 一、 C语言程序的总体结构
程式設計 博碩文化出版發行.
挑戰C++程式語言 ──第8章 進一步談字元與字串
Pointer 指標 授課老師:蕭志明.
認識常數與變數 學習C++所提供的各種基本資料型態 瞭解溢位的發生 學習認識資料型態之間的轉換
C qsort.
Introduction to the C Programming Language
挑戰C++程式語言 ──第7章 輸入與輸出.
計算機程式設計 老師:蘇炳煌 助教:楊斯竣.
第14章 結構與其他資料形式.
陣列與結構.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
簡單Java介紹.
資料表示方法 資料儲存單位.
程式設計--Quick Sort 通訊一甲 B 楊穎穆.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
Introduction to the C Programming Language
Introduction to the C Programming Language
Programming & Language Telling the computer what to do
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
Introduction to the C Programming Language
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

Introduction to the C Programming Language 陣列 (Array)

陣列 可存放相同資料型態的資料,陣列與變數一樣,也需要經過宣告才能使用。 Compiler給陣列的記憶體是一個連續的區塊。 一維陣列宣告格式: 資料型態 陣列名稱 [元素個數]; int score[3]; /*宣告整數陣列score,可存放3個元素*/ 宣告完陣列後,如果要使用陣列的元素,就可以利用陣列的”索引值”來操作。 陣列就好比宿舍的房間,索引值就是房間的編號,只要根據房間編號(索引值) ,就能找到房客(陣列的元素)。 []為陣列修飾符號,每一組方括號表示一維(dimension). 在C/C++語言中,第一個元素的索引值一定是0. score[0] score[1] score[2] 陣列共有3個元素,起始索引值為0.

一維陣列(1D Array) 宣告格式 : 資料型態 陣列名稱[陣列大小]; 例如: int score[5]; score[1]=23; 資料型態 陣列名稱[陣列大小]; 例如: int score[5]; score[1]=23; m score[0] m+4 score[1] m+8 score[2] m+12 score[3] m+16 score[4] 記憶體位址 記憶體 陣列名稱 陣列第一個元素之位址 23 註一: 長度為無號整數(1~65535) 註二: m 代表第一個元素的位址. 註三: 因為是整數,所以每個元素佔2個位元組; 如果是浮點數,則佔4個位元組. 註四: 陣列的名稱就代表該陣列在記憶體內開頭的位址. 例如: int aa[10]; printf(“The start address of this array is %d”,aa)

一維陣列(1D Array) --- 初值設定 設定陣列初值的格式 : 資料型態 陣列名稱[陣列大小]={xx,xx,…,xx}; 例如: int num[5]={3,6,7,5,9}; (或int num[]={3,6,7,5,9}; ) num[0] num[1] num[2] num[3] num[4] 記憶體 3 6 7 5 9 註一: 長度部分, 可有可無(因為C編譯程式在設定陣列的初值時, 會自行計算有多少個資料元素,然後配予足夠空間給它). 註二: 必須以一對大括號將所要設定之陣列元素值圍住, 陣列元素值間 以逗號相隔. 參考來源 : Borland C++入門與應用徹底剖析(P.203) C入門與Turbo系統 (P.8-7)

範例一: 比較3個數字的大小. 一維陣列(1D Array) #include <stdio.h> #include <stdlib.h> int main( ) { int count, max=0; int number[3]={5, 9, 3}; for (count = 0; count <=2 ; count++ ) if(number[count]>max) max=number[count]; } cout<<“三數中最大的值:”; cout<<max<<endl; return 0; C/C++ 編譯程式時, 並不會檢查存取陣列時的編號, 因此, 若使用負的, 或大於陣列大小的編號時, 編譯器並不會 檢查出來. 唯有執行結果可能有誤

範例二:陣列界限正確版 #include<iostream.h> int main(void) { int x[4]; //用來儲存user輸入的值 int i; for(i=0;i<=3;i++) cout<<“x[”<<i<<“]”<<“=”; //控制可以輸入多少個數值 cin>>x[i]; } cout<<"The output is:"<<endl; for(i=0;i<=3;i++) //分別輸出x陣列的值 cout<<x[i]<<endl; return 0;

陣列界限的檢查 #include<iostream.h> int main(void) { int x[4]; int i; 這種錯誤在run-time才會發生!! #include<iostream.h> int main(void) { int x[4]; int i; for(i=0;i<=5;i++) cout<<"x["<<i<<"]"<<"="; cin>>x[i]; } cout<<"The output is:"<<endl; cout<<x[i]<<endl; return 0;

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

為什麼用陣列儲存字串,陣列的size會多一個字元單位? 字元陣列 – 範例一 /*列印出字元及字串之長度*/ #include<iostream.h> int main(void) { char arr[]="friend"; char word[]={'b'}; char cad[]="b"; cout<<"size of a[]="<<sizeof(arr)<<endl; cout<<"size of word="<<sizeof(word)<<endl; cout<<"size of c[]="<<sizeof(cad)<<endl; return 0; } 執行結果: size of arr[]=7 size of word[]=1 size of cad[]=2 為什麼用陣列儲存字串,陣列的size會多一個字元單位? str_arr_1.c sizeof(a) =10 sizeof(b)=1 sizeof(str)=2 字串 a 的內容為 My friend, 包括空白共 9 個字元, 但結果為 10, 這是因為字串結尾之結束字元為 \0 字元變數 b 與字串變數 str內容皆為 c, 但長度不同, 因字串 str 以雙引號設定, 結束時自動加上 \0, 因此 str 長度為 2 個位元組, 字元變數以單引號設定, 並不會自動加上字串結束字元 \0

矩陣圖示 char a[ ]=“friend"; [0] [1] [2] [3] [4] [5] [6] [0] [1] [2] [3] [4] [5] [6] char arr[4]=“C++”; [0] [1] [2] [3] char arr[4]={‘C’,’+’,’+’}; f r i e n d \0 C + \0 C +

二維陣列(2D Array) 宣告格式 : 資料型態 陣列名稱[列數][行數]; 資料型態 陣列名稱[列數][行數]; 例如: int num[3][2]; /* 宣告一個 3x2 的陣列*/ row 1 m num[0][0] m+4 num[0][1] m+8 num[1][0] m+12 num[1][1] m+16 num[2][0] m+20 num[2][1] 記憶體 num[0][0] num[0][1] num[1][0] num[1][1] num[2][0] num[2][1] row2 row3 註一: m 代表第一個元素的位址. 註二: 因為是整數,所以每個元素佔4個位元組; 如果是浮點數,則佔24個位元組. 註三: 元素個數 = 2*3 = 6 個 註四: 二維陣列的輸入與輸出均需藉由兩層的for迴圈來處理. 參考來源 : Borland C++入門與應用徹底剖析(P.206) C入門與Turbo系統 (P.8-14)

二維陣列初值的設定 資料型態 陣列名稱[列個數][行個數]={{第一列初值}, {第二列初值}, …, {第N列初值}}; int sale[2][4]={{30,35,26,32}, {33,34,30,29}}; 1維陣列,有4個元素 1維陣列,有4個元素 第4行 第3行 第2行 第1行 (0,0) 30 (0,1) 35 (0,2) 26 (0,3) 32 (1,0) 33 (1,1) 34 (1,2) (1,3) 29 第一列 第二列

二維陣列(2D Array) 範例: 輸入兩個3*3的陣列, 將加總結果存入第三個陣列內. 範例: 輸入兩個3*3的陣列, 將加總結果存入第三個陣列內. #include<iostream.h> int main(void) { int num1[3][3],num2[3][3],num3[3][3]; int i,j; cout<<“please input first 2D-dimension array:\n”; //請輸入第一個2維陣列的值 for(i=0;i<3;i++) for(j=0;j<3;j++) cin>>num1[i][j]; } cout<<"please input second 2D-dimension array:\n"; for(i=0;i<3;i++) //請輸入第二個2維陣列的值 cin>>num2[i][j]; for(j=0;j<3;j++) //算出前兩個陣列加總的結果並存入第三個2維陣列 num3[i][j]=num1[i][j]+num2[i][j]; cout<<"num3["<<i<<"]"; cout<<"["<<j<<"]"<<"="<<num3[i][j]<<endl; } } return 0; 檔名 : 2darray2.c 執行結果: Please input first 2 dimension array. 3 4 5 2 3 4 1 2 3 Please input second 2 dimension array. 2 2 2 3 3 3 4 4 4 The result 2 dimension array is as following : 5 6 7 參考來源 : Borland C++入門與應用徹底剖析(P.208)

找出二維陣列的最大值 #include<iostream.h> int main(void) { int arr[2][4]={{3,13,26,32},{33,10,25,29}}; int i,j,max=arr[0][0]; //將max的值預設為arr[0][0]的值 for(i=0;i<2;i++) for(j=0;j<4;j++) if(max<arr[i][j]) //在二維陣列中,若找到更大的值就儲存在max max=arr[i][j]; } cout<<"\n 最大的數是"<<max; return 0;

多維陣列(Multi-dimensional Array) 宣告格式 : 資料型態 陣列名稱[平面數][列數][行數]; 例如: int x[2][3][4]; x[1][0][0] x[1][0][1] x[1][0][2] x[1][0][3] x[1][1][0] x[1][1][1] x[1][1][2] x[1][1] [3] x[1][2][0] x[1][2][1] x[1][2][2] x[1][2] [3] 註一: 整數,所以共佔2*3*4*2=48個位元組. 註二: 元素個數 = 2*3*4 = 48 個 註三: 三維陣列的輸入與輸出均需藉由三層的for迴圈來處理. 參考來源 : C入門與Turbo系統 (P.8-17) x[0][0][0] x[0][0][1] x[0][0][2] x[0][0][3] x[0][1][0] x[0][1][1] x[0][1][2] x[0][1] [3] x[0][2][0] x[0][2][1] x[0][2][2] x[0][2] [3]