水题时,一些零碎的总结
1. 用printf(“%.nf”,….);输出精确n位的小数,结果会自动四舍五入。
2. double->int 时,不论double中的小数为什么,int 型都只取double中的整数。
3. 求绝对值时:
abs()为int型
fabs()为双精度浮点型
cabs()为复数的
labs()为long int型
4. 开平方为:
sqrt()
5. pow()函数返回的为double型,对于结果的转换要注意,容易被强制转换成int,然后就有可能出现问题。
6. 用库函数:
#include<algorithm>
int a[10];
sort(a,a+10);
7. 用‘/’时,如果要求返回浮点型,那么除数或被除数,至少有一个为浮点型。
8. gets() scanf("%s") puts() printf("%s") 的区别
gets()与scanf(“%s”):
① gets遇回车时结束输入。也就是说,gets可以接受回车前的任何输入。
scanf不同,遇到回车、空格、制表符就结束输入。
eg. String a=”I am a student;
如果要一次性的接受全部的字符串,要用gets。
② 输入结束后,gets的回车不会留在缓冲区;而scanf的空格、回车仍然会留在缓冲区。
Puts()与printf(“%s”)
① puts函数只用来输出字符串,参数可以是字符串,也可以是存放字符串的数组名。
Printf(“%s”)其参数也可以是是字符串,或者是存放字符串的数组名。
② puts函数输出字符串后会自动加换行,而printf(“%s”)不会。
Puts(a)与scanf(“%s\n”,a)等效.
9. 由于中文的Ascall码的首位为1,所以其转化的十进制数为负数。因此,如果要求一个字符串中的中文的个数,只需要算出字符串的负数的个数,再除以二,即是中文的个数。
10. scanf(“%d%*d”,&a);
表示接受两个输入,但只对第一个进行赋值。
可应用到gets()前的输入(具体为什么还不太清楚。。。)。
#include<iostream>
using namespace std;
int main(){
int n;
char a[1000];
// cin>>n;
// scanf("%d",&n);
// scanf("%d%*d",&n);
gets(a);
int m=strlen(a);
cout<<m<<endl;
cin>>m;
return 0;
}
11. memset(a,0,sizeof(a));
即对数组a进行初始化操作(全赋值为0)。
12. scanf的用法即注意事项
scanf的返回值
scanf的返回值由后面的参数决定
scanf("%d%d", &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF。
且返回值为int型.
使用scanf函数时应该注意的问题
1、scanf()中的变量必须使用地址。
eg.
int a;
scanf(“%d”,&a);
int a[100];
scanf(“%s”,a)
2、scanf()的格式控制串可以使用其它非空白字符,但在输入时必须输入这些字符。
eg.
scanf(“%d,%d”,&a,&b);
这时输入:a,b
scanf(“%d%d”,&a,&b);
这时输入:a b
3、在用"%c"输入时,空格和“转义字符”均作为有效字符。
scanf(“%c %c”,&a&b&c)
这时输入a b
4. 在两次输入时:
eg.
Scanf(“%d”,&a);
Sccanf(“%d”,&b);
这时输入:1 2
则输入到b中的为0.
Scanf(“%d ”,&a);(b后面多了一个空格)
Scanf(“%d”,&b);
这时a和b的输入都没有变化。
13. 判断两个元素是否处在同一对角线上:
Hi ,li ,hj ,lj分别为第i个和第j个元素所在的行列。
If(hi-li==hj-lj || hi+li==hj+lj)
则两个元素处在同一对角线上。
14. BFS的判重:
在树中进行BFS时,不需要进行判重;而在图中进行BFS时,需要进行判重来对搜索进行剪枝。
15. int型的上限约为:20亿
2000000000
16. n=a*b;
temp1=(a+b)*a;
temp2=(a+b)*b;
1/n=1/temp1+1/temp2