C语言笔试总结doc.docx
- 文档编号:16376721
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:16
- 大小:28.46KB
C语言笔试总结doc.docx
《C语言笔试总结doc.docx》由会员分享,可在线阅读,更多相关《C语言笔试总结doc.docx(16页珍藏版)》请在冰点文库上搜索。
C语言笔试总结doc
C语言笔试总结
C语言笔试总结1)合法的用户标识符考查合法的要求是由字母,数字,下划线组成。
,并且第一个必须为字母或则是下划线.关键字不可以作为用户标识符号。
maindefinescanfprintf都不是关键字。
迷惑你的地方If是可以做为用户标识符。
因为If中的第一个字母大写了,所以不是关键字。
例1.下面各选项中,均是C于语言合法标志符的选项是()A)33weautoB_23me_3ewC_433e_elseDER-DF32详解选B。
A项33错误并且第一个必须为字母或则是下划线.C项else是关键字不能作为用户标识符;D项ER-DF有下划线不能作为用户标识符。
例2.下列可用于C语言用户标识符的一组是()A)voiddefineWORDB)a3_3123CarCFor-abcIFCaseD2aDOsizeof详解选B。
A项有关键字,关键字不能作为用户标识符;B项正确;C项-abc错误,用户标识符应该有字母,数字以及下划线组成;D项2a开头应该是下划线或字母。
总结笔试中一定有一道此类题目。
希望大家务必牢记用户标识符的规定。
C语言中用户标识符只能是字母(A-Z,a-z),数字(0-9),下划线(_)组成的字符串,并且其第一个字母必须是字母或下划线。
关键字是c语言规定的具有特定意义的标识符。
C语言中关键字如下auto,double,int,Struct,break,else,long,switch,Case,enum,register,typedef,char,Extern,returnUnion,const,Float,short,unsigned,Continue,for,Signed,void,Default,goto无条件跳转语句,sizeof计算数据类型长度,volatile说明变量在程序执行中可被隐含地改xia变,do,while,staticif条件语句练习题1.以下选项中不合法的标识符是AprintBFORClongb;doublex,y;则以下选项正确的表达式是Aaintx-yBaxyCa*ybDyxyx详解选B(待考虑)选项A、C,取模运算符()用于计算两个整数相除所得的余数,intx-y与a*y的结果是双精度,因此不能使用取模运算符;选项D等号左边必须是确定的值而题中并没有说给X赋了值。
例3现有定义inta;doubleb;floatc;chark;则表达式a/bc-k的值的类型是AintBdoubleCfloatDchar详解选B例4设变量已正确定义并赋值,以下正确的表达式是Axy*5xzBint15.85Cxyz5,yDx255.0详解选C。
A项第二赋值运算符的右边是是一个表达式而不是变量;B和D选项两边必须是整型常量。
C语言中表达式的考察有算术表达式,赋值表达式,逗号表达式和自增自减表达式。
算术表达式中要明确的是它们都是左结合的(所谓左结合就是当一个数字左右的运算符的优先级相同时这个数先和左边的运算符结合,比如23-4中这个3就会和j结合而不会和-结合);算数运算符的考察还有就是混合运算类型的考察我们需要记住的是当某一运算对象类型不同时,应该进行类型的转换,转换的依据低数据类型转换为高类型依次为int→unsignedint→long→unsignedlongint→double;还有就是对算数运算符的考察取余运算符的两个运算对象必须是整形数据如73结果为1,7.53就是非法运算,/除法运算如果有一个运算对象是float型那么结果就是double型。
赋值表达式抓住一点变量确定的值,也就是说等号的左边必须是变量,不能是常量或表达式,右边的表达式可以使一个赋值表达式。
如ab71,。
并且“”是右结合的(关于右结合前面已经讲了),同时赋值表达式也是一个有值表达式,可以作为一个运算对象来处理如(xab3,对于,一类的赋值运算符和的优先级一样。
逗号表达式逗号运算是优先级最低的,特别的逗号表达式的值是最后一个式的值,如表达式1,表达式2,表达式3这个逗号表达式的值是表达式3的值练习题1.设变量a是int型,f是float型,i是double型,则表达式10ai*f值的数据类型为AintBfloatCdoubleD不确定2.若变量已正确定义并赋值,以下符合C语言语法的表达式是Aab1Babc2Cint18.53Daa7cb3..若变量已正确定义,在if(W)printf(“d\n,k”);中,以下不可替代W的是A.a<>bcB.chgetchar()C.abcD.a4.若有定义语句intx10;则表达式x-xx的值是A-20B-10C0D105.以下叙述错误的是A在程序中凡是以“”开始的语句行都是预处理命令行B预处理命令行的最后不能以分号结束CdefineMAX是合法的宏定义命令行DC程序对预处理命令行的处理是在程序执行的过程中进行的1.选C2.选B。
D项中“”左边必须是变量不能是表达式,第二个赋值运算符的左边是表达式所以不合法3.选AB项赋值表达式是一个有值表达式,所以可以作为W,C项是一个判断表达式;D项是一个自增表达式。
4..选B这个表达式喜欢i先算xx的值后就变成x-20所以选B5.选D自增自减运算宏定义例1有以下程序includedefineN5defineMN1definefxx*Mmain{inti1,i2;i1f2;i2f11;Printf“dd\n“,i1,i2;}程序运行结果是A1212B117C1111D127详解选B。
f
(2)(2*M)(2*N1)(2*51)11,f(11)(11*M)(11*N1)7例2执行下列语句后,a的值为inta;#defineM(x,y)(x*y)a=M(1+2,3);A.9B.7C.5D.以上均不是详解选B。
M(1+2,3)12*37例3
(1)设有以下宏定义defineWIDTH80defineLENGTHWIDTH40执行赋值语句vLENGTH*2;v的值为()
(2)设有以下宏定义defineWIDTH80defineLENGTHWIDTH40执行赋值语句nLENGTH*2;v的值为()详解
(1)160.vLENGTH*2WTDTH40*280801602240vLENGTH*2WIDTH40*2240宏定义的题目实际上非常简单,要注意的是它和数学中的代换不一样,只要我们按那定义一步一步的像机器一样的算就行,不要加括号。
练习题1.defineADDxxxmain{intm1,n2,k3;intsumADDmn*k;printf“sumd“,sum;}上面运行的结果是Asum9Bsum10Csum12Dsum182.在宏定义defineMAX30中,用宏名代替一个A常量B字符串C整数D长整数1.选B2.选B定义的作用是在程序编译以前,把宏定义的内容(如题中MAX)用事先安排好的内容(如题中30)代替,然后在进行编译,也就是说宏定义的作用就有点像是我们人在编程序,然后写上了30这个字符串。
只不过这个写的过程有一部分工作是编译器帮助我们完成的。
所以宏定义可以理解为用一个字符串特定且一定的代替另一个字符串,宏定义是不允许重复定义的。
指针的考察函数形参与实参函数的形参与实参主要考的是关于形参的改变有没有改变实参,只要传递给函数的如果是指针的话,那么改变指针的值就是改变了实参的值,如果没有提到指针那么久可能没有改变实参的值例1.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是A函数的实参和其对应的形参共占统一存储单元B形参只是形式上的存在,不占用具体存储单元C同名实参和形参占同意存储单元D函数的形参和实参分别占用不同的存储单元详解选D。
在定义函数是,系统并不给形参分配存储单元。
实参和形参分别属于主调函数和被调函数,具有不同的内存单元,所以在函数调用是形参发生改变,不会影响到实参例2.几种不类型的变量的作用域和生命期这种题一般考的就是那几种,下面总结为“变量在哪里定义的就在哪里有效”我们看变量是首先看的是它所处的位置然后判定它的作用域和生命周期,若果在主函数中已经定义了一个变量设为a,那么如果在函数中在定义变量是没有用a,那么如果a在这个函数中使用它是作为主函数中的a来使用的,如果在函数中又定义了变量a,那么在函数内部这个a是重新定义的a,与外面得a毫不相干,因为这两个a根本就是不同的,它们所占的存储空间也不一样,只是名字一样罢了。
例1.以下程序的运行结果是Intk;voidfun(intm){mk,km;printf“mdkd“,m,k;}main{inti4;Funi;printf“idkd\n“;}Am4k5i5k5Bm4k4i5k5Cm4k4i5k5Dm4k5i5k5详解选B。
由于k是全局变量所以它在整个程序中一直有用。
所以在函数中出现的k就和外面的是一样的。
明白这个这个题就好做了例2.初始化的几种考法数组的初始化有两种方法
(1)按行对二位数组初始化。
如intx[2][3]{{1,2,1},{3,4,2}};2按二维数组的存储顺序赋值存储如。
如intb[2][3]{1,2,3,4};初始化有几点注意的地方①对部分元素初始化那么其他的元素就是0如int[3][3]{{1},{1},{1}}中c[0][0],c[1][0],c[2][0]为1外其他的都是0,这个很好理解,在未初始化是所有的元素所占的内存里储存的都是二进制表示的16个0所以没有定义的话就是0了②注意区分初始化和赋值,初始化说简单一点就是在数组定义时给数组赋值这叫初始化但是如果数组定义完后给数组赋值就是不允许的,只能一个一个的赋值,因为数组也是一种指针,但是它们常量指针不能一起赋值,以为在一起赋值时这个常量指针始终是指在第一个元素的位置上③行长度可以省略(原因在指针那部分讲)例1以下数组定义中错误的是Aintx[][3]{0}Bintx[2][3]{{1,2},{3,4},{5,6}}Cintx[][3]{{1,2,3},{4,5,6}}Dintx[2][3]{1,2,3,4,5,6}详解选B.二维数组的初始化1按行对二位数组初始化;2按二维数组的存储顺序赋值存储。
初始化就只有这两种。
B项就错在以行来初始化时出现了3行但是定义数组是只有两行例2下列二维书组初始化语句中,正确且与语句floata[][3]{0,3,8,0,9};等价的是A、floata[2][]{{0,3,8},{0,9}};B、floata[][3]{0,3,8,0,9,0};C、floata[][3]{{0,3},{8,0},{9,0}};D、floata[2][]{{0,3,8},{0,9,0}};函数的几个要点printf函数这个函数主要考的就是它的集中输出格式d是整型,c是字符型,o是八进制输出,x是十六进制,u是无符号整型输出,s是字符串输出,f是单精度或双精度浮点输出,e是以指数形式输出例1.有以下程序段Charch;intk;Cha;k12;Printf“c,d,“,ch,ch,k;printf“kd\n“,k;则执行上述程序段后的输出结果是A因变量类型与格式描述符的类型不匹配输出无定植B输出项与格式描述符个数不符,输出为凌或不定值Ca,97,,12k12Da,97,k12详解选D。
Printf函数的输出结果就是按照格式描述符来输出的所以有一个逗号,又由于C语言中字符可以当做整型来进行处理所以就可以d输出,输出的是asic码值,D项中多出的一个k没有对应的所以就没有输出关于或和与或和与的题目在笔试中是非常的简单只有那一种形式只要能明白字符可以作为整型来处理就可以搞定这方面的题目例1.若变量kk为char型,以下不能正确判断除kk中的值为大写字母的表达式是AkkAkkZB(kkA||kkakk322c2c6c2Dc2C1,则该结点的父结点编号为INTk/2;②若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(也无右子结点);③若2k1≤n,则编号为k的结点的右子结点编号为2k1;否则该结点无右子结点。
满二叉树是指除最后一层外,每一层上的所有结点有两个子结点,则k层上有2k-1个结点深度为m的满二叉树有2m-1个结点。
完全二叉树是指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。
二叉树存储结构采用链式存储结构,对于满二叉树与完全二叉树可以按层序进行顺序存储。
二叉树的遍历
(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树;
(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树;1.7查找技术顺序查找的使用情况
(1)线性表为无序表;
(2)表采用链式存储结构。
二分法查找只适用于顺序存储的有序表,对于长度为n的有序线性表,最坏情况只需比较log2n次。
1.8排序技术排序是指将一个无序序列整理成按值非递减顺序排列的有序序列。
交换类排序法
(1)冒泡排序法,需要比较的次数为nn-1/2;
(2)快速排序法。
插入类排序法
(1)简单插入排序法,最坏情况需要nn-1/2次比较;
(2)希尔排序法,最坏情况需要On1.5次比较。
选择类排序法
(1)简单选择排序法,最坏情况需要nn-1/2次比较;
(2)堆排序法,最坏情况需要Onlog2n次比较。
第二章程序设计基础2.1程序设计设计方法和风格如何形成良好的程序设计风格1、源程序文档化;2、数据说明的方法;3、语句的结构;4、输入和输出。
要求注释分序言性注释和功能性注释,语句结构清晰第
一、效率第二。
2.2结构化程序设计结构化程序设计方法的四条原则是1.自顶向下;2.逐步求精;3.模块化;4.限制使用goto语句。
结构化程序的基本结构和特点
(1)顺序结构一种简单的程序设计,最基本、最常用的结构;
(2)选择结构又称分支结构,包括简单选择和多分支选择结构,可根据条件,判断应该选择哪一条分支来执行相应的语句序列;(3)循环结构可根据给定条件,判断是否需要重复执行某一相同程序段。
2.3面向对象的程序设计面向对象的程序设计以60年代末挪威奥斯陆大学和挪威计算机中心研制的SIMULA语言为标志。
面向对象方法的优点
(1)与人类习惯的思维方法一致;
(2)稳定性好;(3)可重用性好;(4)易于开发大型软件产品;(5)可维护性好。
对象是面向对象方法中最基本的概念,可以用来表示客观世界中的任何实体,对象是实体的抽象。
面向对象的程序设计方法中的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,由一组表示其静态特征的属性(描述对象本身的特征)和它可执行的一组操作(也就是对对象进行处理)属性即对象所包含的信息,操作描述了对象执行的功能,操作也称为方法或服务。
对象的基本特点
(1)标识惟一性;
(2)分类性;(3)多态性;(4)封装性;(5)模块独立性好。
类是指具有共同属性、共同方法的对象的集合。
所以类是对象的抽象,而一个对象是对应类的一个实例(它必须是指一个具体的对象)如大学生称之为类,学生张三就叫类得实例。
消息是一个实例与另一个实例之间传递的信息。
消息的组成包括
(1)接收消息的对象的名称;
(2)消息标识符,也称消息名;(3)零个或多个参数。
继承是指能够直接获得已有的性质和特征,而不必重复定义他们。
继承分单继承和多重继承。
单继承指一个类只允许有一个父类,多重继承指一个类允许有多个父类。
多态性是指同样的消息被不同的对象接受时可导致完全不同的行动的现象第三章软件工程基础3.1软件工程基本概念计算机软件是包括程序、数据及相关文档的完整集合。
软件的特点包括
(1)软件是一种逻辑实体;
(2)软件的生产与硬件不同,它没有明显的制作过程;(3)软件在运行、使用期间不存在磨损、老化问题;(4)软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题;(5)软件复杂性高,成本昂贵;(6)软件开发涉及诸多的社会因素。
软件按功能分为应用软件、系统软件、支撑软件(或工具软件)。
软件危机主要表现在成本、质量、生产率等问题。
软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。
软件工程包括3个要素方法、工具和过程。
软件工程过程是把软件转化为输出的一组彼此相关的资源和活动,包含4种基本活动
(1)P软件规格说明;
(2)D软件开发;(3)C软件确认;(4)A软件演进。
软件周期软件产品从提出、实现、使用维护到停止使用退役的过程。
软件生命周期三个阶段软件定义、软件开发、运行维护,主要活动阶段是
(1)可行性研究与计划制定;
(2)需求分析;(3)软件设计;(4)软件实现;(5)软件测试;(6)运行和维护。
软件工程的目标和与原则目标在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。
基本目标付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发软件易于移植;需要较低的费用;能按时完成开发,及时交付使用。
基本原则抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。
软件工程的理论和技术性研究的内容主要包括软件开发技术和软件工程管理。
软件开发技术包括软件开发方法学、开发过程、开发工具和软件工程环境。
软件工程管理包括软件管理学、软件工程经济学、软件心理学等内容。
软件管理学包括人员组织、进度安排、质量保证、配置管理、项目计划等。
软件工程原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。
3.2结构化分析方法结构化方法的核心和基础是结构化程序设计理论。
需求分析方法有
(1)结构化需求分析方法;
(2)面向对象的分析的方法。
从需求分析建立的模型的特性来分静态分析和动态分析。
结构化分析方法的实质着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。
结构化分析的常用工具
(1)数据流图;
(2)数据字典;(3)判定树;(4)判定表。
数据流图描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统功能建模。
数据字典对所有与系统相关的数据元素的一个有组织的列表,以及精确的、严格的定义,使得用户和系统分析员对于输入、输出、存储成分和中间计算结果有共同的理解。
判定树从问题定义的文字描述中分清哪些是判定的条件,哪些是判定的结论,根据描述材料中的连接词找出判定条件之间的从属关系、并列关系、选择关系,根据它们构造判定树。
判定表与判定树相似,当数据流图中的加工要依赖于多个逻辑条件的取值,即完成该加工的一组动作是由于某一组条件取值的组合而引发的,使用判定表描述比较适宜。
数据字典是结构化分析的核心。
软件需求规格说明书的特点
(1)正确性;
(2)无岐义性;(3)完整性;(4)可验证性;(5)一致性;(6)可理解性;(7)可追踪性。
3.3结构化设计方法软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,软件设计是确定系统的物理模型。
软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径。
从技术观点来看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。
结构设计定义软件系统各主要部件之间的关系。
数据设计将分析时创建的模型转化为数据结构的定义。
接口设计描述软件内部、软件和协作系统之间以及软件与人之间如何通信。
过程设计把系统结构部件转换成软件的过程描述。
从工程管理角度来看概要设计和详细设计。
软件设计的一般过程软件设计是一个迭代的过程;先进行高层次的结构设计;后进行低层次的过程设计;穿插进行数据设计和接口设计。
衡量软件模块独立性使用耦合性和内聚性两个定性的度量标准。
在程序结构中各模块的内聚性越强,则耦合性越弱。
优秀软件应高内聚,低耦合。
软件概要设计的基本任务是
(1)设计软件系统结构;
(2)数据结构及数据库设计;(3)编写概要设计文档;(4)概要设计文档评审。
模块用一个矩形表示,箭头表示模块间的调用关系。
在结构图中还可以用带注释的箭头表示模块调用过程中来回传递的信息。
还可用带实心圆的箭头表示传递的是控制信息,空心圆箭心表示传递的是数据。
结构图的基本形式基本形式、顺序形式、重复形式、选择形式。
结构图有四种模块类型传入模块、传出模块、变换模块和协调模块。
典型的数据流类型有两种变换型和事务型。
变换型系统结构图由输入、中心变换、输出三部分组成。
事务型数据流的特点是接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。
详细设计是为软件结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。
常见的过程设计工具有图形工具(程序流程图)、表格工具(判定表)、语言工具(PDL)。
3.4软件测试软件测试定义使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。
软件测试的目的发现错误而执行程序的过程。
软件测试方法静态测试和动态测试。
静态测试包括代码检查、静态结构分析、代码质量度量。
不实际运行软件,主要通过人工进行。
动态测试是基本计算机的测试,主要包括白盒测试方法和黑盒测试方法。
白盒测试在程序内部进行,主要用于完成软件内部CAO作的验证。
主要方法有逻辑覆盖、基本基路径测试。
黑盒测试主要诊断功能不对或遗漏、界面错误、数据结构或外部数据库访问错误、性能错误、初始化和终止条件错,用于软件确认。
主要方法有等价类划分法、边界值分析法、错误推测法、因果图等。
软件测试过程一般按4个步骤进行单元测试、集成测试、验收测试(确认测试)和系统测试。
3.5程序的调试程序调试的任务是诊断和改正程序中的错误,主要在开发阶段进行。
程序调试的基本步骤
(1)错误定位;
(2)修改设计和代码,以排除错误;(3)进行回归测试,防止引进新的错误。
软件调试可分表静态调试和动态调试。
静态调试主要是指通过人的思维来分析源程序代码和排错,是主要的设计手段,而动态调试是辅助静态调试。
主要调试方法有
(1)强行排错法;
(2)回溯法;(3)原因排除法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 笔试 总结 doc