1.设有以下说明语句 typedef struct { int n; char ch[8]; } PER; 则下面叙述中正确的是 ( )。
A.PER 是结构体变量名
B.PER是结构体类型名
C.typedef struct 是结构体类型
D.struct 是结构体类型
正确答案: B
解析:使用typedef为现有类型创建别名,定义易于记忆的类型名。
2.以下程序的输出是( )。
main( )
{ int a=2,b=1,c=2;
if(a<b)
if(b<0)
c=0;
else c+=1;
printf("%d",c); }
A.0 B.1 C.2 D.3
正确答案: C
解析:关于if-else匹配原则,else与最近的未匹配的if配对,则题意程序对应等价于:
int a=2,b=1,c=2;
if(a<b)
{
if(b<0) c=0;
else c+=1;
}
printf("%d",c);
由于a<b为假,故直接执行printf,输出2。
3.for(int x = 0 , y = 0; !x && y <= 5 ; y++)
语句执行循环的次数是多少次?
A.0 B.5 C.6 D.无数次
正确答案: C
解析:算数运算符>关系运算符>&&>||>赋值运算符
!x && y <= 5 就是 (!x) && (y <= 5)
#include<stdio.h>
int main()
{
int c = 0;
for (int x = 0, y = 0; !x && y <= 5; y++)
{
c += 1;
}
printf("%d", c);
return 0;
}
4.字符型常量在内存中存放的是:( )。
A.ASCII码
B.BCD码
C.内部码
D.十进制码
正确答案: A
解析:ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。
BCD码(Binary-Coded Decimal)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式。
内码是指汉字系统中使用的二进制字符编码。
十进制码面向的是开发人员,经过转化对应的编码给计算机使用。
5.当n=5时,下列函数的返回值是:( )。
int foo(int n)
{
if(n<2)return n;
return foo(n-1)+foo(n-2);
}
A.5 B.7 C.8 D.1
正确答案: A
解析:f(5) =
f(4) + f(3) =
f(3) + f(2) + f(2) + f(1) =
f(2) + f(1) + f(1) + f(0) + f(1) + f(0) + f(1) =
f(1) + f(0) + f(1) + f(1) + f(0) + f(1) + f(0) + f(1) = 5
6.(不定项)以下数字在表示为double(8字节的双精度浮点数)时存在舍入误差的有()。
A.2的平方根
B.10的30次方
C.0.1
D.0.5
E.100
正确答案: A B C
解析:A选项,毫无疑问。
8字节的共64位,按照标准的浮点数表示方法,应该是1位符号位,11位指数位,52位尾数位。
对于 B选项(2^90 < B < 2^100)来说,指数位是够了,但是尾数位会不会够呢? B = 2^30*5^30 也就是说将B表示成二进制后,其后30位全为0,从其第一个不为0到最后一个不为0的二进制表示位中,至少需要90 - 30 = 60位来存储,而其尾数位只有52位,必然会产生舍入误差,所以B选项存在舍入误差。
对于C选项来说,将C表示成二进制便知 10[0.1] = 2[0.00011001100110011…],亦为无限循环小数,所以将0.1表示成二进制的double型必然也会产生舍入误差。