陣列與檔案處理 授課:張朝麟 日期:2009/3/11
Array 陣列 為何要使用陣列? 陣列的分類 有多量的資料要輸入時 這些資料的型態都相同 資料處理的技巧能夠以較簡潔的通式來表達 陣列依存放元素複雜度,可以分為一維、二維與二維以上的多陣列 基本上陣列的內容都是存在記憶體裡相臨接的儲存位置
一維陣列 宣告方式: 陣列型態 陣列名稱 [ 個數 ] int score[4] 陣列型態: 陣列型態 陣列名稱 [ 個數 ] int score[4] 陣列型態: 存在陣列裡的變數屬於哪種型態(int,float,char) 陣列名稱:依照識別字的規則命名 個數:可以宣告1~65536之間的值
陣列初值設定 初值設定 ( score[0]=30, score[1]=4, score[2]=20, score[3]=50) int score[4]={30,4,20,50}; ( score[0]=30, score[1]=4, score[2]=20, score[3]=50) int data[3]={0}; ( data[0]=0, data[1]=0, data[2]=0)
陣列的輸入 int x[10],i; for(i=0;i<10;i++) x[i]=i; 1 2 3 … 9 x 0 1 2 3 … 9 x 1 2 3 … 9
陣列的輸出 int j; for(j=0;j<10;j++) printf(“x[%d]=%d\n”,j,x[j]); x[0]=0 … x[9]=9
使用陣列的注意事項 C語言對於超過所設定的空間,不做範圍檢查。 索引只要不超過所宣告的空間,以常數,變數,或算術運算式當索引皆是合法的。 x[1] = 10; x[i] = 10; x[i*4+1] = 10;
查詢陣列所佔記憶體空間 sizeof(陣列名稱) dauble data[4]; printf(“陣列元素所佔的位元組:%d\n”,sizeof(data[0])); printf(“整個陣列所佔的位元組:%d\n”,sizeof(data)); printf(“陣列元素的個數:%d\n”,sizeof(data)/size(dauble)); 陣列元素所佔的位元組:8 整個陣列所佔的位元組:32 陣列元素的個數:4
二維陣列 宣告方式: 陣列型態 陣列名稱 [ 列數 ][ 行數 ] int score[4][5] 陣列型態:存在陣列裡的變數屬於哪種型態 陣列型態 陣列名稱 [ 列數 ][ 行數 ] int score[4][5] 陣列型態:存在陣列裡的變數屬於哪種型態 陣列名稱:依照識別字的規則命名 列數、行數:可以宣告1~65536之間的值
二維陣列的宣告 int x[3][4]; X[0][0] 100 X[0][1] 104 X[0][2] 108 X[0][3] 112 行數 列數 X[0][0] 100 X[0][1] 104 X[0][2] 108 X[0][3] 112 X[1][0] 116 X[1][1] 120 X[1][2] 124 X[1][3] 128 X[2][0] 132 X[2][1] 136 X[2][2] 140 X[2][3] 144 1 2 0 1 2 3
二維陣列的輸入 二維陣列的輸入,必須靠兩層for來處理 int x[3][4]; for(int i=0;i<3;i++) { for(int j=0;j<4;j++) x[i][j]=i*j; }
二維陣列的輸入 x[3][4]; 行數 列數 1 2 3 4 6 i=0 i=1 i=2 j=0 j=1 j=2 j=3
一字元與字串比較 char ch1='a'; /*宣告字元變數ch1*/ char ch2[2][2]; /*宣告字元陣列ch2*/ char str1[]="str1"; /*宣告字串變數str1*/ char str2[]="str2str2"; /*宣告字串變數str2*/
檔案處理 開啟檔案 將欲新增或修改的檔案開啟 更新檔案內容 將新資料寫入檔案中 關閉檔案 檔案使用完畢,要將檔案關閉才能確保資料全部寫入檔案
有緩衝區的檔案處理函數 好處 不需要不斷地做磁碟的輸入輸出,可增加執行速度 缺點 需佔用一塊記憶體,以及當系統當機緩衝區內資料將消失
有緩衝區的檔案處理函數 檔案指標宣告方式 開檔 關檔 FILE *指標變數; FILE *fptr fopen(“欲開啟檔案名稱”,”存取模式”) fopen(“c:\\prog\\num.txt”,”r”) 關檔 fclose(指標變數); fclose(fptr); 存取模式 代碼 說明 讀取資料 r 檔案須存在 寫入資料 w 可複寫,並自行開檔 附加檔案之後 a 附加於原檔案之後,也可自行開檔
常用的檔案處理函數 (1/2) stdio.h 標頭檔中所宣告的檔案處理函數
常用的檔案處理函數 (2/2)
LAB3 讓使用者輸入學號 利用*,將學號以直方圖方式輸出至螢幕 並將此長條圖輸入至檔案
LAB3執行結果(1/2)
LAB3執行結果(2/2)
LAB3 Hint 運用ASCII (0~948~57) char Id[SIZE]; putc(Id[i],fptr);
HW3 讓使用者輸入5個數字(10位數以內) 將此5個數字比大小(使用一維陣列) 順序左由右為小到大 並將其結果輸出至檔案
HW3執行結果(1/2)
HW3執行結果(2/2)
HW3 Hint itoa() FILE *fptr putc(' ',fptr); int a,b,c,arr[3],i; 整數轉字串 itoa() 寫入空白字元至檔案 FILE *fptr putc(' ',fptr); scanf運用 int a,b,c,arr[3],i; scanf(“%d %d”,&a,&b,&c); 10 20 30 for(i=0;i<3;i++) scanf(“%d”,&arr[i]); 102030
HW3注意事項 程式碼長這樣的直接0分