dw网站建设教程视频教程,龙斗seo博客,大数据人工智能培训班,中国安能深圳建设公司前言#xff1a;这个是针对于蓝桥杯竞赛常考的C内容#xff0c;容器这些等下棋期再讲
C 在DEVC中注释和取消注释的方法#xff1a;ctrl/ ASCII值#xff08;常用的#xff09;#xff1a;
A-Z:65-90
a-z:97-122
0-9:48-57
换行/n:10科学计数法#xff1a;eg#xff1a…前言这个是针对于蓝桥杯竞赛常考的C内容容器这些等下棋期再讲
C 在DEVC中注释和取消注释的方法ctrl/ ASCII值常用的
A-Z:65-90
a-z:97-122
0-9:48-57
换行/n:10科学计数法eg1e5(表示10^5)
sizeof是用来计算数据类型长度的返回值是size_t(无符号整数)
这个还是加上好里面可以是类型变量名和表达式
里面如果是表达式的话将不会去计算而是返回结果类型的长度
sizeof(数组名)计算的是数组的总大小类型的取值范围 int是2的31次方-1或者10的9次方大于了就会超范围 long long是10的18次方超过了就不行 定义常量一般用const定义的变量名一般用大写
取模操作符的操作数只能是整形
char类型和int类型或char类型加减的结果是int类型的记得强转或者隐式转换
char的取值范围-128到127printf类型
printf%6.2f,0.5表示输出字符串最小宽度是6小数位数是2
也可以写为printf%*.*f,6,2,0.5注意逻辑运算符的短路问题 switch的一个易忘用法(switch的格式也容易忘) switch(n%7) { case 1: case 2: case 3: case 4: case 5: printf(“工作日/n”); break; case 6: case 7: printf(“休息日/n”);//这里可以搞多个语句还不用{ } break //有时还可能会用到default } case还可以eg: case ‘’:这个’一般是cin得到的 循环一般用for除非需要n次循环喜欢用while(n–){ } 并且循环条件可以用的就不用不然容易错 条件判断 对错只用执行一条语句的用三目操作符 exp1?exp2:exp3 用于判断的东西是指定的数或字符或字符串则用switch 否则就用if elseif else cin cout和printf和scanf的取舍问题 一般情况下用cin cout除非 超时和对输出格式有特殊要求 一般输入数据量大于1e6时就用scanf和printf continue易忘点
for(int i 0; i10;i)//continue跳过不了i
{
if(i 5)
continue;}范围for常用来遍历数组
auto可以让编译器自动推导出变量的类型
如果给的小数没有明确说明一般auto后是double类型的double在各编译器中的大小不同因为一般用sizeof(double)浮点数自己一般用double类型的 有时数组从下标为1才开始放数很不错数组空间一般多开辟10个 并且数组较大时一般搞成全局变量 易忘int arr[][5]{{1,2},{3,4},{5,6}};则只有3行 二维数组在竞赛中很少用一般用两个一维数组替代 字符数组一般用string替代基本不用字符数组string结尾不用’/0’ 读入
遇见空白字符停止:scanf和cin可以读取空格的自己一般用getchar:
eg:
while((chgetchar())!\n);
如果是string的话可以用getline默认是遇到换行停止在作用域优先级一样的话库函数和自定义函数重名了的话要么报错要么会是自定义函数 /和\的用途 / 1.表除法 2.用于注释eg:// \ 1.作为转义字符eg:\n \0 2.用于续行符 字符串的比较是基于字典序进行的比较的是对应位置上字符的ASCII值int类型的值可以被强转为long long int的值
cout在打印浮点数时自动忽略小数点后多余的0
printf在打印浮点数时小数点默认打印6位自定义函数的传值调用
自定义函数实参是数组就只写数组名
形参是二维数组时行可以省略列不可以省略
实参名字和形参名字可以相同或不同
return返回的值会被隐式变换成函数返回值所对应类型的值在自定义函数前定义全局变量可以不用传参在竞赛中常用
注意掌握传引用调用形参顺序不同也可以构成函数重载正整数和无符号整数的原反补码相同 负整数 原码-取反,1-补码 补码-取反1-原码 补码--1-反码 原码-取反-反码 这里的取反不包括符号位但是位运算操作符在操作时符号位也会被操作 左移操作符是左边抛弃右边取0
右移操作符是左边用原该值的符号位填充右边抛弃
按位或 | 对应的二进制对应位有1结果就为1
按位异或 ^ :对应二进制相同为0相异为1
按位取反 ~ :…………^运算符的特点常用于找唯一奇数次出现的数)
x^x 0
0^x x
^是支持交换律的前提认为最低位为第0位保留二进制位中的指定位 xm
使m对应取出位置为1其他位为0则x就被保留了指定位获取二进制位中的指定位 (xi)1 这个可以用于颠倒二进制位
获取x中的第i位结果为0则第i位为0结果为1则第i位为1将指定二进制位设置为1 x|m
使m对应位置想让x哪个位置变为1为1其余位置为0将指定二进制位设置为0: x~(1i)反转指定二进制位 x^m
想将x的第i位反转要令m的第i位为1其余位置为0将二进制中最右边的1变成0 x(x-1)
这个运算通常运用于求一个数的二进制序列中有几个1保留二进制中最右边的1其他位置均置为0 x-x
2的n次方1n优先级和结合性都可以用()来解决
从右到左的结合性不用考虑自己的记法是将这个考虑在内了的eg:定义struct时的;别忘了
struct
{};//不管有没有变量名都要有此
结构体变量名字和结构体类型名字不能重合
结构体可以进行整体赋值操作
结构体嵌套如何赋值和结构体的运算符怎么重载易忘
调用和容器一样用.
运算符重载在设置时形参一般用引用C中常用的头文件和其中的库函数
#include cstdio
printf,scanf,getchar,putchar
常用占位符
%lld:十进制long long int类型
%ffloat类型
%lf:double类型
%Lf:long double类型
%uunsigned int类型
%c %s %d
scanf相较于printf特有的
%[]:eg:%[a-Z]ASCII小的在前
%c不会跳过空白字符除非%c之前加了一个空格
scanf在使用%s时可以%[m]s来限制读取字符串的最大长度#includecmath
fabsceil
fabs-求浮点数绝对值
ceil-对一个浮点数向上取整
floor-对一个浮点数向下取整
sqrt-计算非负实数的算数平方根
powx,y-计算x的y次方的值
#includecstdlib
abs-求整数的绝对值long long int类型的用不了#includecctype
islower判断是否为小写字母是则返回非0;不是则返回0
tolower将大写字母转换成小写字母
isupper-判断是否为大写字母是则返回非0;不是则返回0
toupper-将小写字母转换成大写字母
注意事项这四个的返回值都是int类型的记得(char)参数可以是char的也可以是int的
isdigit-判断是否为数字字符是则返回非0;不是则返回0
isalpha-判断是否为字母是则返回非0不是则返回0#includestring//这里面的全都是针对string的字符串的
size()-获取字符串长度
begin()-返回指向字符串第一个字符的迭代器
end()-返回指向字符串最后一个元素的下一个位置的迭代器
//迭代器可以进行加减整数运算;想获得迭代器指向的值,则要*
push_back()-在字符串尾部插入一个元素
pop_back()-删除字符串尾部的最后一个元素
insert-在字符串中间插入一个字符串
find()-用于查找字符串中指定东西并返回其第一次出现位置的头
//其开始查找的位置可以指定返回值是size_t类型的,没找到则返回npos
substr-用于截取字符串中指定位置指定长度的子串有关string的函数
stoi-把数字字符串转换成int类型的
stod-把数字字符串转换成double类型的
to_string-把整数和浮点数转换成字符串#includealgorithm
reverse-可以逆转字符串整形数组也可以
max-默认返回两个值中的最大值当然也可以改
min-默认返回两个值中的最小值当然也可以改
sort-默认按升序来排序当然也可以改查询具体用法https://legacy.cplusplus.com/reference/
#includeutility
swap-交换两个变量或数组或容器的值其中蕴含的算法原理 scanf返回值表示成功读取的变量个数在没成功读取的话会返回0或EOF我们一般会通过scanf的返回值来处理未给明确多少组数据的多组数据问题
但是一般用cin(eg:cinlmn没读满3个会返回false)整数计算想变成小数的方法 假如a b都是int类型的 可以:a*1.0/b 浮点数比较相等的办法
eg
fabs(a-b)1e9 关系操作符判断为真返回的是1
常应用于多种情况满足一种时就干啥至少满足一种用||全满足用)
eg:if((a1)(b1)1)…………
纯数字读取读取特定位置数字的方法
eg:读第7位
scanf(%6d%d,a,b);b就是
获得最后几位数字的方法
eg:最后三位
cinm;
n m%1000//n就是不纯读取
想读特定范围内的东西eg:A-Z
可以边读边用ASCII筛选反向输出每一位整数且位数固定
cinab……;
cout……ba;
加减交替
int flag1;
for(…………)sumb*flag;
flag-flag判断m是否为质数
int flag 1;
for(int i 2;isqrt(m);i )
然后看m%i是否等于0是就break改flag为0
for外结算如果flag为1则m是质数
数据在下一次读取前用完就不要了的可以采取一边读取一边使用的方法就不存了
如果还要用并且数据多的话可以存在数组里统计字符出现个数的方法建立一个128的整形数组下标正好和字符的ASCII值对应
如果单要字母的话可以建立一个26的整形数组把读进来的-a就可以得对应下标了想输出3,5,6,7,8,9,9,10
可以先输出一个3再,5和,6这样求多组数据中的最大值和最小值时可以先令min和max为取值范围的两端来搞需要一层套一层的一般就要用递归
eg:进制转换十进制转x进制的数组分块问题
1.利用辅助数组
每次遍历把特定东西拿出来放辅助数组里2.利用双指针这里的指针指的是用变量来代替指针
分为eg:[0,cur][cur1,i-1][i,n-1]带扫描看情况放哪存非0 存0 待扫描下期会给大家总结数据结构的内容