全国计算机等级考试二级C语言复习总结 中南苦情男倾力打造 1、 易错点 (1) 输入输出&赋值 scanf应对应变量地址,而非变量名。(应为&a而非a) scanf(“%d%d%d”,&a,&b,&c) %d之间不是必须加逗号 给a赋值40000(已定义a为long型)应用a=4000L*10L不可用a=4000*10,因为4000与10均为int,结果也为int,而计算结果超出int范围,会有误差 为结构体数组中的某成员赋值时,scanf(“%s”,&std[0].name) 不能把[0]省去,应为std仅代
地址,地址没有成员 注意转义字符 e.g. 注意:1.语句*(ps+4)=0;中的0,实质上是把ASCII码为0的字符(即结束符’\0’)赋予*(ps+4) 2.*(ps+3)是’\n’,即’\n’是一个字符 注意输入格式控制符 (2) 数据类型 float转换为int ,应直接舍去小数 若未限制float的输出结果,则写到小数点后六位 e.g. 运算时,注意数据类型,分辨 1/n 和 1.0/n e.g. 1/2的值为零。 注意进制对各个数位上数字的限制 e.g. 8进制数的数位上不能出现8,16进制数的数位上不能出现G 未指定初值时static初值为0,auto初值随机 注意静态变量 e.g. 应分清共用体与结构体 注意对结构体中成员的调用 e.g. 注意:结构体名.成员名(或 结构体名->成员名),其中的结构体名,必须为结构体,不能是其地址 (3) 标识符&变量名 局部变量与全局变量重名,则全局变量在该函数中被屏蔽 标识符只能由字母,下划线和数字组成,必须以字母或下划线开头 变量名区分大小写,且不能多于8字符(因编译系统不同而有差别,此处是等级考试原题答案) define不是保留字,可以做标识符 (4) 表达式&语句 注意分辨先加和后加 e.g. if(i==1)不能漏等号 应分辨有无{} e.g. if(x==y)t=x;x=y;y=z; e.g. 多次判断的时候,注意防止思维定势 int i=010;中的0表示010是八进制数 转义时用到十六进制,只用x,不用0x e.g. char a=’\xab’ 整数常量以十六进制表示时,只用0x e.g. int a=0xffa case若无break,将继续向下执行语句 break只跳出一层循环 注意区别循环条件和循环结束条件 注意do…while 语句先执行循环体 注意分辨while(…){…}语句中,()里的语句是否改变了某些变量的值 e.g 应看清逻辑表达式代表的真实意图与实际作用 注意typedef定义格式 e.g. 定义字符型 typedef char *STP;STP a; 定义结构体 typedef struct stu{…}ABC;ABC a[2]; (5) 运算 注意运算优先级 e.g. e.g. 注意判断逻辑表达式的值是0,1还是其他 注意逻辑表达式中的运算 e.g. (j++||k++)&&i++中的i++可能不执行 (6) 数组 应注意数组足标从零开始 e.g. 仅数组名a表示地址,a[i]应理解为变量名 e.g. scanf(“%d”,&a[i]) 要用数组作为数据统计的
结果时,必须在最开始对数组进行初始化。 e.g. 要统计字符串中各字母出现次数,并以此将数据记入数组tt[]时,必须先用for(i=0;i<=25;i++)*(tt+i)=0;对数组进行初始化。 注意系统对字符数组进行的自动初始化 e.g. 注意对字符数组赋值的正确方式 char s[]={”hello!”}; (花括号可省略) 初始化后,s的长度为7而非6,因为以字符串形式对初始化字符数组,末尾要加上’\0’ 注意区别strlen()和sizeof() (7) 函数 注意形参是值传递 不应擅自将return X格式改为return(X)格式(尽管等价,但考试系统回判错,特别是填空题) 注意在调用其他函数以后,还有没有语句 递归时注意执行顺序 (8) 指针 void inv(int *x,int n) 数组名对应形参不写作(*x)[] 注意指针自增后的指向 e.g. char *p;s[1]=”two”;p=&s[1];p++;最终p指向w,而非&s[2] 注意在使用malloc()开辟空间时,必须指定指针类型 e.g. (struct stu *)malloc(sizeof(struct stu)); 区别交换的是*a *b还是a b 指针未指向有效空间时,严禁对该空间赋值 注意指针函数的概念 (9) 文件 分清有关函数 文件f到达结尾时,feof(f)返回1,否则返回0 fread(buffer,size,count,fp); buffer为指针,指向读入数据的存放地址。size为要读写的字节数。count为读取size字节的数据项的个数。fp为指向文件的指针。 注意文件中数据的覆盖方式 (10) 预处理 注意尽管define是直接替换,但有括号时仍需仔细辨别。 e.g. 2、 重要概念 (1) 算法 算法的时间复杂度指算法所需的计算工作量(以基本运算的次数表示),不是所需时间 算法的基本特性:有穷性、确定性、可行性、拥有足够的情报(有零个或多个输入、有一个或多个输出) 三种基本结构组成的算法可以完成任何复杂的任务 排序方法 大类 小类 扫描遍数 最多比较次数 交换类排序 冒泡排序 n (n-1)/2 快速排序 插入类排序 简单插入排序 n (n-1)/2 希尔排序 0(n1.5) 选择类排序 简单选择排序 n-1 n (n-1)/2 堆排序 0(nlog2n) (2) 数据结构 C语言的数据既无逻辑型,也无集合型 静态变量持续于整个程序的运行周期之中 链式存储是顺序存储 支持子程序调用的数据结构是栈 (3) 软件工程 软件设计的原则:抽象、模块化、信息隐蔽、模块独立性 软件工程三要素:方法,工具,过程 功能性注释对应程序段 源程序文档化包括:标识符命名,程序中加注释,程序视觉组织 (4) 数据库 数据库应用系统中的核心问题是数据库设计 数据库设计的根本目标是要解决数据的共享问题 数据库概念模型是关系模式的集合
化→分解关系运算→消除多余相关性 合成E-R模型后要进行优化 实体联系图(E-R图)是实体联系模型的核心 E-R图转换为关系模式时,实体和联系都可表示为关系 数据管理系统是位于用户与操作系统之间的软件系统,是实现各种数据管理功能的核心软件。 *数据控制语言负责数据的完整性、安全性的定义与检查以及并发控制、故障恢复等功能 概念结构如下: 注意:数据库管理系统是整个数据库系统的核心,他对数据库中的数据进行管理,还在用户的个别应用与整体数据库之间起接口作用 *物理独立性:改变数据的物理结构,不影响数据的逻辑结构,从而不引起程序变化,这性质叫物理独立性 *逻辑独立性:改变数据库总体逻辑结构,如修改数据模式,增加新数据类型,改变数据间关系,不须修改应用程序,称为逻辑独立性 数据库系统的内部结构关系 数据模型 关系代数基本运算中的查询运算 关系代数扩充运算中的连接与自然连接运算 R与S的连接是有R与S的笛卡尔积中满足限制iθj的元组构成的关系 记作 i为R中的域,j为S中的域,θ为比较符。如θ为“<”称作小于连接;如θ为“>”称作大于连接 e.g. a b c d 1 2 3 4 3 2 1 8 7 3 2 1 e f 1 8 7 9 5 2 R S a b c d e f 7 3 2 1 1 8 3、 常见方法与答题要求 如需对输入数字进行“数-字”转换,一开始可以把数字以字符串格式键入 矩阵进行坐标转化的时候,注意遍历的位置。 注意选项中的参数位置是否一致