算法笔记 --第二章 c/c++快速入门

这篇博客是作者阅读算法笔记时整理的C/C++快速入门要点,包括long long赋值、宏定义的避免、字符输入输出、字符串处理、格式化输入输出、数学函数的使用以及浮点数比较等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

这系列blog记录我读算法笔记的时,遇到的trick,备忘。
这里写图片描述

读书笔记

keyvalue
int 1 0 9 10^9 109
long long 1 0 18 10^{18} 1018

给long long 型数据赋大于 2 31 − 1 2^{31}-1 2311的初值时,要在初值后加LL
(很少用,但记录下来)


②宏定义#define其实是直接将对应的部分替换。
建议不要使用#define。定义常量时直接用const,定义表达式时,直接定义函数


const int INF = (1<<31)-1;


ch=getchar() 字符输入
ch=putchar()字符输出

scanf:
字符串使用%s读入的时候以空格换行读入作为结束的标准

gets,puts:
读取字符串,以换行符\n作为结束,
如果真的要读入一行输入,就用gets

%c 可以读入空格和换行
注意 题目通常是现输入一个数字N,再输入字符串。所以你要把输入的数字N后面的空格用getchar()吃掉。如下:

/* 输入
*  10
*  hello world
*  world hello
*/
int N;
char temp[100];
scanf("%d",&N);
getchar();         //这个空格别忘了吃掉
//do something
gets(temp);




int sscanf ( const char * s, const char * format, …)
int sprintf ( char * str, const char * format, … )

这两个函数是 string scanf,string printf。在不使用C++的string时,这两个函数是字符串神器。sscanf把字符串转变成一切。sprintf把一切转变成字符串 。
而且还能提取出字符串中有用的信息

scanf的输入是stdin,sscanf的输入便是第一个参数(const char*s),这样便可以把字符串变为一切
举例

	int a;
	char str[100]="11";
	sscanf(str, "%d", &a);
	printf("%d", a);
//  output:11

printf的输出是stdout,sprintf的输出便是第一个参数(const char*s),这样便可以把一切变成字符串
举例

	int a = 10;
	char str[100];
	sprintf(str, "%d", a);
	printf("%s", str);
//output:10

C字符串函数
#include <string.h>    // 或者<cstring>
                 
strlen()              //字符串长度,不包括\0

strcmp(s1, s2)              //按字典序比大小  
							//  s1 < s2    -> 负数
							//   s1 ==s2   ->0
							//  s1 > s2   -> 正数

strcpy()					//复制

strcat(s1, s2)					// 类似与 s1 =s1+s2

⑤printf:%和\不会输出哦,除非加了 %%\\
亲测有效。但没有用上


%md右对齐,用空格填充
%0md右对齐,用0填充.
%.mf保留m位小数输出

非常重要 程序运行时间有用到
要求格式化 的题目都会用上



fabs(double x) double绝对值函数
floor(double r)double向下取整
ceil(double r)double向上取整
我觉得你使用这个函数时,心里应该有个坐标轴,这样负数的情况也能搞清楚
这里写图片描述

pow(double p,double r) p r p^{r} pr


sqrt(double) s q r t ( x ) sqrt(x) sqrt(x)
log(double)
log是以自然对数为底,我觉得应该会有题目要求任意底数的log,用换底公式 l o g b a log^{a}_{b} logba = l o g e a / l o g e b log^{a}_{e} / log^{b}_{e} logea/logeb



都是以弧度为单位哦。 弧度= p i ∗ 度 数 / 180 pi *度数/180 pi/180
const double pi = acos(-1);
sin(double)
cos(double)
tan(double)
asin(double)
acos(double)
atan(double)
暂时没用过



round(double)
或者可以使用下面的代替:

floor(x+0.5)

⑿在函数里不能创建很大的数组。如果要,则创建在函数外。

Why

⒀浮点数的比较
由于浮点数的存储不总是精确的,所以会给浮点数的比较带来极大的干扰.所以要引入一个极小数eps对这种误差进行修正

const double eps = 1e-8

等于
如果 a
b ,那么 a 应该落在 [b-eps,b+eps]
这里写图片描述
> 大于
如果a>b,那么a应该落在[b+eps, + ∞ +∞ +]
这里写图片描述
< 小于
如果 a < b a<b a<b,则a应该落在[ − ∞ -∞ ,b-eps]

这里写图片描述
>= 大于等于
如果a>=b,则a应该落在[b-eps, + ∞ +∞ +]
这里写图片描述
<= 小于等于
如果a<=b,则a应该落在[ − ∞ -∞ ,b+eps]
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值