标签:12 struct int 31 数据类型 ACM SWPU 结构
ACM 2021 年招新啦~ 快加入我校 ACM 招新群 : 815161393 !
本期是《ACM 入门系列》之七 : 结构体。
作者 :2020级 Rhyems. dalao的博客地址
结构体
这里参考《C primer plus 习题册》。
结构体和结构体变量
当存在复杂的数据对象时,其数据特征需要用多个简单的数据类型进行综合表述,这就需要使用 一些复杂的数据类型来提高数据的表达能力。结构体是C语言中数据类型叫结构的的成员。
结构体的定义使用关键字strcut
,当建立了结构体声明后就可以定义一个结构体变量,例如,struct book library;
;其中struct book
相当于简单数据类型声明中的数据类型(例如:int a
中的int
),library就是一个结构体变量(相当于a
)。
结构体中的成员可以使用成员运算符访问,library.title
相当于访问结构体中的title
成员。结构体的初始化可以使用花括号,指定成员的初始化可以使用点运算的符号与成员名字。
例如:
struct book
{
int title;
string name;
}; //注意这里不能省略分号
//这里是花括号的初始化
struct book library1 = {12, "高等数学"};
//这里是点运算符号初始化
struct book library2;
library2.title = 12;
library2.name = "高等数学";
结构体的应用
定义了结构体之后就可以像使用其他数据类型一样使用它,只需要使用成员运算符访问即可, 比如需要输出上述library2
中的name
成员时, 只需要printf("%s", library2.name)
即可。
在访问指针类型的变量时,只需要使用成员运算符->
代替.
即可。
例题
有以下三个需求:
- 设计一个结构体模板,用于存储一个月份名、该月份名的3前字母缩写、该月的天数、以及月份编号。
- 定义一个数组用于初始化1题中的结构体,数组中包含12个结构体,为一年中的12给月份(非闰年)。
- 输出每个的天数和月份编号。
//(1问)
struct Month {
char month_Name[10];
char month_Abbrev[4];
int days;
int number;
};
//(2问)
struct Month months[12] = {
{"January", "Jan", 31, 1},
{"February", "Feb", 28, 2},
{"March", "March", 31, 3},
{"Aprile", "Aprile", 30, 4},
{"May", "May", 31, 5},
{"June", "Jun", 30, 6},
{"July", "Jul", 31, 7},
{"August", "August", 31, 8},
{"September", "Sep", 30, 9},
{"October", "Oct", 31, 10},
{"November", "Nov", 30, 11},
{"December", "Dec", 31, 12},
}
//(3问)
for(int i = 0; i < 12; i ++)
{
printf("%d %d\n", months[i].days, month[i].number);
}
重载运算
在对结构体进行排序时,计算机并不知道我们想以结构体中的哪个关键字进行排序,所以我们需要在结构体中对 > > > 或 < < < 进行重载
格式:
//以w为关键字排序
struct Edge {
int a, b, w;
bool operator < (const Edge & W) const
{
return w < W.w;
}
}edges[N]; //N为总点数
sort(edges, edges + n); //对edges数组中的(0 ~ n - 1)(长度为n)的数组从小到大排序
如果需要重大到小排序,有两种方案
方案 1. 将 ‘ < < <’ 重载为大于号
方案 2. 排序好后执行一次reverse(edges, edges + n);
标签:12,struct,int,31,数据类型,ACM,SWPU,结构 来源: https://blog.csdn.net/m0_53680064/article/details/120179824
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。