赞
踩
在实际问题中,一组数据往往具有不同的数据类型。
例如, 在学生登记表中,姓名应为字符型(char[]);学号可为整型(int)或字符型(char[]);年龄应为整型(char);性别应为字符型(char);成绩可为整型(int)或实型(double)。 显然不能用一个数组来存放这一组数据。 因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构”。
“结构”是一种构造类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类型。 结构即是一种“构造”而成的数据类型, 那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义一样。
结构体的一般形式:
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];//这里同样可以定义多个结构体变量
- bool cmp(struct x,struct y)
- {
- return x.total>y.total;
- }
- struct A
- {
- char a; //char占1个字节
- int b; //int 占4个字节
- short c; //short占2个字节
- };
那么结构体A是否占1+4+2=7个字节的内存大小呢,7个似乎很合理,但事实上,为了兼容各种不同的硬件,结构体内存分配采用特定字节对齐方式。
- #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;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。