一、变量数据类型

  1. int大致范围:-2*109~2*109
  2. long long大致范围:-9*1018~9*1018,对于长整型来说,如果赋值大于2^31-1的初值,就需要在初值后面加上LL,否则会编译错误。
  3. float单精度大致范围:小数点后6~7位
  4. double双精度大致范围:小数点后15~16位
  5. char字符型大致范围:-128~127
  6. 09、AZ、az的ASCII码值分别是4857、6590、97122
  7. 不可以使用定义好的数组名,直接进行赋值会报错,如果要赋值带上下标。同时,字符串和字符的单双引号,一定要区别开来。
  8. 布尔型变量,在C++中可以直接使用,如果在C语言中使用必须添加stdbool.h头文件。
  9. define pi 3.14,注意后面没有分号,也可以使用const double pi = 3.14;

二、输入输出格式问题

scanf:

  1. int : %d 是以空白符即空格、换行为结束判断标志的
  2. long long : %lld
  3. float : %f
  4. double: %lf
  5. char : %c ,%c格式是可以读入空格和换行的
  6. 字符串(char数组):%s 字符数组使用%s读入的时候以空格和换行行为作为结束标志的
  7. 特别注意在scanf中除了char数组整个输入的情况不加&之外,其他变量类型都需要加&

printf:

  1. 除了浮点数中的都可以使用成%f,其他都一样。
  2. 输出格式%md可以使不足m位的int型变量以m位进行右对齐输出,其中高位用空格补齐,如果变量本身超过m位,则保持原样。
  3. %0md,只是在上面多了个0,唯一不同就是,不足m位的时候,使用0补齐而不是空格。
  4. %.mf可以让浮点数保持m位小数输出(保留的精度是四舍六入五成双)
  5. typedef可以给一个复杂的数据类型起一个别名,例如:typedef long long LL;

常用math函数

  1. fabs(double x): 用于对double型变量取绝对值
  2. floor(double x)和ceil(double x):这两个函数用来向下取整和向上取整
  3. pow(double r, double p)该函数用于返回r^p
  4. sqrt(double):用于求算术平方根
  5. log(double x):用于返回自然对数为底的对数,C语言中没有对任意底数求对数的函数,因此需要使用换底公式。
  6. sin()cos()tan()asin()acos()atan()
  7. round(double x): 该函数用于对double类型x进行四舍五入,返回类型也是double,需要进行取整。例如double x = round(3.4);printf("%d", (int)x);

三、数组

  1. 一维数组初始化问题,如果是定义全局变量没有初始化,那么会默认初始化全为0,如果定义的是局部变量,没有初始化会随机初始,如果没有完全初始化,剩余部分初始化为0.
  2. 二维数组初始化问题,使用大括号进行初始化,如果没有初始化也会默认为0,中间如果跳过某一行初始化,也必须使用空大括号,不然编译不予通过。
  3. 如果数组大小较大(10^6级别),需要将其定义在主函数外面,否则会异常退出。
  4. memset(数组名, 值, sizeof(数组名)),需要带上头文件cstring和algorithm,同时建议赋值只赋0或-1,要是赋值其他会跟赋值对应不上,亲测。
  5. 字符数组初始化,方法同一般数组相同,可以在定义的时候直接进行字符串初始化,其他位置不允许直接赋值字符串。
  6. 字符数组的存放格式,是以\0结尾,其他数组不是,所以在定义字符数组时需要多开辟一个空间来存放它。

string.h头文件

  1. strlen(字符数组), 可以得到第一个\0前的字符个数。
  2. strcmp(字符数组1, 字符数组2), 返回两个字符串大小比较结果,按字典序,如果等于返回0,数组1大于字符数组2返回一个正整数,否则返回一个负整数。
  3. strcpy(字符数组1, 字符数组2), 把字符数组2复制给字符数组1,这里的复制包括了结束符\0,相当于替代了,注意不是连接。
  4. strcat(字符数组1, 字符数组2), 把字符数组2接到字符数组1后面。
  5. sscanf(str, "%d", &n) and sprintf(str, "%d", n),理解一下,scanf是从str到n,printf是从n到str。

四、函数传参、引用、指针、结构体

  1. 数组作为函数参数进行传参,参数中的一维数组不需要填写长度,如果是二维数组则需要填写长度,实际调用时也只需填写数组名,最重要的就是数组作为参数时,在函数中对数组元素的修改就等同于是对原数组元素的修改(这与普通的局部变量不一样)。不能作为返回类型出现,如果返回则使用这方法将想要返回的数组当参数传入,例子有两种书写格式,两者等价,结构体数组也一样:
int a[10];
格式1:
void test(int *a){ }
格式2:
void test(int a[]){ }

指针:

int a = 10;

int *p = &a;

printf("%d %d", *p, a);

输出结果一样

  1. 搞清楚&、*有啥区别
  2. 指针是一个unsigned类型的整数。
  3. 指针变量就是用来存储指针的可以理解为地址。
  4. 给指针变量赋值的方式一般是使用&取地址符把变量的地址取出然后赋值给指针。
  5. *可以理解成房间的一把钥匙,用于取出地址中存放的东西。
  6. 指针变量作为函数参数,这视为把变量地址传入函数,如果在函数中对这个地址中的元素进行修改,原生数据确实就会被修改了。一个经典例子交换数
  7. C++一个强有力的语法,引用,不产生副本,对引用变量的操作就是对原变量的操作。void change(int &a){}

最新文章

  1. [UCSD白板题] Fractional Knapsack
  2. 暂停JS的深入学习
  3. Smoothing in fMRI analysis (FAQ)
  4. 什么是struts2?
  5. 同样的JS写法,为啥只有IE9模式正常?
  6. Initializing Spring root WebApplicationContext
  7. .net code injection
  8. SQL viewId 比较好看的 Id
  9. win7(32 bit) 环境下点击打印预览报错解决办法
  10. Asp.net 视频摘要
  11. poj2386
  12. Linux find运行机制详解
  13. 深入理解AMQP协议
  14. Vuex数据可视化
  15. Eclipse 中构建 Maven 项目的完整过程 - 动态 Web 项目
  16. laravel 守护进程Supervisor的配置
  17. JS中=>,>>>是什么意思
  18. Java8学习笔记(二)--三个预定义函数接口
  19. Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password
  20. 10.Python-第三方库requests详解(二)

热门文章

  1. 安装更新时出现一些问题,但我们稍后会重试。如果你继续看到此错误,并且想要搜索 Web 或联系支持人员以获取相关信息,以下信息可能会对你有帮助: (0x80070426)
  2. 【08月20日】A股滚动市净率PB历史新低排名
  3. (二十二)golang--时间和日期相关函数
  4. [Flutter] Windows桌面程序开发
  5. 使用 Floccus 插件和坚果云同步 Chrome 类浏览器书签
  6. datatable转layui表格v2[分页and带模板]【偏实例】
  7. c# 如何获取当前方法的调用堆栈
  8. django跳转页面传参
  9. 一行 Python
  10. 前端开发CSS3——使用方式和选择器