


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
全国计算机二级C语言常考题型专题讲座字符串长度的计算方法提示:(1)计算字符串长度时关键是要注意辨认转义字符;(2)一个转义字符总是以反斜杠开始,再加一个其他字符组成。所以,遇到反斜杠时要特别注意!1、不带转义字符的字符串如:“abc!x=/”,其长度为 72、带转义字符的字符串(1) 字符串“abcn”:其中的n为转义字符(换行符),计算字符串长度时只能计作一个字符,所以该字符串的长度为4(而不是5)(2) 字符串“abcn:其中有4个转义字符:n(换行符)、(反斜杠)、(单引号)、(双引号),所以该字符串的长度为7(而不是11)。(3) 字符串“abc0xyz”:其中有一个转义字符0,它是字符串结束符,所以,当用函数strlen来测试该字符串的长度时,结果应该为3(而不是7)。(4) 字符串“abc0xy”:其中有一个转义字符(反斜杠),这样,后面的字符串“0xy”照样计算,所以,该字符串的长度为7(而不是将第二个反斜杠与其后的0结合为一个转义字符0,若那样的话,第一个反斜杠将无法处理,因为一个转义字符总是由反斜杠加其他字符组成的,单独的一个反斜杠不能作为任何合法的字符)。(5) 若将字符串“abc0xy”改为“abc0xy”:则其中有二个转义字符(反斜杠)和0(字符串结束符),这时,当用函数strlen来测试该字符串的长度时,结果应该为4(而不是7)。(6) 若将字符串“abc0xy”改为“abc061xy”:则其中有二个转义字符(反斜杠)和061(ASCII码值等于061的字符,也即数字字符1),这时,当用函数strlen来测试该字符串的长度时,结果应该为7(而不是4或9)。所以,当遇到转义字符0时,还要看其后面是否还有数字,若有,则应将后面的数字(一至二位)与前面的0相结合作为一个字符计入整个字符串的长度。 若用printf(“abc061xy”);输出,则输出结果为:abc1xy例题一:请选出以下语句的输出结果()printf(%dn,strlen(t065xffn);(A) 5(B) 14(C) 8(D) 输出项不合法,无正常输出正确答案是(A):字符串中包含的5个字符是:t(跳格符)、(双引号)、065(ASCII值为八进制065,也即十进制为51的字符)、xff(ASCII值为十六进制ff,也即十进制为255的字符)、n(换行符)。例题二:若有以下程序段:char str=abn012;printf(%d,strlen(str);上面程序段的输出结果是A) 3B) 4C) 6 D) 12正确答案是(C):字符串中包含的6个字符是:a、b、n、012、和。整数除法的注意事项整数除法的要领:(1)两个整数相除的结果也应该是一个整数。(2)若两个整数相除不能除尽,则最后结果应该进行“取整”转换(注意不是“四舍五入”)。例题一:int x;x=3/2;则x的值是1,而不是2,更不是1.5例题二:float x;x=3/2;虽然变量x是float型,但x的值并不为1.5,而应该为1.0。x=3/2的运算过程如下:(1)由于运算符“/”的优先级高于运算符“=”,所以先计算3/2,又由于3和2都为整数,所以3/2的结果也应该是整数1。(2)再进行赋值(“=”)运算:进行赋值前,先将1转换为1.0,然后再赋值给变量x。所以x的值是1.0。例题三:若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是( )。(A) 1 (B)2(C)2.0(D)2.5答案应该(C).逗号表达式逗号表达式的形式如下:表达式1,表达式2,表达式3,. ,表达式n逗号表达式的要领:(1) 逗号表达式的运算过程为:从左往右逐个计算表达式。(2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。(3) 逗号运算符的优先级别在所有运算符中最低。例题1:若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是A) 1 B) 2C) 2.0D) 2.5分析:该表达式是一个逗号表达式,所以先运算x=1,结果变量x中的值为1.0,然后运算y=x+3/2,其结果是变量y中的值为2.0(这个运算过程可参阅本专题的“整数除法的注意事项”),注意此时表达式y=x+3/2的值即等于变量y的值为2.0。最后,整个逗号表达式的值应该等于最后一个表达式的值2.0,所以,正确答案是C)。注:该题曾在1998年4月和2000年9月的二级C考试中两次出现过。例题2:若t为double类型,表达式t=1,t+5,t+的值是A) 1B) 6.0C) 2.0D) 1.0分析:该题的表达式也是一逗号表达式,运算过程同例题1。需要注意的是,其中的第二个表达式(t+5)对整个表达式的运算结果不产生任何影响,因为它没有改变变量x的值(x的值仍为1.0),最后一个表达式(t+)的值为变量x进行自增运算前的值1.0,所以整个表达式的值也为1.0。注:这是1998年4月二级C考试中的一道选择题。例题3:有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5);该函数调用语句中,含有的实参个数是A)3 B)4C)5D)有语法错误分析:C语言规定,函数调用时实参与实参之间是用逗号隔开的,所以,本题的函数调用语句中包含3个实参,其中第一个实参是rec1,第二个实参是rec2+rec3,第三个实参是(rec4,rec5),这里的第三个实参就是一个逗号表达式,根据逗号表达式的运算规则,第三个实参的值应该等于rec5的值。注:这是2000年9月二级C考试中的一道选择题。例题4:有如下函数调用语句fun(a+b,(x,y),fun(n+k,d,(a,b);在此函数调用语句中实参的个数是A)3 B)4C)5D)6正确答案应该是A)。注:这是1997年9月二级C考试中的一道选择题。指针与一维数组指针与一维数组是二级C必考题型,有时一次考试中会出现2到3题相关的题目,因此,掌握这一题型的解答技巧是十分重要的。知识要领:一般情况下,总是先定义一个一维数组和一个指针变量,如:int a=1,2,3,4,5,*p;然后将数组a的首地址赋值给指针变量p,是指针p指向数组a的首地址:p=a;这样,就完成了数组与指针之间指向关系的建立。这是该类题目在提出问题前必须做的一件事,也是考生解答问题的前提条件。注意:数组a的首地址有两种表示方法,一是直接用数组名a表示,另一种是用数组的第一个元素a0的地址&a0表示,这两种表示法是完全等价的,因此,上述表达式 p=a 也可写成 p=&a0。通过语句 p=a;在数组与指针之间建立了指向关系之后,则必须明白以下两组等价关系第一组等价关系:以下4种表示法是等价的,它们均表示下标为i的数组元素ai(本例子中,i的取值范围为0到4):ai,pi,*(a+i),*(p+i)第二组等价关系:以下4种表示法也是等价的,它们均表示下标为i的数组元素ai的地址值:&ai,&pi,a+i,p+i可以发现,数组名a和指针p在使用时是可以相互替代的,也即凡使用a的地方均可以p替代,反之也然。(前提条件是首先有p=a;语句。)注意:a是一常量,它的值不可改变,而p是变量,它的值是可以改变的,这是它们之间的唯一区别。明白以上等价关系后,即可以解答大部分此类题目了。例题一:若有以下定义和语句,则通过指针p引用值为38的数组元素的表达式是int w10=23,54,10,33,47,98,72,80,61,*p;p=w;分析:这是1998年4月的一道填空题。根据前面讲的等价关系,值为38的数组元素可用4种方法表示:w5,p5,*(w+5)和*(p+5),其中p5和*(p+5)符合题目中关于“通过指针p引用”的要求,因此,该题可以有这两种填法。例题二:若有以下定义和语句:int a10=1,2,3,4,5,6,7,8,9,10,*p=a;则不能表示a数组元素的表达式是A) *pB) a10 C) *a D)ap-a分析:这是1998年4月的一道选择题。选项A)和C)可以该写为:*(p+0)和*(a+0),所以它们均表示数组元素a0。选项D)的下标为p-a,由于p和a均指向数组的首地址,它们的地址值是相同的,所以p-a的值为0,所以ap-a也表示a0。选项B)的下标10超出了数组所规定的上限9,所以,a10不能表示a数组的一个元素。例题三:若有以下定义和语句,则使指针p指向值为36的数组元素的表达式是int a10=19,23,44,17,37,28,49,36,*p;p=a;分析:这是1997年9月的一道填空题,与例题一完全类似。正确答案是*(p+7)。例题四:若有说明:double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是A) *p=&a;scanf(%lf,p);B) p=(double *)malloc(8);scanf(%f,p);C) p=&a;scanf(%lf,a);D) p=&a;scanf(%le,p);分析:这是1997年9月的一道选择题。它是关于指针与单个变量之间关系的题目。(1)要使指针p指向变量a,则必须用语句p=&a;这样以后,也有两个等价关系:*p等价于a;p等价于&a。前者是关于变量a的数值的等价关系,后者是关于变量a的地址值的等价关系。(2)选项A)中的语句*p=&a;显然是错误的。选项B)在程序运行到scanf语句时将出错。选项C)的scanf语句中的a前面少了一个取地址符&。选项D)相当于scanf(%le,&a);因此是正确的。例题五:若有以下定义:int a10=1,2,3,4,5,6,7,8,9,10,*p=a;则值为3的表达式是A) p+=2,*(p+)B) p+=2,*+pC) p+=3,*p+D)p+=2,+*p分析:这是1998年4月的一道选择题,它还涉及到指针的移动以及运算符+和*之间的优先级问题。(1)首先确定,值为3的数组元素是a2,因此也可用p2,*(a+2)和*(p+2)表示。(2)题目的4个选项中没有现成答案,所以再考虑其它途径。注意4个表达式均为逗号表达式,它们的值应该分别等于各自最后一个表达式的值(关于逗号表达式,可参阅本站“逗号表达式”专题)。(3)再看表达式p+=2的作用。在进行这一运算之前,指针p指向数组元素a0,表达式p+=2使指针p向后移动了2个存储单元,也即,运算后指针p指向了数组元素a2,同样,经过p+=3运算后,指针p将指向数组元素a3。(4)现在看选项A),先经p+=2运算,使p指向a2,然后通过指针运算符*引用表达式p+所指向的元素,我们知道,表达式p+的值就是p的值,所以*(p+)的值就等于*p的值,也即a2的值3,它正符合题目要求,因此,A)是正确答案。B)表达式的值应该为4(先使p指向a3,后通过p取值),C)表达式的值应该为4(先使p指向a3,再通过p取值),D)表达式的值也为4(先使p指向a2,再通过p取值,最后自增1)。表达式运算问题之双目运算1. 双目运算概念双目运算由双目运算符和参与运算的运算量构成。所谓双目运算符是指该运算符的左右两侧都必须有运算量。常见的双目运算符有:+、-、*、/、%等。诸如x+y、x/y、x*y等运算均为双目运算。2. 双目运算的要点遇到双目运算,主要注意数据类型问题。具体有以下几点:(1) C语言要求:参与双目运算的两个运算量的类型必须一致;(2) 双目运算的结果的类型必须与运算量的类型一致;(3) 如果参与双目运算的两个运算量类型不一致,系统将自动把其中的一个进行类型转换,使两个运算量的类型一致后再进行运算。 自动转换的规则是:按“向高看齐”的原则进行转换。在几个基本的数据类型中,由高到低的排列顺序为:double,int,char。比较:赋值运算中的类型转换在赋值运算中,若遇到赋值号两侧的数据类型不一致,则也存在自动类型转换的问题,不过,它的转换规则与双目运算符的转换规则有所不同,它是按“向左看齐”的原则进行转换的,也即,是将赋值号右侧的量先转换为左侧的类型,然后再进行赋值。如有 int x; x=1.9; 则先将1.9转换为int型,变为1后再赋值给x。再如,double y; y=2; 则先将2转换为2.0,然后再赋值给y,结果y的值为2.0。举例说明:(1) 表达式 3+2 中,3和2类型一致(都是整型),符合双目运算的类型一致要求,所以直接运算,结果为5,也是整型。(2) 表达式 3/2 中,3和2类型一致(都是整型),符合双目运算的类型一致要求,所以直接运算,但要注意,由于两个运算量都是整型,所以运算结果也必须是整型,3除以2的整数部分为1,所以3/2的结果是1,而不是2,更不是1.5,这是整数除法中特别要注意的地方。又如19/5的整数部分是3,尽管其小数部分为0.8(超过了0.5),但19/5的结果仍然应该等于其整数部分的值3,而不能进行四舍五入变为4。(3) 表达式 1.0+3 中,量个运算量的类型不一致,所以不能直接进行加法运算,必须先将整数3转换为double型常量3.0(注意,C中实数常量均为double型,而不是float型!),使表达式变为 1.0+3.0,然后才能进行加法运算,运算结果为4.0(不能
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- “五城联创”基本知识题库及答案
- 酒店2025年工作计划怎么写(5篇)
- 专利技术转让协议书
- 环境监测行业智能化设备数据采集与质量控制技术报告
- 2025年排泄护理灌肠题目及答案
- 用电安全题目及答案
- 《物联网安装调试员技能培训》课件-项目一 物联网基础组件与通信协议
- CN120095608B 一种刀库用刀具同步的清洁装置 (昆山北钜机械有限公司)
- CN120084478B 一种汽车车灯测试设备及其测试方法 (常州市永光车业有限公司)
- T淋巴细胞检测课件
- 《绿色建筑概论》整套教学课件
- 常用急救药品的剂量与用法课件
- 《高级计量经济学》-上课讲义课件
- 塔吊基础-专项施工方案
- 《工贸行业重大安全生产事故隐患判定标准》解读课件
- 《农产品质量安全》系列讲座(第一讲-农产品质量及安全)课件
- 第二届中国管理培训生项目现状与发展调研报告
- 托业考试Toeic考题
- GB∕T 10429-2021 单级向心涡轮液力变矩器 型式和基本参数
- 电信市场营销试题库
- 资产评估质量保证措施
评论
0/150
提交评论