计算机二级【C语言】知识点以及常见易错问题总结

计算机二级【C语言】知识点以及常见易错问题总结

1 分号

(1)注意每个语句后面需要加分号;
(2)预处理命令(非可执行命令)后面无需分号,且运用时尽量将实参加括号,避免出错;
(3)switch语句以及typedef语句最后面加分号即可,中间无需分号(括号内除外);

2 逗号

(1)逗号表达式的值等于最后一个表达式的值;
(2)逗号运算符是一个序列点,其左边所有副作用都结束以后,才对其右边的表达式进行运算;i++与++i效果一样

3 {}

(1)for语句、if语句等如果没加括号,只与后面第一个分号之前的内容有关;

4 函数变量生命周期

(1)函数运行完之后,其变量名会被释放,内存也会被释放(标为可用),具体详细原理可见:https://blog.csdn.net/weixin_30580341/article/details/95667655
(2)返回值在传递之后其内存也会被释放;
(3)malloc内存存放在堆里,其在函数运行之后不会被释放;
(4)实参地址传递,执行完其地址不会释放;原因:实参地址属于函数之外的内容

5 continue&break

(1) continue语句是使程序跳过循环体中剩余语句而进入下一次循环,在for循环体中还是会执行(;;)中第三块内容中的x++或者x--等语句的;
(2) break语句只能用于循环体内和switch语句内;

6 短路现象

(1)a && b :如果表达式a的值为0,则表达式b内容不执行;
(2)a || b :如果表达式a的值为1,则表达式b内容不执行;

第二章 C语言概述

(1)使用顺序、选择(分支)、循环3种基本结构可以解决所有问题;
(2)a) 源程序(.C):C语言; b)目标程序(.obj):编译后形成,二进制(binary); c)可执行程序(.exe):连接C语言库函数后形成;ps:用C语言编写的程序称为源程序,它以ASCII码形式存放在一个文本文件中
(3)非执行语句不会被编译,不会生成二进制机器指令
(4)任何一个C语言程序都是从主函数main开始,到主函数main结束;
(5)数值常量中不能带空格以及逗号;115L表示115是长整型数据,合法;
(6)变量必须先定义再使用;变量定义通常放在函数体前部,但也可以放在函数体或者复合语句开头,不能随意放置
(7)运算符两侧的运算数据类型可以不一致,且结果与精度较高的保持一致;
(8)C语言是由函数组成的
(9)C语言区分大小写,下标从0开始;
(10)标识符由字母、下划线、数字组成,且开头必须是字母或下划线;变量命名必须符合标识符命名规则;
(11)C语言在运行过程中的所有计算都以二进制方式进行;C语言只接受八进制、十进制、十六进制的数;
(12)实型常量的指数形式一般形式为:E、e两端必须要有数,其中前面为浮点数,后面为整数(数字前后都可以加正号“+”);E或e前后以及数字之间不能有空格
(13)字符串常量用双引号,字符常量用单引号;
(14)’’ 应写成‘\’;“\\”应写成“\\“”;“”代表空串,合法
(15)八进制常量以0开头,十六进制常量以0x或者0X开头;转义字符可用八进制以及十六进制表示,八进制反斜线后可以不用0开头,十六进制反斜线后只可用小写字母x开头;注意:八进制没有8
(16)“int a = b= 0;” -> 错误,b变量还没有定义,不能用于赋值;赋值运算符的结合方向为从右至左
(17)C语言没有逻辑类型,有布尔类型;整型可无误差的表示自然数;
(18)“/”以及“/”必须成对出现,不能嵌套使用(有了“/”之后,只检测“/”作为注释结束),且“/”与“*”之间不能有空格;注释可以出现在程序中的任意位置;
(19)对于标识符的长度,C语言编译系统规定标识符的前若干个字符有效,超过的字符将不被识别,不同编译系统规定的标识符有效长度不同
(20)unsigned是关键字,getch是库函数名,都不是合法的用户标识符;
(21)25u属于无符号整数;-32是十进制有符号整数;+20L是十进制形式的长整数;12f是float类型的实数;
(22)整型常量只能用数字表示,不带小数点;实型常量必须用带小数点的数表示,可分为小数形式以及指数形式;字符型常量是单括号括起来的单个字符;字符串常量是双括号括起来的若干个字符;
(23)转义字符整体算一个字符,比如‘\t’代表横向跳若干个格,‘\b’代表退格符,’\r’代表回车符,‘\n’代表换行符(‘\r\n’windows等操作系统中);

第三章 运算符与表达式

(1)强制类型转换:(类型)常量/变量;注意括号位置
(2)“&&”两边任意,不一定需要整数;“++”、“–”、“!”,“<=”可以是double类型;“%”两边一定要int;
(3)表达式以及常量不能被赋值,即表达式以及常量不可以在等号左边
(4)“+”优先级高于“-=”;“<=”、“==”优先级高于“=”;
(5)如果z为int,则z=1+0.9执行后,z的值仍为1,而不是四舍五入
(6)取模运算法“%”以及二元运算符具有左结合性,参与运算的量均为整型。
(7)运算符两侧类型不同时,将进行隐式类型转换;C语言中的基本运算符除了加减乘除之外,还有取余操作
(8)自增自减运算符的优先级高于逻辑运算符,且&&运算符优先级高于||,逻辑运算符从左向右运算。故a++||b++&&c++等价于(a++)||((b++)&&(c++)),运算顺序为a++、b++、c++;
(9)字符类型变量不可加减;
(10)运算优先级要注意运算层级,先乘除后加减只适用于同级运算;a+b+c*(d+e):先执行a+b得到r1.再执行(d+e)得到r2,再执行c*r2得到r3,最后执行r1+r3得出表达式的最终结果;
(11)“^”异或运算满足一下规则:a)满足交换律;b)一个数与0异或的结果仍是原数;c)一个数与1异或的结果是原数按位取反;

