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语言结构体类型的定义和使用(一)