Array (陣列) 1: July 2, 2011 =============== 1. int a,b,c,d,e; // 一般宣告變數方式 a = 1; b = 2; scanf("%d %d %d %d", &a, &b, &c, &d); d = a+b+c; what if? int a,b,...,aa,ab,...,zx,zy,zz; 2. int a[1000]; // 以陣列宣告變數方式 a[0] = 1; a[1] = 2; a[999] = 66; scanf("%d %d %d %d", &a[0],&a[1],&a[2],&a[3]); for(i=0;i<1000;i++) scanf("%d", &a[i]); // 輸入1000個整數 for(i=0;i<1000;i++) printf("%d\n", a[i]); // 輸出1000個整數 for(i=0;i<1000;i++) a[i]=i; // a[0]=0; ... a[999]=999; for(i=0;i<1000;i++) a[i]=1000-i; // a[0]=1000; a[1]=999, ... a[999]=1; for(i=0;i<1000;i++) a[i]=2*i+1; // a[0]=1; a[1]=3; ... a[999]=1999; 3. char name[40][20]; strcpy(name[0],"chan tai man"); // string copy scanf("%s",name[2]); gets(name[2]); for(i=0;i<40;i++) gets(name[i]); // 輸入40個名字 for(i=0;i<40;i++) printf(name[i]); // 輸出40個名字 for(i=0;i<40;i++) puts(name[i]); // 輸出40個名字 4. int score[40], sum=0; // 40個分數 score[12] = 50; for(i=0;i<40;i++) scanf("%d",&score[i]); sum = score[0] + score[1] + ... + score[39]; for(i=0;i<40;i++) sum = sum+score[i]; // 簡潔 avg = sum/40; 5. char grade[40]; // 40個等級 grade[0] = 'A'; grade[1] = 'B'; for(i=0;i<40;i++){ if(score[i]>=50) grade[i]="A"; else grade[i] = "B"; } for(i=0;i<40;i++){ if(score[i]<=20) grade[i]="E"; else if(score[i]<=40) grade[i]="D"; else if(score[i]<=60) grade[i]="C"; else if(score[i]<=80) grade[i]="B"; else grade[i]="A"; } for(i=0;i<40;i++) // 列印姓名、分數、等級 printf("%3d %-20s %5d %c \n", i, name[i], score[i], grade[i]); 6. float xcoordinate[10], ycoordinate[10]; // x,y座標 xcoordinate[0] = -4.0; ycoordinate[0] = 5.5; 7. use of array 陣列的應用: int mm; char monthname[13][4]={"x", "Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec"}; while(1){ scanf("%d",&mm); printf("%s\n", monthname[mm]); } 8. homework: literal.c // 文字 arrays: 1. units[1-19] // 個位 units[1] <-- "one"; units[2] <-- "two"; ... units[19] <-- "nineteen" 2. tens[2-9] // 十位 tens[2] <-- "twenty"; tens[3] <-- "thirty"; ... tens[9] <-- "ninety" sample output screen 輸出畫面: Q: Enter a number (1-99) : 34 A: thirty four algorithm算法: 1. prepare arrays 準備兩個陣列 units[] and tens[] 2. ask user for input 輸入 (n) 3. if n<20 then output 輸出文字 words stored in array units[] 4. else break down 分柝 n into unit digit個位 and tens digit十位 using function mod(%) and div(/) and output appropriate 輸出適當文字 words on the screen literals文字: 1-10 one two three four five six seven eight nine ten 11-15 eleven twelve thirteen fourteen fifteen 16-19 sixteen seventeen eighteen nineteen 20-90 twenty thirty forty fifty sixty seventy eighty ninety For-loop:重溫 ========= 1. sum of first n integers 首n個整數的和 int i, sum=0; for(i=1;i<=10;i++) sum = sum+i; 2. factorial of n: 首n個整數的積 int i, factorial=1; for(i=1;i<=10;i++) factorial = factorial*i; 3. alphabets: 字母 char ch; for(ch=65;ch<=90;ch++) printf("%d %c\n", ch,ch); for(ch='a';ch<='z';ch++) printf("%d %c\n", ch,ch); 4. display triangle: 三角形 for(i=0;i<5;i++){ for(j=0;j0;i--) a[i] = a[i-1]; 當i=9, a[9]=a[8]; what if? for(i=0;i<9;i++) a[i+1] = a[i]; 5. swapping x,y 互換 int x=100, y=50, t; t = x; x = y; y = t; 6. swapping a[0],a[9] 互換 int a[10], t; t = a[0]; a[0] = a[9]; a[9] = t; 7. reverse 反轉/倒轉(數值) for(i=0;i<5;i++){ t = a[i]; a[i] = a[9-i]; a[9-i] = t; } what if? int a[400]; 8. reverse 反轉/倒轉(列印) for(i=0;i<10;i++) printf("%d\n", a[9-i]); for(i=9;i>=0;i--) printf("%d\n", a[i]); 9. 陣列的應用 (a) char animals[12][3]={"猴","雞","狗","豬","鼠","牛", "虎","兔","龍","蛇","馬","羊"}; i=0; printf("%s\n", animals[i]); (b) char monthname[13][4]={"x","Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec"}; mm=9; printf("%s\n", monthname[mm]); (c) char cdow[7][4]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; (d) char cnum[11][3]={"○","一","二","三","四","五","六","七","八","九","十"}; n=24; printf("%s十%s\n", cnum[?],cnum[?]); (e) int maxday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; do{ printf("Enter mm,dd "); scanf("%i%i",&mm,&dd); }while(mm<1 || mm>12 || dd<1 || dd>31); (f) int zday[13]={0,20,19,21,21,21,22,23,24,23,23,22,22}; (g) char zodiac[13][5]={"x","水瓶","雙魚","白羊","金牛","雙子","巨蟹", "獅子","處女","天秤","天蠍","人馬","山羊"}; Z = mm; if(dd<... ... printf("zodiac = %s\n", zodiac[z]); (10) More examples (a) int maxday[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; maxday[0] = 0; maxday[1] = 31; maxday[3] = 31; maxday[ 5] = 31; maxday[2] = 28; maxday[4] = 30; maxday[6] = 30; maxday[ 9] = 30; maxday[11] = 30; maxday[7] = 31; maxday[8] = 31; maxday[10] = 31; maxday[12] = 31; (b) int mark[40] = {0}; mark[0]=100; mark[1]=95; ... mark[39]=50; (c) int card[52]; card[ 0] = 0; card[ 1] = 1; card[ 2] = 2; ... card[12] = 12; card[13] = 13; card[14] = 14; card[15] = 15; ... card[25] = 25; card[26] = 26; card[27] = 27; card[28] = 28; ... card[38] = 38; card[39] = 39; card[40] = 40; card[41] = 41; ... card[51] = 51; (d) mark6 int num[40]={0}; num[0] = 0; num[1] = 0; ... num[49] = 1; (e) int freq[26]={0}; freq[0] = 0; freq[1] = 25; freq[2] = 236; freq[3] = 926; freq[4] = 2730; freq[5] = 1371; (f) money note int note[9] = {1000,500,100,50,20,10,5,2,1}; note[0] = 1000; note[3] = 50; note[6] = 5; note[1] = 500; note[4] = 20; note[7] = 2; note[2] = 100; note[5] = 10; note[8] = 1; (g) int num[13] = {1000,900,500,400, 100,90,50,40, 10,9,5,4,1}; num[0] = 1000; num[4] = 100; num[ 8] = 10; num[1] = 900; num[5] = 90; num[ 9] = 9; num[2] = 500; num[6] = 50; num[10] = 5; num[3] = 400; num[7] = 40; num[11] = 4; num[12] = 1; (h) char roman[13][3] = {"M","CM","D","CD", "C","XC","L","XL", "X","IX","V","IV","I"}; roman[0] ← "M" ; roman[4] ← "C" ; roman[ 8] ← "X"; roman[1] ← "CM"; roman[5] ← "XC"; roman[ 9] ← "IX"; roman[2] ← "D" ; roman[6] ← "L" ; roman[10] ← "V"; roman[3] ← "CD"; roman[7] ← "XL"; roman[11] ← "IV"; roman[12] ← "I"; (i) char animals[12][3] = {"猴","雞","狗","豬","鼠","牛", "虎","兔","龍","蛇","馬","羊"}; animals[0] ← "猴" animals[ 6] ← "虎" animals[1] ← "雞" animals[ 7] ← "兔" animals[2] ← "狗" animals[ 8] ← "龍" animals[3] ← "豬" animals[ 9] ← "蛇" animals[4] ← "鼠" animals[10] ← "馬" animals[5] ← "牛" animals[11] ← "羊" (j) 2-D array int num[3][4]; num[0][0] = 88; num[0][1] = 78; num[0][2] = 68; num[0][3] = 58; num[1][0] = 77; num[1][1] = 48; num[1][2] = 64; num[1][3] = 82; num[2][0] = 66; num[2][1] = 28; num[2][2] = 61; num[2][3] = 85; (k) int rowTL[3], colTL[4]; rowTL[0]=10; colTL[0]=34; rowTL[1]=20; colTL[1]=45; rowTL[2]=30; colTL[2]=56; colTL[3]=67; (l) char cjcode[13000][6]; // 倉頡碼 cjcode[0] ← "M" cjcode[1] ← "MN" cjcode[5] ← "MMM" ... cjcode[12999] ← "SMR" (m) char cword[13000][3]; // 中文字 cword[0] ← "一" cword[1] ← "丁" cword[5] ← "三" ... cword[12999] ← "司" (n) char name[40][10]; name[0] ← "Chan TM" name[1] ← "Chen ST" name[2] ← "陳七" ... (o) char monthname[13]={"", "Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec"}; monthname[1] ← "Jan" monthname[2] ← "Feb" ... monthname[12] ← "Dec" (p) char units[20][10] = {"","one","two","three","four","five", "six","seven","eight","nine","ten", "eleven","twelve","thirteen","fourteen","fifteen", "sixteen","seventeen","eighteen","nineteen"}; units[1] ← "one" units[2] ← "two" units[3] ← "three" ... units[19] ← "nineteen" (q) char tens[10][8] = {"","ten","twenty","thirty","forty", "fifty","sixty","seventy","eighty","ninety"}; tens[1] ← "ten" tens[2] ← "twenty" tens[3] ← "thirty" ... tens[9] ← "ninety" (r) char cdow[7][4] ={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; cdow[0] ← "Sun" cdow[1] ← "Mon" cdow[2] ← "Tue" ... cdow[6] ← "Sat" (s) char cnum[10][3] ={"○","一","二","三","四","五","六","七","八","九"}; cnum[0] ← "○" cnum[1] ← "一" cnum[2] ← "二" ... cnum[9] ← "九" (t) char zodiac[13][5]={"山羊", "水瓶","雙魚","白羊","金牛","雙子","巨蟹", "獅子","處女","天秤","天蠍","人馬","山羊"}; int zday[13]={0, 20,19,21,21,21,22,23,24,23,23,22,22}; (u) int count[10]={0}; (v) int prime[101]={0}; prime[1]=0; // not prime prime[2]=1; prime[3]=1; prime[4]=0; ... (w) #define MAX 13 int st[MAX]={0,2,3,3,4,3,2,4,6,3,5,2,4}; int stnTime[MAX][MAX]; char stnName[MAX][3]={ // 車站名稱 "TT","KN","MK","KT","TW","ST","FT", "UV","TP","WO","FL","SS","LW"}; char stnName[14][7]={"", "尖東","紅磡","旺角","九龍塘","大圍", "沙田","火炭","大學","大埔墟","太和", "粉嶺","上水","羅湖"}; int score[40][6]; // 40 students x 6 subjects score[0][0] = 100; // student 0, subject 0 ... score[0][5] = 50; // student 0, subject 5 score[39][0] = 99; // student 39, subject 0 ... score[39][5] = 88; // student 39, subject 5 char grade[40][6]; grade[0][0]='A'; grade[39][0]='A'; ... grade[0][5]='D'; grade[39][5]='B'; (x) magicSquare[][] gameboard[][] sudoku game of life chess tictactoe[][]