C语言之结构体类型

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 

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;
}

结果为:
C语言之结构体类型_第1张图片
栗2:

有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各个学生的信息。

#include 

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种用法等价:

  1. stu.成员名(如 stu.num)
  2. (*p).成员名(如 (*p).num)
  3. p -> 成员名(如 p -> num)

参考文档:

[1]. 谭浩强.C程序设计(第四版).北京:清华大学出版社,2010.
[2]. C语言结构体类型的定义和使用(一)

你可能感兴趣的:(C语言,c语言,结构体)