前言
文章不小心删了再写一遍。
C++14(GCC 9)
正文
结构体
结构体有什么用?
比如一个玩家有血量、名字、级别和能量,一个服务器有100玩家,你要怎么存储这些玩家信息呢?
其实可以用结构体数组解决
用法:
struct student{
int score,id;
}t,p[100];
struct teacher{
int exp,iv;
};
teacher a,b;
bool cmp(student a,student b){
if(a.id!=b.id)return a.score<b.score;
return a.id>b.id;
}
struct就是定义一个结构体的数据类型,注意是定义数据类型,struct后面跟的名字是一个你定义的数据类型,大括号里面写这个数据类型包含其他的哪些数据类型,你可以结构体里定义结构体类型,甚至可以一个数据类型里包含一个自己
如果你想直接定义可以在分号前面写名字,如果不想直接定义,一定要注意后面那个分号,到定义的时候就按平常方法写就行。
那么,如何访问其中一个子数据呢?很简单,只要不是指针变量(?),都可以用:名字.子名称
,如访问a里的exp,就写a.exp
变量名定义规则
话说都已经学到结构体了,我竟然没说变量名定义规则
规则如下:
int k;//合法
int /k;//不合法
int _k;//合法
int k1;//合法
int 1k;//不合法
int k·w;//不合法
int ツつ;//不合法
int k_;//合法
规则1:名字开头只能由下划线、字母组成
规则2:除开头之后只能由下划线、字母、数字组成
函数名定义规则和变量名一样,只不过加了个参数的括号
交换
临时交换(temporary交换)
要交换两个元素,如果直接互相赋值,会发现一个问题:A变成B了,那B就不能变成A了
所以,我们可以保存A,然后让A变成B,然后B变成保存A。我们管这个保存变量叫tmp,就是临时(temporary)缩写(temp)再缩写(tmp)
int tmp=a;
a=b;
b=a
swap交换
我们发现太临时交换麻烦了,要三行,有没有更简便的呢?
可以用swap函数进行交换,当然只是你写起来简单了,我估计swap函数里写的还是临时交换
用法:
swap(a[i],a[i+1]);//交换数组中当前元素和后一个元素
C语言原生输入输出:格式化
之前举例说明了cin>>a
和cout<<a
这种输入输出,但C语言没有cin和cout,用什么输出呢?
scanf("%d",&a);
printf("你输入了:\n%d",a);
一定要注意scanf的&
号,如果这个丢了,你会发现你的程序会突然“罢工”,如果提交到洛谷会全WA(亲身经历awa),而printf不用加
scanf的双引号里面写后面写的变量的格式化类型,如果你在scanf的双引号里写其他东西,那么如果你输入不按这个格式来,就会发现值没变
scanf("%d:%d",&a,&b);
//输入1:
3 2
//结果:不变
//输入2:
3:2
//a和b分别变成了3和2
printf里头就可以写其他的,写格式化符号的地方就是你后面写变量的地方,从前往后— —对应
当然你不写变量也可以,光写输出的字符串,或者后面写一个其他东西,比如:
printf("%d",!a&&b);
包含一个逻辑,!代表非,相当于反转,a如果不是0那都代表true,反转就是 a是0,相同的,且b不是0,则输出1,否则输出0
格式化符号列举:
下一篇写AWA
总结
信息量巨大
还有下一篇