在实际问题中,一组数据往往具有不同的数据类型。

例如, 在学生登记表中,姓名应为字符型(char[]);学号可为整型(int)或字符型(char[]);年龄应为整型(char);性别应为字符型(char);成绩可为整型(int)或实型(double)。 显然不能用一个数组来存放这一组数据。 因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构”。

   “结构”是一种构造类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类型。 结构即是一种“构造”而成的数据类型, 那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义一样。

1.定义结构体及结构体变量

结构体的一般形式:

struct 结构体类型名//struct是关键字

{

成员表;//可以有多个

成员函数;//可以有也可以没有

}结构变量量表;//可以同时定义多个结构体变量用“,”隔开,另外结构变量表后面的“;”不能漏掉。例如:

struct student//定义一个名叫student的struct类型
{string name;//定义名字int chinese;//定义语文成绩int math;//定义数学成绩int total;//定义总成绩
}a[111];//同时定义了a的数组变量
//也可以下面这样:
struct student
{string name;int chinese;int math;int total;
};
student a[111];//这里同样可以定义多个结构体变量
注意:结构体变量名不能与结构体名重复;在定义结构体时,系统不会对其分配实际内存,只有定义结构体变量时,系统才会为其分配内存。

2.结构体变量的特点

(1).结构体变量可以整体操作。例如;
swap(a[i],a[i+1]);
(2).结构体变量的成员的访问也很方便、清晰。例如:
cin>>a[i].name>>a[i].chinese>>a[i].math;
(3).结构体变量的初始化和数组的初始化类似。例如:
student op={"gaoxiang",80,90,170};

3.成员调用

一般形式:
结构体.成员名
例如: a[i].name;
操作:
cin>>a[i].name;                            //一般形式不能写cin>>a[i];
a[i].tatal=a[i].chinese+a[i].math;  // 就像整形变量一样使用
实际上结构体成员之间的操作与该成员类型所具有的操作是一致的。
成员元算符”.“在存取成员时具有最高优先级,并具有左结合性。在包含结构体的结构体的调用时,可记作:
student.abc.menbb
解释:说明结构体变量student有结构体成员abc;
结构体变量abc有成员menbb.

4.成员函数调用

一般形式:
结构体变量名.成员函数
结构体成员函数默认将结构体变量作为引用参数。

5.sort排序的使用

bool cmp(结构体类型名 x,结构体类型名 y)
{
    return x.结构体变量名>y.结构体变量名;
}
见代码:
bool cmp(struct x,struct y)
{return x.total>y.total;
}

5.struct的内存储存方式

   结构体 struct 是多个相互关联数据的集合,这些数据以整体形式存储在内存。
例如:
struct A
{  char  a;      //char占1个字节  int   b;      //int 占4个字节  short c;      //short占2个字节
};

那么结构体A是否占1+4+2=7个字节的内存大小呢,7个似乎很合理,但事实上,为了兼容各种不同的硬件,结构体内存分配采用特定字节对齐方式。

           1.数据类型对齐值:即为sizeof的值。
           2.结构体对齐值:结构体中对齐值最大类型的对齐值。
           3.结构体总大小为 其对齐值得增数倍,需要时编译器会自动添加空字节。
           4.结构体元素按顺序分配内存。
            按照上述规则:

        a在第0个字节开始,占一个字节;b则在第4个字节开始,占4个字节;c在第8个字节开始,占2个字节。为使结构体总大小为其对齐值得倍数,添加两个空字节,结构体总大小为12.

6.题目解释

