目录
第一题(宏替换的问题)
下面程序的输出结果是__________。
#include <iostream.h>
#define SQR(A) A*A
void main() {
int x=6,y=3,z=2;
x/=SQR(y+z)/SQR(y+z);
cout<< x << endl;
}
A 5
B 6
C 1
D 0
我们的宏替换是直接将SQR(A)整个替换成A*A
也就是变成了x/=y+z*y+z/y+z*y+z
也就是
x/=3+2*3+2/3+2*3+2
x/=17
也就是6/=17
所以我们的x就变成了0
D
第二题(打印格式的问题)
执行下面语句后的输出为
int I=1;
if(I<=0)
printf("****\n") ;
else
printf("%%%%\n");
A %%
B ****
C 有语法错,不能正确执行
D %%%%
printf(格式化传,参数1,参数2,……)
格式化传:printf第一个参数之后的参数要按照什么格式打印
%d-->按照整型的方式打印
%f-->按照float的方式打印
printf("%%%%\n")
格式串有一定规定,%之后跟上特性的字符才代表一定的格式化
%Q-->无效的格式-->编译器会忽略%
printf("%Q ");-->直接输出Q
所以我们的%%%%会输出%%
A
第三题(结构体大小计算)
有一个如下的结构体:
struct A{
long a1;
short a2;
int a3;
int *a4;
};
请问在64位编译器下用sizeof(struct A)计算出的大小是多少()
A 24
B 28
C 16
D 18
这里64位编译器下一个指针为8字节,然后我们的long就是8字节,占据第一个8字节的位置,short占据2字节,占据第二个8字节的前两个字节,int为四个字节,这里由于内存对齐的原因,我们的int存储在我们第二个8字节的后4个字节的位置,然后我们最后一个a4是一个int*类型的指针,在64位的平台下,夜歌指针占据8个字节,也就是占据了第三个8字节的位置。
所以一共是三个8字节的空间,所以是24字节,选A
A
第四题(二维数组指针)
数组定义为”int a[4][5];”, 引用”*(a+1)+2″表示()(从第0行开始)
A a[1][0]+2
B a数组第1行第2列元素的地址
C a[0][1]+2
D a数组第1行第2列元素的值
二维数组是由一个一个一维数组组成的,a数组中每一个元素都是一个一维数组,然后a+1就是表示跳过第一个一维数组,也就是我们的第0行,然后*(a+1)也就是得到了我们第一行的第0个元素的地址,然后*(a+1)+2也就是第一行的第0个元素往后两个位置的元素的地址,也就是第1行,第二列元素的地址,也就是选B
B
第五题(递归的相关问题)
当n=5时,下列函数的返回值是()
int foo(int n){
if(n<2){
return n;
}
else
return 2*foo(n-1)+foo(n-2);
}
A 5
B 11
C 29
D 10
foo(0)=0
foo(1)=1
foo(2)=2*foo(1)+foo(0)=2
foo(3)=2*foo(2)+foo(1)=5
foo(4)=2*foo(3)+foo(2)=12
foo(5)=2*foo(4)+foo(3)=29
也就是选C
C