結構與其他資料型態 Janet Huang 5-1 結構的宣告 struct 結構名稱 struct 結構名稱變數 1, 變數 2,, 變數 m; struct 結構名稱 變數 1, 變數 2,, 變數 m; student; student; 5-2 1
結構變數初值的設定 struct 結構名稱 struct 結構名稱變數 = 初值 1, 初值 2,, 初值 n student="janet","1350901",100,95 5-3 struct 結構名稱 變數 = 初值 1, 初值 2,, 初值 n 結構變數初值的設定 student="janet","1350901",100,95 5-4 2
結構變數名稱 欄位名稱 結構的使用 student; printf( Student s name: ); gets(studentname); ( 或 scanf( %s,studentname) printf( Math score: ); scanf( %d,&studentmath); printf( %s s Math score is %d\n,studentname,studentmath); 5-5 struct 結構名稱 1 struct 結構名稱 2 結構型態 1 欄位名稱 k; 變數 1, 變數 2,, 變數 m; 巢狀結構 struct date int month; int day; struct mydata struct datebirthday; student= "Janet","1350901",1,1,100,95 5-6 3
巢狀結構的使用 結構變數名稱 2 結構變數名稱 1 欄位名稱 struct date /* 定義結構 */ int month; int day; /* 定義結構 */ struct date birthday; student; /* 宣告結構變數 */ /* 輸入結構變數 */ printf("student's name:"); gets(studentname); printf(" Birthday(month): "); scanf("%d",&studentbirthdaymonth); printf("birthday(day):"); scanf("%d",&studentbirthdayday); printf("math score:"); scanf("%d",&studentmath); /* 輸出結構變數內容 */ printf("student's name:%s\n",studentname); printf( Birthday is %d/%d\n", studentbirthdaymonth,studentbirthdayday); printf("math score=%d\n",studentmath); 5-7 結構陣列的使用 struct 結構型態結構陣列名稱 [ 長度 ]; #include <stdioh> for(i=0;i<max;i++) /* 輸入結構變數 */ #define MAX 10 int main(void) printf("student's name:"); gets(student[i]name); int i; printf("math score:"); scanf("%d",&student[i]math); getchar( ); /* 吸收 Enter 值 */ /* 輸出結構變數內容 */ student[max]; for(i=0;i<max;i++) printf( Name:%s\n",student[i]name); printf("math=%d\n",student[i]math); 5-8 4
結構陣列名稱 [i] 欄位名稱 ; #include <stdioh> #define MAX 10 int main(void) int i; student[max]; 以指標方式表示結構陣列 ( 結構陣列名稱 +i) -> 欄位名稱 ; for(i=0;i<max;i++) /* 輸入結構變數 */ printf("student's name:"); gets((student+i)->name); printf("math score:"); scanf("%d",&(student+i)->math); getchar( ); /* 吸收 Enter 值 */ /* 輸出結構變數內容 */ for(i=0;i<max;i++) printf("name:%s\n",(student+i)->name); printf("math=%d\n",(student+i)->math); 5-9 共同空間的宣告 union 聯合型態 union 聯合型態變數 1, 變數 2,, 變數 m; union 聯合型態 變數 1, 變數 2,, 變數 m; union mydata union mydata student; union mydata student; 5-10 5
共同空間與結構的差異 1 student1; union mydata2 student2; student1name 15 位元組 student1id 10 位元組 student2name 15 位元組 低位元組 高位元組 student2id 10 位元組 5-11 共同空間變數初值的設定 union 聯合型態 union 聯合型態變數 = 初值 union mydata union mydata student="janet" union mydata union mydata student= 1350901" printf(" name=%s ",studentname); printf(" id=%s ",studentid); 5-12 6
列舉型態的宣告 enum 列舉型態名稱 列舉常數 1; 列舉常數 2; 列舉常數 n; enum 列舉型態名稱變數 1, 變數 2,, 變數 m; enum 列舉型態名稱 列舉常數 1; 列舉常數 2; 列舉常數 n; 變數 1, 變數 2,, 變數 m; enum mykey; left, right, middle enum mykey mouse; enum mykey; left, right, middle mouse; 5-13 列舉型態的使用 int key; enum mykey /* 定義列舉型態 */ left,right,middle mouse; /* 宣告列舉型態變數 */ do /* 輸入 0~2 的值 */ printf("button press?(0)left (1)Right (2)Middle: "); scanf("%d",&key); while((key>2) (key<0)); mouse=key; /* 將 key 值指定給 mouse 變數存放 */ switch(mouse)/* 根據 mouse 的值印出字串 */ case left: printf("left Button Pressed!\n"); break; case right: printf("right Button Pressed!\n"); break; case middle: printf("middle Button Pressed!\n"); 5-14 7
使用者自訂型態的宣告 typedef 資料型態識別字 ; typedef float temper; /* 定義自訂型態 */ temperf,c; /* 宣告自訂型態變數 */ printf("input Celsius degree:"); scanf("%f",&c); f=(float)(90/50)*c+32; printf("%2f Celsius=%2f Fahrenheit degree\n",c,f); 5-15 8