准备工作
噔噔噔~
先自报家门,CS双非本科在读。此次报名蓝桥杯C/C++,一方面为了提升自我,一方面也为保研积累竞赛经验。为什么选择C/C++呢?
1.本人所在学校以C入门,自认为相比其他语言基础较好。
2.据相关资料了解,每年蓝桥杯C/C++报名人数最多,大佬最多,但这恰恰反映另一问题——资料更多,可获得的经验更多!
3.最后,保持好心态,不断的积累和足够的自信也是比赛的加分项!
参考资料
我主要参考《算法竞赛入门经典(第二版)》这本书,更偏入门一点。如需电子版的可以留言邮箱,私发给你们~
第一章 程序设计入门
-
C语言严格区分大小写。
-
算法竞赛中,严格按照样例输入与样例输出,不要打印提出信息,如printf(“Please input a number:”)。输出完毕后应立即终止程序,且每行输出均应以 回车符 结束,包括最后一行。
-
除非特别说明,每行的行首不应有空格,但行末通常可以有多余空格。另外,输出的每两个数或者字符串之间应以单个空格隔开。
-
对于常数的声明,尽量用const关键字。如 const double pi = acos(-1.0)
-
对于三位数,取百位,十位,个位分别用n/100, n/10%10, n%10,可以总结为**从高位到低位用"/", 从低位到高位用“%”,中间各位数灵活结合“/”和“%”。注意对于这种反转输出,考虑最高位是否为0的情况,如120输出为021还是21。
-
赋值a=b之后,变量a原来的值被覆盖,但b的值不变,而不是“缺失为空”。
-
二变量交换的三种方法:
(1) t=a;a=b; b=t;(适用范围更广)(2) a=a+b; b=a-b; a=a-b;(适用范围较窄,且只有定义了加减法的数据类型才能使用)
(3) 算法竞赛中,只考察程序解决问题的能力,而不关心才用了什么方法,故变量交换的最优解 如下:
scanf(“%d%d”,&a,&b);
printf("%d %d\n", b, a); -
C语言中,0为假,非0为真。
-
C语言中的逻辑运算符都是短路运算符,即一旦能够确定整个表达式的值,就不再继续运算。
-
fflush(stdin)函数清除缓冲区。
-
C语言数据类型
short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。在不同的系统上,这些类型占据的字节长度是不同的,具体可以用sizeof测试一下即可。
类型 | 存储字节 | 表示范围 |
---|---|---|
int | 4 | -2147483648~2147483647 |
short int | 2 | -32768~+32767 |
long | 4 | -2147483648~2147483647(二十亿,约 101010101 0 10 10101010 10^{10} 1010101010101019) |
float | 4 | -3.4*10^38~+3.4*10^38(有效位数6~7) |
double | 8 | -1.7*10^-308~1.7*10^308(有效位数15~16 ) |
-
逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:!(非) → &&(与) → ||(或)
记忆口诀:not(非) and(与) or(或) -
牵涉到角度计算时,例如:sin(x),cos(x)等,这里的x都是弧度,而不是直接的角度。因此,在计算对应角度的三角函数时,需要先将角度转换成弧度再计算。
弧度和角度的转换公式是:
角度=弧度180.0f/PI
弧度=角度PI/180.0f
总结
本系列文章是在备赛2020蓝桥杯期间基于《算法竞赛入门经典第二版》的学习笔记,欢迎指出不足之处!