【笔试题】【day6】

目录

第一题(宏替换的问题)

第二题(打印格式的问题)

第三题(结构体大小计算)

第四题(二维数组指针)

第五题(递归的相关问题)


第一题(宏替换的问题)

下面程序的输出结果是__________。

#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

第四题(二维数组指针)

数组定义为”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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桜キャンドル淵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值