C语言总结



C语言总结

  1. 一个C程序必须有且仅有一个main作为名字的函数,这个函数称为主函数C程序总是从主函数开始执行,与它在程序中的位置无关。

  2. C语言中,数据类型可分为:基本数据类型构造数据类型指针类型类型四大类。

  3. #include <stdio.h>就是一条预处理命令,它的作用是通知C语言编译系统在对C程序进行正式编译之前需做一些预处理工作。

  4. C语言标识符只能由字母数字下划线组成,且必须字母或下划线开头

  5. 程序的控制结构有顺序结构选择(分支)结构循环结构

  6. C系统不对注释进行编译,因此不能发现注释中的拼写错误

  7. 在定义中不允许连续赋值,如int a=b=c=5;  是不合法的。

  8. 一个字节可以表示的整数最小为0最大为255

  9. Sizeof字节数的运算符,但不是函数名

  10. 算数运算符(结合)的优先级高于赋值运算符(结合)的优先级。

  11. 注意:复合运算符中运算符和等号之间是不存在空格的。

  12. 一般而言,double变量可以接收实型常量的16有效数字,而float变量仅能接收实型常量的7有效数字。

  13. 求余运算限定参与两个操作数必须为整型

  14. C语言的常量可以分为直接常量符号常量

  15. 通常,在一行语句中一个变量最多只出现一次增1或减1运算。

  16. C语言中的运算符:算术,赋值,关系,逻辑,三目(5种)

  17. 宏定义的一般形式是:#define  标识符(宏名)  字符串(一般不以分号结尾)

  18. 数学上的“*”在C语言中不能省略

  19. ++- -)变量:先自加(减)1后赋值;变量++- -):先赋值后加(减)1

    注:无论是a++还是++a都等同于a=a+1,在表达式执行完毕后a的值都自增了1,无论是a--还是--a都等同于a=a-1,在表达式执行完毕后a的值都自减少1

    例:假设有如下语句:int a=0bb=a++(包含:先b=a然后a++)【若是b=++a,则先++a然后b=a】;则语句执行完毕后,变量a的值是1,变量b的值是0

  20. 两个整数相除后的商仍为整数

  21. 字符常量是用单引号括起来的一个字符。

  22. 字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换(只能小转大)。

  23. %8.2f”域宽8位,小数点后两位(若为+:右对齐;若为-:左对齐)。

  24. putchar函数的作用:向终端输出一个字符。只能用于单个字符的输出,且一次只能输出一个字符。

  25. getchar函数的作用:从系统隐含的输入设备(如键盘)输入一个字符。函数只能用于单个字符的输入,且一次输入一个字符。

  26. %%表示输出百分号%

  27. EOF值(EOF是在stdio.h中被定义为-1的宏常量)。

  28. C语言中用0表示“真”,用0表示“假”。

  29. 条件表达式:

    x=<表达式1>?<表达式2>:<表达式3>(口诀:前真后假

    其意义是:先求解表达式1,若为非0(真),则求解表达式2,将表达式2的值赋给x。若为0(),则求解表达式3,将表达式3的值赋给x

  30. 用于单分支控制的条件语句:if(表达式P)语句A

  31. 用于双分支控制的条件语句:if(表达式P)语句1

    else 语句2

  32. 用于多分支控制的条件语句:if(表达式1)语句1

    else if(表达式2)语句2

    else if(表达式m)语句m

    else 语句m+1

  33. 用于多路选择的switch语句:switch(表达式)

    case  常量1

    可执行语句序列1

    case  常量n

    可执行语句序列n

    default

    可执行语句序列n+1

  34. 常量与case中间至少有一个空格,常量的后面是冒号,常量的类型应与switch后括号内表达式的类型一致。

  35. break在第几行,删去后,程序就在第几行结束。

  36. 中断循环的有break语句goto语句

  37. C语言中的= =表示等于,=表示赋值。

  38. 除逻辑非之外,&&高于||,两者具有“短路”特性。(!>&&>||

  39. case后面的常量表达式不能用一个区间表示

  40. 在循环体中,如果想提前结束循环,可以使用break语句,如果只想结束本次循环,开始下一轮新循环,则需使用continue语句(只能用在循环体内)

  41. 使用break语句时注意以下几点:

    1、在没有循环结构的情况下,break不能用在单独的if-else语句中。

    2、在多层循环中,一个break语句只跳出当前循环。

  42. while语句:(while结构的循环体至少会执行0

    while(循环控制表达式)

    语句序列

  43. do-while语句:(do-while结构的循环体至少会执行1

    do

    语句序列

    while(循环控制表达式);【注意:此处分号一定不要漏写

  44. for语句

    for(初始化表达式1;循环控制表达式2;增减值表达式3

    【此处为两个分号一定要初始化for循环中的表达式123”均可以缺省,其中表达式1和表达式3可以是一个简单表达式也可以是多个表达式以逗号分割

    语句序列

  45. C语言中,函数是构成程序的基本模块。

  46. 函数分为标准库函数printfscanf)和自定义函数

  47. 函数名是函数的唯一标识,用于说明函数的功能

  48. 函数体必须用一对花括号包围,这里的花括号是函数体的定界符。在函数体内部定义的变量只能在函数体内访问,称为内部变量。函数头部参数表里的变量,成为形式参数(简称形参)。

  49. 若函数没有函数返回值,则需用void定义返回值的类型。

  50. Main函数调用函数时,必须提供一个称为实际参数的表达式给被调用的函数。主调函数:调用其他函数的函数;被调函数:被调用的函数。

  51. 参数传递:主调函数把实参的值复制给被调用的函数的形参的过程。

  52. 函数的返回值只有一个,函数返回值的类型可以是除数组以外的任何类型。函数中的return语句可以有多个,但不表示函数可以有多个返回值

  53. 函数定义:long Factint n  函数原型:longFactint n);(两者之间只是多了一个分号)。

  54. 实参的数量必须与形参相等,它们的类型必须匹配匹配的原则与变量赋值的原则一致

  55. 如果某一功能重复实现3遍以上,就应考虑将其写成函数

  56. 当函数需要返回值时,应确保函数中的所有控制分支都有返回值,函数没有返回值时,应用void声明

  57. 调用和定义函数时一定要明确参数和返回值的类型

  58. 如果一个对象部分地由它自己组成或按它自己定义,则我们称它是递归的。

  59. 一个递归函数必须包括两个部分:

    由其自身定义的与原始问题类似的更小规模的子问题,它使递归过程持续进行,称为一般情况

    递归调用的最简形式,它是一个能够用来结束递归调用过程的条件,通常称为基线情况

  60. 在函数内直接或间接地自己调用自己的函数调用,就称为递归调用,这样的函数称为递归函数

  61. 递归函数必须有结束条件

  62. 任何递归函数都必须至少有一个基线情况,并且一般情况必须最终能转化为基线情况,否则程序将无限递归下去,导致程序错误。

  63. 程序中被花括号括起来的区域,叫做语句块

  64. 变量的作用域规则是:每个变量仅在定义它的语句块(包含下级语句块)内有效,并且拥有自己的存储空间。

  65. 不在任何语句块内定义的变量,称为全局变量。全局变量的作用域为整个程序,即全局变量在程序的所有位置均有效。

  66. 全局变量从程序运行开始起就占据内存,仅在程序结束时才将其释放(将内存中的值恢复为随机值)。

  67. 变量的储存类型:自动变量:也叫动态局部变量(auto类型名 变量名);

                    静态变量(static类型名 变量名);

                    外部变量(extern类型名 变量名)

                    寄存器变量(register类型名 变量名)。(口诀:动静外寄存)

  68. 如果没有指定变量的储存类型,那么变量的储存类型就缺省为auto

  69. 在不同的并列语句块内可以定义同名变量,不会相互干扰,因为它们各自占据着不同的内存单元,并且有着不同的作用域。

  70. 函数的参数传递是“单向的值传递”,即只能将实参的值单向传递给形参,其根本原因是实参和形参分别占据着不同的存储单元

  71. 在并列的语句块之间只能通过一些特殊通道传递数据,如函数参数,返回值,全局变量。

  72. 自动变量在定义时不会自动初始化,另外,自动变量在退出函数后,其分配的内存立即被释放

  73. 静态变量是与程序“共存亡”的,而自动变量是与程序块“共存亡”的。

  74. 在函数定义的静态变量,称为静态局部变量,静态局部变量只能在定义它的函数内被访问,而在所有函数定义的静态变量,称为静态全局变量,静态全局变量可以在定义它的文件内的任何地方被访问【注:不能像非静态的全局变量那样被程序的其他文件所访问。】

  75. 外部变量保存在静态存储区内,在程序运行期间分配固定的存储单元,其生存期整个程序的运行期。没有显示初始化的外部变量由编译程序自动初始化为0

  76. 数组是一组具有相同类型的变量的集合。C语言通过数组的下标实现对数组的访问。【注意:C语言中数组的下标都是0开始的】

  77. 引用数组元素时下标可以是整形变量,但在定义数组时不能使用变量定义数组的大小。

  78. 只给部分数组元素赋值时,对数组的长度声明不能省略。

  79. 当数组被声明为静态储存类型或外部储存类型(即在所有函数外部定义)时,则在不显示给出初值的情况下,数组元素将在程序编译阶段自动初始化为0

  80. 数组定义格式:

    一维数组:类型   数组名【元素个数】

    二维数组:类型   数组名【第一维长度】【第二维长度】

  81. 一维数组在内存中占用的字节数为:数组长度×sizeof(基类型);

    二维数组在内存中占用的字节数为:第一维长度×第二维长度×sizeof(基类型)。

  82. 在不同的编译系统中,int型所占的字节数是不同的。

  83. 数组第二维的长度声明永远都不要省略。

  84. 若要把一个数组传递给一个函数,那么只要使用不带方括号的数组名作为函数实参调用函数即可。【注意:仅仅是数组名,不带方括号和下标】

  85. 由于数组名代表数组第一个元素的地址,因此用数组名作函数实参实际上是将数组的首地址传给被调函数。

  86. 数组作函数形参时,数组的长度可以不出现在数组名后面的方括号内(若是负数,则编译错误),通常用另一个整型形参来指定数组的长度。

  87. 排序算法:交换法,选择法,插入排序,冒泡法,快速排序算法等。

  88. 交换法排序借鉴了求最大值,最小值的思想。

  89. 两种查找算法:线性查找(顺序查找)和折半查找(对分搜索)。

  90. 当待查找信息有序排列时,折半查找法比顺序查找法的平均查找速度要快。

  91. %p格式符:表示输出变量的地址值(一个16进制的无符号整数表示的,其字长一般与主机的字长相同)。

  92. 变量的地址:变量在内存中所占储存空间的首地址;变量的值:变量在储存空间中所存放的数据。

  93. 指针变量定义形式:类型关键字   *指针变量名

  94. 习惯上在定义指针变量的同时将其初始化为NULL(在stdio.h中定义为零值的宏)。

  95. 指针变量只能指向同一基类型的变量。

  96. 定义指针变量的两种类型:int *pa=&a

                            ②int *papa=&a

  97. 间接寻址运算符*用来访问指针变量指向的变量的值。

  98. “a”是字符串常量,‘a’是字符常量。

  99. 字符串:由若干有效字符构成且以字符‘\0’作为结束的一个字符序列。

  100. 字符串的存取要用字符型数组来实现。

  101. \0’的ASCII码值为0

  102. 注意:数组定义的长度应大于等于字符串中包括‘\0’在内的字符个数。

  103. 字符指针是指向字符型数据的指针变量。

  104. Str的值是不可以修改的,但ptr的值及ptr所指向的字符串也可以被修改。

  105. 注意:对于数组名str,不能使用str++操作使其指向字符串中的某个字符,因为数组名是一个地址常量,其值是不能被改变的

  106. 用函数scanf()按s格式符不能输入带空格的字符串;

    使用字符串处理函数gets(),可以输入带空格的字符串,但不能限制输入字符串的长度(fgets()能),容易引起缓冲区溢出;

    函数puts()当遇到第一个‘\0’时输出结束,并且自动输出一个换行符。

  107. 比较字符串不能直接使用关系运算符,应使用函数strcmp()来比较字符串的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值