浮点数的比较
float 6-7位
double 15-16位 指包含整数位数
const double eps=1e-6;
int main()
{
double a,b //比较长的浮点数
if(fabs(a-b<=eps)) puts("相等");
else if(a<b-eps) puts("小于");
else puts("大于");
}
max函数
非比较型max函数max=(a+b+abs(a-b))/2 abs在stdlib库中
优化方向:
质数、完全数 等定义中带有约数、需要整除,优化方面皆可朝开平方处思考,因为x本身除以一个约数往往可以得到另外一个约数,所以无需再遍历到另一个约数处。
关于break语句
for(i=1;i<=n;i++)
{
if(i==50) break;
}
此时输出的i为50,即break后不会执行i++
数组的全局与局部
- 没有初始化的局部变量是随机数而且不能定义的太大
- 而没有初始化的全局变量默认都为0,且范围比局部变量大的多
数组的快速初始化
- memset(a,0,40) 头文件:
#include<cstring>
,第一位为对应的数组,第二位为Byte赋值,第三位为数组长度对应的Byte的大小,如果第二位1,却不会是每一位都初始化为1,因为memset本是char类型数组初始化函数,第二位以字节单位赋值,就是说int类型是4Byte,现在每一个数组元素要赋值4次,导致出错,因此memset只能初始化整形0或-1 - memcpy(b,a,sizeof a) 头文件
#include<cstring>
,第一位为目标数组,第二位为被复制的数组
字符串数组与字符串的输入
字符串数组
char a[100];
fgets(a,1000000,stdin); //fgets不会删除行末的回车字符,而且只能输入一行
cin.getline(s,100);
scanf("%s",s); //遇到空格或\n就会停
字符串
string s;
getline(cin,s);
字符串没有scanf无论&有无,但输出可以用
printf("%s",s.c_str())
字符串函数
- 计算字符串长度size()
string a;
a.size() //size()返回值为无符号整形,当与int型比较时,自动将有符号整型转换为无符号整形,因此s.size()<=-1是一定的
- 字符串中插入另一字符串inert()
s1.insert(max+1,s2) //下标,与另一字符串
C++的专属string遍历
string s="Hello World";
for(char &x : s) //x是s中元素的遍历复制,可以不加&,而&x实现x与s中元素等价,从而改变s中元素,不加&,x只是s中元素的副本,char也可以用auto代替让编译器才x的类型,多用在后期复杂的类型
{
x='a';
}