C++学习之 结构体与联合体(中国科学院大学)

在这里插入图片描述

1.结构体

在这里插入图片描述

1.1 问题的提出

在这里插入图片描述

1.2 结构体类型及定义

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 结构体变量的定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4 结构体变量的初始化

在这里插入图片描述
在这里插入图片描述

1.5 结构体变量的使用

在这里插入图片描述

//结构体变量使用.cpp
// 定义结构体类型employee,包括工号、姓名、工资3个成员,
// 定义两个该类型的变量,并对其中一个员工信息进行初始化,输入另一个员工的信息,
// 最后输出这两个员工的信息。
#include<iostream> 
using namespace std;

struct employee
{
    char num[10];  //员工号 
    char name[10];  //姓名 
    double salary;
};

struct employee emp1 = { "1001","李明",10000 }, emp2;

int main()
{

    cout << "请输入员工的员工号、姓名和工资: ";
    cin >> emp2.num >> emp2.name >> emp2.salary;
    cout << emp1.num << '\t' << emp1.name << '\t' << emp1.salary << endl;
    cout << emp2.num << '\t' << emp2.name << '\t' << emp2.salary << endl;
    return 0;
}

在这里插入图片描述

1.6 结构体变量赋值运算

在这里插入图片描述
在这里插入图片描述

// 结构体变量赋值和输出.cpp : 用结构体表示学生的基本信息。
#include <iostream>
#include <string>
using namespace std;

struct Student { //学生信息结构体
	char sex; //性别
	int num; //学号
	string name; //姓名,字符串对象   
	int age; //年龄
};
int main() {
	Student stu = { 'F',20208001,"李明",20 };
	cout << "string空间 =" << sizeof(string) << endl;
	cout << "stu空间 = " << sizeof(stu) << endl << endl;

	cout << "姓名 :\t" << stu.name << endl;
	cout << "性别 :\t" << stu.sex << endl;
	cout << "年龄 :\t" << stu.age << endl;
	cout << "学号 :\t" << stu.num << endl;

	return 0;
}

在这里插入图片描述

1.7 结构体数组

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

//结构体数组.cpp
// 输出employee中所有员工的数据,并找出工资最高的员工记录。
#include<iostream>
using namespace std;
#define N 4

struct employee
{
    char num[10];
    char name[10];
    double salary;
};

struct employee emp[N] = { {"1001","李明",2800},
                        {"1002","张红",5000},
                        {"1003","王强",3600},
                        {"1004","刘刚",4500} };

void show()
{
    cout << "显示具有employee结构的" << N << "个记录:" << endl;
    for (int i = 0; i < N; i++)
        cout << emp[i].num << "\t" << emp[i].name << "\t" << emp[i].salary << endl;
    cout << endl;
}

void find()
{
    int k = 0;
    float x = emp[0].salary;
    for (int i = 1; i < N; i++)
    {
        if (emp[i].salary > x)
        {
            x = emp[i].salary;    k = i;
        }
    }
    cout << "显示结构体数组中具有最大工资值的记录:" << endl;
    cout << emp[k].num << "\t" << emp[k].name << "\t" << emp[k].salary << endl;
}

int main()
{
    show();
    find();
    return 0;
}

在这里插入图片描述

1.8 结构体及指针

在这里插入图片描述
在这里插入图片描述

// 结构体指针.cpp 
#include <iostream>
#include <string>
using namespace std;

struct Student { //学生信息结构体
	int num; //学号
	string name; //姓名,字符串对象
	char sex; //性别
	int age; //年龄
};
int main() {
	Student stu[2] = { 97001, "Lin Lin", 'F', 19,
					   97002, "zhang san",'M',20 };
	for (int i = 0; i < 2; i++)
	{
		cout << "Num: " << stu[i].num << endl;
		cout << "Name: " << stu[i].name << endl;
		cout << "Sex: " << stu[i].sex << endl;
		cout << "Age: " << stu[i].age << endl;
		cout << endl;
	}

	Student* p1, * p2;
	p1 = stu;
	cout << (*p1).name << ":" << (*p1).age << endl << endl;

	p2 = &stu[1];
	cout << p2->name << ":" << p2->age << endl;

	return 0;
}

在这里插入图片描述

2.联合体

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 联合体应用
// 联合体变量 
#include<iostream>
using namespace std;

union data
{
    char c_data;
    short s_data;
    long l_data;
}x;

int main()
{
    x.c_data = 'm';        cout << "c_data=" << x.c_data << endl;
    x.s_data = 10;         cout << "s_data=" << x.s_data << endl;
    x.l_data = 100;        cout << "l_data=" << x.l_data << endl;
    return 0;
}

在这里插入图片描述

在这里插入图片描述

//联合体数据地址 
#include<iostream>  
#include<cstring>
using namespace std;

union U1
{
    int n;
    char s[10];
    double d;
};

union U2
{
    int n;
    char s[5];
    double d;
};

int main()
{
    U1 u1;
    U2 u2;
    cout << sizeof(u1) << '\t' << sizeof(u2) << endl;
    cout << "u1各数据地址:\n" << &u1 << '\t' << &u1.d << '\t' << &u1.s << '\t' << &u1.n << endl;
    cout << "u2各数据地址:\n" << &u2 << '\t' << &u2.d << '\t' << &u2.s << '\t' << &u2.n << endl;
    cout << endl;

    u1.d = 12.3;
    strcpy_s(u1.s, "abcd");
    u1.n = 10;
    // 上面三语句,只有最后一句有意义 ,其余都被覆盖了。 
    cout << u1.n << "  ,  " << u1.s << "   ,   " << u1.d << endl;

}

在这里插入图片描述

3.实战

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值