第四章 基本语句

(1)在输入整数或实数这类数值型数据时输入数据之间必须用空格、回车、换行、制表符等间隔符分开,间隔符个数不限
(2)“%d”表示十进制格式输出;%lf用于double类型输入与输出;%f用于float类型输入,用于float以及double类型输出(输入时两者不可混用);
(3)scanf()函数的格式字符前,可以加入一个正整数指定输入数据所占的宽度,但是不可以对实数指定小数位的宽度
(4)printf()函数的格式化字符串中使用“n1.n2”的形式类指定输出宽度(n1、n2分别代表一个长整数),其中n1代表指定输出数据的宽度(包含小数点),n2指定小数位的位数,n2也称为精度;当小数位数多于n2时,则四舍五入,当小数位少于n2时,则补零。

其他:
(1)数组名不可被赋值
(2)函数地址传递只会改变实参地址指向的值,不会改变实参地址;函数值传递不会改变实参的值。
(3)预处理命令命令都以#开头,不是可执行命令,只占用编译时间,不占用运行时间,包含宏定义、条件编译、文件包含等。宏名不一定需要大写。typrdef在编译时处理,但是不是预处理命令。
(4)指针类型占用四个字节(无论何种类型);文件指针也是4个字节;

类型 大小
char 1字节
bool 1字节
short 2字节
int 4字节
long 4字节
double 8字节

(5)结构体成员名不可包含其本身类型的结构体,但可以包含指向其类型变量的指针,形成链表。
(6)用户标识符可为库函数名(预定义标识符),但其会失效;不可为关键字;
(7)printf("%lf%le%hd%ld%s",……),……可为字符串首地址,用以输出从该地址之后的字符串。h代表short,l代表long或者双精度数据double,e表示指数形式、科学计数法。
(8)*在定义指针时表示说明符,在赋值时表示间址运算符。
(9)字符串在定义是可以通过{“ ”}或者“ ”赋值,不管是数组还是指针;定义后,指针只能通过“ ”赋值,数组名不可复制。
(10)函数每一级迭代会保持相应的变量值。
(11) 0 = ‘\0’ = NULL; ++p->x = ++(p->x);
*p++=*(p++)
(12)软件测试用于发现程序中的错误,程序调试用于诊断和改正程序中的错误;
(13)malloc函数结束内存不释放:fgets(str,4,fp),只多输出3个字符,自动加上‘\0’;
(14)下标从0开始,区分大小写;
(15)fgets用于读取长度为(n-1)个字符串;fread用于读取指定长度的数据项,对应二进制打开方式;fscanf按指定格式读,用于文本打开方式。fseek(origin 0:开头,1:当前,2:结尾):移动位置指针(offset +向后,-向前);rewind位置指针回到开头;ftell获取当前指针;feof(fp):结尾为非零值。
(16)文本打开方式 -> r:只读;w只写;a:从开头读,追加写;+:可读可写;b:二进制。
(17)没有对指针初始化,则其地址不确定,为无效指针;
(18)abs:对整数取绝对值(stdlib.h);fabs:对浮点数取绝对值(math.h);
(19)switch之后不可为double;
(20)双向链表具有两个以上的指针,但属于线性结构。循环队列是顺序存储结构,循环链表是链式存储结构。常见线性结构有:线性表、栈、对列、双队列、数组、串、矩阵、循环链表、双向链表;常见非线性结构:二维数组、多维数组、广义表、树、图。
(21)链表不可通过头、尾指针相减得到长度,两者都为NULL则长度为0,两者相等则长度为1;循环队列两者相等则队列为空或者队列为满,rear(尾指针)-front(头指针)如果小于0,长度应该+m(满空间大小)。
(22)满二叉树为完全二叉树,度为n的满二叉树,节点数为2n-1。叶子节点比度为2的节点多1。满二叉树第k层有2(n-1)个节点。
(23)树的节点数 = 树中所有节点的度的和+1;
(24)系统结构图中-> 扇入:调用一个给定模块的模块个数;扇出:由一个模块直接调用的其他模块数。
(25)关系数据库设计有需求分析(形成需求说明书)、概念设计(形成概念数据模型:E-R模型)、逻辑设计(形成逻辑数据模型:将E-R模型转换为关系模型、关系视图设计、模式规范化)、物理设计(形成数据库内部模型:涉及软硬件环境)、编码、测试、运行、进一步修改等几个阶段。
(16)关系的第一范式:每个属性不可再分为简单项;第二范式:每个非主属性完全依赖于关系的某个候选键,消除了非主属性对主键的部分依赖;第三范式:每个非主属性不传递依赖于R的候选键,即非主属性不可决定其他非主属性

你可能感兴趣的:(二级C语言,C语言,计算机二级)