C语言历年考题真题解析.docx
- 文档编号:26670598
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:136
- 大小:150.74KB
C语言历年考题真题解析.docx
《C语言历年考题真题解析.docx》由会员分享,可在线阅读,更多相关《C语言历年考题真题解析.docx(136页珍藏版)》请在冰豆网上搜索。
C语言历年考题真题解析
1.C语言规泄,在一个源程序中main函数的位宜。
(2010
A.必须在最开始B.必须在最后
C.必须在预处理命令的后而D.可以在其他函数之前或之后
【解析】main函数也叫主函数,是C语言编译系统提供的特殊函数,可以放在程序中的任何位置,但不能定义在其他函数体内。
C程序总是从main函数的第一条语句开始执行。
【答案】D
2•以下叙述中正确的是。
(2009”…择2$21)
A.C语言系统以函数为单位编译源程序
B.main函数必须放在程序开始
C.用户左义的函数可以被一个或多个函数调用任意多次
D.在一个函数体内可以定义另外一个函数
【解析】C语言系统以程序为单位编译源程序,程序由函数组成。
main函数可以放在其他函数之前或之后。
除了main函数外,函数可以被其他函数多次调用。
函数不能定艾在其他函数体内,即不能嵌套定狡。
【答案】C
3.以下叙述中正确的是。
(2008m择岂第21〕)
A.在编译时可以发现注释中的拼写错误
B.C语言程序的每一行只能写一条语句
C.main(){}必须位于程序的开始
D.C语言程序可以由一个或多个函数组成
【解析】C程序的注释不产生编译代码,编译时跳过去,发现不了其中错误。
C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。
main函数可以放在程序中的任何位置。
C程序可以由一个或多个函数组成,函数可以为空函数,包括main函数。
【答案】D
4•以下关于C语言源程序的叙述中错误的是o(2007牟蒂迟芻21題)
A.—个C源程序由若干个函数泄义组成,其中必须有且仅有一个需为main的函数泄义
B.函数定义由函数头部和函数体两部分组成
C.在一个函数定义的函数体中允许定义另一个函数
D.在一个函数世义的函数体中允许调用另一个函数或调用函数自身
【解析】一个C语言源程序由若干个函数定狡组成,其中必须有且仅有一个名为main的函数定义,函数定狡由函数头部和函数体两部分组成。
函数可以嵌套调用也可以递归调用,但不能嵌套定义。
C的意思是嵌套定义,错误,D的意思是嵌套调用和递归调用,正确。
【答案】C
3.1.2基本数据类型
1•以下选项中,是C语言关键字。
(2010年春:
择F育223」
A.printfB.includeC.funD.default
【解析】default是关犍字,用在switch语句中。
printf和include属于预定义标识符,其中printf是输出函数名,include用在预编译处理命令中。
fun是用户自定狡标识符。
【答案】D
2在以下各组标识符中,均可以用作变量名的一组是o(2007心呂】y22)
A.aOLIntB.table^l♦a*.iC.O_a,W12D.for,point
【解析】选项A中两个都符合标识符的命令規则,Ini与关键字int是不同的标识符,选项B的第2个标识符中有#号,不符合标识符命名规则.选项C数字开头,不允许,选项D中的for是关键字,不能做变量名。
【答案】A
3•以下定义和声明中•语法均有错误的是o(2009年-—21
①int_f(intx){}②imf(intf){}③int2x=l;④structforfintx;};
【解析】本题考的是标识符的命名规则。
③定爻的整型变量名数字开头,不符合命名规则。
④中定艾的结构体类型名for属于关键字,不能作为结构体类型名。
②中使用的函数名和形式参数名相同,在语法上可以,但在实际编程时不提倡使用。
【答案】B
4•在C语言系统中,如果一个变量能正确存储的数拯范用为整数-32768〜32767,则该变量在内存中占个字节。
(2010年春填空题第3更)
【解析】表示范围为整数-32768〜32767的属于im型或short型的变董,它们在内存占2个字节。
【答案】2
5•若有声明%tx;“且sizcof(x)的值为2,则当x值为时“x+l>x"为假。
(2009年春填空题第2题)
【解析】x为int型,其表示范围为-32768〜+32767,当x为32767吋,再加1就变成T-32768T,此时,就是x+l>x"为假的情况。
这是由int型数据在内存中的存储情况决定的。
int型数据在内存中占2个字节,以补码的形式存放,32767的补码为0111111111111111,加1以后就变成了10000,为-32768的补码,这种情况为溢出,数处于边界时会溢出。
sizeof(x)是求字节数运算符。
【答案】32767
6.已知sizcof(int)的值为2,为将10!
的值存储到变量f中(10!
=3628800),变量f的类型应声明为o(2008年秘远择题第23题)
A.longintB.intC.shortintD.unsignedint
【解析】10!
=3628800,超过了im的范1^1-32768〜+32767,而长整型在内存占4个字节,表示范围大到-214748348〜2147483647,应该要用长整型才可以存放。
【答案】A
7•以下常量表示中正确的是。
-2(>(>X22題)
A.\xffB.5LC.aEbD314U
【解析】选项A若想表示成十六进制常量,正确的表示应该是Oxff,如果表示成转义字符,应该放在单引号内:
\0xff。
选项B表示的是长整型常量,选项C是一个标识符,不能表示常量,选项D表示的是无符号整数,但无符号整数不应该有小数。
【答案】B
8.以下表示中不能用作C语言常量表示的是<,(2007」匸22!
)
A.0ULB.(long)123C」e0D・\x2a‘
【解析】0UL意为将0以无符号长整型存放,B为强制类型转换,是表达式,表示长整型常量应该在123后加字母1或LoC是实常董,指数表示法,意为1乘以10的0次方,c前面必须有数字,后面的数字必须是整数。
D是转艾字符.表示十六进制数2a。
【答案】B
9•在C语言源程序中,不带任何修饰的浮点数直接量(例如:
3.14)都是按
类型数据存储的。
(2008年春填空L第1)
【解析】实型常量的类型默认为double类型,在内存中占8个字节。
带f修饰即3.14f或3.14F,則认为它是float型,在内存中占4个字节。
【答案】double
10•已知有声明^charch=gV\则表达式ch=chF+A的值为字符的编码。
(2010年春填空题第2题)
【解析】本题的功能是将小写字母转换成大写字母。
-'a'+'A'实际上就是减去32,对于一个小写字母来说,减去32就变成对应的大写字母。
【答案】G
11.若有程序段“charc=256:
inta=c;“,则执行该程序段后a的值是°
(2007年秋选择题第24题)
A.256B.65536C.OD.-1
【解析】将256转换成二进制,为100000000,占9位,而char在内存只占一个字节,即8位,截取低8位賦给字符变量c,得c=0,将c的值赋给a,结果为0°
【答案】C
3.1.3运算符和表达式
1.已知有声明“inta=3.b=4.c;",则执行语句2=1/2七+»“后,c的值为。
(2010年春选择賤第23题)
A.OB.3C.3.5D.4
【解析】本题考查的是两整数相除,结果为整数,截取的是整数部分,不是四舍五入。
1/2等于0,0乘于任何一个整数结果还是0,最后结果为0。
【答案】A
2.已知有声明“longx,y;“且x中整数的十进制表示有n位数字(4 A.y=x/(10*(n-l))B.y=x%(10*(n-1)) C.y=x%(long)pow(10.n-1)D.y=x%(l0A(n-l)) 【解析】本类型的题目,拿一个具体的数,放到四个选项中去计算,就能得到正确答案。 假设x为1234,代入A中,为1234/(10*3),肯定不是234,代入B中,为1234%(10*3)也不对,代入C中为1234%(long)103,结果为234,正确,选C。 而D中的“人“在C语言中是指位运算中的“异或“运算,不是求指数。 【答案】C 3•若有声明Foat尸3.14619;intx;: 则计算表达式“x=yT00+05y=x/100.(T后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.15 4•若有声明Fta=32767.bf\则在TurboC2.0系统中执行语句pnntf(H%dH,b=++a)r^输出结果是。 (2006年秋填空題第3题) 【解析】本題有4个知识点: 一是printf语句,输出%d格式,二是賦值运算及賦值表达式的值,三是卄运算,四是int型数損的表示范国及整数在内存的存储情况。 b=++a是将a的值加1后賦给b,a.b是int型,处于-32768〜32767范国内,32767+1=32768,整数在计算机中以补码形式存储,32767的补码为0111111111111111,加1后为10000,是-32768的补码。 对于int数据,32767+1等于-32768<>若是long型,满足32767+1等于32768o 【答案】・32768 5.已知有声明“mta=3.b=4: “,下列表达式中合法的是。 (2010年春选择.题第25题) A.a+b=7B.a=lblC.a=b=0D・(a卄)卄 【解析】本题考查的是賦值运算符和“卄“运算符的左值要求。 左值必须是变量,不能是常董和表达式。 选项A左边是表达式,不允许,选项D括号中的a++也是表达式,不能进行十十运算。 选项B是一个代数式,必须转换成C语言合法的表达式,表示成a=abs(b)o选项C正确,将0赋给b,再賦给a,a和b的值不再是初始化的值,而变成0了。 【答案】C 6.已知有声明“intn;floatx,y;”,则执行语句"y=n=x=3.89;"后,y的值为。 (2010年春选择题第28题) A.3B.3.0C.3.89D.4.0 【解析】本題考查的是不同类型间的賦值。 賦值运算符右结合。 先将3.89賦给X,表达式的值也为3.89,再<3.89赋给n,n是im,自动截取整数部分,将3赋给最后将3賦给y,y是float,将整数3转换成实数3.0后赋给y,y值为3.0。 【答案】B 7.以下程序运行时输出到屏幕的结果是。 (2010C试程■? 談71) #include voidmain() {inta=Lb=2; a+=b; b=a-b; a-=b; printf(M%d,%d\n,rAb); } 【解析】本题的考点是复合賦值运算符,程序功能是不用临时变量.实现两个变量的值的交换。 计算过程如下: a=a+b=1+2=3,b=a-b=3-2=l,a=a-b=3-l=2o最后结果是a为2,b为1。 变量的值在程序运行过程中可能在不断的变化,每次计算都要用最新得到的值。 【答案】2A 8.若有声明“intx=2,y=l,z=0;",则卞列关系表达式中有语法错误的是。 (2008年春选择题第25题) A.x>y=2B.z>y>xC.x>y==lD.x=(x=0,y=l,z=2) 【解析】賦值表达式的运算数有左值要求,賦值号左边必须是变量,不能是表达式,A错。 B没有语法错误.z>y成立结果为1,不成立为0,再将1或0与x比较,判断其是否成立。 C先判断x>y是否成立,得到0或1再与1比较是否相等,炭后的结果要么是0要么是KD先做括号中的逗号表达式,依次进行賦值,最后一个表达式的值2是整个逗号表达式的值,将其与x的值进行是否相等的比较。 【答案】A 9•已知有声明“inta=12.b=15,c;“,则执行表达式“c=(a||(b=a))“后,变量b和c的值分别为o(2010年春选择题第29题) A.3,1B」5,12C.15,1D.3,12 【解析】本题的考点是逻辑表达式的短路特性。 a值为12,非零即为真,逻辑表达式的结果只能用1或者0表示,若为真则结果为1。 只要有一个为真,逻辑或“『'的结果就为1,b-=a不用计算了,b的值不变,仍为15。 而括号中逻辑表达式的值为1,1赋给c,故c的值为lo 【答案】C 10.已知有声明"inta=3.b=4.c=5;,\以下表达式中值为0的是。 (2009年秋选择题第24题) A.a&&bB.a<=bC.allb&&cD.! (! cll1) 【解析】a&&b中a和b都是非0,A的结果为1。 B中av=b成立,结果为1。 C中&&优先级高于II,先做&&,b和c的值非0,b&&c的结果为1,因为是II运算,置后的结果青定是1。 D中c非0,! c为0,与1逻辑或为1,将括号中的1再逻辑非,结果为0。 【答案】D 11.C语言中有! .&&、II三个逻借运算符,其中优先级髙于算术运算符的是 (2009年秋填空题第1题) 【解析】逻辑非“广是单目运算符,优先级为2级,鬲于3级的7/%"和4级的和巴"&&、的优先级为11级,T的优先级为12,低于算术运算符。 【答案】! 12•以下表示数学式“a (2007年春选择题24题) A.a (a>=b)&&! (b>=c)D.! (a>=bllb>=c) 【解析】最好的答案是B,但C、D与B的功能相同。 C中! (a>=b)就是a 放到外面,’・&&"就变成了“|「。 选项A先判斷avb,成立结果为1,不成立结果为0,再将结果与C比较。 【答案】A 1x>0' 13•以下选项中,不能表示函数sign(x)=^0x=0功能的表达式是。 -1x<0. (2009年春选择题第23题) A.s=(x>0)? l: (x<0)? -l: 0B.s=x<0? -l: (x>0? l: 0) C.s=x<=0? -1: (x=0? 0: 1)D.s=x>0? l: x==0? 0: -l 【解析】本題考点是嵌套的条件表达式。 仔细分析它们的逻辑关系,选项C的功能是当x<=0时值为否则即x>0再判断x=0是否成立决定值为0还是1,不合题意。 【答案】C 14•若有声明“inta=5.b=2f\则表达式F+=(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是im,截取整数部分5赋给b° 【答案】5 15•设指针变量占2个字节的内存空间,若有声明-char*p=f123••: mtcf,则执行语句 4c=sizeof(p)r后,c的值为o(2010年春选聲题第24題) A.lB.2C.3D.4 【解析】题目告诉我们指针变量占2个字节.而sizeof的功能就是计算变量在内存中所占的字节数,c的值为指针变莹p在内存中占用的字节数,为2。 【答案】B 16•若有声明“mtr=2;“,则执行语printf(,,%d'\sizeof(2*3.14*r))fW输岀。 (2009年秋填空题第2题) 【解析】本题输出表达式2*3.14*r的结果在内存中占用的字节数。 2*3.14*r的结果为实常董.其中有一个实常#3.14,C中实常量默认为double型。 根据类型转换规则,其他类型的数扌居也要转换成double型.最后结果为double型,在内存占8个字节。 一般情况,只要表达式中有一个数据为double型,罠后的结果就是double型。 【答案】8 17.数学式實所对应的c语言表达式为pow(x,)。 (2010年春填空题第1题) 【解析】pow(x,y)是求x的y次方的函数。 賈就是x的三分之一次方。 此处注意的是1/3=0,要将其中一个转换为浮点数。 【答案】1.0/3或者1/3.0或者(double)1/3 1&数学表达式JTFh也所对应的C语言表达式为。 be (2009年秋填空题第3题) 【解析】求平方根的函数为sqrt,求绝对值的函数为abs或fabs,abs求整数的绝对值,fabs求实数的绝对值。 ¥用“! ="表示。 4a要用4怨表示,*表示乘号,不能缺省。 分母一定要加括号,若不加括号得用除“厂不是用乘7二加括号的表示方式看是来更直观。 【答案】sqrt(fabs(x)! =4*a/(b*c)或sqrt(fabs(x)! =4*a/b/c 3.2.1实现顺序结构的语句 1•以下关于C语言语句的叙述中正确的是。 (2006年秋"择: : 27<) A.所有语句都包含关键字 B.所有语句都包含表达式 C.所有语句都可以岀现在源程序中的任何位巻 D.除复合语句外的其他所有语句都以分号结束 【解析】关键字只有32个,大多数用来进行变童类型说明以及实现条件选择和循环结枸的控制语句。 很多语句中没有关诫字的,如賦值语句。 表达式也不一定在所有的语句中出现的,如函数调用语句。 语句是程序的执行部分,放在函数内部,而且在说明部分之后。 C语言中复合语句中的各条语句都必须有分号但在外没有分号。 【答案】D 2•已知int类型数据在内存中存储长度为2个字节,以下语句中能正确输出整数32768的是。 (2009年秋选择题第23题) A.printF(”%d",32768);B.primf("%ld",32768); C.printf("%f",32768);D.printf(”%c",32768); 【解析】本题考点是输出格式。 %d格式输出int型整数,范围为-32768〜32767,%f格式输出浮点数,%c格式输出字符。 %ld格式输出长整型整数,范国为-21亿〜21亿。 【答案】B 3•以下语句中有语法错误的是。 (2009: 也择密第24) A.printf("%d",Oe);B.printf(”%f”.0e2); C.printf("%d”,0x2);D.printf("%s","0x2"); 【解析】本題考点为输出格式及常量表示。 A中的%d表示输出ini型整数,0开头为八进制数,只能为0〜7共8个数字,不能为eoB是%f格式,输出实数,0e2是指数形式,即为0*102。 C输出int型整数,Ox是十六进制形式,D用/s格式输出字符串常量W 【答案】A 4•已知有声明和语句“inta;scanf("a=%d,\&a);,\欲从键盘上输入数据使a中的值为3,则正确的输入应是.(2010年春填空•题第5題) 【解析】是原样字符,要照输。 “%d”的位置输入对应的变量a的值3。 •就是将键盘输入的值3存入变量a的地址单元,这样a的值就为3。 【答案】a=3 5.若有声明“longa.b;“且变量a和b都需要通过键盘输入获得初值,则下列语句中正确的是o(2007年秋选择题笫23题) A.scanf(M%ld%ld,&a.&bj: B.scanf(M%d%dM,a.b): C.scanf(M%d%dn,&a.&b): D.scanf(H%ld%IdH,&a.&b): 【解析】a和b是long型.输入时要用"%kT格式。 对于变量,scanf函数的地址表中必须有取地址运算符而且只在格式控制串上有双引号,地址表列上不应有双引号。 满足这些要求的只有选项Do 【答案】D 6•若有声mti;floatx;chara[50];*\为使i得到值1,x得到值3.1416,a得到值yz,当执行语句飞canfC%3d%f%2s”,&i,&X・a);“时,正确的输入形式是° (2006年秋选择题第23题) A」,3・1416,yzB.13.1416yzC.0013.1416yzD.i=OOl,x=3.1416,a=yz 【解析】第一个输入格式"%3d"对应变量i,要输入3位,而i值为1,只占1位,补足3位.输入时在前面加00,输完“001“后用空格或回车或TAB键分隔。 第二个输入格式“%f‘,对应的数为实数3.1416,输完加分隔符。 第三个输入格式“%2s",是2个字符的字符串,a为数组名,本身就已表示地址了,前面无‘农二选项C满足要求。 A用逗号分隔,逗号不是有效的分隔符,只有当格式控制串中有原样字符逗号时才需输入逗号,而且i不足3位。 B在输入数据时没有分隔符,D在输入时有等字符,不需要。 【答案】C 7•已知有声明“chars[80];“,若需要将键盘输入的一个不含空格的字符串保存到s数组中,则下列语句中正确的是。 (2009年;「兀誉工装28題) A.scanf(H%sH,s);B.scanf(M%s,\s[O]);C.s=gets();D.s=getchar(); 【解析】A中的scanf函数中的s是数组名,本身就表示地址了,不用再加“&二B中的s[0]表示一个元素,不是地址.C中应该将s放入括号中作为gets函数的参数.D中的getchar函数一次只能输入一个字符。 scanf函数不能输入空格。 【答案】A 8•若有声明“chars[10]="remmd”;”,执行“puts(s+2);“后的输岀结果是。 (2007年秋填空题第2题) 【解析】puts函数的功能是输出一个字符串。 s表示数组的起始地址,s+2表示数纽元素的第2个元素的地址,所以从s[2]元素开始输出,结果为mind。 【答案】mind 3.2.2实现选择结构的语句 1.已知有声明“mtx,y;”,若要求编写一段程序实现“当x大于等于0时y取值1,否则y取值・1“,则以下程序段中错误的是o(2009年;26足 A.if(x>=0)y=l: elsey=-l;B.y=x>=0? l: -l; C.switchOD.switch(x-abs(x)) {casex>=0: y=l;break;{caseO: y=l;break; default: y=-l;default: y=-l; }} 【解析】本题考点为if语句和switch语句。 选项A用if语句表示,正确。 选项B用条件表达式表示,x大于等于0成立将1賦值给y.否则将J賦值给y。 选项C用switch语句,但不符合switch的语法规则,switch的括号中必须有一常量或表达式,不能为空。 case后是一个常量表达式,其中只能有常量和运算符,不能有变量。 选项D中,当x大于等于0吋,x・abs(x)为0,执行y=l,否则就不是为0,执行y=-lo 【答案】C 2•以下程序运行时输出到屏幕的结果是。 (2009二讥: 宀三-: 7..1 #include voidniain() {inti=Lm=0; switch(i) {case1: case2: m++
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 历年 考题 题解
![提示](https://static.bdocx.com/images/bang_tan.gif)