《算法笔记》学习之C++基础知识回顾

一、基本数据类型

  1. int型占用4字节,取值范围为 [ − 2 31 , 2 31 − 1 ] [-2^{31},2^{31}-1] [231,2311]。如果对范围不太有把握,可以记住绝对值在 1 0 9 10^9 109范围以内的整数都可以定义成int型
  2. 长整型long long占用八字节,取值范围为 [ − 2 63 , 2 63 − 1 ] [-2^{63},2^{63}-1] [263,2631]。如果题目要求的整数范围超过2147483647(例如 1 0 10 10^{10} 1010或者 1 0 18 10^{18} 1018),就得用long long型来存储;且值得注意的是,如果long long 型赋大于 2 31 − 1 2^{31}-1 2311的初值,则需要在初值后面加上LL,否则会编译错误
  3. 简单来说,需要记住的就是,看到题目要求 1 0 9 10^9 109以内或者说32位整数,就用int型来存放;如果是 1 0 18 10^{18} 1018以内(例如 1 0 10 10^{10} 1010)或者说64位整数,就要用long long型来存放
  4. 单精度浮点型float占用4字节,其有效精度只有6~7位;双精度浮点型double占用8字节,其有效精度有15-16位。其中%f是float和double型的输出格式。所以,对于浮点型,我们需要记住的是,不要使用float,碰到浮点型的数据都应该用double来存储
  5. 0~9、A-Z、a-z的ASCII码分别为48-57、65-90、97-122,字符常量需要用单引号标注起来
  6. 转义字符:在字符前添加’'符号使得后面的字母失去了本身的含义;常用转义字符:\n表示换行;\0代表空字符NULL,其ASCII码为0,而非空格(空格的ASCII码为32)
  7. 字符串常量可以作为初值赋值给字符数组,并使用%s的格式输出
  8. 布尔型在C++中可以直接使用,但在C语言中必须添加stdbool.h头文件才可以使用,所以如果建议直接将文件扩展名设为.cpp(即C++文本),因为C++向下兼容C,采用这种方式可以尽可能防止一些因C与C++之间的区分而导致的编译错误
  9. 整型常量在赋值给布尔型变量时会自动转换为true(非零)或者false(零);注意:“非零”是包括正整数和负整数的,即1和-1都会转换为true。但是对于计算机来说,true和false在存储时分别为1和0,因此如果使用%d输出bool型变量,则true和false会输出1和0
  10. 如果将一个类型的变量赋值给另一个类型的变量,却没有写强制类型转换操作,那么编译器将会自动进行转换。但如果是计算过程中需要转换类型,那么就不能等算完赋值的时候再进行转换
  11. #define 标识符 常量,用一个标识符来替代常量,又称为“宏定义”或“宏替换”;define除了可以定义常量外,其实可以定义任何语句或者片段,不过最好给能加的地方都加上括号。
  12. 除法运算符/,当被除数和除数都是整型时,并不会得到一个double浮点型的数,而是直接舍去小数部分(即向下取整);如果除数是0的话,会导致程序异常退出或是得到错误输出1.#INF00,因此在出现这种情况时检查是否在某种情况下除数为0
  13. A?B:C使用的是C语言中唯一的三目运算符,其含义是:如果A为真,那么执行并返回B的结果;如果A为假,那么执行并返回C的结果
  14. 常用的位运算符有左移运算符等,由于int型的上界为 2 31 − 1 2^{31}-1 2311,因此有时程序中无穷大的数INF可以设置成**(1<<31)-1**,注意:必须加括号,因为位运算符的优先级没有算术运算符高

