#define 标识符 任意语句或片段
A?B:C A成立返回B否则为A
位运算符优先级低于算数运算符 因此2^30-1应该写成(1<<30)-1
int类型上限2^31-1(0x7fffffff,2^30-1为0x3fffffff),因此程序中无穷大数INF
#define INF (1<<31)-1 也可以是2^30-1
char数组不需要加&
①在使用%s读取char数组时,空格和换行为结束判断标志
#include<bits/stdc++.h>
int main()
{
char s[10];
scanf("%s",s);
printf("%s",s);
return 0;
}
输入数据:abcd efg
输出数据:abcd
②在使用%c读取字符时,空格和换行可以读到
#include<bits/stdc++.h>
int main()
{
char s;
int a;
scanf("%d%c",&a,&s);
printf("s=%c",s);
return 0;
}
输入数据:1 c
输出数据:s=
③其他%读取时视tab、空格、换行为结束判断标志
注意double的scanf为%lf,而printf变为%f
三种实用的输出格式
(1)%md,不足m位的int类型变量以m位进行右对齐输出,高位由空格补齐,若本身超过m位,则保持不变
(2)%0md,不足m位的int类型变量以m位进行右对齐输出,高位由0补齐,若本身超过m位,则保持不变
(3)%.mf,让浮点数保留m位小数输出,(规则是4舍6入5成双)“输出保留x位小数”or“精确到小数点后x位”
getchar会读取换行符
typedef用于给数据类型起别名
typedef long long ll;
常见数学函数
1.fabs(double x)
2.floor(double x)和ceil(double x)
3.pow(double a,double b)
4.sqrt(double x)
5.log(double x) 返回以自然对数为底的对数
6.sin(double x),cos(double x),tan(double x)参数要求是弧度制(如下)
#include<bits/stdc++.h>
#define pi acos(-1.0);//pi的精确值
int main()
{
double p=sin(45*pi/180);//求sin45°
printf("%f",p);
return 0;
}
7.asin(double x),acos(double x),atan(double x)
8.round(double x)四舍五入
一个break跳出一层循环
冒泡排序
#include<bits/stdc++.h>
using std::cin;
using std::endl;
using std::cout;
using std::swap;
int main()
{
int n,a[1000];
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n-1;i++)//n个数执行n-1趟
for(int j=1;j<=n-i;j++)//注意是n-i而不是n-j
{
if(a[j]>a[j+1]) swap(a[j],a[j+1]);
}
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}
memset函数
memset(数组名,值,sizeof(数组名));//只建议赋0或-1,如果要赋1或其他值使用fill函数
//多维数组赋值方法相同
用getchar,putchar输入输出二维字符数组
#include<bits/stdc++.h>
int main()
{
char str[6][6];
for(int i=1;i<=6;i++)
{
for(int j=1;j<=6;j++) str[i][j]=getchar();
getchar();//这句是为了把输入中每行的换行符吸收掉(getchar不识别空格,识别换行符)
}
输出略
putchar('\n');
return 0;
}
注意:gets和puts都用来输出一行字符串(存放于一维字符数组或者二维字符数组的一维)
gets读取到换行符结束,所以如果gets前一句的输入(scanf,cin)以换行符结尾,必须使用一个getchar接收换行符,如下
#include<bits/stdc++.h> using std::cin; int main() { char s[10]; int a; cin>>a; //getchar();//接收换行符 gets(s); puts(s); return 0; } 输入5后回车直接输出一个空字符串
在一维字符数组或者是二维字符数组的第二维的末尾都有一个空字符'\0'(ASCII码为0,不是空格)以表示存放的字符串的结尾。空字符在使用gets和scanf和cin输入字符串时会自动添加在字符串后面并占用一个字符位,而puts和printf就是通过识别\0作为结尾来输出的
注意:字符数组长度至少要比字符串实际长度多1;如果使用getchar加循环方式读取字符串需要在字符串尾部手动加上'\0',否则无法用printf,puts输出
string的函数
1.strlen()
计算出第一个'\0'前的字符个数
2.strcmp()
3.strcpy(str1,str2)
注意是将str2复制给str1,包括'\0'
4.strcat(str1,str2)
把str2接在str1后面