该杂记为阅读时做的摘要,如有疑问和错误欢迎大家在评论区里提出。
- sscanf 和 sprintf
包含在stdio.h头文件中,用于处理字符串问题。
sscanf(str,"%d",&n);//将字符数组str中的内容以%d的格式写到整形中
ssprintf(str,"%d",n);//把整形n以%d的格式写到str字符数组中
注意在"%d:%d"引号中添加符号来解释或者添加符号的操作
2.C++语法 引用 函数(int &a)传入的参数为实参
注意引用是产生变量的别名,因此常量不可使用引用eg:指针地址是常量,加引用可通过换地址不变值的操作
3.结构体初始化函数一行代码
struct studentInfo{
int id;
char gender;
studentInfo(int a, char b){
id = a;
gender = b;
}
};
可省略成
studentInfo(int a,char b): id(a),char(b){}
4.cout控制输出double型的精度
需要加上头文件
#include<iomanip>
...
cout<<setiosflags(ios::fixed)<<setprecision(2)<<123.4567<<endl;
输出 123.46
5.浮点数在经过大量计算,存储会发生变化。比如:3.14变成3.1400000000001或3.1399999999999。会对使用==造成无法预知的错误,可自定一个Eque函数来减少错误。
const double eps = 1e-8;//经验所得的数?!
#define Equ(a,b) ((fabs((a)-(b)))<(eps))// ==等于
#define More(a,b) (((a)-(b))>(eps)) //>大于
#define Less(a,b) (((a)-(b))<(-eps))//<小于
#define MoreEqu (((a)-(b))>(-eps)) //>=大于等于
#define LessEqu (((a)-(b))<(eps)) //<=小于等于
由于编译环境,有时本来是0.00变量在输出时是-0.00,是编译环境的bug,可以将结果放在字符串中与-0.00比较,成功就用eps来修正。
6.圆周率π的表示
const double Pi = acos(-1.0);
7.对于一般的oj系统来说,一秒能承受的运算次数大概是10的7次方到10的8次方。
8.多点测试
读取到文件末未结束
(1)
while(scanf("%d",&n) != EOF){
...
}
想要手动触发EOF ,Ctrl+Z出现^Z再Enter就可以结束while了。
读入字符串还可以
while(gets(str) != NULL){
...
}
加入了退出条件的
int a,b;
while(scanf("%d%d",&a.&b) !=EOF){
if(a == 0 && b ==0) break;
...
}
上面写法的简写版
while(scanf("%d%d",&a,&b),a||b){
...
}//当a和b中有一个不为零时就进入循环