星光不负赶路人,时光不负追梦人!多一份努力,多一份成功的机会!
第一题
int a, b, x, i;
a = 3;
b = 4;
i = 3;
x = a > b ? i++ : i--;
x的值为()
A---2
B---3
C---4
D---5
正确答案:B
解析:这题并不难,要注意细节。a>b为假也就是x=i--。注意i--是先执行后减一,而--i是先减一后执行。
第二题
在说明语句int *f();中,标识符f代表的是()
A---一个用于指向整型数据的指针变量
B---一个用于指向一维数组的行指针
C---一个用于指向函数的指针变量
D---一个返回值为指针型的函数名
正确答案:D
解析:A选项中,指向整型数据的指针变量应说明为int *f。B选项中,指向一维数组的行指针应说明为int (*f)[]。C选项中,指向函数的指针变量应说明为int (*f)();所以答案是D。
第三题
运行以下C语言代码,输出的结果是()
#include
int main()
{
char *str[3] ={"stra", "strb", "strc"};
char *p =str[0];
int i = 0;
while(i < 3)
{
printf("%s ",p++);
i++;
}
return 0;
}
A---stra strb strc
B---s t r
C---stra tra ra
D---s s s
正确答案:C
解析:char *p=str[0]相当于char *p="stra",p先指向s,p++后,指向t。printf输出遇到空字符停止。所以第一次打印stra,第二次打印tra,第三次打印ra。
第四题
下面的程序执行输出几个hello?
A---3
B---4
C---6
D---8
正确答案:D
解析:
fork(); //2个进程
fork(); //4个进程
fork(); //8个进程
printf(“hello\n”);
第五题
已知如下代码,并在两个线程中同时执行f1和f2,待两个函数都返回后,a的所有可能值是哪些?
int a = 2, b = 0, c = 0
void f1()
{
b = a * 2;
a = b;
}
void f2()
{
c = a + 11;
a = c;
}
A---4
B---13
C---15
D---26
正确答案:ABCD
解析:考虑四行代码的执行顺序即可。
(1)b=a*2,c=a+11,a=c,a=b a=4
(2)b=a*2,c=a+11,a=b,a=c a=13
(3)b=a*2,a=b,c=a+11,a=c a=15
(4)c=a+11,a=c,b=a*2,a=b a=26
所以答案都选。
第六题
以下的变量定义语句中,合法的是()
A---byte a = 128;
B---boolean b = NULL;
C---long c = 123L;
D---float d = 0.9239;
正确答案:C
解析:A选项中,byte能表示的范围[-128,127]。B选项中,boolean的取值只能是true或false。D选项请注意:
double a = 0.9239(√)
double a = 0.9239d(√)
float a = 0.9239f(√)
float a = 0.9239(×)
第七题
请问经过表达式a=5?0:1的运算,变量a的最终值是()
A---5
B---1
C---0
D---true
正确答案:C
解析:这题考察两个知识点,分别是三元运算、条件运算符的优先级高于赋值运算符的优先级。
三目运算符的格式:表达式1?表达式2:表达式3
执行流程:如果表达式1的值为真,则以表达式2的值作为整个条件表达式的值,否则以表达式3的值作为整个条件表达式的值。
由于5非0,所以结果为0 。a的值也为0 。
第八题
有以下函数定义:
void fun(int n, double x) {…}
若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是()
A---fun(int y,double m);
B---k = fun(10,12.5);
C---fun(x,n);
D---void fun(n,x);
正确答案:C
解析:A选项中,函数调用时不需要指明实参类型。B选项中,函数定义为void,没有返回值。D选项中,函数调用不需要指明函数类型。
第九题
class A
{
int a;
short b;
int c;
char d;
};
class B
{
double a;
short b;
int c;
char d;
};
在32位机器上用gcc编译以上代码,求sizeof(A),sizeof(B)分别是()
A---12 16
B---12 12
C---16 24
D---16 20
正确答案:C
解析:
class A:
int a (4个字节) 4
short b (2个字节,起始地址4是2的倍数,不补) 4+2
int c (4个字节,4+2不是4的倍数,被2个 ) 6+2(补)+4
char d (1个字节,4+2+2+4是1的倍数,不补) 12+1
最后补3个字节,让整体大小为4的倍数 13+3(补)= 16
class B:
double a (8个字节) 8
short b (2个字节,起始地址8是2的倍数,不补) 8+2
int c (4个字节,8+2不是4的倍数,被2个 ) 10+2(补)+4
char d (1个字节,8+2+2+4是1的倍数,不补) 16 +1
最后补7个字节,让整体大小为8的倍数 17+7(补) =24
关于结构体对齐的题,讲两点原则:
(1)按顺序看,每一个变量的首地址必须是自己大小的倍数。
(2)整个结构体的大小必须是最宽数据类型的倍数。
只要是在路上就没有到不了的地方,该奋斗的年龄不要选择安逸。不是每个人都能成为自己想要的样子,但每个人都可以努力成为自己想要的样子。