c语⾔历考题真题解析
1.C语⾔规定,在⼀个源程序中main函数的位置 ______ 。(2010年春选择题第21题)
A.必须在最开始
B.必须在最后
C.必须在预处理命令的后⾯
D.可以在其他函数之前或之后
【解析】main函数也叫主函数,是C语⾔编译系统提供的特殊函数,可以放在程序中的任何位置,但不能定义在其他函数体内。C程序总是从main函数的第⼀条语句开始执⾏。
【答案】D
2.以下叙述中正确的是________ 。(2009年秋选择题第21题)
A.C语⾔系统以函数为单位编译源程序
B.main函数必须放在程序开始
C.⽤户定义的函数可以被⼀个或多个函数调⽤任意多次
D.在⼀个函数体内可以定义另外⼀个函数
【解析】C语⾔系统以程序为单位编译源程序,程序由函数组成。main函数可以放在其他函数之前或之后。除了main函数外,函数可以被其他函数多次调⽤。函数不能定义在其他函数体内,即不能嵌套定义。
【答案】C
3.以下叙述中正确的是_________ 。(2008年秋选择题第21题)
A.在编译时可以发现注释中的拼写错误
B.C语⾔程序的每⼀⾏只能写⼀条语句
C.main(){}必须位于程序的开始
D.C语⾔程序可以由⼀个或多个函数组成
【解析】C程序的注释不产⽣编译代码,编译时跳过去,发现不了其中错误。C程序书写格式⾃由,⼀
⾏内可以写⼏个语句,⼀个语句可以分写在多⾏上。main 函数可以放在程序中的任何位置。C程序可以由⼀个或多个函数组成,函数可以为空函数,包括main函数。
【答案】D
4.以下关于C语⾔源程序的叙述中错误的是________。(2007年春选择题第21题)
A.⼀个C源程序由若⼲个函数定义组成,其中必须有且仅有⼀个名为main 的函数定义
B.函数定义由函数头部和函数体两部分组成
C.在⼀个函数定义的函数体中允许定义另⼀个函数
D.在⼀个函数定义的函数体中允许调⽤另⼀个函数或调⽤函数⾃⾝
【解析】⼀个C语⾔源程序由若⼲个函数定义组成,其中必须有且仅有⼀个名为main的函数定义,函数定义由函数头部和函数体两部分组成。函数可以嵌套调⽤也可以递归调⽤,但不能嵌套定义。C的意思是嵌套定义,错误,D的意思是嵌套调⽤和递归调⽤,正确。
【答案】C
3.1.2 基本数据类型
1.以下选项中,___________ 是C语⾔关键字。 (2010年春选择题第22题)
A.printf
B.include
C.fun
D.default
【解析】default是关键字,⽤在switch语句中。printf和include属于
预定义标识符,其中printf是输出函数名,include⽤在预编译处理命令中。
fun是⽤户⾃定义标识符。
【答案】D
2.在以下各组标识符中,均可以⽤作变量名的⼀组是_____。(2007年秋选
择题第22题)
A.a01,Int
B.table_1,a*.1
C.0_a,W12
D.for,point
【解析】选项A中两个都符合标识符的命令规则,Int与关键字int是不同
的标识符,选项B的第2个标识符中有*号,不符合标识符命名规则,选项C数
字开头,不允许,选项D中的for是关键字,不能做变量名。
【答案】A
3.以下定义和声明中,语法均有错误的是___________。 (2009年春选择题
第21题)
①int _f(int x){} ②int f(int f){} ③int 2x=1;
④struct fo r{int x;};
A.②③
B.③④
C.①④
D.①②③④
【解析】本题考的是标识符的命名规则。③定义的整型变量名数字开头,
不符合命名规则。④中定义的结构体类型名for属于关键字,不能作为结构体
类型名。②中使⽤的函数名和形式参数名相同,在语法上可以,但在实际编程
时不提倡使⽤。
【答案】B
4.在C语⾔系统中,如果⼀个变量能正确存储的数据范围为整数-32768~
32767,则该变量在内存中占________个字节。 (2010年春填空题第3题) 【解析】表⽰范围为整数-32768~32767的属于int 型或short型的变量,
它们在内存占2个字节。
【答案】2
5.若有声明“int x;”且sizeof(x)的值为2,则当x值为___________时
“x+1>x”为假。
(2009年春填空题第2题)
【解析】x为int型,其表⽰范围为-32768~+32767,当x为32767时,再
加1就变成了-32768了,此时,就是x+1>x”为假的情况。
这是由int型数据在内存中的存储情况决定的。int型数据在内存中占2个
字节,为-32768的补码,这种情况为溢出,数处于边界时会溢出。sizeof(x)
是求字节数运算符。
【答案】32767
6.已知sizeof(int)的值为2,为将10!的值存储到变量f中(10!=3628800),
变量f的类型应声明为___________ 。(2008年秋选择题第23题)
递归函数c语言规则A. long int
B. int
C. short int
D.unsigned int
【解析】10!=3628800,超过了int的范围-32768~+32767,⽽长整型在内存占4个字节,表⽰范围⼤到,应该要⽤长整型才可以存放3628800。
【答案】A
7.以下常量表⽰中正确的是__________ 。(2008年春选择题第22题)
【解析】选项A若想表⽰成⼗六进制常量,正确的表⽰应该是0xff,如果表⽰成转义字符,应该放在单引号内:'\0xff'。选项B 表⽰的是长整型常量,选项C是⼀个标识符,不能表⽰常量,选项D表⽰的是⽆符号整数,但⽆符号整数不应该有⼩数。
【答案】B
8.以下表⽰中不能⽤作C语⾔常量表⽰的是____。(2007年春选择题第22题)
A.0UL
B.(long)123
C.1e0
D.'\x2a'
【解析】0UL意为将0以⽆符号长整型存放,B为强制类型转换,是表达式,表⽰长整型常量应该在123后加字母l或L。C是实常量,指数表⽰法,意为1乘以10的0次⽅,e前⾯必须有数字,后⾯的数字必须是整数。D是转义字符,表⽰⼗六进制数2a。
【答案】B
9.在C语⾔源程序中,不带任何修饰的浮点数直接量(例如:3.14)都是按_________类型数据存储的。 (2008年春填空题第1题)
【解析】实型常量的类型默认为double类型, 在内存中占8个字节。带f 修饰即3.14f或3.14F,则认为它是float 型,在内存中占4个字节。
【答案】double
10.已知有声明“char ch='g';”,则表达式ch=ch-'a'+'A'的值为字符
__________的编码。
(2010年春填空题第2题)
【解析】本题的功能是将⼩写字母转换成⼤写字母。-'a'+'A'实际上就是减去32,对于⼀个⼩写字母来说,减去32就变成对应的⼤写字母。
【答案】G
11.若有程序段“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。
【答案】C
3.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
【解析】本题考查的是两整数相除,结果为整数,截取的是整数部分,不是四舍五⼊。1/2等于0,0乘于任何⼀个整数结果还是0,最后结果为0。
【答案】A
2.已知有声明“long x,y;”且x中整数的⼗进制表⽰有n位数字(4
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/(10*3),肯定不是234,代⼊B中,为1234%(10*3)也不对,代⼊C中为1234%(long)103,结果为234,正确,选C。⽽D 中的“∧”在C语⾔中是指位运算中的“异或”运算,不是求指数。
【答案】C
3.若有声明“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.15
4.若有声明“int a=32767,b;”,则在Turbo C 2.0系统中执⾏语句“printf("%d",b=++a);”后输出结果是_________ 。(2006年秋填空题第3题) 【解析】本题有4个知识点:⼀是printf语句,输出%d格式,⼆是赋值运算及赋值表达式的值,三是++运算,四是int
型数据的表⽰范围及整数在内存的存储情况。
b=++a是将a的值加1后赋给b,a、b是int型,处于-32768~32767范围内,32767+1=后为若是long型,满⾜32767+1等于32768。
【答案】-32768
5.已知有声明“int a=3,b=4;”,下列表达式中合法的是______ 。
(2010年春选择题第25题)
A.a+b=7
B.a=|b|
C.a=b=0
D.(a++)++
【解析】本题考查的是赋值运算符和“++”运算符的左值要求。左值必须是变量,不能是常量和表达式。选项A左边是表达式,不允许,选项D括号中的a++也是表达式,不能进⾏++运算。选项B是⼀个代数式,必须转换成C语⾔合法的表达式,表⽰成a=abs(b)。选项C正确,将0赋给b,再赋给a,a和b 的值不再是初始化的值,⽽变成0了。
【答案】C
6.已知有声明“int n;float x,y;”,则执⾏语句“y=n=x=3.89;”后,y的值为________ 。
(2010年春选择题第28题)
【解析】本题考查的是不同类型间的赋值。赋值运算符右结合。先将3.89
赋给x,表达式的值也为3.89,再将3.89赋给n,n是int,⾃动截取整数部分,
将3赋给n。最后将3赋给y,y是float,将整数3转换成实数3.0后赋给y,
y值为3.0。
【答案】B
7.以下程序运⾏时输出到屏幕的结果是___________ 。 (2010年春阅读
程序第7题)
#include
void main()
{ int a=1,b=2;
a+=b;
b=a-b;
a-=b;
printf("%d,%d\n",a,b);
}
【解析】本题的考点是复合赋值运算符,程序功能是不⽤临时变量,实现
两个变量的值的交换。计算过程如下:a=a+b=1+2=3,b=a-b=3-2=1,a=a-b=3-1=2。
最后结果是a为2,b为1。变量的值在程序运⾏过程中可能在不断的变化,每
次计算都要⽤最新得到的值。
【答案】2,1
8.若有声明“int x=2,y=1,z=0;”,则下列关系表达式中有语法错误的是

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。