1、c语言历年考题真题解析精选文档 TTMS system office room 【TTMS16H-TTMS2A-TTMS8Q8-TTMSHHJ8】c语言历年考题真题解析精选文档1.C语言规定,在一个源程序中main函数的位置 _ 。(2010年春选择题第21题)A.必须在最开始 B.必须在最后 C.必须在预处理命令的后面 D.可以在其他函数之前或之后 【解析】main函数也叫主函数,是C语言编译系统提供的特殊函数,可以放在程序中的任何位置,但不能定义在其他函数体内。C程序总是从main函数的第一条语句开始执行。【答案】D2.以下叙述中正确的是_ 。(2009年秋选择题第21题)A.C语言系统以
2、函数为单位编译源程序B.main函数必须放在程序开始C.用户定义的函数可以被一个或多个函数调用任意多次D.在一个函数体内可以定义另外一个函数【解析】C语言系统以程序为单位编译源程序,程序由函数组成。main函数可以放在其他函数之前或之后。除了main函数外,函数可以被其他函数多次调用。函数不能定义在其他函数体内,即不能嵌套定义。【答案】C3.以下叙述中正确的是_ 。(2008年秋选择题第21题)A.在编译时可以发现注释中的拼写错误B.C语言程序的每一行只能写一条语句C.main()必须位于程序的开始D.C语言程序可以由一个或多个函数组成【解析】C程序的注释不产生编译代码,编译时跳过去,发现不了
3、其中错误。C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。main函数可以放在程序中的任何位置。C程序可以由一个或多个函数组成,函数可以为空函数,包括main函数。【答案】D4.以下关于C语言源程序的叙述中错误的是_。(2007年春选择题第21题)A.一个C源程序由若干个函数定义组成,其中必须有且仅有一个名为main的函数定义B.函数定义由函数头部和函数体两部分组成C.在一个函数定义的函数体中允许定义另一个函数D.在一个函数定义的函数体中允许调用另一个函数或调用函数自身【解析】一个C语言源程序由若干个函数定义组成,其中必须有且仅有一个名为main的函数定义,函数定义由函数头
4、部和函数体两部分组成。函数可以嵌套调用也可以递归调用,但不能嵌套定义。C的意思是嵌套定义,错误,D的意思是嵌套调用和递归调用,正确。【答案】C3.1.2 基本数据类型1.以下选项中,_ 是C语言关键字。 (2010年春选择题第22题)A.printf B.include C.fun D.default 【解析】default是关键字,用在switch语句中。printf和include属于预定义标识符,其中printf是输出函数名,include用在预编译处理命令中。fun是用户自定义标识符。【答案】D2.在以下各组标识符中,均可以用作变量名的一组是_。(2007年秋选择题第22题)A.a01
5、,Int B.table_1,a*.1 C.0_a,W12 D.for,point【解析】选项A中两个都符合标识符的命令规则,Int与关键字int是不同的标识符,选项B的第2个标识符中有*号,不符合标识符命名规则,选项C数字开头,不允许,选项D中的for是关键字,不能做变量名。【答案】A3.以下定义和声明中,语法均有错误的是_。 (2009年春选择题第21题)int _f(int x) int f(int f) int 2x=1; struct forint x;A. B. C. D.【解析】本题考的是标识符的命名规则。定义的整型变量名数字开头,不符合命名规则。中定义的结构体类型名for属于关
6、键字,不能作为结构体类型名。中使用的函数名和形式参数名相同,在语法上可以,但在实际编程时不提倡使用。【答案】B4.在C语言系统中,如果一个变量能正确存储的数据范围为整数-3276832767,则该变量在内存中占_个字节。 (2010年春填空题第3题)【解析】表示范围为整数-3276832767的属于int型或short型的变量,它们在内存占2个字节。【答案】25.若有声明“int x;”且sizeof(x)的值为2,则当x值为_时“x+1x”为假。(2009年春填空题第2题)【解析】x为int型,其表示范围为-32768+32767,当x为32767时,再加1就变成了-32768了,此时,就是
7、x+1x”为假的情况。这是由int型数据在内存中的存储情况决定的。int型数据在内存中占2个字节,为-32768的补码,这种情况为溢出,数处于边界时会溢出。sizeof(x)是求字节数运算符。【答案】327676.已知sizeof(int)的值为2,为将10!的值存储到变量f中(10!=3628800),变量f的类型应声明为_ 。(2008年秋选择题第23题)A. long int B. int C. short int D.unsigned int【解析】10!=3628800,超过了int的范围-32768+32767,而长整型在内存占4个字节,表示范围大到,应该要用长整型才可以存放362
8、8800。【答案】A7.以下常量表示中正确的是_ 。(2008年春选择题第22题)【解析】选项A若想表示成十六进制常量,正确的表示应该是0xff,如果表示成转义字符,应该放在单引号内:0xff。选项B表示的是长整型常量,选项C是一个标识符,不能表示常量,选项D表示的是无符号整数,但无符号整数不应该有小数。【答案】B8.以下表示中不能用作C语言常量表示的是。(2007年春选择题第22题)A.0UL B.(long)123 C.1e0 D.x2a【解析】0UL意为将0以无符号长整型存放,B为强制类型转换,是表达式,表示长整型常量应该在123后加字母l或L。C是实常量,指数表示法,意为1乘以10的0
9、次方,e前面必须有数字,后面的数字必须是整数。D是转义字符,表示十六进制数2a。【答案】B9.在C语言源程序中,不带任何修饰的浮点数直接量(例如:3.14)都是按_类型数据存储的。 (2008年春填空题第1题)【解析】实型常量的类型默认为double类型, 在内存中占8个字节。带f修饰即3.14f或3.14F,则认为它是float 型,在内存中占4个字节。【答案】double10.已知有声明“char ch=g;”,则表达式ch=ch-a+A的值为字符_的编码。 (2010年春填空题第2题)【解析】本题的功能是将小写字母转换成大写字母。-a+A实际上就是减去32,对于一个小写字母来说,减去32
10、就变成对应的大写字母。【答案】G11.若有程序段“char c=256;int a=c;”,则执行该程序段后a的值是_。(2007年秋选择题第24题) A.256 B.65536 C.0 D.-1【解析】将256转换成二进制,为10000 0000,占9位,而char在内存只占一个字节,即8位,截取低8位赋给字符变量c,得c=0,将c的值赋给a,结果为0。【答案】C3.1.3 运算符和表达式 1.已知有声明“int a=3,b=4,c;”,则执行语句“c=1/2*(a+b);”后,c的值为_ 。(2010年春选择题第23题)A.0 B.3 C.3.5 D.4 【解析】本题考查的是两整数相除,结
11、果为整数,截取的是整数部分,不是四舍五入。1/2等于0,0乘于任何一个整数结果还是0,最后结果为0。【答案】A2.已知有声明“long x,y;”且x中整数的十进制表示有n位数字(4n10),若要求去掉整数x十进制表示中的最高位,用剩下的数字组成一个新的整数并保存到y中,则以下表达式中能正确实现这一功能的是_ 。(2009年秋选择题第25题)A.y=x/(10*(n-1) B.y=x%(10*(n-1)C.y=x%(long)pow(10,n-1) D.y=x%(10(n-1)【解析】本类型的题目,拿一个具体的数,放到四个选项中去计算,就能得到正确答案。假设x为1234,代入A中,为1234/
12、(10*3),肯定不是234,代入B中,为1234%(10*3)也不对,代入C中为1234%(long)103,结果为234,正确,选C。而D中的“”在C语言中是指位运算中的“异或”运算,不是求指数。【答案】C3.若有声明“float y=3.14619;int x;”,则计算表达式“x=y*100+0.5,y=x/100.0”后y的值是_ 。(2009年春填空题第3题)【解析】x=y*100+0.5=3.14619*100+0.5=315,因为x为int,截取整数部分赋给x。然后计算y=x/100.0=315/100=3.15,y是浮点数。【答案】3.154.若有声明“int a=32767
13、,b;”,则在Turbo C 2.0系统中执行语句“printf(%d,b=+a);”后输出结果是_ 。(2006年秋填空题第3题)【解析】本题有4个知识点:一是printf语句,输出%d格式,二是赋值运算及赋值表达式的值,三是+运算,四是int型数据的表示范围及整数在内存的存储情况。b=+a是将a的值加1后赋给b,a、b是int型,处于-3276832767范围内,32767+1=后为若是long型,满足32767+1等于32768。【答案】-327685.已知有声明“int a=3,b=4;”,下列表达式中合法的是_ 。(2010年春选择题第25题) A.a+b=7 B.a=|b| C.a
14、=b=0 D.(a+)+ 【解析】本题考查的是赋值运算符和“+”运算符的左值要求。左值必须是变量,不能是常量和表达式。选项A左边是表达式,不允许,选项D括号中的a+也是表达式,不能进行+运算。选项B是一个代数式,必须转换成C语言合法的表达式,表示成a=abs(b)。选项C正确,将0赋给b,再赋给a,a和b的值不再是初始化的值,而变成0了。【答案】C6.已知有声明“int n;float x,y;”,则执行语句“y=n=x=3.89;”后,y的值为_ 。(2010年春选择题第28题)【解析】本题考查的是不同类型间的赋值。赋值运算符右结合。先将3.89赋给x,表达式的值也为3.89,再将3.89赋
15、给n,n是int,自动截取整数部分,将3赋给n。最后将3赋给y,y是float,将整数3转换成实数3.0后赋给y,y值为3.0。 【答案】B7.以下程序运行时输出到屏幕的结果是_。 (2010年春阅读程序第7题)#include void main() int a=1,b=2; a+=b; b=a-b; a-=b; printf(%d,%dn,a,b); 【解析】本题的考点是复合赋值运算符,程序功能是不用临时变量,实现两个变量的值的交换。计算过程如下:a=a+b=1+2=3,b=a-b=3-2=1,a=a-b=3-1=2。最后结果是a为2,b为1。变量的值在程序运行过程中可能在不断的变化,每次
16、计算都要用最新得到的值。【答案】2,18.若有声明“int x=2,y=1,z=0;”,则下列关系表达式中有语法错误的是_ 。(2008年春选择题第25题)A. xy=2 B.zyx C.xy=1 D.x=(x=0,y=1,z=2)【解析】赋值表达式的运算数有左值要求,赋值号左边必须是变量,不能是表达式,A错。B没有语法错误,zy成立结果为1,不成立为0,再将1或0与x比较,判断其是否成立。C先判断xy是否成立,得到0或1再与1比较是否相等,最后的结果要么是0要么是1。D先做括号中的逗号表达式,依次进行赋值,最后一个表达式的值2是整个逗号表达式的值,将其与x的值进行是否相等的比较。【答案】A9
17、.已知有声明“int a=12,b=15,c;”,则执行表达式“c=(a|(b-=a)”后,变量b和c的值分别为 _ 。 (2010年春选择题第29题)A.3,1 B.15,12 C.15,1 D.3,12 【解析】本题的考点是逻辑表达式的短路特性。a值为12,非零即为真,逻辑表达式的结果只能用1或者0表示,若为真则结果为1。只要有一个为真,逻辑或“|”的结果就为1,b-=a不用计算了,b的值不变,仍为15。而括号中逻辑表达式的值为1,1赋给c,故c的值为1。【答案】C10.已知有声明“int a=3,b=4,c=5;”,以下表达式中值为0的是_ 。(2009年秋选择题第24题)A.a&b B
18、.a=b C.a|b&c D.!(!c|1)【解析】a&b中a和b都是非0,A的结果为1。B中a=b成立,结果为1。C中&优先级高于|,先做&,b和c的值非0,b&c的结果为1,因为是|运算,最后的结果肯定是1。D中c非0,!c为0,与1逻辑或为1,将括号中的1再逻辑非,结果为0。【答案】D11.C语言中有!、&、|三个逻辑运算符,其中优先级高于算术运算符的是_ 。(2009年秋填空题第1题)【解析】逻辑非“!”是单目运算符,优先级为2级,高于3级的“* / %”和4级的“+”和“-”。 “&”的优先级为11级,“|”的优先级为12,低于算术运算符。【答案】!12.以下表示数学式“abc”的逻
19、辑表达式中,错误的是_。(2007年春选择题24题)A.abc B.ab & b=b)&!(b=c) D.!(a=b|b=c)【解析】最好的答案是B,但C、D与B的功能相同。C中!(a=b)就是ab,而D中将!放到外面,“&”就变成了“|”。选项A先判断a013.以下选项中,不能表示函数sign(x)= 0 x=0 功能的表达式是_。 -1 x0)?1:(x0)?-1:0 B.s=x0?1:0)C.s=x0?1:x=0?0:-1【解析】本题考点是嵌套的条件表达式。仔细分析它们的逻辑关系,选项C的功能是当x0再判断x=0是否成立决定值为0还是1,不合题意。【答案】 C14.若有声明“int a=
20、5,b=2;”,则表达式“b+=(float)(a+b)/2”运算后b的值为_ 。(2007年秋填空题第1题)【解析】b+=(float)(a+b)/2相当于b=b+(float)(a+b)/2)。先执行a+b得7,转换成实数7.0除以2,得3.5,然后将原来的b=2加3.5得5.5,b是int,截取整数部分5赋给b。【答案】515.设指针变量占2个字节的内存空间,若有声明“char *p=123;int c;”,则执行语句“c=sizeof(p);”后,c的值为_ 。(2010年春选择题第24题) A.1 B.2 C.3 D.4 【解析】题目告诉我们指针变量占2个字节,而sizeof的功能就
21、是计算变量在内存中所占的字节数,c的值为指针变量p在内存中占用的字节数,为2。【答案】B16.若有声明“int r=2;”,则执行语句“printf(%d,sizeof(2*3.14*r);”时输出_ 。(2009年秋填空题第2题)【解析】本题输出表达式2*3.14*r的结果在内存中占用的字节数。2*3.14*r的结果为实常量,其中有一个实常量3.14,C中实常量默认为double型。根据类型转换规则,其他类型的数据也要转换成double型,最后结果为double型,在内存占8个字节。一般情况,只要表达式中有一个数据为double型,最后的结果就是double型。【答案】817.数学式所对应的
22、c语言表达式为pow(x, _ )。 (2010年春填空题第1题)【解析】pow(x,y)是求x的y次方的函数。就是x的三分之一次方。此处注意的是1/3=0,要将其中一个转换为浮点数。【答案】1.0/3或者1/3.0或者(double)1/318.数学表达式 所对应的C语言表达式为 _ 。(2009年秋填空题第3题)【解析】求平方根的函数为sqrt,求绝对值的函数为abs或fabs,abs求整数的绝对值,fabs求实数的绝对值。“”用“!=”表示。4a要用4*a表示,*表示乘号,不能缺省。分母一定要加括号,若不加括号得用除“/”不是用乘“*”。加括号的表示方式看起来更直观。【答案】sqrt(f
23、abs(x)!=4*a/(b*c)或sqrt(fabs(x)!=4*a/b/c3.2.1 实现顺序结构的语句1.以下关于C语言语句的叙述中正确的是_ 。(2006年秋选择题第27题)A.所有语句都包含关键字B.所有语句都包含表达式C.所有语句都可以出现在源程序中的任何位置D.除复合语句外的其他所有语句都以分号结束【解析】关键字只有32个,大多数用来进行变量类型说明以及实现条件选择和循环结构的控制语句。很多语句中没有关键字的,如赋值语句。表达式也不一定在所有的语句中出现的,如函数调用语句。语句是程序的执行部分,放在函数内部,而且在说明部分之后。C语言中复合语句中的各条语句都必须有分号“;”,但在
24、“”外没有分号。【答案】D2.已知int类型数据在内存中存储长度为2个字节,以下语句中能正确输出整数32768的是_ 。(2009年秋选择题第23题)A.printf(%d,32768); B.printf(%ld,32768);C.printf(%f,32768); D.printf(%c,32768);【解析】本题考点是输出格式。%d格式输出int型整数,范围为-3276832767,%f格式输出浮点数,%c格式输出字符。%ld格式输出长整型整数,范围为-21亿21亿。【答案】B3.以下语句中有语法错误的是_ 。 (2009年春选择题第24题)A.printf(%d,0e); B.prin
25、tf(%f,0e2); C.printf(%d,0x2); D.printf(%s,0x2);【解析】本题考点为输出格式及常量表示。A中的%d表示输出int型整数,0开头为八进制数,只能为07共8个数字,不能为e。B是%f格式,输出实数,0e2是指数形式,即为0*102。C输出int型整数,0x是十六进制形式,D用%s格式输出字符串常量0x2。【答案】A4.已知有声明和语句“int a;scanf(a=%d,&a);”,欲从键盘上输入数据使a中的值为3,则正确的输入应是 _。 (2010年春填空题第5题)【解析】“a=”是原样字符,要照输。“%d”的位置输入对应的变量a的值3。就是将键盘输入的
26、值3存入变量a的地址单元,这样a的值就为3。【答案】a=35.若有声明“long a,b;”且变量a和b都需要通过键盘输入获得初值,则下列语句中正确的是_ 。 (2007年秋选择题第23题)A.scanf(%ld%ld,&a,&b); B.scanf(%d%d,a,b);C.scanf(%d%d,&a,&b); D.scanf(%ld%ld,&a,&b);【解析】a和b是long型,输入时要用“%ld”格式。对于变量,scanf函数的地址表中必须有取地址运算符“&”,而且只在格式控制串上有双引号,地址表列上不应有双引号。满足这些要求的只有选项D。【答案】D6.若有声明“int i;float
27、x;char a50;”,为使i得到值1,x得到值3.1416,a得到值yz,当执行语句“scanf(%3d%f%2s,&i,&x,a);”时,正确的输入形式是_ 。(2006年秋选择题第23题)A.1,3.1416,yz B. 13.1416yz C.001 3.1416 yz D.i=001,x=3.1416,a=yz【解析】第一个输入格式“%3d”对应变量i,要输入3位,而i值为1,只占1位,补足3位,输入时在前面加00,输完“001”后用空格或回车或TAB键分隔。第二个输入格式“%f”,对应的数为实数3.1416,输完加分隔符。第三个输入格式“%2s”,是2个字符的字符串,a为数组名,
28、本身就已表示地址了,前面无“&”。选项C满足要求。A用逗号分隔,逗号不是有效的分隔符,只有当格式控制串中有原样字符逗号时才需输入逗号,而且i不足3位。B在输入数据时没有分隔符,D在输入时有“i=”等字符,不需要。【答案】C7.已知有声明“char s80;”,若需要将键盘输入的一个不含空格的字符串保存到s数组中,则下列语句中正确的是_ 。(2009年秋选择题第28题)A.scanf(%s,s); B.scanf(%s,s0); C.s=gets(); D.s=getchar();【解析】A中的scanf函数中的s是数组名,本身就表示地址了,不用再加“&”。B中的s0表示一个元素,不是地址,C中
29、应该将s放入括号中作为gets函数的参数,D中的getchar函数一次只能输入一个字符。scanf函数不能输入空格。 【答案】A8.若有声明“char sl0=remind;”,执行“puts(s+2);”后的输出结果是_。 (2007年秋填空题第2题)【解析】puts函数的功能是输出一个字符串。s表示数组的起始地址,s+2表示数组元素的第2个元素的地址,所以从s2元素开始输出,结果为mind。【答案】mind3.2.2 实现选择结构的语句1.已知有声明“int x,y;”,若要求编写一段程序实现“当x大于等于0时y取值1,否则y取值-1”,则以下程序段中错误的是_ 。(2009年秋选择题第26题)A.if(x=0) y=1;else y=-1; B.y=x=0?1:-1; C.switch() D.switch(x-abs(x) case x=0: y=1;break; case 0:y=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1