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 <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種用法等價:

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

參考文檔:

[1]. 譚浩強.C程序設計(第四版).北京:清華大學出版社,2010.
[2]. C語言結構體類型的定義和使用(一)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章