二、顺序结构

  1. 如果要给多个变量赋同一个值,可以使用连续等号的方法:int n,m;n=m=5;
  2. scanf的用法:scanf("格式控制”, 变量地址)。在C语言中,变量在定义之后,就会在计算机内存中分配一块空间给这个变量,该空间在内存中的地址称为变量的地址。&为取地址运算符,&变量名可以得到变量的地址
  3. 因为数组名称本身就代表了这个数组第一个元素的地址,所以不需要再加取地址运算符。我们需要记住的是:在scanf中,除了char数组整个输入的情况不加&之外,其它变量类型都需要加&
  4. 除了%c(scanf的%c格式可以读入空格跟换行)外,scanf对其它格式符(如%d)的输入是以空白符(即空格、Tab)为结束判断标识的。另外,字符数组使用%s读入的时候以空格跟换行为读入结束的标识
  5. 与scanf相似,printf函数的格式为:printf("格式控制", 变量名称);如果想要输出’%’、’’,则需要在前面再加一个%或\,如:printf("%%");printf("\\");
  6. %md可以使不足m位的int型变量以m位进行右对齐输出,其中高位用空格补齐;如果变量本身超过m位,则保持原样。%0md与%md唯一不同点在于:当变量不足m位时,将在前面补足够数量的0而不是空格。%.mf可以让浮点数保留m位小数输出,该“保留”使用的是精度的“四舍六入五成双”原则
  7. int型的scanf格式符和printf格式符都为%d;long long型的scanf格式符和printf格式符都为%lld;float型的scanf格式符和printf格式符都为%f;double型的scanf格式符为%lf、printf格式符为%f;char型的scanf格式符和printf格式符都为%c;字符串(char数组)的scanf格式符和printf格式符都为%s
  8. getchar用来输入单个字符,它可以识别换行符;putchar用来输出单个字符
  9. typedef能够给复杂的数据类型起一个别名,如:typedef long long LL; // 给long long起个别名LL
  10. 常用math函数fabs函数用于取绝对值;floor函数用于浮点型变量的向下取整ceil函数用于浮点型变量的向上取整pow(r,p)函数用于求得 r p r^p rpsqrt函数用于求算术平方根;log函数用于求以自然对数为底的对数。注意: C语言中没有任何对任意底数求对数的函数,因此必须使用换底公式来将不是以自然对数为底的对数转换为以e为底的对数,即 l o g a b = l o g e b / l o g e a log_ab=log_eb/log_ea logab=logeb/logeasin函数、cos函数和tan函数分别求变量的正弦值、余弦值和正切值,参数要求是弧度制asin函数、acos函数和atan函数用于求变量的反正弦值、反余弦值和反正切值;round(double x)函数用于double型变量x四舍五入,返回类型也是double型,需进行取整

三、选择结构

  1. if(n)表示if(n!=0);if(!n)表示if(n==0)
  2. switch语句中每个case下属的语句都没有使用大括号将它们括起来,这是由于case本身默认把两个case之间的内容全部作为上一个case的内容,因此不用加大括号。
  3. do…while循环会先执行循环体一次,然后才去判断循环条件是否为真,这就使得do…while语句实用性不如while
  4. **注意:**在C语言中不允许在for语句的初始赋值表达式中定义变量(例如int i的写法是不允许的),但是C++中可以
  5. break语句在需要的场合直接退出循环;continue语句在需要的地方临时结束循环的当前轮回,然后进入下一个轮回
  6. 数组大小必须是整数常量,不可以是变量
  7. 如果想要给整个数组都赋初值为0,只需要把第一个元素赋值为0,或者只用一个大括号来表示,如:int a[10]={0}; int a[10]={};
  8. 冒泡排序是排序算法中最基础的排序,其本质在于交换,即每次通过交换的方式把当前剩余元素的最大值/最小值移动到一端,而当剩余元素减少为0时,排序结束。假设n个数需要排序,那么需要进行n-1趟排序;第i趟排序,从a[0]到a[n-i-1]都需要与下一个数比较。
  9. 注意:如果数组大小较大(大概 1 0 6 10^6 106级别),则需要将其定义在主函数外面,否则会使程序异常退出,原因是函数内部申请的局部变量来自系统栈,允许申请的空间较小;而函数外部申请的全局变量来自静态存储区,允许申请的空间较大。
  10. 一般来说,给数组中每一个元素赋相同的值有两种方法:memset函数和fill函数。memset函数的格式如下:memset(数组名, 值, sizeof(数组名));使用memset函数需要在程序开头添加string.h头文件 ,且只建议初学者使用memset赋0或-1。这是因为memset使用的是按字节赋值,即对每个字节赋相同的值。如果要对数组赋其它数字,应该使用fill函数
  11. 字符数组也可以通过直接赋值字符串来初始化(仅限于初始化,程序其它位置不允许这样直接赋值整个字符串)
  12. scanf输入,printf输出,其中%c用来输入单个字符,能够识别空格跟换行并将其输入,%s用来输入一个字符串并存在字符数组里,通过空格跟换行来识别一个字符串的结束
  13. getchar和putchar分别用来输入和输出单个字符
  14. gets用来输入一行字符串注意: gets识别换行符\n作为输入结束,因此scanf完一个整数之后,如果要使用gets,需要先用getchar接收整数后的换行符),并将其存放于一维数组(或二维数组的一维)中;puts用来输出一行字符串,即将一维数组(或二维数组的一维)在界面上输出,并紧跟一个换行
  15. 在一维字符数组(或是二维字符数组的第二维)的末尾都有一个空字符\0,以表示存放的字符串的结尾
  16. 注意: 结束符\0的ASCII码为0,即空字符NULL,占用一个字符位,因此开字符数组的时候千万要记得字符数组的长度一定要比实际存储字符串的长度至少多1。int型数组的末尾不需要加\0,只有char型数组需要
  17. 注意: 如果不是使用scanf函数的%s格式或gets函数输入字符串(例如使用getchar),请一定要在输入的每个字符串后加入“\0”,否则printf和puts输出字符串会因无法识别字符串末尾而输出一大堆乱码。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值