C語言允許用戶自己建立由不同類型數據組成的組合型數據結構,它稱爲結構體。
1. 聲明一個結構體類型的一般形式如下:
struct 結構體類型名
{
成員表列
};
2. 結構體類型變量的定義一般形式爲:
struct 結構體類型名
{
成員表列
}變量名錶列;
3. 結構體類型變量初始化和引用:
struct TIME
{
char date;
char month;
char year;
char hour;
char min;
char sec;
};
struct nmea_msg
{
TIME utc;
char gpssta;
int longitude;
int latitude;
short speed;
short altitude;
} Data;
Data.speed = 50;
Data.utc.month = 12;
基礎語法講解完畢,編程的技巧在練習!
慄1:
輸入兩個學生的學號、姓名和成績,輸出成績較高的學生的學號、姓名和成績。
#include <stdio.h>
int main()
{
struct Student{
int num;
char name[20];
float score;
}student1, student2;
scanf("%d %s %f", &student1.num, student1.name, &student1.score);
scanf("%d %s %f", &student2.num, student2.name, &student2.score);
printf("The higher score is:\n");
if(student1.score > student2.score)
printf("%d %s %6.2f\n", student1.num, student1.name, student1.score);
else if (student1.score < student2.score)
printf("%d %s %6.2f\n", student2.num, student2.name, student2.score);
else
{
printf("%d %s %6.2f\n", student1.num, student1.name, student1.score);
printf("%d %s %6.2f\n", student2.num, student2.name, student2.score);
}
printf("\n");
return 0;
}
結果爲:
慄2:
有n個學生的信息(包括學號、姓名、成績),要求按照成績的高低順序輸出各個學生的信息。
#include <stdio.h>
struct Student{
int num;
char name[20];
float score;
};
int main()
{
struct Student stu[5]={{10101, "zhang", 78},{10103, "wang", 98.5},{10106, "li", 86.5},{10108, "ling", 73.5},{10110, "sun", 100}};
struct Student temp;
const int n = 5;
int i,j,k;
printf("The order is:\n");
for(i=0;i<n-1;i++)
{ k=i;
for(j=i+1;j<n;j++)
if (stu[j].score > stu[k].score)
k=j;
temp = stu[i];
stu[i] = stu[k];
stu[k] = temp;
}
for(i=0;i<n;i++)
printf("%6d %8s %6.2f\n", stu[i].num, stu[i].name, stu[i].score);
printf("\n");
return 0;
}
如果p指向一個結構體變量stu,以下3種用法等價:
- stu.成員名(如 stu.num)
- (*p).成員名(如 (*p).num)
- p -> 成員名(如 p -> num)
參考文檔:
[1]. 譚浩強.C程序設計(第四版).北京:清華大學出版社,2010.
[2]. C語言結構體類型的定義和使用(一)