题目内容:
输入N个学生的语文、数学和英语的得分,按总分从高到低输出,总分数相同按数学成绩的高低输出,两者相同按输入顺序排序。
输入格式:
第一行:有一个整数n(1<=n<=100);
接下来n行:每行有一个姓名,语文成绩,数学成绩,英语成绩(成绩整数范围(0<=成绩<=100)
输出格式:
n行:每行格式有:姓名 语文 数学 英语 总分
输入样例:
5
gaoxing 78 96 80
wangxi 70 99  69
liujia 90 87 77
zhangjin 78 91 67
tom 89 87 78
输出样例:
gaoxing 78 96 80 254
liujia 90 87 77 254
tom 89 87 78 254
wangxi 70 99 69 238
zhangjin 78 91 67 236
代码:
#include<bits/stdc++.h>//万能头文件
using namespace std;
struct A
{string name;//姓名int chinese;//语文int math;//数学int english;//英语int total;//总成绩int num;//序号
}s[101];//结构体
bool cmp(A x,A y)//判断比较
{return x.total==y.total? (x.math==y.math? x.num<y.num:x.math>y.math):x.total>y.total;//判断 按总分从高到低排序,总分数相同按数学成绩的高低排序,两者相同按输入顺序排序。
}
int main()
{int n;cin>>n;for(int i=1;i<=n;++i)//输入{cin>>s[i].name>>s[i].chinese>>s[i].math>>s[i].english;s[i].total=s[i].chinese+s[i].math+s[i].english;s[i].num=i;}sort(s+1,s+n+1,cmp);for(int i=1;i<=n;++i)//输出{cout<<s[i].name<<" ";cout<<s[i].chinese<<" ";cout<<s[i].math<<" ";cout<<s[i].english<<" ";cout<<s[i].total<<endl;}return 0;
}

struct(结构体)相关推荐

  1. 1.0 基础、标示符、常量、数据类型(enum 枚举,struct 结构体)、操作符、循环、数组...

    一.程序 现实生活中,程序是指完成某些事务的一种既定方法和过程,可以把程序看成是一系列动作执行过程的描述. 在计算机世界,程序是指令,即为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集 ...

  2. c/c++教程 - 1.10 结构体 使用typedef定义struct结构体 结构体数组 结构体指针 结构体嵌套 结构体做函数参数 结构体const

    十二.结构体 (1)结构体定义和使用 基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的数据类型. 参考视频:https://www.bilibili.com/video/BV1et411b ...

  3. C/C++中struct结构体定义变量的3种方法及初始化

    本博客整理自http://blog.csdn.net/zunfo/article/details/51494631 1.struct结构体定义 1.1.先定义结构体,然后再定义结构体变量 struct ...

  4. Go语言核心之美 3.4-Struct结构体

    struct(结构体)也是一种聚合的数据类型,struct可以包含多个任意类型的值,这些值被称为struct的字段.用来演示struct的一个经典案例就是雇员信息,每条雇员信息包含:员工编号,姓名,住 ...

  5. Hive基础08、Hive引入Struct结构体

    Hive基础08.Hive引入Struct结构体 1.建表语句 创建一个温良贤淑女子的表 英文关键字解析: 1.CREATE TABLE 创建一个指定名字的表,如果库中已有相同名的表,则抛出异常: 用 ...

  6. struct结构体扩展-成员函数

    struct结构体扩展-成员函数 在C++中,允许在结构中定义函数,该函数被称为成员函数,描述形式如下: struct 结构名{数据成员成员函数 } 例题描述: 输入n个学生的信息,每个学生信息包括姓 ...

  7. (转载)虚幻引擎3--【UnrealScript教程】章节一:11.Struct结构体

    UnrealScript struct是把一组变量一起塞入到一个新类型称为struct的超级变量的一种方法.UnrealScript structs和C语言中的结构体很像,它可以包含变量.数组及其它的 ...

  8. 597-Golang的类型声明、struct结构体

    类型声明 type name 定义type (name 定义name2 定义2 ) 因为本质上是int,默认值是0 因为本质上就是int类型,shuzi和int没有区别 type也可以批量化声明 st ...

  9. 定义struct结构体数组

    题目要求: 有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果. 解题思路: 设一个结构体数组,数组中包含3个元素 每个元素中的信息应包括候选人 ...

  10. C语言-轻松掌握|struct结构体|知识点

    目录 结构体的声明 1.结构体的基础知识 2.特殊的声明 3.结构体的自引用 了解数据结构-数据在内存的存储结构: 之前犯过一个错误案例 4.结构体变量的定义和初始化 定义和初始化​ 嵌套结构体​ 5 ...

最新文章

  1. Analytic Functions 分析函数(rank over)
  2. 美国公司欲联合大电脑商阻止绿坝推广
  3. CSS篇 第9章 Visual Formatting Model 部分翻译
  4. vs2010 rdlc 报表及报表控件
  5. 1053 Path of Equal Weigh(甲级)
  6. VMware vMotion 实时虚拟机迁移
  7. python 运算符重载_Python中类的运算符重载
  8. 985程序员4年50万仍被二本学医亲戚酸:学会这3点,才能笑到最后
  9. linux vim -b详解,linux vim
  10. OSG读取Tif格式的高程数据
  11. 图像数字水印技术研究及matlab实现,基于DFT的数字水印技术及MATLAB实现
  12. 院校-国外-美国:斯坦福大学( Stanford)
  13. Processing创意编程(熟练篇)
  14. trivial destructor
  15. 【C语言学习笔记】输出函数puts()
  16. Scipy_常用统计函数
  17. exlsx中定义名称步骤_excel定义名称详解
  18. [NewStarCTF] Word-For-You
  19. postgresql-COALESCE函数、NULLIF函数、NVL函数使用
  20. 微信小程序如何分享到朋友圈

热门文章

  1. Xrm.WebApi 多对多关系处理
  2. 『毒舌吐槽社区』-很多敏感内容,你懂的!
  3. 如何用p5js做一个可爱的鲶鲶并添加不倒翁效果
  4. Qt之简易的多功能小相册
  5. Bootstrap DataTable自定义表格 设置某列不排序
  6. ABAQUS中橡胶大变形问题的解决方案
  7. python中怎么撤回_python如何查看微信消息撤回
  8. Chinese-LLaMA-Alpaca:优秀的开源中文语言模型预训练工具
  9. python求1到n的奇数和_编写程序。输入任意整数n,计算1到n的奇数和。C语言编写程序 输入整数N 显...
  10. 添加https证书信任