1.结构体,把描述同一个事物的多个变量放在一起,构成一个结构体
/*结构体结构举例(学生信息表)*/
struct student //结构体名称
{
int number; //学生学号
char name[20]; //学生姓名
int age; //学生年龄
int score; //学生成绩
};
现在根据基础结构体举个例子:定义一个结构体worker,有成员:姓名、编号、年龄、工资(float)。输入信息,并输出。
#include <stdio.h>
struct worker//定义结构体
{
int number;
char name[20];
int age;
float salary;
};
int main()
{
struct worker w1;//结构体成员
scanf("%d%s%d%f", &w1.number, w1.name, &w1.age, &w1.salary);//输入信息
printf("%d,%s,%d,%.2f\n", w1.number, w1.name, w1.age, w1.salary);//输出信息
}
//运行成果
linux@ubuntu:~/c++$ ./a.out
1001 xiaodi 22 12000
1001,xiaodi,22,12000.00
注:普通结构体的成员访问用“.”,举例为“s.number”,而结构体指针访问成员用“->”,举例为“s->number”。
现在举一个结构体指针的例子:写一个函数,传入n个student,查询其中年龄 > 25的student,并且输出该student的基本信息(调用print_student函数)
#include <stdio.h>
struct student
{
int number;
char name[20];
int age;
int score;
};
void print_student(struct student *s)
{
printf("%d, %s, %d, %d\n", s->number, s->name, s->age, s->score);
}
void find_by_age(struct student *s, int n, int age)
{
int i;
for(i = 0; i < n; i++)
{
if(s[i].age > age)
{
print_student(&s[i]);
}
}
}
int main()
{
struct student s[3] = { {1001, "xiaoli", 25, 95},
{1002, "xiaowang", 26, 90},
{1003, "xiaozhang", 27, 85}
};
find_by_age(s, 3, 25);
}
//运行结果
linux@ubuntu:~/c++$ ./a.out
1002, xiaowang, 26, 90
1003, xiaozhang, 27, 85
结构体是一种可以灵活的表示出大量数据的集合,结构体不但在C语言中运用广泛,在C++中同样有所应用。这些在后面的C++篇章中会进行总结。
现在最后举一个关于结构体的例题:
1 定义时间结构体: 包含年、月、日成员
2 完成set_date函数
函数声明如下: void set_date(struct date *p, int y, int m, int d);
3 完成print_date函数
函数声明如下: void print_date(struct date *p);
4 完成main函数,实现如下功能:
1) 定义 时间结构体变量 d1
2) 输入时间,并使用set_date函数设置给变量d1
3) 使用print_date函数输出设置的时间
#include <stdio.h>
struct date
{
int year;
int month;
int day;
};
void set_date(struct date *p, int y, int m, int d)
{
p->year = y;
p->month = m;
p->day = d;
}
void print_date(struct date *p)
{
printf("%d-%d-%d\n", p->year, p->month, p->day);//注意结构体指针的格式
}
int main()
{
struct date d1;
int y, m, d;
scanf("%d%d%d", &y, &m, &d);
set_date(&d1, y, m, d);
print_date(&d1);
}
PS:关于结构体的基础内容就总结到这里,在之后的许多项目或者题目中都离不开结构体,所以一定要认真的学习结构体。如有瑕疵还请评论区纠正,辛苦。