C++语言基础--结构体

C++语言基础----结构体

【视频讲解】
结构体1 结构体应用
【讲义】

结构体来源

   **

知识–从哪来?----解决什么问题?----怎么应用解决?-----扩展知识是啥?

**
程序==数据结构 + 算法;
数据结构:
1、基础数据结构–整型、浮点型、字符型…
2、用户自定义数据类型–结构体,可以包含多种基础数据结构体。
C++ 中的结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。

结构体定义

使用结构体,必须要先声明一个结构体类型,再定义和使用结构体变量。结构体类型的声明格式如下:

struct 类型名{
    数据类型1   成员名1;
    数据类型2   成员名2;};//注意这里有一个分号;一般在main()外面进行定义

结构体变量的定义

定义结构体变量格式如下:

struct 结构体类型名 变量名列表;
//类比一下定义基本数据变量就可以轻松记住;
int a;
float b;

也可以把结构体类型声明和变量定义合在一起,格式如下:

struct 类型名{
   //成员变量,描述结构体性质
    数据类型1   成员名1;
    数据类型2   成员名2;//成员函数,描述结构体行为
  函数1;
  函数2...
} 变量名;

结构体变量的使用

结构体变量具有以下特点:
(1)可以对结构体变量的整体进行操作。
例如:swap(a[i],a[j])
(2)可以对结构体变量的成员进行操作。
引用结构体变量中成员的格式为:

结构体变量名. 成员名

(3)结构体变量的初始化方法与数组类似。

例题1:学生信息 【问题描述】 输入一个学生的信息,包括姓名、性别、年龄、体重,再输出这些信息。
【输入格式】
一行,依次是学生的姓名、性别、年龄、体重。
【输出格式】 一行,依次是姓名、性别、年龄、体重(体重保留一位小数)。
【输入样例】
zhangsan m 20 90.5
【输出样例】 zhangsan m 20 90.5

#include<bits/stdc++.h>
using namespace std;
struct student{//只有成员变量,无成员函数
     string name;
     char sex;
     int age;
     double weight;
};
int main(){
     student stu;
     cin >> stu.name >> stu.sex >> stu.age >> stu.weight;
     cout << stu.name <<  “ “ << stu.sex <<  “ “ << stu.age <<  “ “ ;
     cout << fixed << setprecision(1) << stu.weight << endl;
     return 0;
}//注意成员变量的使用

结构体扩展

1、重载运算符
“运算符重载”常用于解决结构体或自定义数据类型的加法、减法等特殊含义的运算。运算符重载的一般格式为:

类型名 operator 运算符 (const 类型名 变量)const{}

例题2 作业统计
【问题描述】 为了了解学生的课后作业负担情况,需要统计学生连续若干天完成作业所需的总时间。现在,输入某位学生 n> 天完成作业的时间,格式为时、分、秒,最后输出这位学生 n 天完成作业的总时间(秒)。
【输入格式】
第 1 行一个正整数 n,表示有 n> 天;
第 2~ 第 n+1 行,每行 3 个整数,分别代表时、分、秒。
【输出格式】
一行信息,表示这个学生完成作业的总时间,具体格式见输出样例。
【输入样例】
3 1 20 30 1 20 45 1 19 30
【输出样例】
4hour 0minute 45second
【问题分析】
本题需要把若干时间(时、分、秒)相加,但又不是普通的加法运算。所以,可以利用运算符重载,另外定义一个“+”运算,实现对两个结构体变量的加法。

#include<bits/stdc++.h>
using namespace std;
struct worktime{// 声明一个结构体类型 worktime 记录学生完成作业的时间
     int hr,minut,sec; // hr,minut,sec 分别代表时分秒
     worktime operator +(const worktime x)const{ // 对 + 进行重新定义
         worktime tmp;
                  tmp.sec = (sec + x.sec) % 60;
                  tmp.minut = (minut + x.minut + (sec + x.sec) / 60) % 60;
                  tmp.hr = hr + x.hr + (minut + x.minut + (sec + x.sec) / 60) / 60;
                  return tmp;
          }
};
int main(){
    worktime stu,sum;
    int n;
    cin >> n;
    sum.hr = sum.minut = sum.sec = 0;
    for(int i = 1; i <= n; i++){
          cin >> stu.hr >> stu.minut >> stu.sec;
          sum = sum + stu;// 两个结构体 sum 和 stu 通过重载 + 运算符进行加法运算
    }
    cout << sum.hr <<  ” hour ” << sum.minut <<  ” minute ” << sum.sec <<  ” second ” ;
    return 0;
}

2、成员函数
在 C++ 中,允许在结构中定义函数,该函数称为“成员函数”。描述形式如下:

struct 结构名 {
          数据成员
     成员函数
};

例题3 身高问题
【问题描述】
输入 n 个学生的信息,每个学生信息包括姓名、身高、学号。编程输出身高最高的学生的信息。
【> 输入格式】
第> 1 行一个正整数 n,表示学生个数,n≤100。
以下 n 行,每一行依次输入学生的姓名、身高、学号。
【输出格式】
输出最高的学生信息,如存在身高一样的请输出学号小的那个同学。
【输入样例】
5
John 172 20160302
David 173 20160306
Jason 168 20160309
Jack 152 20160311
Kitty 147 20160319
【输出样例】
David 173 20160306

#include<bits/stdc++.h>
using namespace std;
struct stu{
        string name;
        int heigh;
        int num;
        void input(){//成员函数
                 cin >> name >> heigh >> num;
        }
        void output(){//成员函数
                 cout << name <<  “ “ << heigh <<  “ “ << num << endl;
        }
 };
 stu a[110];//定义结构体数组,和一般数组定义类似
 int main(){
    int n;
    stu maxn;
    maxn.heigh = maxn.num = 0;
    cin >> n;
    for(int i = 1; i <= n; i++){
                    a[i].input();//调用成员函数
                    if(a[i].heigh > maxn.heigh) maxn = a[i];
                    else if(a[i].heigh == maxn.heigh && a[i].num < maxn.num) maxn = a[i];
     }
     maxn.output();//调用成员函数
     return 0;
}

扩展练习题目

1、小明查成绩
视频讲解
2、寻找平面上的极大点
视频讲解
3、小明爱矩形
视频讲解

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页