一、选择题(每小题1分,共40分)
1[单选题] 有以下程序:
执行后的输出结果是( )。
A.3,5,3,5,5
B.5,3,5,3,5
C.3,5,3,5,3
D.3,5,3,3,5
参考答案:A
参考解析:main()函数中初始化i的值为3,j的值为5,并初始化指针p指向i,指针q指向j。另外,还定义了一个二维指针r,指向q,所以*p的值是i的值3,*q的值是j的值5,**r等于*q,是j的值5,所以输出的结果是:3、5、3、5、5,答案选A。
2[单选题] 以下叙述中错误的是( )。
A.C程序必须由一个或一个以上的函数组成
B.函数调用可以作为一个独立的语句存在
C.若函数有返回值,必须通过return语句返回
D.函数形参的值也可以传回给对应的实参
参考答案:D
参考解析:形参是函数定义时由用户定义的形式上1的变量,实参是函数调用时,主调函数为被调函数提供的原始1数据。在C语言中,实参向形参传送数据的方式是“值传递”。f因此D选项正确。
3[单选题] 下列关于二叉树的叙述中,正确的是( )。
A.叶子结点总是比度为2的结点少一个
B.叶子结点总是比度为2的结点多一个
C.叶子结点数是度为2的结点数的两倍
D.度为2的结点数是度为1的结点数的两倍
参考答案:B
参考解析:根据二叉树的基本性质3:在任意一棵二叉树中,度为0的叶子结点总是比度为2的结点多一个。所以选择B。
4[单选题] 有以下程序:
执行后的输出结果是( )。
A.abcd abc ab
B.a a a
C.abcd bcd cd
D.a b c
参考答案:A
参考解析:程序初始化一个二维数组,其中每个元素都是一个字符数组,for循环中使用字符串输出函数puts()打印二维数组中的每个元素,puts()接受字符数组名当做参形数,将该字符数组存储的字符串打印出来,程序中s[0]存储的字符串是 “abcd”,s[1]存储的字符串是“abc”,s[2]存储的字符串是“ab”,所以程序输出为:abcd、abc、ab,答案选A。
5[单选题] 有以下函数:
以下关于aaa函数功能叙述正确的是( )。
A.将串s复制到串t
B.比较两个串的大小
C.求字符串s的长度
D.求字符串s所占字节数
参考答案:C
参考解析:本题重点考察的知识点while循环语句的应用。aaa()函数中,首先定义了一个字符指针t指向形参s,然后通过一个while循环让指针t不断递增,直到t指向字符串结束标识处。当t指向结束标识处时,由于后缀++运算符的原因,它还会被再递增1,所以接下来的t--;语句让它回到结束标识处。最后返回t-s,s还是指向字符串第1个字符处,而t指向了字符串结尾,故返回值为字符串的长度值。因此C选项正确。
6[单选题] 有以下程序:
程序运行后的输出结果是( )。
A.b,B,b,A
B.b,B,B,A
C.a,B,B,a
D.a,B,a,B
参考答案:A
参考解析:本题重点考察函数的调用,首先要了解字母对应的ASCII码。例如A为65,a为97。即字母+1则可得到下一个字母。其次是函数形参和实参的问题,运行过程如下:在fun(&b,a)中,*c=‘a’,d=65。*c+1='b',d+1=66,printf(“%c,%c,”,*c,d);输出b,B,因为指针c指向地址的值为b,此时b=*c=‘b’函数返回执行printf("%c,%c、n",b,a);输出b,A,因此A选项正确。
7[单选题] 有以下程序:
程序运行后的输出结果是( )。
A.0
B.-12
C.-20
D.10
参考答案:C
参考解析:本题考查宏定义,宏定义只是做简单的替换,所以本题中SUB(a+b)*c=(a+b)-(a+b)*c=-20,所以答案为C选项。
8[单选题] 有以下程序:
程序运行后的输出结果是( )。
A.10
B.11
C.20
D.21
参考答案:D
参考解析:数组data包含两个元素,元素类型为结构体s,分别为data[0],data[1],初始化时,使用4个整数10,100,20,200,分别给data[0].a,data[0].b.data[1].a,data[1].b赋值,又p.a=data[1].a,等于20,在输出之前执行自身加1操作,所以结果为21,答案选D。
9[单选题] 有以下程序:
程序执行后的输出结果是( )。
A.y=-1
B.y=0
C.y=1
D.while构成无限循环
参考答案:A
参考解析:y--表示y使用后再自减1。所以最后一次y的值为0,条件不成立但仍要执行自减操作,y的值为-1,跳出循环。打印y的值-1。
10[单选题] 下列函数的功能是( )。
A.将a所指字符串赋给b所指空间
B.使指针b指向a所指字符串
C.将a所指字符串和b所指字符串进行比较
D.检查a和b所指字符串中是否有‘\0’
参考答案:A
参考解析:While循环条件为:(*b=*a)!='\0',执行时先把指针a所指向的字符赋给指针b所在内存单元,如果该字符不是结束标识‘\0’,执行循环体a++;b++;,指针a、b分别指向下一个字符单元。再判断循环条件,如果成立,继续把指针a所指向的字符赋给指针b所在内存单元,直到遇到结束标识为止。因此A选项正确。
11[单选题] 有以下程序:
程序运行时输入:-11-220,则输出结果是( )。
A.1,1
B.1,0
C.3,-3
D.3,0
参考答案:C
参考解析:分析程序结构,在do …while循环中,嵌套一个switch语句,switch语句中两个case语句分别执行break和continue,其中break语句是跳出switch语句,接着执行do…while循环体剩下的部分;而continue语句是直接进入do…while的下一个循环,由此可知每次循环,当t=0时,执行break语句,接着将z值累加x;当t=1时,执行continue语句,将y值累加x,所以当x输入-1、-2、0时,t=0,z值累加为-3;当x输入1、2时.t=1,y值累加为3,输出y、z的值分别为3、-3,故答案选C。
12[单选题] 以下选项中叙述错误的是( )。
A.C程序函数中定义的自动变量,系统不自动赋确定的初值
B.在C程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内
C.C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值
D.C程序函数的形参不可以说明为static型变量
参考答案:C
参考解析:A选项描述正确,自动变量未赋初值,为随机值;B选项描述正确,变量定义除在函数开始位置外,在复合语句开始也可以;C选项描述是错误的,函数内的静态变量,只在第一次调用时候赋值,以后调用保留上次值;D选项描述也正确,形参属于局部变量,占用动态存储区,而static型变量占用静态存储区。因此C选项正确。
13[单选题] 程序中若有以下的说明定义和语句:
则不能给变量t的s成员赋整数99,给num成员赋空串的语句组是( )。
参考答案:A
参考解析:结构体变量使用 “.”运算符引用结构体成员变量,结构体指针使用“->”运算符引用结构体成员变量,main函数中声明结构体STR变量t,和结构体STR指针*p,并将t的地址赋给p,所以使用P访问成员变量时,使用“->”运算符;使用* P访问成员变量时,使用“.”运算符。另外,由于成员变量num是字符数组,所以不能直接进行赋值,若要对num赋空字符串值,可以把num中第一个元素赋值为0或‘\0’,或者使用strcpy复制函数将空字符串“”复制到num中,故选项B、C、D正确,选项A错误,因此答案为A。
14[单选题] 以下关于循环语句的叙述中正确的是( )。
A.do…while语句的循环体至少执行一次
B.while语句的循环体至少执行一次
C.for语句的循环体至少执行一次
D.上述A、B、c说法均正确
参考答案:A
参考解析:while(表达式)当表达式为false时,循环体一次都不执行,故选项B、D错误;for(表达式1;表达式2;表达式3)语句,当表达式2为false时,循环体一次都不执行,故选项C错误;do-while语句循环体至少执行一次,故答案选A。
15[单选题] 以下叙述中错误的是( )。
A.用户定义的函数中可以没有return语句
B.用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值
C.用户定义的函数中若没有return语句,则应当定义函数为void类型
D.函数的return语句中可以没有表达式
参考答案:B
参考解析:本题重点考察函数返回值的相关知识,函数的值只能通过return语句返回主调函数,在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。因此B选项正确。
16[单选题] 以下叙述中正确的是( )。
A.C语句必须在一行内写完
B.C程序中的每一行只能写一条语句
C.C语言程序中的注释必须与语句写在同一行
D.简单C语句必须以分号结束
参考答案:D
参考解析:C语句可以跨行来写,但是必须以分号结束,所以A选项错误。C程序中的一行可以有多条语句,所以B选项错误。C语言中的注释语句可以与原语句放在一行也可以不放在一行,所以C选项错误。
17[单选题] 以下不合法的数值常量是( )。
A.8.0E0.5
B.1e1
C.011
D.0xabed
参考答案:A
参考解析:A选项中E后面的指数必须为整型数据,所以A错误。C选项中011表示的是八进制常量.Oxabcd表示的是十六进制常量。
18[单选题] 有以下程序:
程序计算的是( )。 .
A.s=1!+2!+3!+4!+5!
B.s=1+2+3+4+5
C.s=1$2*3*4*5
D.s=1!*2!*3!*4!*5!
参考答案:A
参考解析:函数fun()中的变量f是静态变量,所以只初始化一次,之后每次调用fun(),f的初值就是上一次fun()结束时的值,对于fun()函数,当传人n=1时,f=1,返回值为1;当传入n=2时,f=1×2=2,返回值为2;当传人13=3时,f=2×3=6,返回值为6;当传人n=4时,f=6×4=24,返回值为24,所以每次调用fun函数时,f变量在上一次fun函数运行结束时保留值的基础上,再与n乘积,并重新赋值给f,所以可以将f理解为记录当前的累乘值,即当main函数中i:1时,f=11=1;当main()函数i=2时,f=2!=2,当main函数中i=3时,f=3!=6……另外main函数中的S记录调用fun函数的返回值之和,所以s=1!+2!+…+i!,由于i最大值为5,所以s=1!+2!+3!+4!+5!,答案为A。
19[单选题] 下列诜项中.能正确定义数组的语句是( )。
参考答案:D
参考解析:C语言不允许定义动态数组,定义数组的大小必须为常量表达式。A选项错误,C语言中数组没有此类型的定义方法;B选项错误,定义数组应指明数组大小,如果不指明数组大小,需要给定初值的个数;C选项错误,N为变量,不能用来定义数组大小。因此D选项正确。
20[单选题] 有以下程序:
程序的运行结果是( )。
A.123
B.12300
C.1
D.321
参考答案:A
参考解析:首先使用fopen函数以可写方式打开文件d1.dat,返回文件指针fp,然后在for循环通过fprintf函数调用fp指针,将数组a的3个元素写入文件d1.dat中,最后再写入换行符\n,关闭文件,此时文件中的内容:“123\n”,然后调用fopen函数以只读方式打开d1.dat,返回文件指针fp指向文件的开头,再调用fscanf函数从文件中读入一个整数:123,(遇到第一个非数值字符结束),关闭文件后输出读人的整数n,结果为:123,答案为A。
相关推荐: