C语言笔记--1数据类型——3结构体

特点:可定义多种数据类型

描述:从定义和结合上来进行说明

一般形式:struct 结构体名

                                 { 成员列表 } 变量列表 ;


定义+声明+初始化

// 结构体声明 + 定义 + 初始化
struct Student {
	char name[69];
	char sex;
	struct Date brithday;
	char address[90];
}student1 = {"LiMing", 'M', 2018, 10, 02, "123Beijing"};

void test01() {
	void show_test01(struct Student student) ;

	struct Student student2 = {"Dave", 'F', 2017, 01, 01, "GuangXi"};	// 先声明,后定义+初始化
	struct Student student3;											// 先声明,再定义,后逐个初始化
	strcpy(student3.name,  "Danay");
	student3.sex = 'M';
	student3.brithday.year = 2016;
	student3.brithday.month = 02;
	student3.brithday.day = 02;
	strcpy(student3.address,  "HuNan");
	// 变量初始化
	// 冒号初始化

	show_test01(student1) ;
	show_test01(student2) ;
	show_test01(student3) ;
}

void show_test01(struct Student student) {
	printf("%s,%c,%d,%d,%d,%s\n",student.name, student.sex, student.brithday.year, student.brithday.month, student.brithday.day, student.address);
}

结构体+组合

结构体+数组排序(选择法)

// 结构体数组排序(选择法)
void test02() {
	void show_test01(struct Student student);

	struct Student student[10] = {
		{"Dave", 'F', 2017, 01, 01, "GuangXi"},
		{"Array", 'F', 2015, 01, 01, "GuangDong"},
		{"Snow", 'M', 2017, 01, 01, "GuangXi"},
		{"Ned", 'N', 2010, 01, 01, "GuangXi"},
		{"Sansa", 'F', 2014, 01, 01, "GuangXi"}};
	
	int row, row1;
	struct Student temp;
	const int n = 10;
	for(row = 0; row < n; row++) 
		for(row1 = row; row1 < n; row1++) 
			if(strcmp(student[row].name, student[row1].name)) 
				temp = student[row], student[row] = student[row1], student[row] = temp;

	for(row = 0; row < n; row++) show_test01(student[row]);
}

结构体数组+指针法调用

// 结构体指针
void test03() {
	struct Student student2 = {"Dave", 'F', 2017, 01, 01, "GuangXi"};
	struct Student student[10] = {
		{"Dave", 'F', 2017, 01, 01, "GuangXi"},
		{"Array", 'F', 2015, 01, 01, "GuangDong"}};
	struct Student *stu1, *stu2;

	stu1 = &student2;

	printf("%s,%c,%d\n",student2.name, (*stu1).sex, stu1->brithday.year);    // 一维结构体的调用
	for(stu2 = student; stu2 < student + 10; stu2++) 
		printf("%s,%c,%d\n",stu2->name, stu2->sex, stu2->brithday.year);	// 二维结构体的调用
}

结构体变量+结构体的变量的指针-->函数形参

struct Student1 {
	int num;
	char name[90];
	int score[3];
	int aver;
};

// 结构体变量和结构体的变量的指针作为函数参数
void test04() {
	void test04_creat(struct Student1 stu[], int n);
	struct Student1 test04_max(struct Student1 stu[], int n);
	void test04_print(struct Student1 stu);

	struct Student1 stu[N], *p=stu;


	test04_creat(p, N);
	test04_print(test04_max(p, N));
}
void test04_print(struct Student1 stu) {
	printf("成绩最高的学生学号和姓名为:%d, %s\n", stu.num, stu.name);
	printf("平均成绩为:%d, 三门成绩分别为:%d, %d, %d\n",stu.aver, stu.score[0],  stu.score[1],  stu.score[2]);
}
struct Student1 test04_max(struct Student1 stu[], int n) {
	int i, j;
	int maxScore = 0, flag = -1;
	
	for(i = 0; i < n; i++) 
		if(stu[i].aver > maxScore)
			flag = i;			
	printf("%d\n",flag);
	return stu[flag];
}
void test04_creat(struct Student1 stu[], int n) {
	int i, j;
	int sumScore = 0;
	for(i = 0; i < n; i++) { 
		stu[i].num = i;
		strcpy(stu[i].name, "ii");
		for( j = 0, sumScore = 0; j < 3; j++) {
			stu[i].score[j] = i * 1 + j * 30;
			sumScore += stu[i].score[j];
		}
		stu[i].aver = (sumScore / 3);
		printf("stu[%d].aver:%d,%s,%d,%d,%d,%d\n",i, stu[i].num, stu[i].name, stu[i].score[0],
			stu[i].score[1], stu[i].score[2], stu[i].aver);
	}
}

以上写的是结构体的定义和结合使用(数组+指针+函数[形参])。


返回:C语言笔记--数据类型(总)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值