c语言基础概念及易错点整理

1.快速注释

注释VS的快捷键

c语言基础概念及易错点整理_第1张图片

2.转义字符

c语言基础概念及易错点整理_第2张图片

  • \ddd 例如:'\130'表示88,把130八进制转化成10进制后的值作为ASCII的字符,输出只能用%c
  • \xdd 例如:'\x30'表示48,在ASCII码中表示0
  • \0 其实是\ddd的形式,只是为一个字符

3.程序怎么从代码变成的

c语言基础概念及易错点整理_第3张图片

c语言基础概念及易错点整理_第4张图片

4.main函数

main函数的位置可以在任意位置,但是如果在主函数之中调用了哪些函数,必须在main函数前对其所调用函数进行生命或包含其被调用函数的头文件。

5.printf函数

  • printf()允许限定占位符的最小宽度。%5d表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。如果超过5位,正常输出就行,5是最少输出5位。
  • printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n+1个

c语言基础概念及易错点整理_第5张图片

printf是库函数,需要包含头文件

  • 返回的是成功输出的变量个数。
  • printf("%*.*f\n",6,2,0.5);中的*.*f\n==6.2f\n
  • 输出部分字符%ns,n可以表示输出的个数
  • %*忽略符号

c语言基础概念及易错点整理_第6张图片

6.scanf函数

  • 如果时多次输入则可以用while(scanf("%d",&a)!=EOF){};
  • 如果说要输入一长串字符直到输入\n则用while((a=getchar())!='\n')注意这个括号
  • scanf中也有占位符,占位符和后边的参数提供的地址一一对应。
  • scanf()处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符,scanf输出字符占位符的时候,不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。
  • scanf的占位符%s表示读取一个字符串,遇到空白字符就停止读取
  • scanf需要包含stdio.h这个头文件的
  • 返回的是成功输入的变量个数

c语言基础概念及易错点整理_第7张图片

  • 输入的如果不是占位符表示的数据类型 那就表示没有成功读进去值
  • 如果用Ctrl+z强制结束,则输出EOF,-1,因为相当于发生了错误,没有成功输入

只有%c不会过滤空白字符(空格,制表符,换行符),所以要在%c前面加上一个空格

%s指的是,从第一个非空字符开始,到空白字符为止。

输入的如果不是占位符表示的数据类型,则不会读入

7.编译时,注释==空格

例如mink/*我爱我自己/rich

输出mink rich

8.bool类型

头文件

  • flase->0
  • true->1

9.sizeof 关键字又是关键字

返回size_t的类型别名(这个有的编译器是专指64位无符号数的)(但是具体不知道是什么值)

输出用%zd

sizeof()里面的表达式不会真实的参与计算,而是根据表达式的类型来得出大小。

10.全局变量和局部变量储存在哪里

c语言基础概念及易错点整理_第8张图片

11.悬空else

跟最近的if匹配

12.for循环

c语言基础概念及易错点整理_第9张图片

13.种子,生成随机数。

需要的几个函数

  • rand可以产生随机数,但是是根据种子来定的,当种子不变时,那么每一次产生的随机数字都一样了
  • srand种子,可以根据seed产生不同的种子
  • time 这个可以作为srand的seed,主要管时间
#include
#include
#include
    srand(time(NULL));
    int magic =rand()%100 +1;

14.字符常量

用双引号或者单引号括起来的1个或者多个字符。

例如'\0dd' 注意单括号括起来的里面只能是一个字符,双引号里面应该写字符串,

15.PI为标识符常量

标识符

用来对变量、符号常量名、函数、数组、类型、等命名的有效字符序列统称标识符(identifier)。

规定标识符只能由字母、数字和下画线3种字符组成,且第一个字符必须是字母或下画线。

16.递归

自己调用自己,把大的事化小,拆解问题。

例如:输出1234的每一个数字并且中间有空格

1.定义函数p()

2.求p(1234)则要求p(123)+printf(4),依次弄下去

3.结果为p(1)+2+3+4;

阶乘,二叉树,汉诺塔,裴波拉契,快速排列

归并,青蛙跳台阶,遍历文件

步骤:

1.定义函数功能

2.寻找递归的终止条件

3.递归函数的等价关系式

17.static和extern

  1. static

让局部变量的生命周期变成和程序的一样长,但是作用域不变 (从栈区到静态区)

让全局变量只能在这一个文件中使用,修饰函数也是一样的效果。(抹除外部链接属性)

  1. extern

让一个全局变量(在A文件)可以在其他文件使用。

18.迭代

指的就是函数内某段代码实现循环

19.进制转换

二进制是满二进一

  • 2进制转化为8进制

三位一组,分别乘以2的0,1,2次方

  • 2转化为16进制

四位一组,分别乘2的0,1,2,3次方

20.对于int,数据内存中存放的其实是补码

对于有符号整数,0代表正数,1代表负数。

21.位运算符

  • 左移,最左边的数抛弃,右边补0
  • 右移
    • 逻辑右移:这个对于无符号整数,右边丢弃,左边补上0
    • 算术右移:这个对有符号数使用,右边丢弃,左边用符号位补充
  • 操作数为整数
  • 不能移动负数位

22.取二进制数字的每一位,先%2再/2

23.单目运算符中包含sizeof

24.整型提升的时候,高位补充符号位。

25.当函数形式参数为指针类型的话,那么输入进去的实参不用带上*号

26.typedef关键字

  • 用于重命名
  • 例如:
typedef unsigned int uint//这样使用unsigned int 时候可以用uint达到同样的效果
typedef int * p;//这个就把指针变量int *重命名为p
typedef int(*p)[5];//把数组指针变量重命名为p

27.结构体

结构体.为直接访问,->为间接访问

28.运算符之%

%操作符的操作数只能是整数

负数求模的规则是,结果的正负号由第一个运算数的正负号决定。

29.switch语句

c语言基础概念及易错点整理_第10张图片

switch语句中的default子句可以放在任意位置

C语言中的switch case中的case后面仅可以跟整形常量或常量表达式

没有规定case必须在default之前,一般case最好放在default之前

30.比较字符串相等不能用==

“==”为什么不行?

“==” 比较的不是字符串的内容,它是在比较指针,或者说它仅比较两个字符串的首地址,而不会比较字符串每个字符。

那其实接下来应该问的问题是,为什么会只比较首地址呢?

因为早期的C语言只能使用标量。

简单的说,标量scalar就是指char, int, double, enum等数值类型,以及指针。像数组、结构体、共同体这样将多个标量组合起来的类型,被称为聚合类型aggregate。

字符串其实就是char类型的数组,也就是说它不是标量,因此在C中不能用“==”比较。

31.if语句是一种分支语句,可以实现单分支,也可以实现多分支

32..&& 表示并且

你可能感兴趣的:(c/c++,c语言,学习)